Kalshi Market Monitor
Pricing
from $0.40 / 1,000 market records
Kalshi Market Monitor
Monitor live Kalshi prediction markets in one run: yes/no prices, bid-ask spreads, volume, liquidity and open interest, plus close dates and market status. Filter by status, series or event prefix and a creation window. Every run returns a fresh full-board snapshot; no account is needed.
Pricing
from $0.40 / 1,000 market records
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
14 hours ago
Last modified
Categories
Features
Share
Collect live Kalshi prediction markets in one run: yes/no bids and asks, last
price, an indicative probability, volume, 24-hour volume, liquidity, open
interest, open and close times and market status, one record per market.
Filter by status, series (for example KXBTCD, the Bitcoin price ladder) or
event prefix. Built for traders, analysts and bot builders who schedule runs
and pipe the JSON into dashboards, alerts or models. No Kalshi account or API
key is needed.
Data only, not financial advice.
Use cases
- Market boards: a fresh snapshot of one market family (crypto ladders, sports games, economics) for a dashboard, refreshed on a schedule.
- Price and probability tracking: store snapshots and chart how a market's midpoint and volume move toward its close.
- Cross-venue comparison: map Kalshi tickers to Polymarket markets with
crossVenueMapand compare the two venues side by side. - Bots and models: feed bids, asks and open interest into your own pricing or alerting logic.
Quick start
For a clean board, pick a series. This returns the open Bitcoin price ladder:
{"seriesTicker": "KXBTCD", "status": "open", "lookbackHours": 0, "maxMarkets": 200}
Clicking Start with the prefilled form (or an empty input {}) returns up
to 200 open markets created in the last 7 days, newest-updated first, across
all of Kalshi, each with its event title. Auto-generated multi-leg combo
markets, which make up most of Kalshi's all-markets board and see little or no
trading, are left out unless you turn on includeCombos.
Input
| Name | Type | Default | What it does |
|---|---|---|---|
status | string | open | open, unopened, closed, settled, or all (every status). |
seriesTicker | string | empty | Exact series ticker, for example KXBTCD (Bitcoin) or KXETHD (Ethereum). |
eventTickerPrefix | string | empty | Keep only markets whose event ticker starts with this prefix (case-insensitive). |
includeCombos | boolean | false | Include multi-leg combo markets when neither seriesTicker nor eventTickerPrefix is set. Series and prefix runs return exactly the markets they name either way. |
lookbackHours | integer | 168 | Keep only markets created within this many hours (0–336). 0 turns the window off. Markets without a published creation time are skipped while the window is on. |
pageSize | integer | 100 | Markets requested per page (1–1,000). |
maxMarkets | integer | 200 | Maximum records returned after filters (1–2,000). |
maxPages | integer | 6 | Maximum pages read per run (1–30). |
crossVenueMap | object | {} | Optional map of Kalshi market or event ticker to a Polymarket slug or condition ID (up to 500 entries). Matching rows carry a crossVenue object. |
telegramChatId | string | empty | Chat for an optional digest (cross-venue pairs and markets at or above alertMinUsd). Needs a TELEGRAM_BOT_TOKEN secret environment variable, so it suits your own copy of the Actor. |
alertMinUsd | number | 1000 | Markets with total volume at or above this USD value go into the digest; cross-venue pairs always do. |
requestDelaySecs | number | 0.25 | Pause between pages (0–10 seconds). |
A misspelt input field stops the run with an error that names it.
Output
One dataset record per market: recordKey, source, kind, collectedAt,
sourceUrl, ticker, eventTicker, eventTitle, question, status,
active, closed, openTime, closeTime, createdTime, endDate (same as
closeTime), lastPrice, yesBid, yesAsk, noBid, noAsk,
yesProbability, noProbability, probabilitySource, outcomes, volume,
volume24h, liquidity, openInterest, crossVenue.
- Prices are in dollars per $1 contract.
yesAsk/noAskare the displayed buy quotes andyesBid/noBidthe displayed sell quotes. yesProbabilityis an indicative mark, not an executable quote: the midpoint of a real two-sided Yes quote (), otherwise the last trade when the market has traded (probabilitySource: bid_ask_midpointlast_trade), otherwisenull. A never-traded market's 0/1 placeholder quotes are kept as displayed but never turned into a 0% or 100% probability.noProbabilityis1 - yesProbability.eventTitleis the title of the market's event (for example the game or the date of a price ladder) andquestionthe market's own title. Titles are filled for the first 100 events of a run, in output order; markets beyond that, or whose event can't be read, haveeventTitle: null.- Values Kalshi doesn't publish (for example
liquidity) arenull, never guessed.
The run summary (key-value store OUTPUT) reports coverage counters
(including how many combo markets were left out and how many records got an
event title), the digest result and any warnings.
Output example
A real record from a run filtered to the NBA game series (KXNBAGAME),
collected 2026-11-08, with eventTitle as Kalshi publishes it for this
event:
{"recordKey":"kalshi:market:KXNBAGAME-26NOV11OKCPOR-POR","source":"kalshi","kind":"market","collectedAt":"2026-11-08T22:12:41.348692+00:00","sourceUrl":"https://kalshi.com/markets/KXNBAGAME-26NOV11OKCPOR-POR","ticker":"KXNBAGAME-26NOV11OKCPOR-POR","eventTicker":"KXNBAGAME-26NOV11OKCPOR","eventTitle":"Oklahoma City vs Portland","question":"Portland wins","status":"active","active":true,"closed":false,"openTime":"2026-11-08T03:06:34.769286Z","closeTime":"2026-11-14T03:00:00Z","createdTime":"2026-11-08T03:02:08.069006Z","endDate":"2026-11-14T03:00:00Z","lastPrice":0.53,"yesBid":0.47,"yesAsk":0.54,"noBid":0.46,"noAsk":0.53,"yesProbability":0.505,"noProbability":0.495,"probabilitySource":"bid_ask_midpoint","outcomes":[{"side":"yes","outcome":"Yes — Portland","price":0.53,"bid":0.47,"ask":0.54},{"side":"no","outcome":"No — Portland","price":null,"bid":0.46,"ask":0.53}],"volume":57.82,"volume24h":57.82,"liquidity":null,"openInterest":57.82,"crossVenue":null}
Pricing
- $0.0004 per market record ($0.40 per 1,000 markets).
- $0.00005 per run start. The run-start event is charged per GB of memory; the default 512 MB run is one start event.
Worked cost: the default 200-market board costs about $0.08; the maximum 2,000-market run about $0.80. Runs that match no markets add no record charge.
Scheduling and monitoring
- Schedule a series-scoped run (for example every 15 minutes or every hour)
and key your history on
recordKeypluscollectedAtto chart a market's prices over time. - Use
lookbackHoursto watch for newly listed markets in a series: a short window on a frequent schedule returns only markets created recently.
FAQ
How fresh is the data? Each run reads the live Kalshi board at run time; nothing is cached between runs.
How many markets can I collect? Up to 2,000 per run (maxMarkets) across
up to 30 pages (maxPages). Raise pageSize to read more per page.
Can I get settled results? Yes: set status to settled or closed
together with a seriesTicker.
Does it include order-book depth or trade history? No. It returns the displayed best bid/ask, last price and volume per market.
Export formats? JSON, CSV, Excel, XML or RSS from the dataset, or read it through the Apify API in your own pipeline.
Limits
- Public market data only; no trading, account data or fills.
- No historical price candles; build history by scheduling runs.
- The all-markets board mixes every category; filter by series or event prefix for a focused board.
- Event titles are filled for up to 100 events per run.
For support, contact Apify support and include the Actor run ID.