INDEPENDENT DEVELOPER REFERENCE
Training data for sports prop models
Why there is no ready-made training set here, where point-in-time leakage comes from, and how to record your own as-of dataset from now on.
Editorial review: · Not a live coverage report
There is no ready-made training set
This API does not offer a labeled export of past lines and outcomes. Recording began around 2026-11-03. Retained history is short, and it is not a complete opening-to-close archive. It does not contain seasons of past lines, and there is no public graded-results endpoint. What it does offer is the raw material to build a dataset going forward, with the clocks needed to keep it honest.
A training example needs three things: what you knew, when you knew it and what happened. You can record the first two from now on, and read the third from statistics once a game is finished.
Labels are yours to define
There is no public graded endpoint, so a label such as over or under a target is something you compute and own. Game state in statistics is not settlement for a bet or an entry. Rules on voids, late scratches and stat corrections belong to each product, and these observations do not establish them.
- Start with a numeric target, such as points in the game, rather than a graded result. It needs fewer assumptions.
- Exclude rows where
did_not_playis true or the stat is missing. Do not code them as zero. - Only use games where
game.completedis true. In-progress statistics are not final. - If you derive over or under against a recorded target, document how you treat a push and a late scratch.
curl --fail-with-body "https://draftkingsapi.com/api/v1/stats/player-games?sport=NBA&season=2027&completed=true&limit=50" \
-H "Authorization: Bearer $DRAFTKINGS_API_KEY"Where leakage comes from
Independent ESPN statistics cover NBA, NFL and NHL as limited retained game samples, not full seasons. As of 2026-11-03 those samples were captured after the games were played, so they do not show what was known at game time. That matters most in modeling, because a row looks like past knowledge when it is really a later capture.
- Capture time.
evidence.observed_atcan be long afterstarts_at. The row is what ESPN reported at capture, and later corrections are not tracked as an as-of history. - Season-to-date fields. Values with
scope: "season-to-date"include games after the one you are predicting. Keep onlyscope: "game". - Random splits. Shuffling rows puts a player's later games in training and earlier games in test.
- Rolling features that include the current game. Shift by one game before averaging.
- Current rows joined to past games. A Pick6 target read today says nothing about a target last week.
Record an as-of dataset going forward
The fix for leakage is to record what you could see, when you could see it, before the game. Store each read with your own timestamp and never overwrite it. The daily archive example is a starting point.
CREATE TABLE pick6_snapshot (
read_at TEXT NOT NULL, -- your clock, set when you read
observed_at TEXT NOT NULL, -- API capture clock
pick_group_id TEXT NOT NULL,
pickable_id TEXT NOT NULL,
pickable_market_id TEXT NOT NULL,
sport TEXT, stat TEXT, target_value REAL,
is_paused INTEGER, stale INTEGER,
row_json TEXT NOT NULL, -- keep every selection as observed
PRIMARY KEY (read_at, pick_group_id, pickable_id, pickable_market_id)
);python3 daily-archive.py --db archive.sqlite --sports NBA,NFL,NHL --max-requests 60When building features for a game, only use snapshots with read_at before that game's start, and skip stale rows if you are claiming a current view. Keep raw JSON so a later schema decision does not lose data.
Use chronological splits
Sports data has a time order, and the split must keep it. Train on earlier games and test on later ones. Statistics endpoints accept from and to, applied to game start, so you can pull each window directly.
curl --fail-with-body "https://draftkingsapi.com/api/v1/stats/player-games?sport=NBA&season=2027&completed=true&to=2026-10-31&limit=200" \
-H "Authorization: Bearer $DRAFTKINGS_API_KEY"
curl --fail-with-body "https://draftkingsapi.com/api/v1/stats/player-games?sport=NBA&season=2027&completed=true&from=2026-11-01&limit=200" \
-H "Authorization: Bearer $DRAFTKINGS_API_KEY"Keep a test window you only score once. Each time you tune against it, it stops being a fair test. If you fit any scaling or player averages, fit them on training data only.
Be honest about sample size
Retained samples are small and not full seasons. Check the coverage report for current scope. A model fit on a small sample can look accurate by chance, and few players will have many games.
- Report how many games and athletes were in training and in test.
- Compare against a plain baseline such as a rolling mean. If you cannot beat it, keep the baseline.
- Do not describe a small-sample result as an edge or a profitable system. These data cannot establish that.
- Rerun as your own archive grows. Earlier results do not carry over automatically.
Try it
Check the recorded data
Questions
Can I buy or download a labeled training set here?
No. There is no labeled export or public grading endpoint. You build labels from statistics and record your own as-of snapshots over time.
Can I treat retained statistics as what was known before a game?
No. Those samples were captured after the games were played and there is no as-of correction history. They describe outcomes, not what was known beforehand.
How much data do I need?
There is no fixed answer. Current samples are limited, so report your counts, compare with a simple baseline and treat early results as provisional.
Can I use this data to prove a betting strategy works?
No. The service provides no wagering advice and the recorded window cannot support that claim.
Related resources
What history each DraftKings dataset really holds, when recording began, what is not available, and how to start your own archive today.
Data for a player prop model: what is availableWhich inputs a prop model can read from this API, which it cannot, and how far player identity joins can be trusted across datasets.
Build a prop model baseline in PythonA walkthrough of a standard-library Python baseline: cursor pagination, numeric stat parsing, a SQLite cache and MAE on a later held-out window.
NBA game logs API for player statisticsBuild an NBA player game log from retained ESPN box scores: season years, stat keys, cursor pagination and why you must sort rows yourself.
Independent service operated by DD Inc., not affiliated with or endorsed by DraftKings. Technical access is not a redistribution license. No wagering: this service does not place, recommend or settle entries or bets. Check sources and status for actual capture context.