Kalshi Sports Markets Scraper avatar

Kalshi Sports Markets Scraper

Pricing

from $2.00 / 1,000 market rows

Go to Apify Store
Kalshi Sports Markets Scraper

Kalshi Sports Markets Scraper

Kalshi Premier League and sports prediction markets as clean structured rows, with parsed teams, competitions, bet types, kickoff times and settled outcomes.

Pricing

from $2.00 / 1,000 market rows

Rating

0.0

(0)

Developer

George Semaan

George Semaan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Kalshi Sports Markets Scraper: Premier League, Soccer, NFL, NBA Odds & Prediction Markets

$2.00 per 1,000 rows. No API key. No proxies. A default run finishes in seconds.

Pulls Kalshi's sports prediction markets and returns them as flat, spreadsheet-ready rows with the fixture, the subject team, the competition, the bet type and the kickoff time already parsed into their own columns.

Defaults to the English Premier League. Point it at any of Kalshi's 3,600+ sports series and it works the same way: soccer, NFL, NBA, tennis, golf, esports, cricket, MMA.


What you get

One flat row per market. No nested JSON, no reading rules text to work out which club a ticker belongs to.

tickerhome_teamaway_teamteammarket_kindpropositiongame_dateyes_bidyes_askvolume
KXEPLGAME-26AUG29LFCNFO-LFCLiverpoolNottinghamLiverpoolgame_winnerLiverpool2026-08-290.680.69980960.72
KXEPLSPREAD-26AUG29LFCNFO-LFC3LiverpoolNottingham ForestLiverpoolspreadLiverpool wins by more than 2.5 goals2026-08-290.220.2315540.31
KXEPLTOTAL-26AUG29LFCNFO-1LiverpoolNottingham ForesttotalOver 0.5 goals scored2026-08-290.950.9611047.72

Season-long markets have no fixture, so they come back keyed on the club:

tickerteammarket_kindseasonpropositionyes_bidyes_ask
KXEPLRELEGATION-27-ARSArsenalrelegation2026-27Arsenal0.030.06

Coverage

Measured on a live default run:

  • 208 open markets across the core EPL series, in 11 requests and about five seconds.
  • 100% of rows resolve a fixture, a subject team or a competition.
  • Bet types on that run: game winner 78, totals 60, spreads 40, relegation 20, both teams to score 10.

The default covers the five core Premier League series. The full Sports catalogue is 3,613 series, reachable by naming them in seriesFilter: every EPL market type (corners, correct score, goalscorer, assists, half-time lines, top four, champion), plus 1,403 soccer series overall, 537 American football, 527 basketball, 214 baseball, 135 tennis, 114 golf, 107 esports, 70 hockey, 64 motorsport, 56 cricket, 38 MMA.


Join on team_id, not on the club name

Kalshi does not spell a club the same way in every series. In a single live run the same three clubs appeared as:

One series saysAnother says
NottinghamNottingham Forest
NewcastleNewcastle United
CoventryCoventry City

Every row carries team_id, Kalshi's own identifier for the club, which is stable across series and seasons. Join on that and the variants stop mattering.

There is deliberately no derived team_canonical column. Rows are written a series at a time so that an interrupted run keeps its work, which means any "canonical" name learned mid-run is only whatever has been seen so far. Testing showed the same club emitted under two different canonical names inside one run. A join key that is not stable is worse than no join key, so this actor publishes the identifier Kalshi already guarantees instead of inventing one.


Input

Every field is optional.

FieldDefaultWhat it does
modelivelive for open markets and prices, settled for outcomes, both.
seriesFilterthe five core EPL seriesWhich series to fetch. Clear it entirely to fetch every sports series with open markets, which is slow: the catalogue is over 3,600 series.
includeOrderbookfalseAdd resting bid depth, a derived yes-ask and the spread. Batched, so it costs very few extra requests.
includeRecentTradesfalseAdd recent executed trades. Costs one request per market.
historyDays7Settlement lookback window.
incrementalfalseRemember the newest settlement seen and fetch only newer ones next run.
maxResults5000Safety cap on rows per run.
requestsPerSecond2Politeness limit.

Filters

