DraftKings Scraper — Sportsbook Odds, Lines & Player Props avatar

DraftKings Scraper — Sportsbook Odds, Lines & Player Props

Pricing

from $0.13 / 1,000 results

Go to Apify Store
DraftKings Scraper — Sportsbook Odds, Lines & Player Props

DraftKings Scraper — Sportsbook Odds, Lines & Player Props

Unofficial DraftKings sportsbook API, no login. Scrape moneylines, spreads, totals, player props, alternate lines and futures for NFL, NBA, MLB, NHL, soccer, tennis, UFC and 270+ leagues: American/decimal/fractional odds, no-vig probability, live scores, price history. JSON, CSV, Excel.

Pricing

from $0.13 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Categories

Share

Not affiliated with, endorsed by or connected to DraftKings. "DraftKings" is a trademark of its owner and is used here only to name the public website this Actor reads. It collects the odds the sportsbook shows to every anonymous visitor: no login, no account, no bets, nothing behind a paywall.

DraftKings Scraper turns the DraftKings sportsbook into a clean, flat odds dataset. One run returns moneylines, point spreads, totals, alternate lines, player props, game props, live in-play prices and futures for 280 leagues in 25 sports (listed on 2026-10-29): NFL, NBA, MLB, NHL, WNBA, college football and basketball, soccer, tennis, UFC and boxing, golf, Formula 1 and NASCAR, cricket, darts, table tennis and more. It is a DraftKings odds API alternative that needs no API key, no login and no browser. Choose sports or leagues, press Start, and download one row per selection with American, decimal and fractional odds, implied and no-vig probability, the line, start time, teams, players and stable ids, as JSON, CSV or Excel.

Use it as a DraftKings player props API, a line-shopping feed, a closing line value (CLV) tracker, an arbitrage and +EV scanner, a line-movement archive, or the data layer of a model, a dashboard or a Discord bot. Every row carries rowId, eventId, marketId and selectionId, so two snapshots join cleanly and show which prices moved. The optional price-history mode adds DraftKings' own first price and price series for each selection. Scrape DraftKings odds once, on a schedule or on demand, then push the dataset to Google Sheets, BigQuery, Postgres, Make, Zapier or n8n.

Table of contents

  1. At a glance
  2. What you get
  3. Who uses this
  4. Quick start
  5. Recipes
  6. Input reference
  7. Data dictionary
  8. Sample output
  9. How the rows are built
  10. Scale and speed
  11. What you pay
  12. Scheduling and line movement
  13. Integrations
  14. Performance tips
  15. Troubleshooting
  16. Honest limits
  17. Comparison with other options
  18. FAQ
  19. Glossary
  20. Legality and responsible use
  21. Changelog
  22. Support

At a glance

SourceThe public JSON the DraftKings sportsbook website loads for any anonymous visitor
AccessNo login, no cookies of yours, no API key, no browser
Coverage25 sports and 280 leagues listed on 2026-10-29, in season or not
MarketsGame lines and alternates, player props, game props (halves, quarters, team props, specials), futures and tournament winners, live in-play
One row isOne selection, one price you could click: a team, Over, Under, Yes, "25+" or a name
PricesAmerican, decimal and fractional odds, implied probability, no-vig fair probability and market hold where the market is a complete book
Line movementOptional: first price and full price series from DraftKings' own price timeline
Biggest proof run20,000 unique rows, 0 duplicates, 27 s, 25 sports, 280 leagues (2026-10-29)
Prefill run100 rows in 2 s
PricePay per result: $0.20 per 1,000 on the Free plan, $0.13 per 1,000 on Gold and above

What you get

Every row is flat and typed: numbers are numbers, times are ISO 8601 in UTC, and a value DraftKings does not give is null, never a placeholder. The 59 columns of a normal run (four more are added when you switch on price history) fall into nine groups, documented one by one in the data dictionary below.

  • Identity: rowId (dk:<eventId>:<marketId>:<selectionId>), sportsbook, scrapedAt.
  • Taxonomy: sport, league, their ids, region, leagueUrl.
  • Event: id, name, eventType (game or outright), page URL, startTime, settlementTime, status, isLive, home and away team with abbreviations and ids.
  • Live (live games only): period, homeScore, awayScore; empty before the start and for tournaments, filled for almost every live game (see the data dictionary).
  • Market: id, name, DraftKings type, betType, marketGroup, category, subcategory, statType, isAlternate, isSuspended, marketHold.
  • Selection: id, label, side, line, milestone, isMainLine.
  • Participants: participant, playerName, playerId, team, opponent, the season average DraftKings prints beside a player.
  • Odds: American (number and text), decimal, fractional, impliedProbability, noVigProbability.
  • Price history (optional): firstOddsAmerican, firstOddsAt, firstImpliedProbability, oddsHistory.

One selection, abridged (a real row from the 2026-10-29 proof run, empty fields left out):

{
"league": "NFL",
"eventName": "CAR Panthers @ GB Packers",
"startTime": "2026-10-30T00:15:00Z",
"marketName": "Spread",
"selection": "CAR Panthers",
"line": 3.5,
"oddsAmericanText": "-108",
"oddsDecimal": 1.9259,
"impliedProbability": 0.5192,
"noVigProbability": 0.4957,
"marketHold": 0.0475,
"isMainLine": true
}

Who uses this

  • Odds-comparison and line-shopping sites read DraftKings prices hourly, join them to other books on team names and start time, and show the best price per side.
  • +EV and arbitrage bettors take noVigProbability and marketHold as the fair-price baseline for their own comparisons.
  • DFS and props modelers line up playerName, statType, line and milestone against projections to find soft numbers.
  • Sports-data journalists pull a week's spreads, totals and moneylines, or a futures board before an award, and cite a dated snapshot.
  • Quant researchers test how well impliedProbability predicts results across sports, bet types and lines.
  • CLV trackers snapshot at posting and near the start, compare by rowId, and fill the gaps with oddsHistory.
  • Trading analysts compare marketHold by sport, league and bet type to see where the margin is thick.
  • Newsletter and content writers publish a weekly lines table or a "who is favored" chart from a CSV.
  • Fantasy tool builders turn milestone ladders ("10+", "15+", "20+") into a distribution of stat lines.
  • ML dataset builders collect timestamped pre-game prices with stable ids as features and labels.
  • Odds dashboards feed Google Sheets, Looker Studio or a warehouse on a schedule.
  • Discord and Telegram bot makers diff two runs and post an alert when a line moves past a threshold.
  • Academics study the favorite-longshot bias, the margin by market type and the price of props.
  • Integrity and risk analysts watch thin markets, such as lower-league soccer and table tennis, for unusual moves.

