Kalshi Weather Market Resolution Checker (METAR/NWS) avatar

Kalshi Weather Market Resolution Checker (METAR/NWS)

Pricing

from $20.00 / 1,000 market checks

Go to Apify Store
Kalshi Weather Market Resolution Checker (METAR/NWS)

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

Jack Sheward

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

0

Monthly active users

12 days ago

Last modified

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 wantInputTypical 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 agentadd "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:

FieldExampleNotes
market_urlinput URL/tickernull for markets found through the city picker / auto-discovery
tickerKXHIGHAUS-26SEP24-B96.5market identifier (Kalshi ticker / Polymarket slug)
event_tickerKXHIGHAUS-26SEP24groups the brackets of one city-day
platformkalshikalshi or polymarket
market_titleWill the maximum temperature be 96-97° …
city, station_idAustin, KAUSthe station named in the market's settlement rules
series_typeKXHIGHKXHIGH (daily high) or KXLOW (daily low)
strike_type, floor_strike, cap_strikebetween, 96, 97bracket bounds in °F
bracket_label96° to 97°human-readable bracket
resolution_date2026-09-24the day being measured
market_statusactiveactive / finalized etc. straight from the platform
current_yes_bid, current_yes_ask, last_price0.0, 0.01, 0.01USD per contract
underlying_observableobjectthe evidence, see below
market_implied_outcomenoyes / no / uncertain: how the bracket would settle if the running value were final
resolution_confidencehighhigh / medium / low (unsupported for Polymarket)
notesarraysettlement results, staleness flags, hold/close direction hints
running_value_f98.1the running daily high/low (same as underlying_observable.value_f)
locked_sidenoyes / 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.1signed °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_minutes31.3minutes since the latest observation

The underlying_observable object:

KeyMeaning
source, urlaviationweather.gov (primary) or api.weather.gov (fallback), and the public query, so every number is auditable
metricdaily_high_f or daily_low_f
value_fthe running daily high (or low) for the station's climate day (see below)
value_sourcewhat 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_countthe latest reading, its exact time, and how many readings fall in the day
station_local_daythe 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), event KXHIGHNY-26SEP25 (every bracket of one city-day) or market KXHIGHNY-26SEP25-T73 / KXHIGHNY-26SEP25-B72.5 (one bracket; T = above/below a strike, B = a 2-degree band). Daily-low series look like KXLOWTNYC.
    • full kalshi.com market/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's notes say 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 notes explaining the problem.
    • API callers may also send a plain list (["KXHIGHNY"]), a single string, or {"url": ...} objects instead of strings. A top-level city or station key ({"city": "Chicago"}) is read when no marketUrls is given.
    • If marketUrls is 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.
  • 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 as KMDW or an entry like "Chicago low"). The actor checks every bracket of today's open event for each.
    • When marketUrls is empty the picked cities are what gets checked. The default ["NYC"] counts only while autoDiscover is on: with it off, put KXHIGHNY in marketUrls to check NYC.
    • When marketUrls is 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 in marketUrls already 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.
  • metric (default high): high, low or both for the picked cities (max/min and other obvious spellings work too; anything else falls back to high with a log warning). both about doubles the records.
  • autoDiscover (default true): when marketUrls is empty, check today's open events for cities + 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, platform are 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, or uncertain when 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 stay null, like uncertain above. Once Kalshi has settled the market, locked_side is the official result.
  • resolution_confidence: high means the latest observation is under 90 minutes old (or the day is already complete) with a cleanly mapped station; medium means 90 minutes to 3 hours old; low means stale observations, an unknown station, or an unparseable market.
  • value_f uses 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_outcome is the official result with high confidence. Within the window the observation-implied outcome is kept, so you can audit settlement against the observations.

Supported platforms and cities

PlatformMarketsEvidence
Kalshiall 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
Polymarketweather (temperature) events/markets by URLmarket 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:

CityKXHIGHKXLOWStation
NYCKXHIGHNYKXLOWTNYCKNYC (Central Park)
ChicagoKXHIGHCHIKXLOWTCHIKMDW (Midway, not O'Hare)
MiamiKXHIGHMIAKXLOWTMIAKMIA
AustinKXHIGHAUSKXLOWTAUSKAUS
Los AngelesKXHIGHLAXKXLOWTLAXKLAX
DenverKXHIGHDENKXLOWTDENKDEN
PhoenixKXHIGHTPHXKXLOWTPHXKPHX
PhiladelphiaKXHIGHPHILKXLOWTPHILKPHL
HoustonKXHIGHTHOUKXLOWTHOUKHOU (Hobby, not Bush/IAH)
MinneapolisKXHIGHTMINKXLOWTMINKMSP
Oklahoma CityKXHIGHTOKCKXLOWTOKCKOKC
San FranciscoKXHIGHTSFOKXLOWTSFOKSFO
Washington DCKXHIGHTDCKXLOWTDCKDCA
BostonKXHIGHTBOSKXLOWTBOSKBOS
DallasKXHIGHTDALKXLOWTDALKDFW (not Love Field)
SeattleKXHIGHTSEAKXLOWTSEAKSEA
Las VegasKXHIGHTLVKXLOWTLVKLAS
AtlantaKXHIGHTATLKXLOWTATLKATL
San AntonioKXHIGHTSATXKXLOWTSATXKSAT
New OrleansKXHIGHTNOLAKXLOWTNOLAKMSY
San DiegoKXHIGHTSANKXLOWTSANKSAN
LouisvilleKXHIGHTSDFKXLOWTSDFKSDF
NewarkKXHIGHTEWRKXLOWTEWRKEWR
TrentonKXHIGHTTTNKXLOWTTTNKTTN

Pricing

Pay per event, no subscription. Prices from 2026-09-25:

EventPriceWhen
Actor start$0.005once per run that checks anything
Market check$0.02per 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.

RunChargedCost
{}: today's NYC daily high, 6 bracketsstart + 6 checks$0.125
One bracket tickerstart + 1 check$0.025
One city, highs and lows ("metric": "both")start + 12 checks$0.245
All 24 cities, daily highsstart + 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 uncertain and are never locked_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 yes on a "between" bracket mid-afternoon can still flip; locked_side and notes tell 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

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_f now also uses the METAR 6-hour and 24-hour max/min groups, and the new underlying_observable.value_source says 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 cities and metric inputs check today's open events for any of the 24 cities, highs, lows or both. marketUrls and autoDiscover work as before, and the input form now prefills KXHIGHNY.
  • 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_side on settled markets is the official result.
  • City picker + marketUrls: a picked city that a Kalshi entry in marketUrls already 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.