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

kind=props CSV, a few of its 19 columns, real rows, 5 min delay
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.168Z

The 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

GET/api/v1/export

CSV 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.

ParameterInDescription
kindqueryprops or history.
fromqueryStart time.
toqueryEnd time.
formatqueryOutput format. One of csv, ndjson.
cursorqueryResume cursor.
GET/api/v1/training-set

One row per prop for model training, with graded results where available. Developer and up, or a full archive.

ParameterInDescription
leaguequeryLeague code as FanDuel lists it, such as NBA.
fromqueryStart time.
toqueryEnd time.
cursorqueryResume cursor.

Code

curl
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"
Python
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

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