Ask for the slice you want instead of downloading everything and filtering locally. Filters run before rows are written, so a narrower request returns fewer rows and costs less.

FieldWhat it does
teamsKeep only markets involving these clubs, e.g. ["Arsenal", "Liverpool"]. Matches the home side, the away side and the subject team, so a club's away fixtures are included. Case and punctuation insensitive.
competitionsKeep only these competitions, e.g. ["EPL"]. Read from Kalshi's event metadata, not parsed from text.
sportsKeep only these sports, e.g. ["Soccer"].
marketKindsKeep only these bet types, e.g. ["game_winner", "spread"].
seasonMarketsOnlyseason for relegation, champion and top-four style markets; fixture for single matches.
minStrike / maxStrikeStrike window in the market's own unit: goals for a total, goal margin for a spread. A market is kept when any part of its range overlaps the window, so open-ended lines like "over 2.5 goals" are not silently dropped.
dateFrom / dateToKickoff-date window, YYYY-MM-DD.
minVolumeDrop markets that have traded less than this. The most effective single lever for cutting a run down to markets anyone is actually trading.
minOpenInterestDrop markets with fewer open contracts than this.
minProbability / maxProbabilityImplied-probability window, 0 to 1. 0.4 to 0.6 finds near coin-flips; maxProbability: 0.05 finds longshots.
resultsSettled modes only: keep only yes, no or scalar outcomes.
// Every Arsenal market anyone is actually trading
{ "mode": "live", "teams": ["Arsenal"], "minVolume": 100 }
// This weekend's match winners only
{ "mode": "live", "marketKinds": ["game_winner"], "dateFrom": "2026-08-29", "dateTo": "2026-08-31" }
// Season-long markets: relegation, champion, top four
{ "mode": "live", "seasonMarketsOnly": "season" }

Output fields

Identity: ticker, event_ticker, series_ticker, market_title, event_title, series_title, category, status, market_type.

Fixture: home_team, away_team, home_abbr, away_abbr, team_order_source. The order is Kalshi's own listing order; nothing in the payload states which side is at home, and team_order_source records that.

Subject: team, team_side, team_source, team_id, proposition. proposition is Kalshi's own wording for the claim, passed through untouched.

Classification: sport, competition, competition_scope, market_kind, market_kind_source, is_season_market, frequency, tags.

Timing: kickoff_time, game_date, season, open_time, close_time, expiration_time.

Strike: strike_type, floor_strike, cap_strike, floor_inclusive, cap_inclusive, bracket_label.

Prices: yes_bid, yes_ask, no_bid, no_ask, last_price, previous_price, implied_probability_yes, yes_bid_size, yes_ask_size.

Size: volume, volume_24h, open_interest, liquidity, notional_value.

Settlement: result, settlement_value, settlement_ts.

Raw: rules_primary, rules_secondary, passed through untouched.

Every row carries schema_version. Provenance columns (team_source, market_kind_source, team_order_source) let you filter to values read directly from the payload rather than derived.


Notes on accuracy

  • Prices are decimal dollars from 0 to 1, not integer cents. Volumes and sizes can be fractional.
  • market_kind comes from Kalshi's own competition_scope where available. A bet type this actor has not seen before is emitted as a slug of its own name rather than as a blank, so new Kalshi market types are filterable immediately.
  • game_date comes from occurrence_datetime, the scheduled kickoff, not from the market's close time.
  • result can be yes, no or scalar. scalar means a voided or partial settlement.
  • Settled markets can later be disputed or amended. updated_time is included so you can upsert rather than append.

Compliance

This is an unofficial tool and is not affiliated with, endorsed by, or connected to Kalshi. It reads Kalshi's public, unauthenticated market data endpoints, the same ones documented with copy-paste examples at docs.kalshi.com, at a deliberately conservative 2 requests per second. No account, API key or login is used.


Keywords

kalshi scraper, kalshi api, kalshi sports, premier league odds api, EPL odds scraper, english premier league data, soccer prediction markets, football betting odds api, prediction market data, sports betting odds scraper, kalshi nfl, kalshi nba, implied probability api, match winner odds, over under goals data, both teams to score data, relegation odds, sports market data feed