Kalshi Weather Markets Scraper | Temps, Rain & Snow Odds
Pricing
from $0.56 / 1,000 market records
Kalshi Weather Markets Scraper | Temps, Rain & Snow Odds
Live bracket prices for every Kalshi weather market: daily high/low temps for all cities, rain, snow, hurricanes. Yes/no bid-ask, implied probability, volume, settled temps. HTTP-only, pay per result, MCP-ready — no API key needed.
Pricing
from $0.56 / 1,000 market records
Rating
0.0
(0)
Developer
Mr Zack
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
12 days ago
Last modified
Categories
Share
Live bracket prices and recent settlements for every Kalshi weather market: daily high/low temperature for all listed cities (NYC, Chicago, Miami, Austin, Denver, LA, Philadelphia, Houston, Seattle, Toronto, London, and more), plus rain, snow and hurricane markets — 360+ series discovered automatically, not a hardcoded city list.
Built on Kalshi's current public trade API (the new *_dollars schema) — the API migration that quietly broke older scrapers. Plain HTTP, no login, no API key, no browser, no proxies. Runs finish in seconds.
$0.80 per 1,000 market records + $0.001 per start. maxMarkets is a hard cost cap.
Who uses this
- Weather traders — pull every open bracket with implied probability, volume and open interest before placing an order, instead of clicking through city pages.
- Model builders — join
settledValue(the actual settled temperature) with your forecast data to backtest a strategy per city and station. - Dashboards & alerts — schedule it and pipe fresh odds into Sheets, Slack or your own model.
- AI agents — stable flat schema, predictable cost, one-call market snapshot.
What you get per market
| Field | Example | Notes |
|---|---|---|
seriesTicker / seriesTitle | KXHIGHNY | which weather series |
eventTicker | KXHIGHNY-26AUG29 | one event = one city-day |
marketTicker | KXHIGHNY-26AUG29-B85.5 | one row per bracket |
bracket | 85° to 86° | human-readable strike |
strikeType, floorStrike, capStrike | between, 85, 86 | machine-readable strike |
yesBid / yesAsk / noBid / noAsk / lastPrice | 0.56 | dollars, parsed to numbers |
impliedProbability | 0.565 | bid/ask mid (falls back to last price) |
volume, volume24h, openInterest, liquidity | activity metrics (liquidity = Kalshi figure, or top-of-book resting collateral when Kalshi reports 0 — see liquiditySource) | |
liquidityTopOfBookUsd, liquiditySource | top-of-book liquidity estimate and which source liquidity came from | |
status, result | finalized, no | settled markets carry the result |
settledValue | 77 | the actual settled temperature |
station | CLINYC | exact settlement weather station |
openTime / closeTime / expectedExpirationTime | ISO | timing |
marketUrl | one-click open on Kalshi |
Every field is always present (nullable, never missing). marketTicker is a stable dedupe key.
Input
{"mode": "temperature","cities": ["NY", "Chicago"],"status": "open","maxMarkets": 500}
- mode —
temperature(every high/low/avg temp series) orall-weather(the entire Climate & Weather category: rain, snow, hurricanes too). - cities — optional keyword filter (
["NY"],["Denver", "Miami"]). Empty = all cities. - seriesTickers — exact series override, e.g.
["KXHIGHNY", "KXRAINDNYC"]. - status —
open(live prices),settled(recent results + settled temps), orboth. - settledLookbackDays — how far back settled markets go (default 3).
- maxMarkets — hard cost cap ($0.80/1,000).
How to schedule this Actor (recommended)
Weather odds move by the minute — this is built to run on a schedule:
- Open the Actor → Try for free, set your cities and
status. - Save as a task → Schedules → e.g.
*/30 * * * *(every 30 min while markets are open) or0 * * * *hourly. - Add an integration (Google Sheets, Slack, webhook) so fresh brackets land where your model reads them.
- For settlement tracking, a second daily task with
"status": "settled"gives you yesterday's settled temperatures per station.
Monitoring 10 cities every 30 minutes typically costs a few dollars a month — the run is one row per bracket, and maxMarkets caps every run.
Backtesting recipe
Run "status": "settled", "settledLookbackDays": 90, "seriesTickers": ["KXHIGHNY"] once: you get every bracket of every NYC high-temp market for the last 90 days with result and settledValue — join against your forecast history to measure edge per city.
For AI agents & MCP
- Minimal input that just works:
{}— scrapes all open temperature markets. - Predictable cost: exactly
$0.0008 × markets+$0.001per run. - Stable schema,
marketTickerdedupe key,RUN_SUMMARYin the key-value store.
curl -s "https://api.apify.com/v2/acts/tactful_anvil~kalshi-weather-markets-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-X POST -H 'Content-Type: application/json' \-d '{"cities":["NY"],"status":"open","maxMarkets":200}'
Related Actors
- Brand Ads Spy — Google + LinkedIn Ads in One Feed — cross-network competitor ad intelligence.
- Superteam Earn Scraper — bounty and project boards with EV per entry.
Fair use & data source
Only public market data from Kalshi's public trade API (the same data shown on kalshi.com). Reasonable rate limits (~2 req/s). No account data, no personal data, no order placement — this is a read-only data tool, not a trading bot. Not investment advice.
Schedule it (recommended)
The cheapest way to use this Actor is as a monitor: create a Schedule in Apify Console (e.g. every day at 08:00), set the input "onlyNew": true, and add an integration (email, Slack, Google Sheets, webhook). Every run then delivers only the markets that appeared since the previous run — you pay only for new rows, and you never miss one.
Changelog
- 0.1.6 (4 Oct 2026) — Honest result when your run hits its cost limit. When a run reaches its "Maximum cost per run" (or your remaining Apify credit), it now stops cleanly and says so in the status bar, instead of continuing to add one uncharged market per series. Markets not delivered are not charged and are not marked as seen in
onlyNewmode. - 0.1.5 (24 Sep 2026) — Reliability: A short Kalshi outage no longer ends the run (it waits and retries), one broken market or series is skipped instead of stopping everything, and runs near their time limit stop cleanly and keep every market already collected. Filters that match no series now finish successfully with a clear explanation. No price or field change.
- 0.1.4 (21 Sep 2026) — Hotfix. Build 0.1.3 crashed on start (
ReferenceError: log is not defined) for every run between 19 and 21 Sep. Fixed and verified in the cloud; no fields, defaults or prices changed. Sorry. Also: the default Output table no longer showsresult/settledValue(always empty while markets are open — they still exist in the data) and showstitle,liquidityandmarketUrlinstead. - 0.1.3 (19 Sep 2026) — Typo guard on input. Apify accepts input fields an Actor does not know without complaining, so a misspelled option (e.g.
maxIteminstead ofmaxItems) used to produce a successful run with the setting silently inactive. The run log now warns for every unknown field and suggests the closest real one. - 0.1.2 (18 Sep 2026) — New
onlyNew(monitor mode). Set it to true and schedule the Actor: the first run returns the full result and remembers every market (marketTicker) in a key-value store in your account; every later run returns only markets that are new since the last run, and skipped rows are never charged. Nothing else changed — defaults, fields and prices are identical. - 0.1.1 (17 Sep 2026) —
liquidityis alive again. Kalshi's API started returningliquidity_dollars = 0for every market (even games with $800k volume), so theliquiditycolumn had silently gone dead. It now falls back to the resting collateral at the top of the book (yes bids × price + yes asks × (1 − price), computed from the fields Kalshi already sends — no extra request, no extra cost). New columns:liquidityTopOfBookUsdandliquiditySource(kalshiwhen Kalshi reports a real figure,topOfBookotherwise). Existing fields and defaults unchanged. - 0.0.4 (9 Sep 2026) — Order book & trade flow. New optional inputs:
includeOrderbook(+orderbookDepth) adds the live bid/ask ladder per market —orderbookYes/orderbookNolevels,bookTopYesPrice/bookTopNoPrice,bookYesDepth/bookNoDepthandbookSpread;includeTrades(+maxTradesPerMarket) addsrecentTrades[],recentTradeCount,recentTradeVolume,lastTradePriceandlastTradeTime. Both default to off, cost no extra event (they only add one request per market), and never fail a run — if an endpoint hiccups the row carriesorderbookError/tradesErrorand everything else is still delivered. Also: every HTTP call now has a 20-second timeout, and billing calls are wrapped so a charge failure can no longer kill a run that already has data. - 0.0.1 (Aug 2026) — Launch: every Kalshi weather series (high/low temperature, rain, snow) with brackets, prices, volume and settled results for backtesting.
Found this useful? Bookmark & review
A quick ⭐ review or bookmark on this Actor helps other people find it and tells us which fields to add next. Have a question, a missing field or a source that changed? Open an issue in the Issues tab — we answer within 24 hours.