Quick start

In the Console

  1. Open the Actor and leave Sports and Leagues empty for everything, or type names such as basketball, NFL or Premier League.
  2. Under Market groups tick what you need: game lines, player props, game props, futures. The default is all four.
  3. Set Pre-match or live, an optional date window and Max results. The prefilled input reads 100 rows of game lines across all sports in about 2 seconds.
  4. Press Start. Rows appear in the Dataset tab while the run is going; the status line shows rows, events and requests.
  5. Export from the Dataset tab as JSON, CSV or Excel, or read the dataset through the API.

Through the API

curl -X POST "https://api.apify.com/v2/acts/logiover~draftkings-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"leagues": ["NBA"], "marketGroups": ["gameLines"], "maxItems": 100}'

The synchronous endpoint answers within 300 seconds, enough for narrow inputs. For big pulls start a normal run (POST /v2/acts/logiover~draftkings-scraper/runs), wait for it and read GET /v2/datasets/{datasetId}/items?format=csv&clean=true. Node.js and Python samples are in the integrations chapter.

Recipes

Every input below is valid as written; paste it into the input editor (switch to JSON view) or send it as the body of an API call. Names are not case sensitive. Leave a field out to use its default.

1. This week's NFL game lines. Spread, moneyline, total and alternates for the next seven days.

{"leagues": ["NFL"], "marketGroups": ["gameLines"], "dateFrom": "today", "dateTo": "+7d", "maxItems": 5000}

2. One player's points props. Every points over/under and milestone for one NBA player.

{"leagues": ["NBA"], "marketGroups": ["playerProps"], "players": ["Donovan Mitchell"], "marketFilter": ["points"], "maxItems": 500}

3. All live tennis. Every tennis match in play, with score and prices.

{"sports": ["Tennis"], "status": "live", "maxItems": 5000}

4. Golf majors outrights. Winner and finishing-position markets for the Masters, PGA Championship and US Open (ids from the list above).

{"leagues": ["92694", "79720", "42731"], "marketGroups": ["futures"], "maxItems": 5000}

5. One game, whole board. Lines, alternates, props and quarters of one game; take the id from the eventId column of any run.

{"leagues": ["NFL"], "eventIds": ["34118182"], "marketGroups": ["gameLines", "playerProps", "gameProps"], "maxItems": 0}

6. Big-five soccer, match lines. Three-way match prices for the top five European leagues.

{"leagues": ["English Premier League", "Spain - La Liga", "Italy - Serie A", "Germany - Bundesliga", "France - Ligue 1"], "marketGroups": ["gameLines"], "maxItems": 3000}

7. MLB strikeout props, without ladders. Strikeout over/unders and milestones, alternates and first-inning markets dropped.

{"leagues": ["MLB"], "marketGroups": ["playerProps"], "marketFilter": ["strikeouts"], "excludeMarkets": ["alternate", "1st inning"], "maxItems": 2000}

8. Opening-to-current movement. Game lines with the first price DraftKings keeps, to compute movement.

{"leagues": ["NFL"], "marketGroups": ["gameLines"], "oddsHistory": "first", "maxItems": 1000}

9. Price series of the main markets. A month of 6-hourly price points for NBA game lines.

{"leagues": ["NBA"], "marketGroups": ["gameLines"], "oddsHistory": "series", "oddsHistoryWindow": "1M", "maxItems": 500}

10. Closing-line snapshot. Schedule it every 15 minutes on game days; the last snapshot before startTime is the closing line.

{"sports": ["Football", "Basketball", "Hockey"], "marketGroups": ["gameLines"], "status": "prematch", "dateFrom": "today", "dateTo": "today", "maxItems": 20000}

11. A 10,000-row sample of everything. All sports and market groups, one event from every league in turn.

{"maxItems": 10000}

12. Futures board. Champion, MVP and award markets for the NFL and NBA.

{"leagues": ["NFL", "NBA"], "marketGroups": ["futures"], "marketFilter": ["winner", "mvp"], "maxItems": 5000}

13. One team's games. Lines and player props for one team's next games.

{"leagues": ["NFL"], "teams": ["Chiefs"], "marketGroups": ["gameLines", "playerProps"], "maxItems": 5000}

14. Anytime touchdown scorers. Touchdown scorer markets of the coming NFL games.

{"leagues": ["NFL"], "marketGroups": ["playerProps"], "marketFilter": ["anytime"], "dateTo": "+7d", "maxItems": 5000}

Input reference

All fields are optional: an empty input {} reads every sport, every league and all four market groups, up to Max results.

FieldTypeDefaultPrefillMeaning
sportslist—[]Sports. Sport names or ids (basketball, soccer, mma ...). Empty: every sport. Ignored when leagues is set.
leagueslist—[]Leagues. League names or ids (NBA, Premier League, 42648). Exact name first, then names containing your words. Empty: use sports.
marketGroupslistall four["gameLines"]Market groups. gameLines, playerProps, gameProps (halves, quarters, team props, specials), futures. Empty: all four.
statuschoice"all"—Pre-match or live. all, prematch (not started) or live (in play).
dateFromtext——Starts on or after. First start day: YYYY-MM-DD, today, tomorrow or +3d. Futures ignore it.
dateTotext——Starts on or before. Last start day, same formats.
teamslist—[]Teams or players (event filter). Keep events with a participant containing one of these words (Lakers, NE).
playerslist—[]Player names (prop filter). Keep selections of players whose name contains one of these words; team selections are dropped.
marketFilterlist—[]Only these markets. Keep markets whose name, type, tab or section contains one of these words (passing yards).
excludeMarketslist—[]Skip these markets. Drop markets containing one of these words (race to, 1st quarter).
eventIdslist—[]Specific events. Only these events (eventId of any run); add their leagues to skip straight to them.
oddsHistorychoice"none"—Price history. none, first (earliest price DraftKings keeps) or series (points of the window). About one request per five rows.
oddsHistoryWindowchoice"1W"—Series window. Window of series: 1D 5-minute, 1W hourly, 1M 6-hourly or ALL daily steps.
maxItemsinteger10000100Max results. Stop after this many rows; 0 is no limit. The run also stops at its Maximum cost per run.
proxyConfigurationobject{"useApifyProxy": false}—Proxy (optional). Normally not needed. Your own proxy URLs, if any, serve as the rescue route.

How names are matched. A league name matches a league's exact name first (NBA, UFC, Italy - Serie A), then any league whose name contains your words (premier league); case, accents and punctuation are ignored. A number is a league id (the leagueId column of any run). A name that matches nothing is noted in SUMMARY; if nothing matches at all, the run stops with an input error instead of returning an empty dataset.

