Kalshi Scraper — Prediction Market Odds & Probabilities avatar

Kalshi Scraper — Prediction Market Odds & Probabilities

Pricing

from $1.49 / 1,000 results

Go to Apify Store
Kalshi Scraper — Prediction Market Odds & Probabilities

Kalshi Scraper — Prediction Market Odds & Probabilities

Scrape event contracts from Kalshi, the US-regulated prediction market: market title, yes/no prices, implied probability, last price, volume, open interest, liquidity, status and close time. Pull markets or events by series, status or ticker. No login or API key. Export JSON, CSV, Excel.

Pricing

from $1.49 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Kalshi Scraper 📊🇺🇸 — Prediction-Market Odds, Prices & Implied Probabilities

This Kalshi scraper extracts event contracts, live yes/no prices and implied probabilities from Kalshi, the first US-regulated prediction market — no login, no coding, no API key. Scrape Kalshi events (a question with its priced yes/no markets) or raw markets, and pull market title, yes/no bid/ask, last price, implied probability (%), volume, open interest, liquidity, category, status and close time into one clean, de-duplicated dataset. Use it to scrape Kalshi markets by status, series or event in minutes.

Export to JSON, CSV, Excel, or API.

Built for quants, prediction-market traders, forecasters, sports-betting and odds analysts, data scientists and AI/LLM builders who need real-time, money-backed probability data as an alternative-data feed.


🔎 Why scrape Kalshi?

Kalshi is a CFTC-regulated exchange where people trade yes/no contracts on real-world events — elections, interest rates, inflation prints, weather, sports, tech milestones and more. Each contract trades between 1¢ and 99¢, and that price is a crowd-sourced, money-backed estimate of how likely the event is: a contract at 55¢ means the market implies roughly a 55% probability. That makes Kalshi one of the richest public sources of forward-looking, quantitative sentiment data available.

Reading those numbers off the website one event at a time is slow and useless for analysis. There are thousands of live markets, prices move continuously, and the structure (events containing nested markets, with bids, asks, volume and open interest) is awkward to copy by hand. To build a watchlist, a forecasting model, a backtest or a dashboard you need the whole board as structured data — repeatedly and on a schedule.

This Kalshi scraper does exactly that. It reads Kalshi's public market data and returns clean, typed records with prices already parsed to numbers and implied probabilities computed, so you can go straight to analysis.

Common reasons people scrape Kalshi:

  • 📈 Track live implied probabilities across politics, economics, weather and world events.
  • 🧠 Build forecasting and sentiment signals from money-backed market odds.
  • 💹 Spot mispricings and arbitrage by comparing prices, volume and liquidity across markets.
  • 🔬 Backtest strategies and study probability calibration on settled markets.
  • 🤖 Feed AI/LLM agents, models and data products with structured prediction-market data.
  • 📊 Power dashboards and alternative-data feeds that update on a schedule.
  • 🗳️ Monitor specific series (e.g. an election or a rate decision) end to end.

✨ What this Kalshi scraper does

  • ✅ Two collection modes — scrape Events (each question with its priced nested yes/no markets, recommended) or raw Markets (individual contracts). Pick with one dropdown.
  • ✅ Automatic pagination — walks Kalshi's cursor-paginated API 200 records at a time and keeps going until the whole result set is collected, returning hundreds to thousands of de-duplicated records (de-duplicated by ticker / eventTicker).
  • ✅ Prices & probability — captures yesBid, yesAsk, noBid, noAsk, lastPrice and computes the impliedProbabilityPct (0–100%) for every market.
  • ✅ Depth & activity — volume, volume24h, openInterest and liquidity where Kalshi exposes them.
  • ✅ Rich event + market fields — eventTicker, seriesTicker, title, subtitle, yesSubTitle, noSubTitle, category, marketType, mutuallyExclusive, marketCount, status, result, canCloseEarly, and timing (openTime, closeTime, expirationTime), plus a scrapedAt timestamp.
  • ✅ Filters & targeting — by status (open / closed / settled / unopened / all), by series ticker, or by a single event ticker.
  • ✅ Export anywhere — JSON, CSV, Excel, HTML, RSS or the Apify API.
  • ✅ Fast & reliable — pure HTTP (no browser), realistic TLS fingerprint, 6 automatic retries with exponential backoff, and optional proxy support.

Only the fields Kalshi actually returns are emitted — the scraper does not invent data. No login, no cookies, no API key.


