Kalshi Weather Markets API - Temperature Odds & NWS Forecast avatar

Kalshi Weather Markets API - Temperature Odds & NWS Forecast

Pricing

from $2.19 / 1,000 market returneds

Go to Apify Store
Kalshi Weather Markets API - Temperature Odds & NWS Forecast

Kalshi Weather Markets API - Temperature Odds & NWS Forecast

For weather traders and forecast models: Kalshi temperature, rain and snow markets as rows with bid, ask, volume, open interest and strike range; daily markets add the NWS forecast for the station in the market's rules. All 143 weather series (2026-09-21). Settled history and price-move monitor.

Pricing

from $2.19 / 1,000 market returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Get every Kalshi weather market (daily high and low temperature, rain, snow) as one clean row per market: yes/no bid and ask, last price, volume, open interest, close time and the strike range ("70° to 71°"). Each daily market also carries the National Weather Service forecast for the weather station named in its rules (for example CLINYC = New York City, Central Park), and a flag saying whether that forecast falls inside the market's Yes range. Settled history with the official settled value, automatic discovery of all weather series, and a monitoring mode that returns only markets whose price or volume moved.

It reads Kalshi's official public market-data API (api.elections.kalshi.com/trade-api/v2) and the NWS API (api.weather.gov). No login, no API key, no proxy.

Why this Actor

  • Reads Kalshi's current field names. Kalshi now sends prices as yes_bid_dollars ("0.4900") and quantities as volume_fp ("4039.48"); the old integer fields such as yes_bid are no longer in the response (checked 2026-09-21). This Actor reads both the new and the old names, and returns null (never 0) when a value is missing, so a format change does not silently turn prices into zeros.
  • Forecast next to the odds. For each daily temperature, rain and snow market, the settlement station is taken from the market's own rules, and the NWS forecast high, low and precipitation chance for the market's date is added to the same row: nwsForecastForThisMarketF and nwsForecastInYesRange let you compare the crowd price with the forecast without a second data source.
  • Honest empty results. A series Kalshi does not have, a series with no open market, a refusal, a rate limit and a cut-off page each come back as a separate free row that says what happened. Kalshi answers an unknown or lowercase series with an empty list (HTTP 200), so the Actor checks the series itself before saying "no markets".

Input

FieldTypeDefaultWhat it does
serieslist(prefilled: KXHIGHNY, KXLOWTNYC, KXHIGHCHI)Kalshi series tickers, one per line. Lowercase is accepted. Left out (with discovery and monitoring off), the three example series are read.
discoverSeriesbooleanfalseAlso read every Kalshi "Climate and Weather" series of the types below: daily high and low temperature series, and daily, weekly or monthly rain and snow series (143 series on 2026-09-21; most have no open market at a given time, which costs nothing).
weatherTypeslistallUsed with discoverSeries: high, low, rain, snow.
marketStatusselectopenopen (tradable now; Kalshi reports them as active), settled (with result and settlementValue), closed (trading ended, not settled yet) or all.
closedWithinDaysinteger(none)For settled, closed and all: only markets whose close time is within the last N days. Ignored for open. Required in monitoring mode with settled, closed or all.
includeForecastbooleantrueAttach the NWS forecast of the settlement station to daily temperature, rain and snow markets. No extra charge.
maxResultsinteger1000Stop after this many market rows (monitoring off). A free row says what was left out.
monitoringModebooleanfalseReturn only markets whose yes bid, yes ask, last price, volume, open interest, status or result changed since the last run, plus newly opened markets.
resetMonitoringStatebooleanfalseForget what monitoring remembered, so the next monitoring run returns everything again. Turn it off after one run.

Examples:

{ "series": ["KXHIGHNY", "KXLOWTNYC"] }
{ "discoverSeries": true, "weatherTypes": ["high", "low"] }
{ "series": ["KXHIGHNY"], "marketStatus": "settled", "closedWithinDays": 30 }

