Kalshi Scraper — Prediction Markets, Prices & History
Pricing
$1.00 / 1,000 kalshi markets
Kalshi Scraper — Prediction Markets, Prices & History
Collect Kalshi prediction markets by category, series, event or market ticker. Export numeric yes/no quotes, traded volume, open interest, rules, settlement outcomes, optional order books and price history.
Kalshi Scraper — Prediction Markets, Prices and History
Kalshi scraper exports prediction markets with yes/no quotes, traded volume, open interest, resolution rules and settlement outcomes. Select a category, search event text, or provide series, event and market tickers. Each delivered market becomes one dataset row that you can download as JSON, CSV or Excel and join to your own model using the market ticker.
The actor is useful for analysts tracking economic expectations, newsrooms comparing election outcomes, and weather modellers matching forecast brackets with observed temperatures. It collects public market data without requiring a Kalshi account. It does not place orders, manage a trading account or produce forecasts. An optional order book and price candles help you inspect the quoted spread and previous trading activity alongside each market record.
What the Kalshi scraper collects
A market is a single traded contract within an event. An event can contain several brackets
or outcomes, and a series groups recurring events. Those identifiers have separate fields:
ticker, event_ticker and series_ticker. The dataset also includes the full title,
yes/no outcome labels, primary and secondary rules, opening and closing times, expected
expiration, settlement time and the resolved result when the source publishes it.
Prices are numeric amounts in US dollars. A quote of 0.26 means $0.26 for that contract,
not 26 dollars. Volume, volume over the last 24 hours, bid sizes and open interest are numeric
contract quantities and can contain fractions. The source status is preserved, so an open
market may report active, while a settled market may report finalized.
The symbol field equals the market ticker and asset_class is prediction_market.
price is the last traded price when volume is positive. A never-traded market has
price: null, even when the source's raw last-price value is zero. The separate
last_price field preserves that numeric source value. Retrieval timestamps let you
distinguish a newly collected quote from the market's own update and resolution timestamps.
Input
Start with categories, such as Economics, Elections, Financials, Sports or Weather. Category
names are case-insensitive, and Weather means Climate and Weather. Other supported categories
include Politics, Crypto, Commodities, Companies, Entertainment, Mentions, Science and
Technology, Social and Business. Use query to search event text, for example fed.
For recurring contracts, provide series_tickers, such as KXHIGHNY. For a particular
occurrence, use event_tickers, such as KXHIGHNY-26OCT10. For exact contracts, use
market_tickers. Explicit series, events and market tickers form a combined selection;
overlapping markets are delivered once. Categories can narrow that selection. With explicit
tickers, a query matches the market title rather than the event search text. Supply tickers
as arrays of strings, with at most 300 explicit tickers in total.
status defaults to open. Choose closed for closed but unsettled markets, settled for
resolved contracts, or all to include any status. unopened is supported for explicit
series and events; category and text browsing do not support that status. Exact market
lookups return the requested contracts regardless of the status setting, including settled
contracts. Older resolved contracts are included in settled series searches.
Without selectors the actor browses the market index. Combo markets are excluded by default;
set include_combos to true to include multivariate contracts in browsing results. Exact
market_tickers always return the explicitly requested contracts, including combos.
min_volume discards markets
below your chosen total traded contract count. max_markets defaults to 100 and allows up
to 50,000 delivered rows. Smaller limits make broad searches easier to inspect.
Optional order books and price history
Set include_orderbook to true to attach yes and no bid levels. orderbook_depth defaults
to 10 and supports 1 to 100 levels per side. Levels are sorted from the highest bid down,
with a numeric price and quantity. An empty book contains two empty lists. These are
bid books: a yes ask can be inferred from one dollar minus the best no bid. The main row's
yes/no bid and ask fields remain the market's quoted values.
Set include_price_history to true to attach candles. history_interval accepts minute,
hour or day and defaults to day. history_days defaults to 7 and supports up to 365 days,
provided the window fits within 5,000 periods. Minute candles support up to 3 days and hourly
candles up to 208 days. Choose daily candles for longer windows. Each candle contains a
period-end timestamp, price open/high/low/close/mean, closing yes bid and ask, volume and
open interest. Candles arrive oldest first and remain inside the requested lookback window.
The window ends at collection time for open markets. When a market closed earlier, it ends at that market's close time, using settlement time if the close time is absent. This also retrieves the final trading days of contracts resolved months ago. A valid time window can have no trading activity; in that case its history is an empty list. Missing candle prices remain null instead of being filled with an invented quote. If an optional request is unavailable, the market row still appears with a null block and a warning.
Output
The default dataset contains one row per delivered market. Order books and price history
stay nested on that row and do not become additional dataset records. The OUTPUT record
in the default key-value store holds the query, rows, warnings and collection status.
Errors are recorded separately with a stable code and an English message.
The actor automatically follows continuation pages up to your requested row limit. Unknown
market tickers in a mixed selection produce warnings while found markets are delivered.
A selection with no matching market returns an empty dataset. Invalid categories or history
windows are reported as input errors. Review warnings and partial when a source error
or the run's collection time limit prevents complete retrieval. Prices can change during
collection, so use fetched_at when comparing quotes from different rows or runs.
The collection budget is 1,800 seconds. Start with 100–500 markets when requesting order
books or history. Large enriched selections may return fewer rows than max_markets;
50,000 is an input ceiling and does not guarantee that volume within one run. Check
partial and the continuation cursor before using a large selection as a complete snapshot.
For a real resolved-market example, see the included example for the October 10, 2026 New York temperature event. Its rows preserve the fetched resolution values, settlement timestamps and rules from Kalshi. The weather example shows open contracts from the same recurring series. These examples describe captured source data, rather than a current quote.
Pricing
The billing unit is one delivered market. The current price per market is shown in the actor's Pricing tab. Order books and price history are included in that market's row and do not incur separate product events. Empty results incur no market charge, and this actor does not charge a product start event. Only rows actually delivered to the dataset count towards market billing; repeated tickers across continuation pages count once.
Non-paying users have a delivery cap of 10 market rows per run. This is a row limit, not a
claim that charged rows are free. Use a small max_markets value to check a selection before
requesting a broad collection. Market volume and order-book quantities describe exchange
activity and do not affect the number of billed market rows.
FAQ
Do I need a Kalshi account or API key?
No. The actor collects public market information. Private account balances, positions, orders and personal trading history are outside its output.
Why do input and output statuses have different names?
Kalshi's status filters and market record statuses use different vocabularies. The actor accepts filter names such as open and settled while preserving source record values such as active and finalized, so downstream code can inspect the original status.
Why is the price null for a market that has quotes?
The core price field represents an executed trade. If the market has never traded, quoted bids and asks can exist while there is no last-trade price. Inspect the yes/no quote fields or implied probability for the quoted market view.
Can I collect older settled markets?
Yes. Settled and all-status series searches include the historical market archive. Exact market tickers can also retrieve resolved contracts. Price history ends at the earlier market close, so an old contract can return its final trading days even when collection happens months later. A window without activity still has an empty candle list.
Can I use the output to compare probabilities?
The actor supplies the published quotes, spread and an implied-probability estimate. Compare equivalent rules, closing times and settlement sources before treating two contracts as the same outcome. A contract's price and volume are market observations, and do not guarantee that an event will resolve in either direction.