Polymarket Weather Markets Scraper - Daily High/Low Temp Odds
Pricing
from $2.92 / 1,000 market returneds
Polymarket Weather Markets Scraper - Daily High/Low Temp Odds
For weather traders and forecasters: every Polymarket daily high/low temperature bracket with Yes price, live bid/ask, volume, city, date, station and result. 3,124 brackets in 51 cities on 2026-09-21. Compare the odds with Kalshi or your forecast in one table.
Pricing
from $2.92 / 1,000 market returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
For weather traders, forecasters and prediction-market researchers: every Polymarket "Highest temperature in
It reads Polymarket's public market-data API (gamma-api.polymarket.com) and its public order-book API (clob.polymarket.com). No login, no API key, no proxy, no wallet.
Export as JSON, CSV or Excel.
Why this Actor
- Live bid and ask, not the cached ones. Polymarket's market data carries a best bid and ask that can lag the order book. On 2026-09-21 we read both at the same moment for the 22 NYC brackets of September 22: 4 differed, and for "51°F or below" the market data said the Yes ask was 0.02 while the order book said 0.11. This Actor reads the order book in batches of 200 markets and says where each price came from (
pricesFrom). - Stale markets are left out. Polymarket still lists some events from May 2026 as open, without prices. Events whose end date is more than 3 days past are not requested, and are checked again on arrival: if Polymarket still sends one, it is skipped and counted in a free row instead of being sold as a current market.
- Brackets as numbers. "56-57°F", "9°C", "8°C or below" and "74°F or higher" become
rangeLow/rangeHigh(both included) plusstrikeType/floorStrike/capStrikein the same convention as Kalshi, andtemperatureUnitsays F or C. A bracket that cannot be read is returned as a free row with its text, never guessed. - Honest empty results. An unknown city, a stale market, a refusal, a rate limit and a cut-off page each come back as a separate free row that says what happened. Polymarket answers an unknown tag with an empty list (HTTP 200), so before saying "no markets" the Actor checks that the tag still exists.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
cities | list | (prefilled: NYC, London) | City names as Polymarket writes them. Case, accents and the part in brackets do not matter (Seoul and Incheon both match "Seoul (Incheon)"; New York matches NYC). Empty = every city. |
temperatureTypes | list | both | high (daily highest temperature) and/or low (daily lowest temperature). |
marketStatus | select | open | open, or closed (finished, with result), newest first. |
closedWithinDays | integer | 7 (closed only) | With closed: only events that ended in the last N days (1 to 90; at most 7 in monitoring mode). |
liveOrderBook | boolean | true | Read yesBid / yesAsk of open markets from the order book. No extra charge. |
maxResults | integer | 1000 | Stop after this many bracket rows (monitoring off). A free row says what was left out. |
monitoringMode | boolean | false | Return only brackets whose displayed Yes price, last trade price, volume, status or result changed since the last run, plus newly listed brackets. |
resetMonitoringState | boolean | false | Forget what monitoring remembered, so the next monitoring run returns everything again. Turn it off after one run. |
Examples:
{ "cities": ["NYC", "London"] }
{ "cities": ["Chicago", "Miami"], "temperatureTypes": ["high"] }
{ "cities": ["NYC"], "marketStatus": "closed", "closedWithinDays": 30 }
Cities
On 2026-09-21 Polymarket had daily temperature markets for these 51 cities (US cities in °F with 2-degree brackets, the rest in °C with 1-degree brackets, 11 brackets per event): Amsterdam, Ankara, Atlanta, Austin, Beijing, Buenos Aires, Busan, Cape Town, Chengdu, Chicago, Chongqing, Dallas, Denver, Guangzhou, Helsinki, Hong Kong, Houston, Istanbul, Jeddah, Jinan, Karachi, Kuala Lumpur, London, Los Angeles, Lucknow, Madrid, Manila, Mexico City, Miami, Milan, Moscow, Munich, NYC, Panama City, Paris, Qingdao, San Francisco, Sao Paulo, Seattle, Seoul (Incheon), Shanghai, Shenzhen, Singapore, Taipei, Tel Aviv, Tokyo, Toronto, Warsaw, Wellington, Wuhan, Zhengzhou. Polymarket adds and drops cities; an unknown city's free row lists the cities of that moment.
Same city, different station: Polymarket vs Kalshi
If you compare these markets with Kalshi's (our sister Actor Kalshi Weather Markets API returns the same targetDate, strikeType, floorStrike and capStrike columns), check the station first. Stations as named in each market's rules on 2026-09-21:
| City | Polymarket station (settlementStationCode) | Kalshi station |
|---|---|---|
| NYC | KLGA LaGuardia Airport | KNYC Central Park |
| Chicago | KORD O'Hare | KMDW Midway |
| Dallas | KDAL Love Field | KDFW Dallas/Fort Worth |
| Denver | KBKF Buckley Space Force Base | KDEN Denver International |
| Houston | KHOU Hobby | KHOU Hobby |
| Miami | KMIA | KMIA |
| Los Angeles | KLAX | KLAX |
| Austin | KAUS | KAUS |
| Seattle | KSEA | KSEA |
| San Francisco | KSFO | KSFO |
| Atlanta | KATL | KATL |
A bracket such as "72-73°F" means the same range on both, but when the stations differ the two markets settle on different thermometers.
Output
One row per temperature bracket. Example (NYC, highest temperature on 2026-09-22, read 2026-09-21):
{"city": "NYC","marketKind": "high","targetDate": "2026-09-22","temperatureUnit": "F","eventTicker": "highest-temperature-in-nyc-on-september-22-2026","marketTicker": "highest-temperature-in-nyc-on-september-22-2026-64-65f","yesLabel": "64-65°F","strikeType": "between","floorStrike": 64,"capStrike": 65,"rangeLow": 64,"rangeHigh": 65,"marketStatus": "open","yesPrice": 0.42,"yesBid": 0.41,"yesAsk": 0.43,"yesMid": 0.42,"spread": 0.02,"pricesFrom": "clob-order-book","lastPrice": 0.48,"volumeUsd": 985.03,"volume24hUsd": 985.03,"liquidityUsd": 6599.88,"endDate": "2026-09-22T12:00:00Z","result": null,"settlementStationCode": "KLGA","settlementStationName": "LaGuardia Airport","resolutionSource": "https://www.weather.gov/wrh/timeseries?site=klga","scrapedAt": "2026-09-21T07:26:31.180Z"}
| Column | Meaning |
|---|---|
city, marketKind, targetDate | The city as Polymarket names it, high or low, and the date the temperature is measured. |
inputCity | The city name you typed that matched this row (null when no city was given). |
yesLabel, rangeLow, rangeHigh, temperatureUnit | The bracket as Polymarket shows it and its bounds in whole degrees, both included. rangeLow is null for "or below" brackets and rangeHigh for "or higher" brackets. Polymarket resolves to whole degrees. |
strikeType, floorStrike, capStrike | The same bracket in Kalshi's convention: between = from floorStrike to capStrike, both included; less = below capStrike ("8°C or below" has capStrike 9); greater = above floorStrike ("74°F or higher" has floorStrike 73). |
yesPrice, noPrice | The price Polymarket displays for Yes and No (USD per share; a share pays $1.00). |
yesBid, yesAsk | Best price someone is bidding for Yes and best price someone is asking. null means no order on that side: Polymarket reports an empty side as 0 (no bid) or 1 (no ask), and neither is returned as a price. Always null for closed markets, whose last order book no longer means anything. |
yesMid, spread | From yesBid and yesAsk, only when both exist and the market is open; otherwise null. |
pricesFrom | clob-order-book (read from the order book during this run) or gamma-market-data (Polymarket's market data, which can lag; used when liveOrderBook is off or when the order book could not be read). null for closed markets. |
lastPrice, priceChange1h, priceChange24h | Last trade price and Polymarket's 1-hour and 24-hour price change. |
volumeUsd, volume24hUsd, liquidityUsd | In USD. null means Polymarket sent no value; on 2026-09-21 this was the case for 1,088 of 3,124 brackets, and 1,087 of those had no trade yet. |
endDate | Polymarket's end date for the market (noon UTC on the target date). Trading and resolution can continue after it; the rules say the market resolves after the day's data is published. |
result, resolutionStatus | For closed markets: yes or no (from the final 1/0 prices) and Polymarket's resolution status. |
settlementStationCode, settlementStationName, resolutionSource | The station named in the market rules (ICAO code when the rules link to one) and the link the rules use for resolution. Hong Kong resolves on the Hong Kong Observatory, which has no ICAO code. |
eventId, eventTicker, seriesTicker, marketId, marketTicker, conditionId, yesTokenId | Polymarket identifiers (slugs, condition id and the Yes token id used by the order book). |
monitorStatus, changedFields | Monitoring mode only: first-check (first time the bracket is returned, including brackets left out of an earlier run by the maximum total charge), changed (with the columns that changed) or new-market (listed after an earlier run). |
Rows whose status is not ok are free and explain themselves in note: unknown-city, stale-markets-skipped, unreadable-strike, live-prices-unavailable, no-markets, duplicate, blocked, unreadable, refused, incomplete, not-checked, budget-reached, no-change-since-last-run, invalid-input.
Pricing
- $4.00 per 1,000 market rows (one row per temperature bracket).
- Monitoring mode adds $0.30 per 1,000 event checks: each event read (one city, one date, highest or lowest) costs one check, whether or not anything changed. Stale events and failed requests are not charged.
- Live order-book prices 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). The first run returns every bracket once as a baseline. Later runs return only brackets whose displayed Yes price, last trade price, volume, status or result changed, plus brackets listed since, with changedFields naming what moved. The comparison uses Polymarket's market data only, so a moment when the order book cannot be read never counts as a change. A run with no change returns one free no-change-since-last-run row. Markets are remembered per event in a named key-value store; brackets you did not receive because the maximum total charge was reached are not remembered, so the next run returns them if they still differ. Events that ended more than 10 days ago are forgotten. Do not put the same city in two schedules that can run at the same time (Apify's key-value store has no atomic update).
Notes and limits
- Polymarket returns at most 100 events per page (about 5 MB), so reading every city takes 3 pages; the Actor waits 0.2 s between requests, and a rate limit (HTTP 429) is waited out and retried, then reported as a free
blockedrow if it persists. opencovers events Polymarket lists as open with an end date no more than 3 days past.closedreads events that ended withinclosedWithinDays, newest first.- This Actor returns market data. It does not place orders and is not trading advice. Polymarket may restrict trading in some countries; reading its public data does not change that.