Kalshi Markets Scraper - Odds, Volume & Weather Forecasts avatar

Kalshi Markets Scraper - Odds, Volume & Weather Forecasts

Pricing

from $0.92 / 1,000 market returneds

Go to Apify Store
Kalshi Markets Scraper - Odds, Volume & Weather Forecasts

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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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 fetchedAt says 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:

FieldExample
tickerKXHIGHNY-26SEP14-T74the market
eventTickerKXHIGHNY-26SEP14the day's question
seriesTickerKXHIGHNYthe question as it repeats every day
eventTitleHighest temperature in New York City on Sep 14, 2026?
yesSubTitle73° or belowwhat has to happen for yes
categoryClimate and WeatherKalshi's category for the event. A series can sit in more than one, so a market found through Economics may say Financials here
statusGroupopenopen, closed, settled, unopened or paused; status has Kalshi's own word
yesBid, yesAsk0.36, 0.37the best prices to sell and to buy yes
noBid, noAsk0.63, 0.64the same for no
lastPrice0.37the last trade
volume, volume24h231.78, 121contracts traded since the market opened, and in the last 24 hours
openInterest231.78contracts still held
closeTime2026-09-15T05:00:00Zwhen trading stops
resultnullyes or no once settled
urlhttps://kalshi.com/markets/kxhighnythe 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:

FieldExample
cityNew York City
stationCode, stationNameCLINYC, New York City, Central Parkwhere the temperature is recorded
weatherDate2026-09-14the day the bracket is about
temperatureKindhighhigh or low
bracketLowF, bracketHighFnull, 73the bracket in whole degrees, both ends included; null means open-ended
forecastTempF72.5Open-Meteo's forecast for that station and day
forecastInBrackettrue72.5 rounds to 73, which is inside
forecastDistanceF0degrees between the forecast and the bracket
settledTempFnullthe 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.