V1 · LIVE
REST + JSON · No API Key

A Century of
NFL Data,
One Clean API.

A century of football data, compiled over decades by the people who love it most — then cleaned, normalized, and reshaped into one predictable format. Games, players, teams, play-by-play. Free, no signup.

● The Tape request.sh
# no key, no headers
curl https://api.nfldata.org/v1/players/00-0033873/stats
?season=2023
&week=1
{
  "player_name": "Patrick Mahomes",
  "recent_team": "KC",
  "season": 2023,
  "week": 1,
  "passing_yards": 226,
  "passing_tds": 2
}
57
Seasons 1999–Present
20K
Games & box scores
25K
Players all-time
1.3M
Plays since 1999
39
Teams + defunct
Replay

The messy part is already done

The data's all there, thanks to years of community work — it just doesn't agree with itself. The same player, team, and date show up a dozen different ways across sources. Every spelling, code, and format gets reconciled into one canonical record.

What's Out There
PLAYER NAME
"P.Mahomes" "Mahomes, Patrick" "mahomes_pat_01"
TEAM
"KC" "KAN" "Kansas City"
GAME DATE
"9/7/23" "Sep 7 2023" "2023-09-07"
PASSING YARDS
"4,183" 4183.0 null
What You Get
{
  "player_id": "00-0033873",
  "name":     "Patrick Mahomes",
  "team":     "KC",
  "game_date": "2023-09-07",
  "pass_yds":  4183
}
STABLE IDs · ISO DATES · TYPED NUMBERS · ONE TEAM CODE
The Assist

None of this exists without the people who compiled it — the statisticians, archivists, and open-source communities who spent years digging up box scores, charting plays, and keeping the record straight. nfldata.org doesn't replace their work. It just takes what they built and irons out the formatting wrinkles so it's easier to query.

Passing Leaders (1999–Present)

GET /v1/stats/season
Player Years Pass Yds
1 Tom Brady 23 89,216
2 Drew Brees 20 80,428
3 Peyton Manning 16 68,201
4 Aaron Rodgers 21 66,267
5 Matthew Stafford 17 64,578
6 Ben Roethlisberger 18 64,128
7 Philip Rivers 18 63,978
The Playbook

Zero to first query in under a minute

Pick an endpoint, send a plain GET, read the JSON. No key, no signup, no SDK.

1 Pick an endpoint from the reference.
2 Send a plain GET — no keys, no auth headers.
3 Parse the JSON — same shape every time.
# no key, no headers — just GET
curl https://api.nfldata.org/v1/players/00-0033873/stats?season=2023&week=1
import requests
 
r = requests.get(
    "https://api.nfldata.org/v1/players/00-0033873/stats?season=2023&week=1"
)
print(r.json()["data"][0]["passing_yards"])  # 226
const res = await fetch(
  "https://api.nfldata.org/v1/players/00-0033873/stats?season=2023&week=1"
);
const data = await res.json();
console.log(data.data[0].passing_yards); // 226

The Lineup

Full Reference →
GET
/v1/games Results, scores & box scores
GET
/v1/players/{gsis_id} Bios & career info for a player
GET
/v1/players/{gsis_id}/stats Season-by-season stat lines for a player
GET
/v1/games/head-to-head Series history between two teams
GET
/v1/stats/season League-wide season stat leaders
GET
/v1/plays Play-by-play, 1999 to present
Highlights

Stuff built with the data

More & Submit Yours →

Raw NFL Data

Downloadable CSVs
From the Booth

It's just me — and to be clear, I didn't compile any of this. Statisticians, archivists, and the open-source football community spent years digging up box scores and charting plays. I just got tired of re-cleaning their work for every side project, so I built the clean layer once and put it behind a free API. All the credit for the data goes to them. If this saves you an afternoon, that's the whole reward.

— The nfldata guy
LIVE
PASS YDS: T.BRADY 89,216 (1999-PRESENT) ◆ NORMALIZED: ONE SCHEMA, 1999-PRESENT ◆ NO API KEY REQUIRED — JUST GET ◆ PLAYS: 1,279,000+ SINCE 1999 ◆ FREE & OPEN — API.NFLDATA.ORG/DOCS ◆ GAMES: 19,900+ WITH BOX SCORES ◆ STABLE IDS · ISO DATES · TYPED NUMBERS  ◆   PASS YDS: T.BRADY 89,216 (1999-PRESENT) ◆ NORMALIZED: ONE SCHEMA, 1999-PRESENT ◆ NO API KEY REQUIRED — JUST GET ◆ PLAYS: 1,279,000+ SINCE 1999 ◆ FREE & OPEN — API.NFLDATA.ORG/DOCS ◆ GAMES: 19,900+ WITH BOX SCORES ◆ STABLE IDS · ISO DATES · TYPED NUMBERS  ◆