FanDuel contest capture
Complete standings and every winning lineup, for every contest.
entry_id, sample_weight and the scoring corrections roll out on 2026-09-24.
Up to 50,000 unique lineups — every lineup is stored
Over 50,000 — every winning lineup, plus an even sample of the rest
Each bar runs in rank order, rank 1 on the left; its length is the number of entries. Blue = lineup stored. Grey in DET @ BUF and IND @ KC = the 144 and 66 entrants who never submitted a lineup. In NYG @ LAR the sample is spread evenly from the cash line to last place, so the lineups not stored are small gaps across the whole lower field — not a missing bottom. Every contest also keeps its complete standings: rank, user, score and payout for every entry.
Is a sample exact enough for research?
Yes. We took a contest we store in full (DET @ BUF, 49,459 lineups), drew samples with the same rule, and compared every player's ownership with the full field. Weighted by sample_weight:
| Sample | Average error | Largest error |
|---|---|---|
| 5% | 0.17 pts | 1.52 pts |
| 8% | 0.10 pts | 0.46 pts |
| 25% | 0.03 pts | 0.17 pts |
| 87% | 0.01 pts | 0.05 pts |
An 8% sample is what a 650,000-entry Sunday Million keeps. Standings, scores, payouts and every winning lineup are never sampled.
How a large contest is sampled
- Every paid lineup — never fewer than the best 17,500.
- The cash line — the 4,500 lineups nearest the last paid place.
- The rest — 28,000 lineups evenly spaced down to last place, each with a
sample_weight(how many entries it stands for).
Get a contest
curl -s "https://api.stat-api.com/api/v1/dfs/contests/{contest_id}/download?format=csv&enrich=dfs.player_stats" \
-H "Authorization: Bearer YOUR_API_KEY"| rank, username, points, payout | The final FanDuel result, for every entry. |
| MVP, FLEX1 … / QB, RB1 … DEF | One column per roster slot: player, id, salary, points, ownership and box-score stats. |
| entry_id | Tells apart two rows with the same lineup (one user entering it twice). |
| sample_weight | 1 in a complete contest and for paid lineups; above 1 for the sampled rest. |
Find contest ids in dfs/contests. format=json returns the same data as JSON.
Questions
- Why do some rows have no players?
- Those entrants never submitted a lineup. FanDuel lists them with 0 points, and so do we.
- Do slot points add up to the entry score?
- Yes. For every captured contest, the slot points, positions and salaries are FanDuel's own per-player values from the contest's entry documents, MVP multiplier included. So every stored lineup's slot points add up to its FanDuel score.
- Which ownership numbers should I use?
- The own% in each cell. In a sampled contest it is already weighted to describe the full field.
- Is the contest still loading?
- We capture a contest after it settles; a large one takes a few hours. is_sampled is false when every lineup is stored.
Something else? Write to us.