Kalshi Sports Markets
Pricing
from $0.40 / 1,000 market records
Kalshi Sports Markets
Track live Kalshi sports markets in one run: game lines, spreads, totals and prices, with the event, league, market type, line, yes/no prices, volume and liquidity per record. Source identifiers are preserved for cross-book comparison, and every run returns a fresh full-board snapshot.
Pricing
from $0.40 / 1,000 market records
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Features
Share
Collect live Kalshi sports markets in one run: game winners, spreads and totals for the NFL, NBA, NHL, MLB, college football and basketball, the Premier League and more, with the fixture (participants, kickoff, league), market type and line, yes/no bids and asks, an indicative probability, volume and liquidity, one record per market. Source identifiers are kept for cross-book comparison. Built for traders, sports-data 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 betting or financial advice.
Use cases
- Odds boards: a fresh snapshot of every open NBA or NFL game market with kickoff times and indicative probabilities, refreshed on a schedule.
- Line movement: store snapshots and chart how a game's midpoint and volume move toward kickoff.
- Cross-book comparison: join Kalshi markets with other sportsbooks or
prediction markets on participants, kickoff and the shared
canonicalenvelope. - Models and bots: feed quotes, lines and volume into your own pricing or alerting logic.
Quick start
- Open the Actor and click Start. The prefilled form collects open markets for the default sports scope (Premier League and NBA games).
- Read the rows in the Output tab, or export them as JSON, CSV or Excel.
For one league, list its series:
{"seriesTickers": ["KXNBAGAME"], "maxResults": 250}
An empty input ({}) also uses the default scope (KXEPLGAME,
KXNBAGAME), up to 500 markets. It never falls back to Kalshi's whole
exchange board, and it fails clearly if neither default series is available.
To list the sports series you can collect, run discovery first:
{"mode": "discover"}
Input
| Name | Type | Default | What it does |
|---|---|---|---|
mode | string | markets | markets collects market records; discover lists valid sports series tickers. |
seriesTickers | array | [] | Kalshi series to collect (up to 100), for example KXNBAGAME or KXNFLSPREAD. Empty uses the default scope. |
eventTicker | string | empty | One exact fixture, for example KXEPLGAME-26SEP06EVEMUN. |
statusFilter | string | open | open, unopened, closed, final, settled or all. |
minCloseTs / maxCloseTs | integer | unset | Optional Unix-seconds bounds on market close time. |
pageSize | integer | 200 | Markets requested per page (1–1,000). |
maxResults | integer | 500 | Maximum market records per run (1–5,000), counted after filters and de-duplication. |
includeEventContext | boolean | true | Add the parent event title, participants, league, kickoff and sport. |
includeOrderbook | boolean | false | Add top-of-book bids per market (one extra request per market). |
includeRaw | boolean | false | Embed the original Kalshi market object, for debugging. |
requestDelaySecs | number | 0.25 | Pause between requests (0–10 seconds). |
A misspelt input field stops the run with an error that names it.
Output
One dataset record per market with the market (ticker, title, status,
marketType, strikes, yesSubTitle/noSubTitle), the fixture
(eventTicker, eventTitle, participants, startTime, sport,
leagueLabel), the series, quotes (lastPrice, yesBid, yesAsk, noBid,
noAsk), yesProbability/noProbability/probabilitySource, volume,
liquidity, orderbook, settlement semantics and the shared canonical
sports envelope. Discovery runs return one row per series (kind: "series").
How to read the fields:
- Prices are in dollars per $1 contract, excluding fees.
yesAsk/noAskare the displayed buy quotes,yesBid/noBidthe displayed sell quotes.lastPriceis a past trade and may be zero when no trade exists. yesProbabilityis an indicative mark, not an executable quote: the midpoint of a real two-sided quote (bid_ask_midpoint), otherwise the last trade when the market has traded (last_trade), otherwisenull. An untraded zero never becomes a 0% or 100% forecast.noProbabilityis the complement. Canonical outcomes add decimal odds from the same probabilities.participantsare the two names from the event title, in listing order (not a home/away claim).startTimeis the published kickoff (startTimeSource: "milestone.start_date") ornull.occurrenceTimeis kept as published and is often the expected game end, not kickoff.- Market types: a game-winner market is a binary on one team: "No"
includes every other result (including a draw where one is possible), so it
is not relabelled as the other team's win, and the
canonicalfamily staysunsupported. Spreads and totals map to canonical lines only when the participant, direction, period and settlement rules support comparison; the reasons are insemantics. - Multi-event combo (parlay) markets are left out and don't count toward
maxResults. Values Kalshi doesn't publish (for exampleliquidity) arenull.
Output example
Selected fields of a real NBA game market collected 2026-11-08 (full records
also carry semantics, canonical, strikes, orderbook and more):
{"recordKey":"kalshi:KXNBAGAME-26NOV08LALDET-DET","source":"kalshi","sourceUrl":"https://kalshi.com/markets/KXNBAGAME-26NOV08LALDET-DET","ticker":"KXNBAGAME-26NOV08LALDET-DET","status":"active","eventTicker":"KXNBAGAME-26NOV08LALDET","eventTitle":"Los Angeles L vs Detroit","eventSubTitle":"LAL vs DET (Nov 8)","participants":["Los Angeles L","Detroit"],"startTime":"2026-11-08T23:00:00+00:00","startTimeSource":"milestone.start_date","sport":"basketball","seriesTicker":"KXNBAGAME","leagueLabel":"NBA","marketType":"moneyline","title":"Detroit wins","yesSubTitle":"Detroit","occurrenceTime":"2026-11-09T02:00:00Z","closeTime":"2026-11-10T23:00:00Z","lastPrice":0.7,"yesBid":0.69,"yesAsk":0.7,"noBid":0.3,"noAsk":0.31,"volume":511518.72,"yesProbability":0.695,"noProbability":0.305,"probabilitySource":"bid_ask_midpoint","outcomeYes":"Yes — Detroit","outcomeNo":"No — Detroit","collectedAt":"2026-11-08T21:04:04.535920+00:00"}
Pricing
- $0.0004 per dataset record ($0.40 per 1,000 markets); discovery rows are records too.
- $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: a 250-market NBA run costs about $0.10; the default 500-market cap about $0.20. Runs that match no markets add no record charge.
Scheduling and monitoring
- Schedule a league-scoped run (for example every 15 minutes on game days)
and key your history on
recordKeypluscollectedAtto track line and probability movement. - Use
minCloseTs/maxCloseTsto keep a run to games closing in the next day or week.
FAQ
How fresh is the data? Each run reads the live Kalshi board at run time; nothing is cached between runs.
Which leagues are available? Public sports series checked on 2026-11-08:
KXNBAGAME, KXNFLGAME, KXNHLGAME, KXMLBGAME, KXNCAAFGAME,
KXNCAAMBGAME, KXEPLGAME, KXNBASPREAD, KXNBATOTAL, KXNFLSPREAD,
KXNFLTOTAL. Availability follows the season (MLB had no open games on
that date); run discover for the current list.
What if event context is unavailable? The market stays in the dataset;
the missing context is null (or an empty participants list) and the run
lists a warning.
Does it include full order-book depth? No. includeOrderbook adds
top-of-book bids; displayed quotes don't guarantee available size.
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.
- Game-winner markets are single-team binaries, not complete two-way or three-way moneylines.
For support, contact Apify support and include the Actor run ID.