Kalshi Markets Scraper - Odds, Volume & Weather Forecasts
Pricing
from $0.92 / 1,000 market returneds
Kalshi Markets Scraper - Odds, Volume & Weather Forecasts
Kalshi prediction markets as rows: yes and no prices, last trade, volume, open interest, close time and result. The daily high and low temperature brackets in 24 US cities also get the forecast for their station and day, and whether it lands in the bracket. No API key or login.
Pricing
from $0.92 / 1,000 market returneds
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Kalshi Markets Scraper
Kalshi's markets as rows, read from Kalshi's own public API: the yes and no prices, the last trade, volume, open interest, when trading closes and how the market settled.
The daily temperature markets get extra columns. Each bracket comes with the forecast for the weather station that market settles on, so you can see at a glance whether the forecast sits inside "73° or below" or three degrees above it.
There's no Kalshi account, API key or login involved.
Temperature markets
Every day Kalshi asks how hot and how cold it will get in 24 US cities. Each question is split into six brackets, such as "73° or below" or "74° to 75°", and the bracket that holds the recorded temperature pays out.
Pick the cities and you get every bracket for the days Kalshi has open, usually today and tomorrow. Each bracket carries:
forecastTempF: Open-Meteo's forecast high or low for that station and day.forecastInBracket: whether the forecast, rounded to a whole degree the way temperatures are recorded, falls inside the bracket.forecastDistanceF: how many degrees it would have to move to get inside, and 0 when it already is.
The forecast is for the station named in the market's rules, not the middle of town: Central Park for New York City, Midway for Chicago, the main airport for most of the others. stationCode and stationName tell you which. Once a market has settled, settledTempF holds the temperature it settled on.
A forecast is a model's guess and it moves during the day. It isn't Kalshi's data, and it isn't what the markets settle on. Today and the next 15 days get one; days already over don't.
The cities: Atlanta, Austin, Boston, Chicago, Dallas, Denver, Houston, Las Vegas, Los Angeles, Louisville, Miami, Minneapolis, New Orleans, New York City, Newark, Oklahoma City, Philadelphia, Phoenix, San Antonio, San Diego, San Francisco, Seattle, Trenton and Washington DC.
Everything else on Kalshi
Every other market works the same way, one row each. Choose them by category, such as Economics or Sports, by Kalshi's tags, by series, by event or by market ticker. Or set only a status and take whatever Kalshi lists.
Then narrow the list with close dates, a keyword, or a floor on volume, 24-hour volume or open interest. Each market's orderbook and its latest trades can come along too.
What it doesn't do
- Trade. It can't see an account, and it doesn't place or cancel orders.
- Price history. A row is the market as it stood when the run read it, and
fetchedAtsays when. Kalshi's API can answer from a copy up to 15 seconds old. - Combo markets, unless you ask. Kalshi generates markets that bundle several outcomes into one contract, in very large numbers. They stay out unless you set Combo markets to include them, and they come without an event title, series or category, because Kalshi's list of events leaves combos out.
- Old settled markets through a category. Kalshi keeps recent settled markets in its live list and moves older ones to an archive after a few months. Searches by series, event, market ticker or city look in both. A category search only sees the live list.
- More than 50,000 markets in one run. Kalshi's open list alone is well over 100,000 markets, so split a big job by category or status. With recent trades on, a run stops at 2,000 markets.
Input
There are two kinds of setting. Targets say which markets you want: cities, categories, tags, series, events and market tickers. They add up. Filters then narrow those down: status, close dates, keyword, volume, 24-hour volume and open interest.
Leave the status empty and cities, categories and series give you open markets, while event and market tickers come back whatever their status. A run with nothing set returns one sample row and charges nothing.
Brackets for three cities, with forecasts:
{"status": "open","weatherCities": ["New York City", "Chicago", "Miami"],"maxMarkets": 100}
Every settled New York high from one summer. The older days come from Kalshi's archive:
{"status": "settled","seriesTickers": ["KXHIGHNY"],"closeFrom": "2026-06-01","closeTo": "2026-08-31","maxMarkets": 2000}
Busy economics markets with their orderbooks:
{"status": "open","categories": ["Economics"],"minVolume": 1000,"includeOrderbook": true,"orderbookDepth": 5}
Close dates are whole days in UTC. Tickers are Kalshi's own; capitals don't matter.
Output
One row per market. Prices are in dollars: 0.37 is 37 cents, which the market reads as a 37% chance of yes. Volume and open interest count contracts, and Kalshi lets people trade parts of a contract, so they can have decimals.
A real row, the New York high for 14 September 2026, as Kalshi listed it on the 13th:
| Field | Example | |
|---|---|---|
ticker | KXHIGHNY-26SEP14-T74 | the market |
eventTicker | KXHIGHNY-26SEP14 | the day's question |
seriesTicker | KXHIGHNY | the question as it repeats every day |
eventTitle | Highest temperature in New York City on Sep 14, 2026? | |
yesSubTitle | 73° or below | what has to happen for yes |
category | Climate and Weather | Kalshi's category for the event. A series can sit in more than one, so a market found through Economics may say Financials here |
statusGroup | open | open, closed, settled, unopened or paused; status has Kalshi's own word |
yesBid, yesAsk | 0.36, 0.37 | the best prices to sell and to buy yes |
noBid, noAsk | 0.63, 0.64 | the same for no |
lastPrice | 0.37 | the last trade |
volume, volume24h | 231.78, 121 | contracts traded since the market opened, and in the last 24 hours |
openInterest | 231.78 | contracts still held |
closeTime | 2026-09-15T05:00:00Z | when trading stops |
result | null | yes or no once settled |
url | https://kalshi.com/markets/kxhighny | the series on kalshi.com |
Every row also has title, noSubTitle, eventSubTitle, marketType, strikeType, floorStrike, capStrike, the sizes at the best bid and ask, the prices a day earlier (previousYesBid, previousYesAsk, previousPrice), openTime, expectedExpirationTime, latestExpirationTime, settlementTime, settlementValue, expirationValue (the figure the market settled on), canCloseEarly, isCombo, rulesPrimary (the market's rule in Kalshi's words), archived and fetchedAt.
Temperature brackets add:
| Field | Example | |
|---|---|---|
city | New York City | |
stationCode, stationName | CLINYC, New York City, Central Park | where the temperature is recorded |
weatherDate | 2026-09-14 | the day the bracket is about |
temperatureKind | high | high or low |
bracketLowF, bracketHighF | null, 73 | the bracket in whole degrees, both ends included; null means open-ended |
forecastTempF | 72.5 | Open-Meteo's forecast for that station and day |
forecastInBracket | true | 72.5 rounds to 73, which is inside |
forecastDistanceF | 0 | degrees between the forecast and the bracket |
settledTempF | null | the recorded temperature, once settled; empty on the odd archived bracket Kalshi sends without it |
They also carry forecastSource and forecastFetchedAt.
With the orderbook on, orderbook holds yesBids and noBids, best price first, each like { "price": 0.36, "contracts": 30 }. A yes bid at 0.36 is the same thing as a no offer at 0.64, which is why Kalshi only lists bids.
With recent trades on, recentTrades lists the latest trades, newest first: the time, the yes and no price, how many contracts, and which side the taker took.
The dataset has two views: Markets, and Temperature brackets, which puts the forecast beside each bracket.
Each run also leaves RUN_REPORT in its key-value store: what each search listed and returned, how many markets your filters set aside and why, how many brackets got a forecast, and why the run stopped.
What you pay
Each market in your dataset is one charge, and the forecast, orderbook and trades come with it. Nothing else is charged: not the sample row, not markets your filters set aside, not a search Kalshi didn't answer, and not a market you already got from another of your searches. If you set a maximum charge for the run, it stops when that's reached, and every row you get has been paid for. The price is on the Pricing tab.
Where the data comes from
Market data comes from Kalshi's public trade API. Kalshi sets its own terms for how its market data may be used, so read them before you republish or resell what you collect.
Forecasts come from Open-Meteo, whose data is licensed under CC BY 4.0. Credit Open-Meteo if you publish them.
Station names and coordinates come from the US National Weather Service.
This actor isn't made by, endorsed by or connected to Kalshi.
Questions
How fresh are the prices? As fresh as Kalshi's API when the run reads them; fetchedAt is on every row. The API can hand out a copy up to 15 seconds old.
Why doesn't the forecast match the recorded temperature? It's a forecast. It's also Open-Meteo's value for the grid square around the station, while the market settles on the station's own reading.
How long does a run take? A few seconds for a handful of cities, and about half a minute for all 24 with their forecasts.
Why do some volumes have decimals? Kalshi lets people trade fractions of a contract.
Does it cover Polymarket? No, only Kalshi.