CSV and NDJSON exports
FanDuel props and history exports, CSV or NDJSON
Export FanDuel props or line history for a date range as CSV or NDJSON, paged by cursor, plus a training set with open line, close and moves per prop.
FanDuel API is an independent data service operated by FF API Inc. It is not affiliated with, endorsed by or sponsored by FanDuel.
Load a slate or a season of line history straight into pandas, DuckDB or a spreadsheet.
- Two formats
- CSV with a header row, or NDJSON one object per line, both streamed.
- Resumable
- Pages by cursor; a body may end with one error line naming next_cursor, so a long export resumes where it stopped.
- Training set
- One row per prop: open line and price, closing line and price, and the moves before the start, ready to join to graded results.
What it returns now
Real rows, 5 min delay, as of 3:25 PM ET
prop_id,league,player,stat,period,line,over_american,under_american,changed_at
734.196074478-12103341,NFL,"Austin Hooper",receiving_yards,game,6.5,-114,-114,2026-11-06T03:52:00.113Z
734.195663780-41066843,NFL,"Bijan Robinson",receiving_yards,q1,0.5,100,-132,2026-11-06T16:13:12.303Z
734.195448624-41072627,NFL,"Chase Brown",receiving_yards,q1,2.5,-118,-114,2026-11-06T16:51:42.168Z
734.195673178-73434816,NFL,"Dohnte Meyers",receiving_yards,game,17.5,-114,-114,2026-11-06T03:52:00.113Z
734.195450822-41172406,NFL,"Drake London",receiving_yards,game,78.5,-114,-114,2026-11-06T03:52:00.113Z
734.196074482-36184724,NFL,"Drew Sample",receiving_yards,game,3.5,-114,-114,2026-11-06T03:52:00.113Z
734.195448685-40890769,NFL,"Ja'Marr Chase",receiving_yards,game,78.5,-114,-114,2026-11-06T03:52:00.113Z
734.195663786-41155779,NFL,"Jahan Dotson",receiving_yards,q1,0.5,168,-230,2026-11-06T16:51:42.168ZThe full export carries every column: cursor, prop_id, sport, league, event_id, event_name, starts_at, player, team, stat, period, line, over_american, under_american, over_decimal, under_decimal, market_status, changed_at, first_seen_at. History exports add one row per recorded state.
Endpoints and parameters
/api/v1/exportCSV or NDJSON, streamed and paged by cursor. Developer and up, or a full archive on any plan. A body may end with one error line naming next_cursor; resume from it.
| Parameter | In | Description |
|---|---|---|
| kind | query | props or history. |
| from | query | Start time. |
| to | query | End time. |
| format | query | Output format. One of csv, ndjson. |
| cursor | query | Resume cursor. |
/api/v1/training-setOne row per prop for model training, with graded results where available. Developer and up, or a full archive.
| Parameter | In | Description |
|---|---|---|
| league | query | League code as FanDuel lists it, such as NBA. |
| from | query | Start time. |
| to | query | End time. |
| cursor | query | Resume cursor. |
Code
curl "https://fanduelapi.com/api/v1/export?kind=history&format=csv&from=2026-11-05T00:00:00Z&to=2026-11-06T00:00:00Z" \
-H "Authorization: Bearer $FANDUEL_API_KEY"import os, io, requests, pandas as pd
r = requests.get(
"https://fanduelapi.com/api/v1/export",
params={"kind": "history", "format": "csv", "from": "2026-11-05T00:00:00Z", "to": "2026-11-06T00:00:00Z"},
headers={"Authorization": f"Bearer {os.environ['FANDUEL_API_KEY']}"},
)
r.raise_for_status()
df = pd.read_csv(io.StringIO(r.text))
print(df.groupby("stat").size())Keys look like fd_.... Keep one in the FANDUEL_API_KEY environment variable on your server, never in browser code. Every response's meta says which plan answered, how far behind it is and how fresh the collection is.
Which plans include it
- FreeWith a full archive purchase
- DeveloperIncluded
- ProductionIncluded
- ScaleIncluded
Read from the plans on the pricing page. Every request counts against the monthly and per-minute allowance; request quotas explains how.
Works well with
- Line historyReplay a prop or a game line from the first time it was seen to now, move by move.
/api/v1/props/{id}/history - Players and resultsJoin each FanDuel line to what actually happened, and train on graded outcomes instead of guesses.
/api/v1/players - CoverageKnow what the feed holds before you build on it, and show users exactly how fresh it is.
/api/v1/coverage
Related
Make your first call in a few minutes
Sign up, create a key in the dashboard, and send it as a Bearer token. The free plan needs no card and reads the same data five minutes behind.
Get a free API key