🎯 Use cases

  • Quant & systematic traders — pull the full board of yes/no prices, depth and open interest to find mispricings and build watchlists.
  • Forecasters & analysts — use impliedProbabilityPct as a real-time, money-backed signal for elections, rates and macro events.
  • Data scientists & researchers — collect settled markets and their result to backtest and study calibration of market-implied probabilities.
  • Sports-betting & odds modelers — blend Kalshi sports markets with sportsbook lines for edge detection.
  • AI & LLM builders — feed structured prediction-market data into agents, RAG pipelines and models via the Kalshi API export.
  • Fintech & media teams — power probability dashboards, newsroom graphics and alternative-data products.
  • Economists & policy researchers — monitor inflation, Fed, GDP and election series as leading indicators.
  • Arbitrage & market-making desks — track liquidity and spreads across correlated events.

📥 Input

Configure a few simple fields — all optional, with sensible defaults.

FieldTypeDescription
dataTypestring (events | markets)Scrape events (question + priced nested markets, recommended) or raw markets (individual contracts). Default events.
statusstringFilter by status: open (tradeable now), closed, settled, unopened, or `` (empty = all). Default open.
seriesTickerstringLimit to one series, e.g. KXHIGHNY (NYC high temp) or a politics/economics series. Empty = all.
eventTickerstringLimit to a single event's markets by its event ticker. Empty = all.
maxItemsintegerMaximum markets/events to collect. 0 = unlimited (fetch everything). Default 0.
proxyConfigurationobjectOptional proxy. Off by default — a direct connection works best because Kalshi rejects many shared proxy IPs. Enable only if you specifically need one.

Example input

{
"dataType": "events",
"status": "open",
"maxItems": 500
}

📤 Output

Each record is a clean, flat JSON object. In Events mode you get the question with its priced markets nested; in Markets mode you get individual contracts at the top level. Prices are in dollars from 0 to 1 (0.55 = 55¢), and impliedProbabilityPct converts that to a 0–100% probability.

Example output (event with nested markets)

{
"eventTicker": "KXELONMARS-99",
"seriesTicker": "KXELONMARS",
"title": "Will Elon Musk visit Mars in his lifetime?",
"subtitle": "",
"category": "World",
"mutuallyExclusive": false,
"marketCount": 1,
"markets": [
{
"ticker": "KXELONMARS-99-VISIT",
"eventTicker": "KXELONMARS-99",
"marketType": "binary",
"title": "Will Elon Musk visit Mars before Aug 1, 2099?",
"subtitle": "",
"yesSubTitle": "Yes",
"noSubTitle": "No",
"status": "active",
"yesBid": 0.09,
"yesAsk": 0.11,
"noBid": 0.88,
"noAsk": 0.90,
"lastPrice": 0.10,
"impliedProbabilityPct": 10,
"volume": 12000,
"volume24h": 350,
"openInterest": 8400,
"liquidity": 25000,
"openTime": "2024-01-10T15:00:00Z",
"closeTime": "2099-08-01T04:59:00Z",
"expirationTime": "2099-08-01T04:59:00Z",
"result": "",
"canCloseEarly": true,
"category": "World"
}
],
"scrapedAt": "2026-10-25T12:00:00Z"
}

Field reference

Event fields

FieldDescription
eventTicker, seriesTickerEvent and parent series tickers
title, subtitleThe event question
categoryPolitics, Economics, World, Sports, etc.
mutuallyExclusiveWhether the nested markets are mutually exclusive
marketCountNumber of nested markets
marketsArray of nested market objects (Events mode)
scrapedAtISO timestamp of the scrape

Market fields

FieldDescription
ticker, eventTickerMarket and parent event tickers
marketTypeMarket type (e.g. binary / scalar)
title, subtitle, yesSubTitle, noSubTitleMarket question and yes/no labels
statusactive, closed, settled, …
yesBid, yesAsk, noBid, noAskBest bid/ask prices (dollars, 0–1)
lastPriceLast traded price (dollars, 0–1)
impliedProbabilityPctImplied probability of "yes" (0–100%)
volume, volume24hContracts traded (total / last 24h)
openInterestOpen contracts outstanding
liquidityResting liquidity (dollars)
openTime, closeTime, expirationTimeMarket timing
resultSettlement result — present when settled
canCloseEarlyWhether the market can close early
categoryMarket category