Common league ids as read from the sportsbook's league list on 2026-10-29: NFL 88808, NBA 42648, MLB 84240, NHL 42133, WNBA 94682, College Football 87637, College Basketball (M) 92483, UFC 9034, Formula 1 212334, NASCAR Cup Series 87556, Italy - Serie A 40030, AFL 79494, The Masters (golf) 92694, PGA Championship 79720, US Open (golf) 42731.

Dates. A game matches dateFrom and dateTo if its start date falls inside the window in UTC or in US Eastern time, the sportsbook's own day: a game at 00:10 UTC on the 30th answers to both the 29th and the 30th. Futures have no kick-off and ignore the window.

Filters combine with AND. marketFilter and excludeMarkets match a market's name, DraftKings type, tab and section, lower-cased without punctuation. DraftKings abbreviates stat names differently by sport ("Pass Yards", "Rec Yards", "Receptions O/U"), so read marketType and subcategory in a small run first and filter on those words.

Max results. The default of 10,000 is a guard rail: one NFL game with every prop is thousands of selections. The Actor reads the game lines of every chosen league first, then goes deeper, one event from each league in turn with the soonest games first, so a capped run has looked at every league. The run also stops at its Maximum cost per run (see "What you pay").

Data dictionary

Columns are listed in dataset order. Filled % is the measured share of rows with a value in the 20,000-row proof dataset of 2026-10-29; a column that belongs to one kind of row (live scores, player fields, outright settlement time) is empty for the others, so its figure looks low. The price-history columns exist only when you switch that option on.

Live-only columns. period, homeScore and awayScore describe a game in play and are null on every other row. On 2026-10-29, 51 of the 53 live games in the 20,000-row proof carried a period and 51 a numeric score; the tournament in progress carried neither, and pre-match rows never have them. The table shows 0.6 %, 0.5 % and 0.5 % only because 340 of the 20,000 rows (1.7 %) were live and 224 of those belonged to the tournament.

ColumnTypeFilled %MeaningExample
Identity
rowIdtext100Stable unique key of the row: dk:dk:34118182:2_846…
sportsbooktext100Always "DraftKings".DraftKings
scrapedAttext100UTC time the row was read (ISO 8601).2026-10-29T09:47:…
Taxonomy
sporttext100Sport as DraftKings lists it (Basketball, Soccer, Tennis ...).Football
sportIdtext100DraftKings sport (display group) id.3
leaguetext100League or competition (NBA, England - Premier League, ATP - Basel ...).NFL
leagueIdtext100DraftKings league (event group) id, usable in the "leagues" input.88808
regiontext100Country or region of the league when DraftKings states one.United States
leagueUrltext100Public page of the league on the sportsbook website.https://sportsboo…
Event
eventIdtext100DraftKings event id: digits for a game, a GUID for an outright.34118182
eventNametext100Event title, e.g. "CLE Cavaliers @ ATL Hawks" or "NBA 2026/27".CAR Panthers @ GB…
eventTypetext100game for a match or fight, outright for futures and tournament winners.game
eventUrltext100Public page of the event on the sportsbook website.https://sportsboo…
startTimetext100Scheduled start in UTC; for outrights the date DraftKings schedules the market for.2026-10-30T00:15:00Z
settlementTimetext13.5When an outright is expected to settle, if DraftKings states it.2027-10-31T00:10:00Z
eventStatustext100NOT_STARTED or STARTED.NOT_STARTED
isLivebool100true while the event is in play.false
homeTeamtext86.5Home participant of a two-sided event.GB Packers
awayTeamtext86.5Away participant of a two-sided event.CAR Panthers
homeTeamAbbrtext48.9Short code of the home team (ATL, NE, ...) when DraftKings gives one.GB
awayTeamAbbrtext48.6Short code of the away team when DraftKings gives one.CAR
homeTeamIdtext69.2DraftKings id of the home participant.18357
awayTeamIdtext69.8DraftKings id of the away participant.18484
Live
periodtext0.6Live games only: current period as DraftKings reports it (1st Half, 1st Quarter, 2nd set, 1st Inning ...). Empty before the start and for tournaments.4th
homeScorenumber0.5Live games only: main scoreboard value of the home side (goals, points, runs, current tennis game points) when it is a plain number.1
awayScorenumber0.5Live games only: main scoreboard value of the away side, same rules as homeScore.2
Market
marketIdtext100DraftKings market id.2_84695615
marketNametext100Market title ("Spread", "Donovan Mitchell Points", "Finals Winner").Spread
marketTypetext100DraftKings market type ("Moneyline", "Points O/U", "Points Milestones").Spread
betTypetext100moneyline, spread, total, prop or outright.spread
marketGrouptext100gameLines, playerProps, gameProps or futures. A heuristic grouping; category is exact.gameLines
categorytext100Tab of the event page the market sits under (Game Lines, Player Points ...).Game Lines
categoryIdtext100DraftKings category id.492
subcategorytext100The section inside the tab (Alternate Spread, Points O/U, ...).Game
subcategoryIdtext100DraftKings subcategory id.4518
statTypetext38.3Stat of a player prop without the line style (Points, Pass Yards, Points - 1st Quarter ...); a period the market names stays in it.QB Fantasy Points
isAlternatebool100true when the market is an alternate-line ladder.false
isSuspendedbool100true when DraftKings flags the market as suspended.false
marketHoldnumber32.1Margin of a complete two- or three-way market: sum of implied probabilities minus 1.0.0475
Selection
selectionIdtext100DraftKings selection (outcome) id.0HC84695615P350_3
selectiontext100Outcome label as on the betslip: team, Over, Under, Yes, "10+", a name.CAR Panthers
sidetext40.8over, under, yes, no, home, away, draw, odd or even when the outcome is one of those.away
linenumber15.7Spread, total or prop line (points) of the selection.3.5
milestonenumber23.1Threshold of a "10+" style milestone selection.1
isMainLinebool100true when DraftKings flags it as the main line of a market that is not an alternate.true
Participants
participanttext71.9Team or player the selection is about.CAR Panthers
participantTypetext71.9Team or Player as DraftKings types it.Team
playerNametext31.1Player of a player-prop selection.Jordan Love
playerIdtext29.8DraftKings player id.470097
teamtext58.4Team of the player or the team itself.CAR Panthers
opponenttext58.4The other side of the event.GB Packers
playerAveragenumber11.5Season average DraftKings prints next to the player for this stat.1.8
playerAverageLabeltext11.5Label of that average (PPG, RPG, ...).FGM/G
Odds
oddsAmericannumber100American odds as a signed integer (-110, 105).-108
oddsAmericanTexttext100American odds as text with sign (+105, -110).-108
oddsDecimalnumber100Decimal odds to 4 decimals from DraftKings true price.1.9259
oddsFractionaltext100Fractional odds as DraftKings prints them (10/11).25/27
impliedProbabilitynumber1001 / decimal odds, 0-1, 4 decimals (includes the margin).0.5192
noVigProbabilitynumber32.1Implied probability with the margin removed (complete two- and three-way books only).0.4957
Price history (optional)
firstOddsAmericannumberhistory onlyEarliest American price in DraftKings price history (oddsHistory = first).—
firstOddsAttexthistory onlyTime of that earliest price point (UTC).—
firstImpliedProbabilitynumberhistory onlyVig-free probability at that earliest price point.—
oddsHistorylisthistory onlyPrice series [{t, oddsAmerican, probability}], oldest first (series).—

