Kalshi Weather Markets Scraper | Temps, Rain & Snow Odds avatar

Kalshi Weather Markets Scraper | Temps, Rain & Snow Odds

Pricing

from $0.56 / 1,000 market records

Go to Apify Store
Kalshi Weather Markets Scraper | Temps, Rain & Snow Odds

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

Mr Zack

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

12 days ago

Last modified

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

FieldExampleNotes
seriesTicker / seriesTitleKXHIGHNYwhich weather series
eventTickerKXHIGHNY-26AUG29one event = one city-day
marketTickerKXHIGHNY-26AUG29-B85.5one row per bracket
bracket85° to 86°human-readable strike
strikeType, floorStrike, capStrikebetween, 85, 86machine-readable strike
yesBid / yesAsk / noBid / noAsk / lastPrice0.56dollars, parsed to numbers
impliedProbability0.565bid/ask mid (falls back to last price)
volume, volume24h, openInterest, liquidityactivity metrics (liquidity = Kalshi figure, or top-of-book resting collateral when Kalshi reports 0 — see liquiditySource)
liquidityTopOfBookUsd, liquiditySourcetop-of-book liquidity estimate and which source liquidity came from
status, resultfinalized, nosettled markets carry the result
settledValue77the actual settled temperature
stationCLINYCexact settlement weather station
openTime / closeTime / expectedExpirationTimeISOtiming
marketUrlone-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) or all-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), or both.
  • settledLookbackDays — how far back settled markets go (default 3).
  • maxMarkets — hard cost cap ($0.80/1,000).

Weather odds move by the minute — this is built to run on a schedule:

  1. Open the Actor → Try for free, set your cities and status.
  2. Save as a task → Schedules → e.g. */30 * * * * (every 30 min while markets are open) or 0 * * * * hourly.
  3. Add an integration (Google Sheets, Slack, webhook) so fresh brackets land where your model reads them.
  4. 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.001 per run.
  • Stable schema, marketTicker dedupe key, RUN_SUMMARY in 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}'

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.

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 onlyNew mode.
  • 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 shows result / settledValue (always empty while markets are open — they still exist in the data) and shows title, liquidity and marketUrl instead.
  • 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. maxItem instead of maxItems) 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) — liquidity is alive again. Kalshi's API started returning liquidity_dollars = 0 for every market (even games with $800k volume), so the liquidity column 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: liquidityTopOfBookUsd and liquiditySource (kalshi when Kalshi reports a real figure, topOfBook otherwise). 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 / orderbookNo levels, bookTopYesPrice / bookTopNoPrice, bookYesDepth / bookNoDepth and bookSpread; includeTrades (+ maxTradesPerMarket) adds recentTrades[], recentTradeCount, recentTradeVolume, lastTradePrice and lastTradeTime. 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 carries orderbookError / tradesError and 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.