Kalshi Weather Market Resolution Checker (METAR/NWS)
Pricing
from $20.00 / 1,000 market checks
Kalshi Weather Market Resolution Checker (METAR/NWS)
Check how a Kalshi weather (KXHIGH/KXLOW) market will settle before it does: live METAR/NWS running daily high or low at the exact settlement station, implied YES/NO, which side is already locked, and a confidence grade. Paste tickers or URLs. No API key.
Pricing
from $20.00 / 1,000 market checks
Rating
0.0
(0)
Developer
Jack Sheward
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
0
Monthly active users
12 days ago
Last modified
Categories
Share
Prediction Market Resolution Evidence Checker
Paste Kalshi weather market URLs or tickers, or just pick cities, and get back the live observation evidence for each bracket: the running daily high (or low) at the exact station the market settles on, how far it is from your strike, which side is already locked, and a confidence grade. For a Kalshi NYC daily-high bracket, that means the running high at Central Park (KNYC) right now, so you can decide whether to hold or close before settlement.
It covers weather (temperature) markets: every Kalshi KXHIGH (daily high) and KXLOW (daily low) series across 24 US cities, each mapped to the station named in the market's rules, including the traps (Chicago = Midway, Dallas = DFW, Houston = Hobby). Polymarket weather URLs are accepted and return market data only (see Limitations).
No login, no API keys. Everything comes from public, unauthenticated APIs (Kalshi market data, Polymarket gamma, aviationweather.gov, api.weather.gov).
Quick start
| You want | Input | Typical cost |
|---|---|---|
| Every bracket of today's NYC daily high | {} or {"marketUrls": ["KXHIGHNY"]} | $0.125 |
| Today's highs and lows for two cities | {"cities": ["Chicago", "Austin"], "metric": "both"} | $0.485 |
| One bracket you hold | {"marketUrls": ["KXHIGHNY-26SEP25-T73"]} | $0.025 |
| A slim answer for an AI agent | add "fields": ["market_implied_outcome", "locked_side", "running_value_f"] | same |
Costs assume 6 brackets per city-day, the count Kalshi listed on 2026-09-24. See Pricing.
What you get
One record per market checked:
| Field | Example | Notes |
|---|---|---|
market_url | input URL/ticker | null for markets found through the city picker / auto-discovery |
ticker | KXHIGHAUS-26SEP24-B96.5 | market identifier (Kalshi ticker / Polymarket slug) |
event_ticker | KXHIGHAUS-26SEP24 | groups the brackets of one city-day |
platform | kalshi | kalshi or polymarket |
market_title | Will the maximum temperature be 96-97° … | |
city, station_id | Austin, KAUS | the station named in the market's settlement rules |
series_type | KXHIGH | KXHIGH (daily high) or KXLOW (daily low) |
strike_type, floor_strike, cap_strike | between, 96, 97 | bracket bounds in °F |
bracket_label | 96° to 97° | human-readable bracket |
resolution_date | 2026-09-24 | the day being measured |
market_status | active | active / finalized etc. straight from the platform |
current_yes_bid, current_yes_ask, last_price | 0.0, 0.01, 0.01 | USD per contract |
underlying_observable | object | the evidence, see below |
market_implied_outcome | no | yes / no / uncertain: how the bracket would settle if the running value were final |
resolution_confidence | high | high / medium / low (unsupported for Polymarket) |
notes | array | settlement results, staleness flags, hold/close direction hints |
running_value_f | 98.1 | the running daily high/low (same as underlying_observable.value_f) |
locked_side | no | yes / no when the bracket is already decided: by the observations (a daily high can only rise, a low only fall; after the day ends every side is decided) or, once the market has settled, by the official result; null while still open or within 1°F of a strike |
distance_to_strike_f | -1.1 | signed °F from the running value to the nearest deciding strike: positive = currently on the YES side, negative = NO side, 0 = on the boundary |
obs_age_minutes | 31.3 | minutes since the latest observation |
The underlying_observable object:
| Key | Meaning |
|---|---|
source, url | aviationweather.gov (primary) or api.weather.gov (fallback), and the public query, so every number is auditable |
metric | daily_high_f or daily_low_f |
value_f | the running daily high (or low) for the station's climate day (see below) |
value_source | what set value_f: hourly_obs (a routine observation), metar_6h_group or metar_24h_group (the 6-hour / 24-hour max/min remark in a METAR report, which catches peaks between hourly readings) |
latest_obs_f, as_of_utc, obs_count | the latest reading, its exact time, and how many readings fall in the day |
station_local_day | the climate day the readings were windowed to: midnight to midnight local standard time, the day the NWS climate report and Kalshi settlement use |
Real record from a local run on the evening of 2026-09-24, Austin time (Austin was already past the 96-97° bracket, so NO was locked; the 98.1°F came from the 6-hour max group, higher than any hourly reading):
{"market_url": "KXHIGHAUS-26SEP24-B96.5","ticker": "KXHIGHAUS-26SEP24-B96.5","event_ticker": "KXHIGHAUS-26SEP24","platform": "kalshi","market_title": "Will the maximum temperature be 96-97° on Sep 24, 2026?","city": "Austin","station_id": "KAUS","series_type": "KXHIGH","strike_type": "between","floor_strike": 96,"cap_strike": 97,"bracket_label": "96° to 97°","resolution_date": "2026-09-24","market_status": "active","current_yes_bid": 0.0,"current_yes_ask": 0.01,"last_price": 0.01,"underlying_observable": {"source": "aviationweather.gov","metric": "daily_high_f","value_f": 98.1,"latest_obs_f": 90.0,"as_of_utc": "2026-09-25T00:53:00Z","obs_count": 19,"station_local_day": "2026-09-24","url": "https://aviationweather.gov/api/data/metar?ids=KAUS&format=json&hours=21","value_source": "metar_6h_group"},"market_implied_outcome": "no","resolution_confidence": "high","notes": ["running high already above the bracket — NO locked in METAR terms (a daily high cannot fall)"],"running_value_f": 98.1,"locked_side": "no","distance_to_strike_f": -1.1,"obs_age_minutes": 31.3}
Export as JSON, CSV, or Excel directly from the dataset.
Input
{"marketUrls": ["https://kalshi.com/markets/kxhighny","KXHIGHNY-26SEP25-T73","KXLOWTCHI-26SEP25"],"fields": ["market_implied_outcome", "locked_side", "running_value_f"]}
{ "cities": ["NYC", "Chicago", "San Diego"], "metric": "both" }
Or run with no input at all: {} checks today's open NYC daily-high event.
marketUrls: up to 50 entries, mix and match:- Kalshi tickers in three shapes: series
KXHIGHNY(every bracket of today's soonest-closing open event), eventKXHIGHNY-26SEP25(every bracket of one city-day) or marketKXHIGHNY-26SEP25-T73/KXHIGHNY-26SEP25-B72.5(one bracket;T= above/below a strike,B= a 2-degree band). Daily-low series look likeKXLOWTNYC. - full
kalshi.commarket/event/series URLs (any path shape; the ticker is extracted from the URL), - a supported city or settlement station, e.g.
NYC,KNYC,Chicago,KMDW,Chicago low,nyc high temp today,NYC highs and lows. This resolves to today's daily-high series (daily-low if you say "low", both if you ask for both), and the record'snotessay how the entry was interpreted. Longer free text must clearly be a temperature question ("What's the high temperature in NYC?"). Anything unclear, ambiguous ("NYC high and Chicago low" in one entry) or about another day ("tomorrow", "Sept 20", "9/20", "last Friday", also next to a series ticker as in "KXHIGHNY tomorrow") comes back as a free note asking for a precise entry or ticker, polymarket.com/event/...or/market/...weather URLs (market data only, free).- Case-insensitive. Duplicates (and markets already covered by an earlier series/event entry) are checked once. A bad entry never kills the run: it becomes a free record with
notesexplaining the problem. - API callers may also send a plain list (
["KXHIGHNY"]), a single string, or{"url": ...}objects instead of strings. A top-levelcityorstationkey ({"city": "Chicago"}) is read when nomarketUrlsis given. - If
marketUrlsis given but nothing in it can be read (e.g.[null]or[{"id": ...}]), the run does not fall back to auto-discovery: it returns one free note and charges nothing.
- Kalshi tickers in three shapes: series
cities(default["NYC"]): a list of any of the 24 cities below (the input form offers them as a dropdown; you can also type a station such asKMDWor an entry like"Chicago low"). The actor checks every bracket of today's open event for each.- When
marketUrlsis empty the picked cities are what gets checked. The default["NYC"]counts only whileautoDiscoveris on: with it off, putKXHIGHNYinmarketUrlsto check NYC. - When
marketUrlsis filled, the picked cities are checked as well, except the default["NYC"](so a plain list of tickers never picks up NYC by accident) and any city a Kalshi entry inmarketUrlsalready names (asking about one Chicago bracket with"cities": ["Chicago"]checks just that bracket). - An unknown city comes back as a free note. Send a JSON list: on the Apify platform a bare string such as
"cities": "Chicago"fails input validation.
- When
metric(defaulthigh):high,loworbothfor the picked cities (max/minand other obvious spellings work too; anything else falls back tohighwith a log warning).bothabout doubles the records.autoDiscover(defaulttrue): whenmarketUrlsis empty, check today's open events forcities+metric(default: NYC daily high). Turn it off to check only what you list. Auto-discovery always lands on a live market, so the default run keeps working every day.fields: optional list to slim the top-level output, e.g.["market_implied_outcome", "locked_side"];market_url,ticker,platformare always kept. Valid names are listed in the input form. Unknown names are ignored with a warning in the log.
How outcomes and confidence are graded
market_implied_outcome: how the bracket would settle if the running value were the final value:yes,no, oruncertainwhen the running value is within 1°F of a strike boundary (rounding at the settlement source can flip those) or the observations are stale.locked_side: the side that is already decided. A running daily high can only rise, so "running high already above the bracket" locks NO while "below the bracket" can still flip; once the station's climate day is over, the final value decides every bracket. Values within 1°F of a strike staynull, likeuncertainabove. Once Kalshi has settled the market,locked_sideis the official result.resolution_confidence:highmeans the latest observation is under 90 minutes old (or the day is already complete) with a cleanly mapped station;mediummeans 90 minutes to 3 hours old;lowmeans stale observations, an unknown station, or an unparseable market.value_fuses every reading inside the station's climate day (midnight to midnight local standard time, which is 1:00 AM to 12:59 AM while clocks are on daylight time, the day the NWS climate report uses): the routine (hourly) observations plus the METAR 6-hour and 24-hour max/min remark groups whose whole window lies inside that day. Hourly readings alone miss extremes between reports, so a high reads low and a low reads high on most days. Against Kalshi's settled values, every city series with a settled value (47 per day) landed within 0.5°F on both 2026-09-22 (mean 0.04°F off) and 2026-09-23 (mean 0.05°F off). Hourly readings alone managed 42 and 40 of 47 within 1°F.- Settled markets get the official result and settlement value in
notes. When there is no observation evidence (older than the 72-hour window),market_implied_outcomeis the official result withhighconfidence. Within the window the observation-implied outcome is kept, so you can audit settlement against the observations.
Supported platforms and cities
| Platform | Markets | Evidence |
|---|---|---|
| Kalshi | all KXHIGH/KXLOW daily temperature brackets, live or settled (including older markets Kalshi has moved to its historical archive) | full: running daily high/low at the settlement station |
| Polymarket | weather (temperature) events/markets by URL | market data only (resolution_confidence: "unsupported", free) |
Kalshi settlement stations. Each series' rules name one NWS climate station (e.g. CLINYC = Central Park); these are the matching observation stations:
| City | KXHIGH | KXLOW | Station |
|---|---|---|---|
| NYC | KXHIGHNY | KXLOWTNYC | KNYC (Central Park) |
| Chicago | KXHIGHCHI | KXLOWTCHI | KMDW (Midway, not O'Hare) |
| Miami | KXHIGHMIA | KXLOWTMIA | KMIA |
| Austin | KXHIGHAUS | KXLOWTAUS | KAUS |
| Los Angeles | KXHIGHLAX | KXLOWTLAX | KLAX |
| Denver | KXHIGHDEN | KXLOWTDEN | KDEN |
| Phoenix | KXHIGHTPHX | KXLOWTPHX | KPHX |
| Philadelphia | KXHIGHPHIL | KXLOWTPHIL | KPHL |
| Houston | KXHIGHTHOU | KXLOWTHOU | KHOU (Hobby, not Bush/IAH) |
| Minneapolis | KXHIGHTMIN | KXLOWTMIN | KMSP |
| Oklahoma City | KXHIGHTOKC | KXLOWTOKC | KOKC |
| San Francisco | KXHIGHTSFO | KXLOWTSFO | KSFO |
| Washington DC | KXHIGHTDC | KXLOWTDC | KDCA |
| Boston | KXHIGHTBOS | KXLOWTBOS | KBOS |
| Dallas | KXHIGHTDAL | KXLOWTDAL | KDFW (not Love Field) |
| Seattle | KXHIGHTSEA | KXLOWTSEA | KSEA |
| Las Vegas | KXHIGHTLV | KXLOWTLV | KLAS |
| Atlanta | KXHIGHTATL | KXLOWTATL | KATL |
| San Antonio | KXHIGHTSATX | KXLOWTSATX | KSAT |
| New Orleans | KXHIGHTNOLA | KXLOWTNOLA | KMSY |
| San Diego | KXHIGHTSAN | KXLOWTSAN | KSAN |
| Louisville | KXHIGHTSDF | KXLOWTSDF | KSDF |
| Newark | KXHIGHTEWR | KXLOWTEWR | KEWR |
| Trenton | KXHIGHTTTN | KXLOWTTTN | KTTN |
Pricing
Pay per event, no subscription. Prices from 2026-09-25:
| Event | Price | When |
|---|---|---|
| Actor start | $0.005 | once per run that checks anything |
| Market check | $0.02 | per record that carries evidence: observations for the market's day, or a settled market's official result |
Records without evidence (bad input, unsupported market, future day, Polymarket) are free. So is anything that fails upstream. Each free record says why in notes.
| Run | Charged | Cost |
|---|---|---|
{}: today's NYC daily high, 6 brackets | start + 6 checks | $0.125 |
| One bracket ticker | start + 1 check | $0.025 |
One city, highs and lows ("metric": "both") | start + 12 checks | $0.245 |
| All 24 cities, daily highs | start + 144 checks | $2.885 |
| Tomorrow's event (the day has not started yet) | start only, 6 free records | $0.005 |
The run respects your maximum cost per run. If that is below $0.025 (start fee + one check) the run stops immediately with a status message and charges nothing. Bracket counts are what Kalshi listed on 2026-09-24 and can change.
Limitations (read this before trading on the output)
- Weather markets only. Sports, crypto, politics and other Kalshi/Polymarket markets are rejected with a clear note (free), not checked.
- Observations are evidence, not the settlement source. Kalshi's current rules resolve each temperature market on the daily max/min for the station named in the rules (e.g. CLINYC, Central Park) as reported by The Weather Company (weather.com/kalshi), and warn that preliminary readings can differ from the final value through rounding and conversion. This actor reads METAR/NWS observations from the same station, so they are a close proxy, not the official number. That is why values within 1°F of a strike are reported as
uncertainand are neverlocked_side. - The day ends at 1 AM in summer. Readings are windowed to the NWS climate day, midnight to midnight local standard time, the same day the settlement report uses. While clocks are on daylight time that is 1:00 AM to 12:59 AM, so between midnight and 1 AM yesterday's brackets are still live (the market is still trading) and a low can still fall.
- A running daily high can still rise (and a low can still fall) until the day ends. A
yeson a "between" bracket mid-afternoon can still flip;locked_sideandnotestell you which side is decided and which is still open. - Polymarket weather markets get market data only. They resolve per city on sources such as Wunderground station history, in whole degrees Celsius, a different source family this actor does not map. Those records carry
resolution_confidence: "unsupported", an honest note, and no charge. - Observation lookback is 72 hours. Markets older than that return their settled status and official result, without observation evidence.
FAQ
How do I know if my Kalshi weather market will resolve YES?
Run this actor with your market URL or ticker. If the running daily high is already more than 1°F above a "greater" strike, locked_side is yes: a daily high cannot go back down. If the value is below the strike, the market can still move; market_implied_outcome tells you how it would settle right now and distance_to_strike_f how far away the strike is.
Should I close my position before settlement?
That's your call. This actor gives you the evidence: current bid/ask, the observed value against your strikes, whether your side is locked or still in play, and how fresh the observation is. Dead brackets (running high already more than 1°F past the cap, locked_side: "no") are the classic close-now case.
What does uncertain mean?
The running value is within 1°F of a strike boundary (rounding at the settlement source could flip it), or the latest observation is more than 3 hours old. It deliberately refuses to call coin-flips.
How accurate is the resolution evidence for Kalshi temperature markets?
Kalshi settles on the station's daily max/min as reported by The Weather Company. The observations here come from the same station (ASOS/METAR via aviationweather.gov), including the 6-hour and 24-hour max/min groups. Checked against Kalshi's settled values for 2026-09-22 and 2026-09-23, the evidence landed within 0.5°F for every city series that had a settled value. Treat it as the strongest real-time signal available, not a settlement oracle (see Limitations).
Which station does my market settle on?
Every record carries station_id, the station named in Kalshi's settlement rules, including the non-obvious ones: Chicago is Midway (KMDW), Dallas is DFW, Houston is Hobby (KHOU), NYC is Central Park (KNYC).
Does this work for Polymarket weather markets?
Partially: paste the URL and you get the live market data (brackets, prices, end date) with resolution_confidence: "unsupported", free of charge. The actor does not fetch the Celsius observation sources those markets resolve on.
What happens when a market is already settled?
You get the official result and settlement value in notes, plus the observed daily high/low for that day when it's within the 72-hour observation window, which is useful for auditing how settlement compared to the observations.
Is this affiliated with Kalshi or Polymarket? Does it trade?
No and no. It reads public, unauthenticated market-data and weather APIs. No account, no credentials, no orders, evidence only.
Use with AI agents (MCP)
Connect your agent to the Apify MCP server (mcp.apify.com) and it can call this actor as a tool. Ask "will KXHIGHNY-26SEP25-T73 resolve YES?" and the agent passes the ticker and gets back the running daily high at the settlement station, the implied outcome, the locked side and a confidence grade. For a whole city-day, pass {"cities": ["NYC"], "metric": "both"}. Add fields to keep responses small.
More prediction-market data actors
- Kalshi Weather Markets Data (KXHIGH & KXLOW) - full bracket prices and settlement history by city and date.
- METAR & NWS Weather Station Observations API - the raw METAR/NWS observations behind the evidence.
- Polymarket Weather Resolution Checker - the same check for Polymarket's daily temperature markets in 51 cities.
- US Economic Calendar API - official release dates for CPI, jobs, GDP and FOMC, the events Kalshi's economics markets settle on.
Changelog
2026-09-25
- Pricing: market check $0.05 → $0.02, actor start $0.01 → $0.005, effective 2026-09-25.
- You pay only for evidence. A market check is charged only when the record has observations for the market's day or a settled market's official result. Future-day brackets, observation outages, unsupported markets and Polymarket records are now free (before, every market found was charged).
- More accurate running high/low:
value_fnow also uses the METAR 6-hour and 24-hour max/min groups, and the newunderlying_observable.value_sourcesays which reading set it. Observation times use the exact report minute (e.g. 23:53) instead of the hour-rounded report time, so a late-evening report no longer counts toward the next day. - City picker: new
citiesandmetricinputs check today's open events for any of the 24 cities, highs, lows or both.marketUrlsandautoDiscoverwork as before, and the input form now prefillsKXHIGHNY. - 4 new cities: San Diego (KSAN), Louisville (KSDF), Newark (KEWR), Trenton (KTTN).
- New output fields (added at the end; existing fields unchanged):
running_value_f,locked_side,distance_to_strike_f,obs_age_minutes. - Settlement wording: Kalshi resolves on The Weather Company's report for the station in its rules; the METAR/NWS observations are described as the proxy they are.
- Climate-day window: readings are now windowed to the NWS climate day (midnight to midnight local standard time, so 1:00 AM to 12:59 AM during daylight time), the day Kalshi settles on. Before, lows set between midnight and 1 AM landed on the wrong day, and a just-ended clock day was treated as final while the market was still trading.
locked_sideon settled markets is the official result.- City picker +
marketUrls: a picked city that a Kalshi entry inmarketUrlsalready names is not checked again as its whole event.
2026-09-24
- Reliability: runs started from the Apify MCP server or CI no longer fail at startup (pinned
apify-shared>=2.2.1), and malformed inputs, over-deep or non-JSON bodies and upstream errors now return free explanatory records instead of failing the run.