DraftKings Scraper - Sports Odds, Results, DFS & Player Props
Pricing
from $1.60 / 1,000 board, contest or player records
DraftKings Scraper - Sports Odds, Results, DFS & Player Props
Scrape DraftKings Sportsbook odds, game lines, team totals, player and game props, futures, Pick6 multipliers and final scores. Extract DFS contests, entry fees, prize pools, player salaries and stats. Includes nested markets with American, decimal and fractional odds.
Pricing
from $1.60 / 1,000 board, contest or player records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Features
Share
DraftKings Sportsbook Odds Scraper
Scrape DraftKings Sportsbook: the odds board (game lines, team totals, player props, award futures, game props), Pick6 multipliers, and the DFS surface (contests with fees and prize pools, plus player lists with salaries, positions and stats), and the final scores of past games (who won and by how much). One board row per game carries the flattened main lines and the full nested market odds in American, decimal and fractional formats.
Why This Scraper?
- The whole board, one row per game. Every record carries the moneyline pair, spread line and odds, and total line and odds flattened on the row, plus the complete nested market list with every selection's price in all three odds formats.
- Superset scope in one actor. Sportsbook odds, the player-prop menu, award outright futures, Pick6 multipliers, and the DFS contests-and-salaries surface are collected by one run instead of four different tools.
- Every league on the book. The run resolves the site's own live catalog, so any sport page slug and any league slug on the book is reachable, not a hardcoded list.
- Built for line watching. Incremental mode fingerprints every odds value, so a scheduled run classifies exactly which games and markets moved, with per-field change lists.
- URL mode for precision. Paste a sport page, a league page, a game page, or an NBA, NFL, MLB or NHL player-props or futures page and the actor reads exactly that surface.
- State-aware. Pick a state token to read that state's regional view of the book.
- Results, not just prices. Turn on final scores and the same run returns every finished game of the last days in your leagues with the final score, the winner and the venue, linked to the game's odds event id wherever the book publishes it.
Use Cases
- Line movers and model builders: pull every game's current prices across leagues on a schedule and diff the nested odds against yesterday's baseline.
- Prop-market researchers: harvest the full player-prop menu (points, rebounds, assists, combos, milestones, races) per league with all selection prices.
- DFS players: collect the contest lobby (entry fees, prize pools, guarantees, entry counts) plus player salaries, positions and stat rows for lineup building.
- Odds aggregators: mirror the book's board per state region into your own store or spreadsheet via the dataset export or MCP connectors.
- Futures watchers: track award outright prices (MVP, Rookie of the Year, and more) as the season moves.
- Bet graders and model backtests: pair yesterday's closing lines with the final scores from the same actor to grade picks and measure model accuracy.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
kind | event |
recordId | event:00000000 |
name | Home Team @ Away Team |
sportName | Basketball |
leagueName | League One |
startTime | 2027-01-01T00:00:00Z |
status | NOT_STARTED |
homeTeam | Home Team |
homeTeamAbbr | HT |
awayTeam | Away Team |
awayTeamAbbr | AT |
homeMoneylineAmerican | -110 |
awayMoneylineAmerican | -110 |
spreadLine | 2.5 |
spreadHomeAmerican | -108 |
spreadAwayAmerican | -112 |
totalLine | 210.5 |
overAmerican | -108 |
underAmerican | -112 |
marketGroupLabel | Game lines (moneyline, spread, total) |
subcategoryLabel | Game Lines |
url | https://sportsbook.draftkings.com/event/sample-game/00000000 |
detailFetched | true |
capturedAt | 2027-01-01T00:00:00Z |
Every board row also carries markets: the full nested list of markets for the selected group, each with its selections (label, points, oddsAmerican, oddsDecimal, oddsFractional, impliedProbability, trueOdds, participant names and ids). With Final scores of past games on, finished games arrive as result rows (one per game): homeTeam, awayTeam, integer homeScore and awayScore, winner (home, away or draw), winnerTeam, statusDetail (for example Final/OT), venue, startTime, the odds eventId where it can be linked (else empty, with a matchKey of league, date and teams for your own join), and per-sport extras (attendance, broadcast, weekNumber, seasonName, the winning and losing pitcher for baseball, the three stars for hockey). Covered leagues: NFL, NBA, MLB, NHL, college football, college basketball (men), and the major soccer leagues and cups (Premier League, LaLiga, Bundesliga, Serie A, Ligue 1, MLS, Liga MX, Champions League, Europa League and more); other leagues on the board have no results surface and are named in the log. Only finished games are returned: games not started, postponed or still in play never produce a result row. winner compares the final scores only, so a knockout cup game level after extra time and decided on penalties shows draw. DFS runs push two further record kinds: dfs_contest (contest id, name, entry fee, max entries, entries, prize pool, top payout, draft group, start time, guaranteed flag) and dfs_player (player id, name, position, salary, status, team, stat rows, competition ids, images).
How to Use
- Add the Actor in Apify Console.
- Keep search mode with the default sport, or name your sports and leagues (site slugs such as
basketballorbasketball/nba). - Pick the market groups you want; game lines is the default.
- Run and export the dataset, or schedule it with incremental mode to track line moves.
Example: NBA game lines
Search the NBA game lines:
{"mode": "search","sportSlugs": ["basketball"],"leagues": ["nba"],"marketGroups": ["game-lines"],"maxItems": 20}
Example: player props
Read player props and team totals:
{"mode": "search","sportSlugs": ["basketball"],"leagues": ["nba"],"marketGroups": ["player-props", "team-totals"],"maxItems": 50}
Example: pasted links
Scrape pasted links:
{"mode": "url","urls": [{ "url": "https://sportsbook.draftkings.com/leagues/basketball/nba" },{ "url": "https://sportsbook.draftkings.com/page/nba-player-props" }],"maxItems": 40}
Example: odds, DFS and final scores in one run
Add the DFS surface and the last three days' final scores:
{"mode": "search","sportSlugs": ["basketball"],"leagues": ["nba"],"marketGroups": ["game-lines"],"includeDfs": true,"dfsSport": "basketball","includeResults": true,"resultsDaysBack": 3,"maxItems": 200}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("abotapi/draftkings-sportsbook-odds-scraper").call(run_input={"mode": "search","sportSlugs": ["basketball"],"leagues": ["nba"],"marketGroups": ["game-lines"],"maxItems": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('abotapi/draftkings-sportsbook-odds-scraper').call({mode: 'search',sportSlugs: ['basketball'],leagues: ['nba'],marketGroups: ['game-lines'],maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Tips
- Scheduled line watching: enable incremental mode on a daily schedule; UNCHANGED rows are suppressed by default and UPDATED rows name the fields that moved (
changedFields). - Cheapest full menu:
game-linesalone is one read per league; each extra market group adds its own section reads per league (team totals and game props one each, futures six, player props sixteen). - State view: the default board is the national view; pick a state token to read that region's view.
- DFS scope: the DFS surface reads the contest lobby plus up to four draft groups' player lists per run, capped by Max items.
- Results and Max items: with final scores on, the scores are read first and up to half of Max items is kept for the result rows that will really be delivered (new or changed ones); when there are none, the board keeps the whole cap, and results also use whatever the board leaves. Raise Max items (or set 0) for full boards plus full results.
- NBA results: NBA scores are found by walking the book's fantasy slates, so the first NBA results run reads more pages than later ones: measured locally, about 90 page reads and two minutes for a 2-day window, about 220 reads and six minutes for 7 days (a 14-day first run can reach the per-run read bound, and the status message then says part of the window was not reached). A scheduled run picks up only the games finished since the last run. A game that is not yet final on the score pages is collected by a later run.
- Run time limit: final-score reads stop when less than about 90 seconds of the run's time limit are left, so the odds board keeps its time; the status message then says the scores were cut by the run's time limit.
Send results into your apps (MCP connectors)
Add mcpConnectors to the input and the run exports records through the Model Context Protocol to supported destinations (Notion and others). See the input schema for the connector shape; notionParentPageUrl sets the Notion parent and maxNotifyListings caps notification-style exports.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | select | search | Search mode (sport/league) or URL mode (paste links). |
sportSlugs | array | basketball | Sport page slugs (basketball, football, baseball, hockey, soccer, golf, mma). Resolved live from the catalog. |
leagues | array | (empty) | Optional league slugs to narrow the run (e.g. nba, basketball/nba). |
marketGroups | multi-select | game-lines | Board sections to read: game-lines, team-totals, player-props, futures, game-props. |
includeDfs | boolean | false | Also collect the DFS surface: contest lobby and player salary lists. |
dfsSport | select | (same as sports) | Override the DFS surface's sport. Set on its own (with includeDfs off), it collects the contest list only, without player lists. |
urls | array | four sample links | URL mode: sport pages, league pages, game pages, and NBA, NFL, MLB or NHL player-props and futures pages (the default carries one link of each main shape). |
fetchDetails | boolean | false | Read each game's detail page and merge media, parlay content cards and Pick6 multipliers. Bills one detail-enrichment unit per served record. |
includeResults | boolean | false | Also return the final score, winner and venue of every finished game in the selected leagues over the last resultsDaysBack days (search mode, or league and sport links in URL mode). One dataset item per finished game. |
resultsDaysBack | integer | 2 | Days back for final scores (1 to 14). |
maxItems | integer | 20 | Maximum records per run. 0 = unlimited. The only cap that stops a run early. |
maxPages | integer | (empty) | Not used: every board read is a single data call, so there are no pages to walk. |
state | select | auto | Book state token for the regional view (auto, AZ, CA, ...). |
proxy | proxy | residential US | Residential US proxies are strongly recommended; the data pages refuse most datacenter exits. |
resumeFromRunId | string | (empty) | Skip record ids already pushed by a previous run (a run id, or dataset:<id>). Mutually exclusive with incremental mode. |
incrementalMode | boolean | false | Classify NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED between runs; every odds value participates in the fingerprint. |
emitUnchanged | boolean | false | Also push UNCHANGED records in incremental mode. |
stateKey | string | (empty) | Named key for the incremental baseline (default: a hash of the run scope). |
ignoreFieldsForChanges | array | (empty) | Extra fields excluded from the change fingerprint. |
mcpConnectors | array | (empty) | MCP connector definitions for the export side channel. |
notionParentPageUrl | string | (empty) | Notion parent page for the connector export. |
maxNotifyListings | integer | 0 | Cap for notification-style connector exports (0 = the first 50 records). |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
One board row per game, with the nested market odds:
{"kind": "event","recordId": "event:00000000","eventId": "00000000","name": "Home Team @ Away Team","sportName": "Basketball","leagueName": "League One","startTime": "2027-01-01T00:00:00Z","status": "NOT_STARTED","homeTeam": "Home Team","homeTeamAbbr": "HT","awayTeam": "Away Team","awayTeamAbbr": "AT","homeMoneylineAmerican": "-110","awayMoneylineAmerican": "-110","spreadLine": 2.5,"spreadHomeAmerican": "-108","spreadAwayAmerican": "-112","totalLine": 210.5,"overAmerican": "-108","underAmerican": "-112","marketGroupLabel": "Game lines (moneyline, spread, total)","subcategoryLabel": "Game Lines","markets": [{"marketId": "1_00000000","name": "Moneyline","marketTypeName": "Moneyline","subcategoryLabel": "Game Lines","isPrimaryMarket": true,"selections": [{"selectionId": "0ML00000000_1","label": "Home Team","points": null,"outcomeType": "Home","oddsAmerican": "-110","oddsDecimal": "1.91","oddsFractional": "100/110","impliedProbability": "52%","trueOdds": 1.91,"participantNames": ["Home Team"]}]}],"url": "https://sportsbook.draftkings.com/event/sample-game/00000000","capturedAt": "2027-01-01T00:00:00Z"}
One result row per finished game (Final scores of past games on):
| Field | Example |
|---|---|
| kind | result |
| recordId | result:sd:0000000 |
| eventId | 00000000 |
| matchKey | league-one |
| source | stats |
| name | Away Team @ Home Team |
| sportName | Hockey |
| leagueName | League One |
| startTime | 2027-01-01T00:00:00Z |
| status | Final |
| statusDetail | Final/OT |
| homeTeam | Home Team |
| awayTeam | Away Team |
| homeTeamAbbr | HT |
| awayTeamAbbr | AT |
| homeScore | 2 |
| awayScore | 3 |
| winner | away |
| winnerTeam | Away Team |
| venue | Sample Arena, Sample City |
| threeStars | Player One, Player Two, Player Three |
| capturedAt | 2027-01-01T06:00:00Z |
Plan Requirement
This actor collects the book's publicly served odds board, DFS lobby and player lists, and requires a residential US connection (set by default). No account, sign-in or subscription of any kind is used: every record comes from the same pages and data responses the site serves to its own visitors.
FAQ
How much does it cost? Each run bills the Actor start once (one start unit per GB of memory, one at the default 512 MB), then one dataset-item unit per pushed record (board row, final-score result row, DFS contest or DFS player, plus UNCHANGED rows when emitUnchanged is on and EXPIRED rows in incremental mode; suppressed UNCHANGED rows are never pushed or billed), plus one detail-enrichment unit per board record whose detail read succeeded when Detail enrichment is on. At the published prices, a 20-game board run with detail enrichment on costs a fraction of a cent per record; see the Pricing tab for the live per-event rates.
Is it legal to scrape DraftKings? The actor reads the same publicly served odds board, contest lobby and player lists the site shows its own visitors, without any account or sign-in, and only at the rate of a single reader. Scraping publicly available data is a common practice; always review the site's terms and your own jurisdiction before commercial use.
Can I schedule it to watch line moves? Yes. Turn on incremental mode and schedule the run; UNCHANGED rows are suppressed by default, UPDATED rows carry changedFields naming exactly which odds moved, and records that vanish from a complete scan are reported EXPIRED (fantasy contests and players are a bounded sample and are never reported EXPIRED). Final-score result rows are delivered once per game and never reported EXPIRED; a later score correction arrives as one UPDATED row.
Why did a run return fewer records than expected? Max items (default 20) is the only cap that stops a run early; raise it for whole-board runs. With several leagues it is split evenly across them, and with final scores on, up to half of it is kept for new or changed result rows (none kept when there are no such rows). The board also thins out overnight in the US off-season hours: fewer games are posted between windows, and futures sections carry one event per award.
Why did my run fail with an upgrade note? The book's data pages refuse most datacenter connections, so the actor defaults to residential US proxies, which paid plans include. Free plans have no residential access: the run logs a boxed note saying so, then continues on a backup connection when one is available to the run (some pages may still be unavailable). The run fails with the upgrade note only when every connection was refused, so no page could be read; it never ends as an empty success.
Can I use it with AI agents or MCP? Yes. The dataset is plain JSON records, the Output tabs expose per-kind views, and mcpConnectors exports records to supported MCP destinations after the run.
๐ Want more sports data?
Pair this actor with these related scrapers from the same team:
| โฝ FanDuel Odds Scraper Scrape FanDuel sportsbook odds, including moneylines, spreads, totals, player props and... | โฝ Sportsbook Odds Scraper (1xBet, Melbet, Linebet, Paripulse) Collect live and prematch betting odds from 1xBet, Melbet, Linebet and Paripulse. Give it... |
| โฝ bet365 Odds Scraper Scrape bet365 live in-play and pre-match odds across 20+ sports. Extract fixture... | โฝ FotMob Scraper โฝ Match Details, Stats, Lineups & Players Pull structured football data from FotMob: match details with scores, team stats, events... |
| โฝ SofaScore Scraper โฝ Live Scores, Stats, Players & Odds Pull structured sports data from SofaScore across football, basketball, tennis, and 20+... | โฝ Sportsbet AU Scraper ๐
Sports Odds & Racing Prices Scrape sportsbet.com.au odds: events, markets, selections and prices for AFL, NRL... |
๐ Browse all abotapi scrapers
๐ฌ Support
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com.
- โญ Enjoying it? A quick review on the actor page helps other users find it.