Daily temperature series and their settlement stations

Read from the market rules on 2026-09-21 (station names from the NWS station list). Kalshi adds and retires series; discoverSeries always uses the live list.

CityDaily highDaily lowStation in the rulesNWS station
New York CityKXHIGHNYKXLOWTNYCCLINYCKNYC Central Park
ChicagoKXHIGHCHIKXLOWTCHICLIMDWKMDW Midway (not O'Hare)
Los AngelesKXHIGHLAXKXLOWTLAXCLILAXKLAX
MiamiKXHIGHMIAKXLOWTMIACLIMIAKMIA
AustinKXHIGHAUSKXLOWTAUSCLIAUSKAUS
DenverKXHIGHDENKXLOWTDENCLIDENKDEN
PhiladelphiaKXHIGHPHILKXLOWTPHILCLIPHLKPHL
HoustonKXHIGHTHOUKXLOWTHOUCLIHOUKHOU Hobby (not Bush/IAH)
DallasKXHIGHTDALKXLOWTDALCLIDFWKDFW
PhoenixKXHIGHTPHXKXLOWTPHXCLIPHXKPHX
Las VegasKXHIGHTLVKXLOWTLVCLILASKLAS
SeattleKXHIGHTSEAKXLOWTSEACLISEAKSEA
San FranciscoKXHIGHTSFOKXLOWTSFOCLISFOKSFO
San DiegoKXHIGHTSANKXLOWTSANCLISANKSAN
San AntonioKXHIGHTSATXKXLOWTSATXCLISATKSAT
BostonKXHIGHTBOSKXLOWTBOSCLIBOSKBOS
Washington DCKXHIGHTDCKXLOWTDCCLIDCAKDCA Reagan National
AtlantaKXHIGHTATLKXLOWTATLCLIATLKATL
MinneapolisKXHIGHTMINKXLOWTMINCLIMSPKMSP
New OrleansKXHIGHTNOLAKXLOWTNOLACLIMSYKMSY
Oklahoma CityKXHIGHTOKCKXLOWTOKCCLIOKCKOKC
LouisvilleKXHIGHTSDFKXLOWTSDFCLISDFKSDF
NewarkKXHIGHTEWRKXLOWTEWRCLIEWRKEWR
TrentonKXHIGHTTTNKXLOWTTTNCLITTNKTTN

Rain: KXRAIN (daily, one market per city, each with its own station) and monthly series such as KXRAINNYCM, KXRAINCHIM, KXRAINDENM.

Output

One row per market. Example (KXHIGHNY, read 2026-09-21):

{
"seriesTicker": "KXHIGHNY",
"seriesTitle": "Highest temperature in NYC",
"marketKind": "high",
"eventTicker": "KXHIGHNY-26SEP21",
"marketTicker": "KXHIGHNY-26SEP21-B70.5",
"yesLabel": "70° to 71°",
"strikeType": "between",
"floorStrike": 70,
"capStrike": 71,
"targetDate": "2026-09-21",
"marketStatus": "active",
"yesBid": 0.5,
"yesAsk": 0.51,
"noBid": 0.49,
"noAsk": 0.5,
"yesMid": 0.505,
"spread": 0.01,
"lastPrice": 0.49,
"volume": 4039.53,
"openInterest": 3317.18,
"closeTime": "2026-09-22T05:00:00Z",
"settlementStationCode": "CLINYC",
"nwsStationId": "KNYC",
"nwsStationName": "New York City, Central Park",
"settlementSource": "The Weather Company",
"nwsForecastHighF": 70,
"nwsForecastHighPeriod": "Monday",
"nwsForecastLowF": 59,
"nwsForecastLowPeriod": "Overnight",
"nwsPrecipChanceDayPct": 7,
"nwsForecastForThisMarketF": 70,
"nwsForecastInYesRange": true
}
ColumnMeaning
yesBid, yesAsk, noBid, noAsk, lastPrice, previousPriceUSD per contract (a contract pays $1.00). 0 means Kalshi reports no resting bid at any price; null means the field was not in the response.
yesMid, spreadCalculated from yes bid and ask, only when both sides have resting orders and the market is not settled; otherwise null. When nobody is selling, Kalshi reports the yes ask as 1.00 with size 0 (and the yes bid as 0 with size 0 when nobody is buying), so check yesAskSize / yesBidSize before reading those prices as quotes.
volume, volume24h, openInterest, yesBidSize, yesAskSizeContracts. Kalshi allows fractional contracts, so these can have decimals.
strikeType, floorStrike, capStrike, yesLabelgreater = above floorStrike (floor 73 is "74° or above"); less = below capStrike (cap 66 is "65° or below"); between = from floorStrike to capStrike, both included ("72° to 73°").
targetDateThe date in the market's event ticker (-26SEP21 = 2026-09-21). For weekly markets this is the first day of the week the market covers; for monthly markets (-26SEP) it is null. Forecasts are attached only to daily markets.
result, settlementValue, settledAtFor settled markets: yes/no, the settled value (for example 69 = official high of 69°F) and when it settled.
settlementStationCode, nwsStationIdThe station named in the market rules (CLINYC) and its NWS station id (KNYC).
settlementSourceThe source Kalshi names for settlement in the series (on 2026-09-21: "The Weather Company"). The NWS forecast is a forecast for that station, not the settlement value.
nwsForecastHighFNWS forecast high: the daytime period (6 am to 6 pm local) of the market date.
nwsForecastLowFNWS forecast low: the night that ends on the morning of the market date (6 pm the day before to 6 am; after midnight NWS calls the rest of it "Overnight").
nwsPrecipChanceDayPct, nwsPrecipChanceNightPctPrecipitation chance of the daytime period and of the night that starts on the evening of the market date.
nwsForecastForThisMarketF, nwsForecastInYesRangeThe forecast high for high markets or the forecast low for low markets, and whether it falls inside the Yes range. null for other markets.
nwsForecastNoteWhy a forecast column is null: past date, beyond the NWS forecast (about 7 days), a period that has already passed, a market with no station in its rules (hourly markets settle on Synoptic Data), a station outside the US, or includeForecast off.
monitorStatus, changedFieldsMonitoring mode only: first-check, changed (with the columns that changed) or new-market.

Rows whose status is not ok are free and explain themselves in note: unknown-series, no-markets, duplicate, blocked, unreadable, refused, incomplete, not-checked, budget-reached, no-change-since-last-run, invalid-input.

Pricing

  • $3.00 per 1,000 market rows returned.
  • Monitoring mode adds $0.30 per 1,000 series checks: each series whose markets are read costs one check, whether or not anything changed. Unknown series, series with no market and failed requests are not charged.
  • The NWS forecast columns cost nothing extra. Free rows (the ones that explain why something was not returned) cost nothing.
  • The run stops before it would go over the maximum total charge you set, and a free row says what was left out.

Monitoring mode

Turn on monitoringMode and run the Actor on a schedule (for example every 10 minutes during the trading day). The first run returns every market once as a baseline. Later runs return only markets whose yes bid, yes ask, last price, volume, open interest, status or result changed, plus markets that opened since, with changedFields naming what moved. A run with no change returns one free no-change-since-last-run row. Markets are remembered per series in a named key-value store; markets you did not receive because the maximum total charge was reached are not remembered, so the next run returns them if they still differ. Do not put the same series in two schedules that can run at the same time (Apify's key-value store has no atomic update).

Notes and limits

  • Kalshi's public API is read at about 6 requests per second; a rate limit (HTTP 429) is waited out and retried, and reported as a free blocked row if it persists.
  • NWS covers the United States only. Series settled at stations outside the US (for example Tokyo or Paris) get null forecasts with the reason.
  • This Actor returns market data and forecasts. It does not place orders and is not trading advice.