Sample output

Six real rows from the proof run of 2026-10-29, unmasked.

Each display is cut to its main fields to save space; every row of the dataset has all 59 columns, with null where DraftKings gives nothing.

Game line: a spread selection

{
"rowId": "dk:34118182:2_84695615:0HC84695615P350_3",
"league": "NFL",
"eventName": "CAR Panthers @ GB Packers",
"startTime": "2026-10-30T00:15:00Z",
"marketName": "Spread",
"betType": "spread",
"marketGroup": "gameLines",
"category": "Game Lines",
"subcategory": "Game",
"selection": "CAR Panthers",
"side": "away",
"line": 3.5,
"isMainLine": true,
"team": "CAR Panthers",
"opponent": "GB Packers",
"oddsAmerican": -108,
"oddsAmericanText": "-108",
"oddsDecimal": 1.9259,
"oddsFractional": "25/27",
"impliedProbability": 0.5192,
"noVigProbability": 0.4957,
"marketHold": 0.0475
}

Game line: a moneyline or total selection

{
"rowId": "dk:34118052:1_84695485:0ML84695485_3",
"league": "NFL",
"eventName": "CLE Browns @ PIT Steelers",
"startTime": "2026-11-01T18:00:00Z",
"marketName": "Moneyline",
"betType": "moneyline",
"marketGroup": "gameLines",
"category": "Game Lines",
"subcategory": "Game",
"selection": "CLE Browns",
"side": "away",
"isMainLine": true,
"team": "CLE Browns",
"opponent": "PIT Steelers",
"oddsAmerican": 154,
"oddsAmericanText": "+154",
"oddsDecimal": 2.54,
"oddsFractional": "77/50",
"impliedProbability": 0.3937,
"noVigProbability": 0.3775,
"marketHold": 0.0428
}

Player prop: over/under with a line

{
"rowId": "dk:34118182:383637599:0QA383637599#2340201681_13L88808Q1100947Q20",
"league": "NFL",
"eventName": "CAR Panthers @ GB Packers",
"startTime": "2026-10-30T00:15:00Z",
"marketName": "Jordan Love QB Fantasy Points O/U",
"marketGroup": "playerProps",
"category": "Player Specials",
"subcategory": "QB Fantasy Points O/U",
"statType": "QB Fantasy Points",
"selection": "Over",
"side": "over",
"line": 18,
"isMainLine": true,
"playerName": "Jordan Love",
"team": "GB Packers",
"opponent": "CAR Panthers",
"oddsAmerican": -110,
"oddsAmericanText": "-110",
"oddsDecimal": 1.9091,
"oddsFractional": "10/11",
"impliedProbability": 0.5238,
"noVigProbability": 0.4899,
"marketHold": 0.0693
}

Player prop: milestone ("to reach at least")

{
"rowId": "dk:34118182:382674930:0QA382674930#2336119914_13L88808Q1-1431945550Q20",
"league": "NFL",
"eventName": "CAR Panthers @ GB Packers",
"startTime": "2026-10-30T00:15:00Z",
"marketName": "Ryan Fitzgerald Field Goals Made",
"marketGroup": "playerProps",
"category": "Special Teams Props",
"subcategory": "FG Made",
"statType": "Field Goals Made",
"selection": "1+",
"milestone": 1,
"isMainLine": false,
"playerName": "Ryan Fitzgerald",
"team": "CAR Panthers",
"opponent": "GB Packers",
"playerAverage": 1.8,
"playerAverageLabel": "FGM/G",
"oddsAmerican": -561,
"oddsAmericanText": "-561",
"oddsDecimal": 1.1783,
"oddsFractional": "100/561",
"impliedProbability": 0.8487
}

Future (outright event)

{
"rowId": "dk:ccab4ee9-e254-4800-069b-08df2e84886a:381870388:0QA381870388#2332370320_4L84240Q171196Q2-1",
"league": "MLB",
"eventName": "World Series 2027",
"eventType": "outright",
"startTime": "2027-10-31T00:00:00Z",
"settlementTime": "2027-10-31T00:10:00Z",
"marketName": "World Series 2027 - Winner",
"betType": "outright",
"marketGroup": "futures",
"category": "Champion",
"subcategory": "Champion",
"selection": "LA Dodgers",
"participant": "LA Dodgers",
"oddsAmerican": 310,
"oddsAmericanText": "+310",
"oddsDecimal": 4.1,
"oddsFractional": "31/10",
"impliedProbability": 0.2439
}

Live row with score

{
"rowId": "dk:34920815:1_86983582:0ML86983582_1",
"league": "TT Elite Series",
"eventName": "Wojciech Iwasyszyn vs Kamil Klocek",
"eventStatus": "STARTED",
"isLive": true,
"period": "4th",
"homeTeam": "Wojciech Iwasyszyn",
"homeScore": 1,
"awayTeam": "Kamil Klocek",
"awayScore": 2,
"marketName": "Moneyline",
"selection": "Wojciech Iwasyszyn",
"side": "home",
"oddsAmerican": 162,
"oddsAmericanText": "+162",
"oddsDecimal": 2.62,
"oddsFractional": "81/50",
"impliedProbability": 0.3817,
"noVigProbability": 0.3548,
"marketHold": 0.0759
}

The first line of a CSV export, which is the column order of the dataset:

rowId,sportsbook,scrapedAt,sport,sportId,league,leagueId,region,leagueUrl,eventId,eventName,eventType,eventUrl,startTime,settlementTime,eventStatus,isLive,homeTeam,awayTeam,homeTeamAbbr,awayTeamAbbr,homeTeamId,awayTeamId,period,homeScore,awayScore,marketId,marketName,marketType,betType,marketGroup,category,categoryId,subcategory,subcategoryId,statType,isAlternate,isSuspended,marketHold,selectionId,selection,side,line,milestone,isMainLine,participant,participantType,playerName,playerId,team,opponent,playerAverage,playerAverageLabel,oddsAmerican,oddsAmericanText,oddsDecimal,oddsFractional,impliedProbability,noVigProbability,firstOddsAmerican,firstOddsAt,firstImpliedProbability,oddsHistory

In a CSV the optional oddsHistory column holds a JSON text; use unwind=oddsHistory in the dataset API call for one line per price point.

How the rows are built

The sportsbook does not serve a ready-made table. Each page is drawn from a small relational answer: sports, leagues, events, markets and selections, plus the categories and subcategories that sort the markets into the tabs of an event page. The Actor reads those answers and flattens them, so one selection becomes one row with its league, event and market copied alongside.

Reading order. The list of sports and leagues; then one call per league (its events, its tabs and every event's game-lines market, so the first rows appear within seconds); then, per event, one call per tab (alternates, each player tab, halves, quarters, team props, specials), each returning every market of that tab; then the futures tabs of each league; last, the optional price history.

rowId. It is dk: + eventId + : + marketId + : + selectionId. DraftKings keeps these ids for as long as a market exists, so the same price in two runs has the same rowId. A run writes each rowId once, even when a price shows up in two tabs.

Games and outrights. Games and fights have numeric event ids and eventType "game". Season-long and tournament markets live in outright events with GUID ids ("NBA 2026/27", "Mexico Open 2026"): their rows have eventType "outright", betType "outright", marketGroup "futures" and, when stated, a settlementTime. Their startTime is the date DraftKings schedules the market for.

Market groups. marketGroup groups DraftKings' own tabs for convenience. gameLines is the primary tab of a game (Game Lines, Match Lines, Fight Lines or Tournament Lines), alternates included. playerProps is every market about a player. gameProps is every other market of a game. futures is every outright event. Use category and subcategory when you need DraftKings' exact tabs.

Over/Under, milestone, yes/no. An over/under selection has selection "Over" or "Under", side over or under, and the number in line (226.5). A milestone selection ("to score 25+") has selection "25+" and milestone 25, with no line and no side. A yes/no market has side yes or no. Team selections have side home or away, team and opponent; in a spread the line belongs to the selection, so the two sides carry opposite signs. isAlternate marks alternate ladders; isMainLine is true for the line DraftKings features in a market that is not an alternate, so isMainLine = true keeps one line per market. Player rows also carry playerName, playerId, the player's team and opponent, and the season average DraftKings prints beside the name ("PPG 24.8").

Odds and probabilities. DraftKings prints American odds with a real minus sign (U+2212, "−110"). The Actor turns it into a plain hyphen, so oddsAmericanText is "-110" and oddsAmerican the integer -110. oddsDecimal comes from DraftKings' unrounded price (eight decimals) cut to four, so it is more exact than the two-decimal number on the screen.

  • Implied probability: impliedProbability = 1 / decimal odds. At 1.9091 that is 0.5238.
  • American to decimal: +105 gives 1 + 105/100 = 2.05; -110 gives 1 + 100/110 = 1.9091.
  • Hold and fair probability, for a complete book only (two selections of the same absolute line, or three with a draw): marketHold = sum of the implied probabilities - 1; noVigProbability = implied probability / that sum. At -110 / -110 each side is 0.5238, the sum 1.0476, the hold 0.0476 and the fair probability 0.5. A spread of +1.5 / -1.5 counts as one book. Milestone ladders, alternate ladders and one-sided props are not complete books, so both fields stay null.

Live events. An event is live when DraftKings reports it as started: isLive true. period and the score come from DraftKings' scoreboard when it sends them; DraftKings' event answers carry no clock time, so there is no game-clock column. A tournament in progress (a golf event, a race weekend) is started too, so it has isLive true, but it has neither a period nor a score. homeScore and awayScore are filled only when the score is a plain number (a tennis game score such as 15 or Ad is not); DraftKings' "first" and "second" side are mapped to home and away by the participants' sort order. isSuspended is true on the rows of a market DraftKings flags as suspended; DraftKings keeps showing the last price on such a market, so filter on isSuspended when you need prices that can be bet.

Scale and speed

Measured on the Apify platform on 2026-10-29 with the default 1 GB of memory.

RunInputRowsTime
Prefill{"marketGroups": ["gameLines"], "maxItems": 100}1002 s, first rows after 1.1 s, 3 requests
About 1,000 rows{"leagues": ["NBA"], "maxItems": 1000}1,0003.6 s, 68 requests
Whole NBA boardNBA, all groups, no limit10,013 unique4.5 s (8 games and 8 outright events; props were posted for 3 of the 8 games)
Proof run{"maxItems": 20000}20,000 unique27 s

The proof run wrote 20,000 unique rowIds with 0 duplicates, spread over 25 sports, 280 leagues and 1,536 events: 5,363 game-line rows, 7,664 player-prop rows, 4,264 game-prop rows and 2,709 futures rows, 340 of them from events in play. It took 378 requests and 16.3 MB of responses, with 0 refused requests and 0 MB over the residential rescue, about 749 rows per second. One NFL game (CAR Panthers @ GB Packers) with every tab came to 4,093 selections. A read-through of NFL and College Football with a player filter that matches nothing (no row written or charged) scanned 119,161 selections of 105 events in 26 s (819 requests, 62.0 MB, 1 refused request, 0.0 MB over the residential rescue, 226 MB of memory at the peak), so a 100,000-row run takes a few minutes. Price history costs requests rather than results: with oddsHistory: "first" a 5,000-row run took 75 s and 949 price calls; with "series" over 1M a 200-row run took 3.4 s and 35 calls.

About the proof run. It was written before five never-filled columns were dropped from the output and before statType began to keep the period a prop names (Points - 1st Quarter); otherwise its rows are today's rows. A prefill, a live run and a capped run were repeated on the final build.

Why the connection looks the way it does. On 2026-10-29 the sportsbook's edge answered the platform's own connection in 0.1 to 0.4 seconds per request and refused every request that came through Apify's datacenter proxy group with an "Access Denied" page. Residential proxies in the US were answered too, but they are slower and billed by the gigabyte. So the Actor reads directly and keeps a capped US residential connection only as a rescue.

Pace. The edge refuses bursts. With 16 requests in flight, runs saw 3 to 23 refused requests per roughly 800; with 6 in flight, none in roughly 1,600. The Actor therefore keeps 6 requests in flight, eases off after a refusal and retries directly first; only repeated refusals use the rescue route. Every request is bounded by the time the run has left, so a run ends with what it has instead of hanging.

What you pay

You pay per result, and one result is one dataset row. The price per 1,000 results depends on your Apify plan and was set on 2026-10-29:

ResultsFreeBronzeSilverGold and above
1,000$0.20$0.18$0.15$0.13
10,000$2.00$1.77$1.53$1.30
100,000$20.00$17.67$15.33$13.00

One league's game lines are usually a few dozen to a few hundred rows; a full board with props is thousands.

Maximum cost per run. Every run has a "Maximum cost per run" setting in its run options. The Actor reads it at the start, works out how many results it covers at the current price and never writes past that number. When the budget is spent the run stops cleanly, keeps what it saved and sets a status message such as: Saved 282 rows — this run's maximum cost ($0.05) covers 282 results at the current price. Raise "Maximum cost per run" to collect more.. In a test with the limit set to $0.05, the run SUCCEEDED with 282 rows, exactly the number charged. Together with Max results you know the worst case before you press Start.

Scheduling and line movement

A run is a snapshot of the board at the moment it reads it, not a tick stream. There are two ways to get movement.

Schedule runs. Rows keep their rowId, so two snapshots join on it and the change is a subtraction. Typical cadences:

GoalCadenceInput idea
Opening and closing lineevery 15 minutes on game days; the last run before the start is the closing linestatus: "prematch", dateFrom: "today", dateTo: "today", game lines
Line shoppingevery 15 to 60 minutes inside the last day before the gamesone league, game lines and the props you compare
Live dashboardevery 1 to 2 minutes for a narrow runstatus: "live", one or two leagues
Futures boardonce a daymarketGroups: ["futures"]

Switch on price history. oddsHistory: "first" adds the earliest price DraftKings keeps for each selection; "series" adds the points of the window you choose. DraftKings stores the series in buckets (5 minutes for the last day, hourly for a week, 6-hourly for a month, daily for all history) and each point is the closing price of its bucket, oldest first. The first price is therefore exact to the day, not to the minute, and a selection that did not move has few points. The price service takes at most five selections per call, so history adds roughly one request per five rows: use it on a filtered run, not on a 100,000-row pull.

Integrations

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('logiover/draftkings-scraper').call({
leagues: ['NFL'], marketGroups: ['gameLines'], dateFrom: 'today', dateTo: '+7d',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Python, with a line-movement diff between two runs

from apify_client import ApifyClient
import pandas as pd
actor = ApifyClient("YOUR_APIFY_TOKEN").actor("logiover/draftkings-scraper")
inp = {"leagues": ["NBA"], "marketGroups": ["gameLines"], "maxItems": 2000}
snap = lambda: pd.DataFrame(ApifyClient("YOUR_APIFY_TOKEN").dataset(actor.call(run_input=inp)["defaultDatasetId"]).list_items().items).set_index("rowId")
before = snap()
# ... some time later ...
both = before.join(snap(), lsuffix="_old", rsuffix="_new", how="inner")
both["move"] = both["impliedProbability_new"] - both["impliedProbability_old"]
print(both.loc[both["move"].abs() > 0.02, ["eventName_new", "selection_new", "line_new", "move"]])

Dataset URLs. https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&clean=true&fields=league,eventName,startTime,marketName,selection,line,oddsAmerican returns a trimmed CSV; format=xlsx returns Excel; unwind=oddsHistory gives one line per price point.

  • Google Sheets: put the CSV URL in =IMPORTDATA("..."), or use the Apify integration to append each run's dataset to a sheet.
  • Make, Zapier, n8n: use the Apify app or node "Run Actor" with the JSON input, then "Get dataset items"; trigger it from a schedule or a webhook.
  • Airtable and warehouses: export CSV or JSON to Airtable, BigQuery, Snowflake or Postgres; use rowId as the key (upsert) and scrapedAt as the snapshot time.
  • Webhooks and schedules: an ACTOR.RUN.SUCCEEDED webhook calls your endpoint with the dataset id when a run ends; a cron schedule runs any saved input every minute at the fastest.
  • MCP and AI agents: expose the Actor through the Apify MCP server and ask for "today's NBA spreads"; the input schema is what the agent fills in.

Performance tips

  • Name leagues instead of reading all sports, and pick only the market groups you need: game lines alone are one call per game, props are dozens.
  • Use dateFrom, dateTo, teams and players to cut a board before it is read, not after.
  • Read marketType and subcategory in a small run, then filter with marketFilter and excludeMarkets (["race to", "1st quarter"] drops ladders and period markets).
  • Use price history on filtered runs only.
  • One run at a time is faster than several in parallel: the sportsbook's edge refuses bursts, and the Actor already keeps its own pace.
  • Ask the dataset API for the columns you need with fields= instead of downloading all 59.

Troubleshooting

Every run ends with a status message and writes a SUMMARY record to the default key-value store: outcome, rows saved, requests, HTTP status counts, routes used, the notes below and the number of events and leagues read. These are all the messages the Actor can produce.

MessageStatusWhat it means
COMPLETED — saved N rows (WHY) from E events in S s. with WHY = everything requested was read, max results reached or stopped at the run time limitSucceededAll read; or Max results hit (raise it for the rest); or the time limit came first (narrow the input or raise the timeout). The rows are valid in every case.
PARTIAL — saved N rows (…) … K request(s) could not be read.SucceededSome requests failed after retries; run again to fill the gap.
DraftKings answered but nothing matched — 0 rows. …Succeeded, emptyNothing is posted for this input now (off-season, props not yet up, a window that excludes everything). Loosen the filters.
Saved N rows — this run's maximum cost ($X) covers N results at the current price. Raise "Maximum cost per run" to collect more.SucceededThe budget is spent; see "What you pay".
No rows collected: DraftKings refused every route (…). This is a source-access failure, not an empty result.Failed (BLOCKED)The edge refused direct and rescue routes. Wait a few minutes and run again; SUMMARY.refusedSamples shows what was refused.
No rows collected: not one request succeeded (…) after N attempt(s). This is a source-access failure, not an empty result.Failed (FETCH_FAILED)Network trouble or timeouts. Run again.
No rows collected and N request(s) could not be read, so an empty result cannot be confirmed.Failed (INCOMPLETE_NO_ROWS)Requests failed and none gave rows, so "nothing posted" is unproven. Run again.
Could not read DraftKings' sport and league list (…). This is a source-access failure, not an empty result.Failed (BLOCKED or FETCH_FAILED)The first request failed. Run again.
Nothing to scrape: No league matched "X". Leave "Sports" and "Leagues" empty for everything, or use names such as "basketball", "NBA", "Premier League", or a league id.Failed (INVALID_INPUT)No name matched. Check the spelling or use a league id.
Crashed after saving N rows: …Failed (CRASHED)Unexpected error; saved rows are kept. Send us the run id.
No league matched "X". · No sport matched "X". · "Leagues" is set, so "Sports" is ignored.Note in SUMMARYA name matched nothing, or both fields were given. The rest still ran.
Ignored the unknown market group "X". · Ignored the first date "X" — use YYYY-MM-DD, "today", "tomorrow" or "+3d".Note in SUMMARYA value was invalid and left out (the last date has the same note).
The direct connection was refused 8 times in a row — using the residential rescue route for 30 seconds.Log warningThe edge refused a burst; the Actor used its capped US residential rescue briefly.
Could not turn a … response into rows: …Log warningA response had an unexpected shape and was skipped (SUMMARY.parseErrors). Report it if it repeats.

If a run saved fewer rows than you expected, open SUMMARY: pagesSkipped counts requests that could not be read, refused the edge's refusals, notes every ignored input value.

Honest limits

  • A snapshot, not a stream. A run reads the board once. Movement between runs comes from scheduling them, or from the optional price history, which holds only what DraftKings keeps, in buckets (5 minutes up to daily).
  • The anonymous US view. You get the board DraftKings shows to a visitor who is not logged in. Markets DraftKings shows only to logged-in customers, account-specific offers and boosts are not included. The 29 state site codes tested on 2026-10-29 returned the same board for the same query.
  • Props are posted late. Player props usually appear on the day of the game. A run for tomorrow's games returns game lines and a few specials; on 2026-10-29 props were posted for 3 of the 8 NBA games of the next day. Run again closer to the start.
  • The catalogue moves. DraftKings adds and retires sports, leagues and tabs during the year; the Actor reads the live list (25 sports and 280 leagues on 2026-10-29). marketGroup is a heuristic grouping; category and subcategory are exact.
  • No betting percentages. The share of bets or of money on a side (public betting splits) is not in the data: the bet-breakdown field the sportsbook's own pages read was empty in every response measured on 2026-10-29, including all 20,000 rows of the proof dataset, and no share-of-money field exists in its answers. The Actor therefore has no column for it.
  • Live data is as good as DraftKings' scoreboard. On 2026-10-29, 51 of the 53 live games in the proof dataset carried a period and 51 a numeric score, and a 100-row live run restricted to games filled the period on 96 and the score on 96 of its rows (45 games). A tournament in progress carries neither, and cricket scores only the side that has batted, so the columns are filled for almost every live game and empty everywhere else. Scores can lag the event, and a score that is not a plain number stays null. Live prices change within seconds of the read, and the edge refuses fast bursts, so a large board takes seconds to a minute.
  • Not included. Pick6 and other fantasy or pick'em products, same-game-parlay and bet-builder prices, account data, balances, bet history, streams and video. The Actor never logs in and never places a bet.

Comparison with other options

To our knowledge DraftKings offers no public, self-service odds API. These are the usual ways to get its prices:

OptionSetupShape of the dataCoverageUpkeep
Copy from the website by handnonewhatever you pasteone page at a timenone, but it never scales
Your own scraper or browser automationdays to weekswhatever you buildwhatever you buildyou fix it whenever the site or its edge changes
A generic multi-book odds feedaccount and contractnormalised across many booksmany books; depth of props and small leagues varies by providerprovider
This Actorminutes, no codeone flat row per selection, with ids, odds in three formats and probabilitiesone book, its whole public boardhandled for you

A multi-book feed is the right tool when you need many sportsbooks behind one schema. This Actor is the right tool when you need DraftKings' full board, props and futures included, as plain rows you can export, schedule and join on stable ids.

FAQ

Is there an official DraftKings odds API?

To our knowledge DraftKings offers no public, self-service odds API. This Actor reads the public JSON its website loads for every visitor and returns flat rows.

How do I scrape DraftKings odds?

Open the Actor, name a sport or a league (or leave both empty), tick the market groups and press Start. Each row is one selection with its odds. Code samples are in the integrations chapter.

How do I get DraftKings player props as CSV or Excel?

Set marketGroups to ["playerProps"], narrow with leagues, players or marketFilter, run, and export the dataset as CSV or Excel. playerName, statType, line, milestone, side and oddsAmerican are the core of a prop row.

Do I need a DraftKings account, login or API key?

No. The Actor logs in nowhere, uses none of your cookies and needs no DraftKings key, only an Apify account.

Which sports and leagues are covered?

Everything on DraftKings' public list: 25 sports and 280 leagues on 2026-10-29, from the NFL, NBA, MLB, NHL and college sports to soccer, tennis, UFC, golf, Formula 1, cricket, darts and esports. A league out of season carries futures only.

Can I scrape DraftKings live odds and in-play scores?

Yes: set status to live. Rows of events in play have isLive true, plus period and score where DraftKings sends them. On 2026-10-29, 51 of 53 live games carried a period and 51 a score. Tournaments in progress (golf, races) are live too and come back as futures rows; leave futures out of marketGroups to read only games. Live prices change within seconds, so schedule a narrow run for a dashboard; scrapedAt stamps when each row was read.

How do I get the odds of one game only?

Use eventIds with the game's league in leagues, or teams (for example ["Chiefs"]) with dateFrom and dateTo. The event id is in the eventId column and at the end of eventUrl.

What odds formats do the rows contain?

All of them on every row: oddsAmerican (integer), oddsAmericanText (with sign), oddsDecimal, oddsFractional, impliedProbability and, for complete books, noVigProbability.

What is the difference between impliedProbability and noVigProbability?

impliedProbability is 1 divided by the decimal odds and still contains the bookmaker's margin. noVigProbability divides it by the market's sum so a two-way book adds up to 1; it is null where the market is not a complete book.

How do I compare DraftKings with other sportsbooks?

This Actor gives you the DraftKings side. Take the same snapshot from your other sources, join on league, startTime and team or player name, and compare oddsDecimal per side: the best price is the highest.

How do I track DraftKings line movement?

Schedule runs and compare them by rowId, or switch on oddsHistory for the first price and the price series. See the scheduling chapter.

Can I get opening and closing lines?

oddsHistory: "first" returns the earliest price DraftKings keeps, exact to the day. A closing line is the last snapshot before startTime, so schedule a run shortly before the games.

Why are there no player props for tomorrow's games?

DraftKings usually posts props on the day of the game. Run again closer to the start; the category column shows which tabs exist.

What is the difference between the main line and an alternate line?

The main line is the one DraftKings features for a market (isMainLine true); filter on it to drop the rest. Alternate lines are other lines at other prices, shown as ladders (isAlternate true).

Are suspended markets included?

Rows of a market DraftKings flags as suspended carry isSuspended true, when DraftKings still prints a price for it. Drop them before you compare prices.

What does a milestone selection like "25+" mean?

The player reaches at least that number. The row has selection "25+" and milestone 25, with no line and no side.

How are futures different from game rows?

They belong to season or tournament events with GUID ids: eventType "outright", betType "outright", marketGroup "futures". There are no home and away teams; selection is the team or player.

What is the rowId and how do I compare two runs with it?

dk:<eventId>:<marketId>:<selectionId>. It stays the same while the market exists, so joining two datasets on it shows moved prices, and a row found in only one dataset was posted or taken down in between.

Does it include betting percentages or the share of money on each side?

No. The bet-breakdown field the sportsbook's pages read was empty in every response measured on 2026-10-29, and there is no share-of-money field, so the dataset has no such column. Compare prices across snapshots or use the price history to see where the market moved.

Why is my dataset smaller or larger than I expected?

Smaller: a filter, the status or date window, Max results, the maximum cost, props not posted yet, or an off-season league. Larger: alternates, halves, quarters and props multiply selections. stopReason in SUMMARY says why the run ended.

How many rows does a full NFL week produce?

It depends on what is posted, but one game with every prop is thousands of selections, so a full slate runs to tens of thousands and more. Use game lines only, marketFilter or Max results.

Does DraftKings show different odds in different states?

The Actor reads the board through one state site. The 29 state site codes tested on 2026-10-29 returned the same data for the same query. An account in your own state can see offers the anonymous board does not.

Do I need a US proxy or VPN, and why are some requests refused?

No proxy setup is needed. The sportsbook's edge refuses fast bursts and Apify's datacenter proxies, so the Actor reads directly with 6 requests in flight, eases off after a refusal, retries directly and only then uses a capped US residential rescue. SUMMARY counts the refusals.

How fast is the scraper?

The prefill run read 100 rows in 2 s and the proof run 20,000 unique rows in 27 s (2026-10-29). See the scale and speed chapter.

How much does it cost and how does the maximum cost work?

From $0.20 per 1,000 results on the Free plan down to $0.13 on Gold and above. A run never writes past its Maximum cost per run; it stops with a status message and keeps what it saved.

How do I schedule hourly odds snapshots?

Create a schedule in the Console with the cron expression 0 * * * * and a saved input. Each run writes its own dataset; the last successful one is at /v2/acts/logiover~draftkings-scraper/runs/last/dataset/items?status=SUCCEEDED&token=YOUR_APIFY_TOKEN.

How do I load DraftKings odds into Google Sheets, Excel, pandas or R?

Use the dataset CSV URL: =IMPORTDATA("...") in Sheets, Data > From Web in Excel, pd.read_csv(url) in pandas, read.csv(url) in R.

What time zone do startTime and scrapedAt use?

Both are ISO 8601 in UTC with a trailing Z. Date filters match a game's start date in UTC or in US Eastern time.

The Actor reads public odds any visitor can see, logs in nowhere and gets around no access control. Laws, the sportsbook's terms and rules on redistribution differ by country and state, and you are responsible for your use. See the legality chapter; ask a lawyer before you resell the data.

Does this place bets or touch my DraftKings account?

No. It reads public prices only: no login, no account data, no bet placement, no account automation.

Can I scrape DraftKings Pick6 or DFS contests?

No. This Actor covers the sportsbook; Pick6 and fantasy contests are separate products.

What happens when DraftKings changes its website?

The Actor reads the JSON the site itself loads. If that changes, a run fails with a clear message (blocked, fetch failed or incomplete) instead of finishing green with an empty dataset, and we update the Actor.

How do I report a wrong value or ask for a field?

Open an issue on the Actor page or message us with the run id and the rowId. We reply within 24 hours.

Glossary

  • American odds: a signed integer. +150 wins 150 on a 100 stake; -110 needs a 110 stake to win 100.
  • Decimal odds: the total return per 1 staked, stake included. 2.50 returns 2.50.
  • Fractional odds: profit relative to stake, written 3/2 for +150.
  • Implied probability: 1 divided by decimal odds, the chance a price implies.
  • Vig, juice, hold, margin: the bookmaker's built-in edge; in a complete book the sum of the implied probabilities minus 1.
  • No-vig or fair probability: implied probability scaled so the book sums to 1.
  • Moneyline: a bet on who wins.
  • Spread, handicap: the margin a side must win by, or may lose by; the number is the line.
  • Total, over/under: a line on the combined score or count.
  • Main line and alternate line: the line a book features, and the other lines it offers at other prices.
  • Player prop and game prop: a bet on one player's statistic, and any other market inside a game.
  • Milestone: a prop of the form "at least X", such as 25+ points.
  • Futures, outright: a bet that settles at the end of a season or tournament.
  • Push: the result lands on the line and the stake is returned.
  • Parlay, same-game parlay (SGP): several selections in one bet; not part of this dataset.
  • Closing line and CLV: the last price before the start, and the value of the price you took against it.
  • Arbitrage: backing every outcome across books at prices whose implied probabilities add up to less than 1.
  • +EV: positive expected value, a price better than the fair probability.

Legality and responsible use

The Actor collects public sports odds, event names, team names and the names of professional players as the sportsbook displays them. It collects no data about DraftKings customers, uses no login and no account, and does not circumvent any access control. It is meant for analytics, research, journalism, modelling and personal tools.

Gambling law, the betting age (21 in most US states, other ages elsewhere), rules on automated access and the sportsbook's terms of use differ by country and state, and you alone are responsible for your use of the data. Names of professional athletes are public sports information, but if you combine them with personal data of your own users, GDPR, CCPA or similar rules apply to you. Nothing here is betting advice or a promise of profit: prices carry a margin and most bettors lose money. If gambling is a problem for you or someone you know, call 1-800-GAMBLER in the US or your national helpline.

Changelog

  • Version 1.0 (2026-10-29): first release. Game lines with alternates, player props, game props, futures and outrights, live in-play rows (period and score for live games), for every sport and league on DraftKings' public list. American, decimal and fractional odds, implied and no-vig probability, market hold, rowId de-duplication, filters for sport, league, market group, status, dates, teams, players and markets, optional price history, pay-per-result pricing with a maximum cost per run.

Support

Questions, a wrong value or a field you need? Use the Issues tab of this Actor or message us from its Store page, with the run id and, if you can, the rowId. We reply within 24 hours.