Depth fields (volume, volume24h, openInterest, liquidity) and result are present when available — low-volume or unsettled markets may leave some blank. Core fields (tickers, title, prices, implied probability, status, timing) populate for essentially every market.


🔁 Pagination & scale

The actor calls Kalshi's public events / markets endpoints with limit=200 and follows the API's cursor pagination: after each page it reads the cursor token and requests the next page, repeating until Kalshi returns no further cursor (the end of the result set). Every record is de-duplicated by ticker (markets) or eventTicker (events) before it is stored, so you never get repeats across pages.

This means the scraper reliably returns large result sets — hundreds to thousands of events or markets in a single run. Use maxItems to cap the total (e.g. 500 for a quick pull) or leave it at 0 to collect the entire open/closed/settled board. Because it is pure HTTP with no browser, it is fast and inexpensive, and a small polite delay between pages keeps requests well-behaved.


⚙️ How to use

  1. Open the actor on Apify Console and click Try for free (or Start).
  2. Choose a Data Type — Events (recommended) or Markets.
  3. Pick a Status — Open = tradeable now; Settled for resolved outcomes.
  4. (Optional) Narrow to a Series Ticker or a single Event Ticker.
  5. Set Max Items (or 0 for everything) and click Start.
  6. Export the dataset as JSON, CSV, Excel, HTML or RSS, or pull it from the Apify API.
  7. Integrate with Make, Zapier, Google Sheets, Slack or a webhook, or call it from an MCP server in your AI agent. Use the Apify Scheduler to re-run and track probabilities over time.

💡 Tips

  • Use Events mode for analysis — you get each question with its priced yes/no markets nested together.
  • Set Status = settled and leave maxItems high to build a historical outcomes dataset for backtesting and calibration studies.
  • Pass a seriesTicker (e.g. a specific election or rate series) to track one storyline end to end.
  • impliedProbabilityPct is derived from lastPrice when available, otherwise from the midpoint of yesBid/yesAsk — handy when a market hasn't traded recently.
  • Leave the proxy off (the default). Kalshi rejects many shared proxy IP ranges, so a direct connection is the most reliable.
  • Schedule the actor every few minutes or hours to capture how probabilities move around events, data releases and games.

❓ FAQ

Is scraping Kalshi legal? This Kalshi scraper collects only publicly available market data — the same prices and market information any visitor can see without logging in. It does not place trades, access accounts, or touch anything behind authentication. You are responsible for complying with Kalshi's Terms of Service and applicable laws; nothing here is financial advice.

Do I need a Kalshi account or API key? No. There is no login and no API key required — choose your filters and run.

How many results can I get, and how fast? The scraper paginates through the entire board and typically returns hundreds to thousands of events or markets per run, limited only by maxItems. It runs as pure HTTP (no browser), so a few hundred records finish in seconds to a minute.

Do I need proxies? No. The default is a direct connection, which is the most reliable because Kalshi blocks many shared proxy IP ranges. A proxy field is available if you specifically need one.

Is there a Kalshi API, and does this use it? This actor reads Kalshi's public market-data endpoints and returns the data as a clean dataset you can export or pull via the Apify API — so you effectively get a ready-to-use Kalshi API without writing code.

How do I read the prices? Prices are in dollars from 0 to 1 — 0.55 means 55¢, i.e. a 55% implied probability. The impliedProbabilityPct field gives you that percentage (0–100) directly.

What is the difference between Events and Markets? An event is a question (e.g. "Who wins the election?") containing one or more markets (the individual yes/no contracts). Events mode gives you questions with their priced markets nested inside; Markets mode gives you the raw contracts at the top level.

Can I get settled outcomes for backtesting? Yes — set Status to settled to collect resolved markets and their result, ideal for backtesting and studying probability calibration.

Can I filter by topic or a single market? Yes — use a Series Ticker to limit to a series, or an Event Ticker to limit to a single event's markets.

How fresh is the data? Every run fetches live data straight from Kalshi at request time, with a scrapedAt timestamp on each record. Schedule recurring runs to build a time series.

What export formats are supported? JSON, CSV, Excel, HTML table, RSS, and the Apify API. Connect to Make, Zapier, Google Sheets, Slack, webhooks or an MCP server.



Ready to pull live prediction-market odds? Click Try for free, choose your filters, and export clean Kalshi data as JSON, CSV or Excel in minutes.