Kalshi daily-weather

checking…

Every orderbook delta, trade, and lifecycle event for Kalshi daily-high and daily-low temperature markets (KXHIGH*, KXLOW*). Recorded tick-by-tick, archived to Parquet.

Data available

Loading live stats…

How to get data

Historical archive — /history/ 🔒 Bearer token

Daily Parquet (data.parquet = every message; tob.parquet = reconstructed top-of-book) and the raw gzipped JSONL, partitioned by date. Browse the tree or fetch a file directly. All requests need Authorization: Bearer <token>.

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

# pull one sealed day's top-of-book
curl -H "Authorization: Bearer $TOKEN" -O \
  https://kalshi-dailyweather.feeds.directory/history/parquet/year=2026/month=06/day=07/tob.parquet

Live stream — /ws 🔒 token on CONNECT

A NATS WebSocket. Every recorded message is also published to kalshi.<msg_type>.<ticker> in real time. Subscribe with the NATS client of your choice; authenticate with the shared token.

# nats CLI (token auth)
nats sub --server wss://kalshi-dailyweather.feeds.directory/ws \
  --user shared --password "$TOKEN" "kalshi.>"

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

What a record looks like

A raw message from data.parquet (denormalised columns + full JSON payload):

loading…

A reconstructed top-of-book change from tob.parquet:

loading…

Schema

filecolumns
data.parquet recv_ns, seq, msg_type, ticker, channel, payload — one row per message; payload is the full Kalshi message as JSON.
tob.parquet recv_ns, ticker, yes_bid, yes_ask, yes_mid — one row per top-of-book change (sparse). Skip replaying orderbook_delta yourself.