Loading…
Every source's real, saved forecast against the bracket Polymarket settled on. Snapshots are taken every hour on GitHub's servers and never edited afterward.
Lows on the morning of: the day's low usually comes around sunrise, so by 8 AM it has mostly already happened. Every source looks good here; it says little about forecasting skill.
The newest snapshot: what every source says for each upcoming market, next to the crowd's favorite. Rows where Sunny points at a different bracket than the crowd are marked.
Lows on the morning of: the day's low usually comes around sunrise, so by 8 AM it has mostly already happened. Every source looks good here; it says little about forecasting skill.
Each Polymarket market asks for the highest (or lowest) temperature at one named station, usually an airport, over one calendar day in that city's time, midnight to midnight. A source is right when its number, rounded the way the market rounds (nearest whole degree, halves up), falls inside the bracket that won. Within one also counts the bracket next to it.
Day before = each source's latest snapshot taken at or before 12:00 noon local time the day before. For a Tuesday market in Chicago that's Monday noon Chicago time: 12 hours before the day starts and 36 hours before it ends. The snapshot used is never more than 18 hours older than that noon.
2 days before = the same rule at noon two days before (36 hours before the day starts, 60 before it ends).
Morning of = 8 AM local time on the day itself, in every city. Each city gets its own snapshot between 7 and 8 AM its time, from every source at once. By then part of the day has already happened, so for everyone alike the number is the source's forecast for the rest of the day combined with what the airport had already recorded since midnight (a day's high can't end up below a reading that already happened). Why 8 AM: by then nearly every city has the newest overnight model run (at 6 AM Europe would still be on the previous evening's), and more people are trading. Lows are flagged: the low usually comes around sunrise, so by 8 AM it's mostly decided.
Every source is judged from the same snapshot, so nobody gets a fresher forecast than anyone else.
The backtest rebuilds Sunny's number from the individual weather-model runs, using for each cutoff only the runs that had actually been published by then (each model's publishing delay measured from Open-Meteo's own records, plus a margin). Same for every model and every timing. Sunny's local correction uses the same last-14-days airport readings the app uses. Morning of uses the same "rest of the day plus what already happened" rule as the live board. The National Weather Service's official forecasts are taken from the latest one issued before each cutoff; the crowd from Polymarket's price at the cutoff minute.
Sunny: the exact number the app shows (the app's own server). Apple: WeatherKit, the Weather app's data, daily high and low. Google: Google Weather API, hour by hour, turned into the calendar-day high and low (Google's own daily low runs 7 AM to 7 AM, so it isn't used). AccuWeather: through Microsoft Azure Maps, hour by hour. National Weather Service: api.weather.gov hourly forecast (US cities). German Weather Service (DWD): its station forecast for the exact settlement airport (45 of 53 cities). Hong Kong Observatory: its official 9-day forecast (Hong Kong settles at the Observatory). Yr, Open-Meteo, Tomorrow.io, WeatherAPI, Visual Crossing, OpenWeather: hour by hour. Every source is asked about the settlement station's own coordinates.
The crowd: the highest-priced bracket on Polymarket in that same snapshot, only when the bracket prices add up to about 100% (quiet markets show placeholder prices and are skipped).
Apple, Google and most apps keep no record of past forecasts, so they're scored only from the day logging began (Nov 10, 2026). Weather.com, Weather Underground and TV stations have no public feed. The 3-week backtest uses the archives that do exist: the weather models, the National Weather Service's issued forecasts, and Polymarket's price history.