HRRR forecast

checking…

NOAA's High-Resolution Rapid Refresh (HRRR) model 2 m temperature forecasts, polled from the NOMADS filter service every ~15 minutes for the CONUS weather stations underlying Kalshi's daily-high / daily-low temperature markets. Archived to Parquet. History-only.

Latest forecast 🔓 open

Loading the freshest cycle…

Data available

Loading live stats…

How to get data

Latest snapshot — /latest.json 🔓 no auth

The most recent model cycle, as a single JSON document: current values per station (now) plus the full forecast curve for every station (stations). CORS-open, so a browser can fetch it directly. Regenerated every ~15 minutes.

# current values + full curves, no token needed
curl https://hrrr-forecast.feeds.directory/latest.json

# just the current reading for one station (with jq)
curl -s https://hrrr-forecast.feeds.directory/latest.json | jq '.now.KNYC'

Historical archive — /history/ 🔒 Bearer token

Two Parquet files per day: forecasts.parquet (typed, denormalised — one row per station/field/forecast-hour) and data.parquet (raw payload as JSON). Plus the gzipped JSONL. Partitioned by date. All requests need Authorization: Bearer <token>.

# browse what's there
curl -H "Authorization: Bearer $TOKEN" \
  https://hrrr-forecast.feeds.directory/history/parquet/

# pull one sealed day's typed forecasts
curl -H "Authorization: Bearer $TOKEN" -O \
  https://hrrr-forecast.feeds.directory/history/parquet/year=2026/month=06/day=07/forecasts.parquet

Need a token? It's a single shared Bearer credential — ask the operator. /health and this page need no auth.

What a record looks like

One typed row from forecasts.parquet:

loading…

Schema

filecolumns
forecasts.parquet recv_ns, ticker, station, field, issued_at_ns, target_at_ns, value, unit — one row per station/field/forecast-hour. Typed and denormalised; the file to query.
data.parquet recv_ns, seq, msg_type, ticker, channel, payload — one row per raw model poll; payload is the full record as JSON. Schema-stable.