The NFL API for developers ballers.

Every play of the last six NFL seasons, with EPA and win probability, joined to final scores, schedules, and rosters under one schema. 2020 through 2025, complete — not a sample.

1,000 req/day free (2,000 with GitHub). No credit card.

NFL · 2020–2025 complete · 294,989 plays with EPA + win probability

Seasons: 2020, 2021, 2022, 2023, 2024, 2025

6
seasons complete
2020–2025, playoffs and Super Bowl included
294,989
plays
291,603 carry EPA · 293,296 carry win probability
1,693
games with final scores
every game of all six seasons
112,316
weekly player-stat rows
passing, rushing, receiving, PPR

Stats included

Every football stat field the API returns today — 96 in total, grouped by how they are produced. Each group carries its own freshness, because a sport is rarely uniformly current.

Per-game player stats

Post-game

Written after the game ends — not a live in-game feed. Last ingested 2026-08-30.

Endpoint
/v1/players/:id/stats
Last updated
2026-08-30

Fields (77)

QB Hits, QB Rating, Adjusted QBR, Passes Defended, QB Hurries, Sacks, Solo Tackles, Defensive Touchdowns, Tackles for Loss, Total Tackles, Fumbles, Fumbles Lost, Fumbles Recovered, Interceptions, Interception Return Touchdowns, Interception Return Yards, Kick Return Average, Longest Kick Return, Kick Returns, Kick Return Touchdowns, Kick Return Yards, Field Goals, Longest Field Goal, Field Goal %, Kicking Points, Total Kicking Attempts, Extra Points, Yards per Attempt, Completions/Attempts, Interceptions Thrown, QBR, Passing Touchdowns, Passing Yards, Punt Return Average, Longest Punt Return, Punt Returns, Punt Return Touchdowns, Punt Return Yards, Punting Average, Punts Inside the 20, Longest Punt, Punts, Touchbacks, Punting Yards, Yards per Reception, Longest Reception, Receptions, Receiving Touchdowns, Receiving Yards, Yards per Carry, Carries, Longest Rush, Rushing Touchdowns, Rushing Yards, Completions Passing Attempts, Extra Points Made Extra Point Attempts, Field Goals Made Field Goal Attempts, Gross Average Punt Yards, Hurries, Interception Touchdowns, Interception Yards, Long Field Goal Made, Long Kick Return, Long Punt, Long Punt Return, Long Reception, Long Rushing, Punt Yards, Punts Inside20, Receiving Targets, Rushing Attempts, Sacks/Sack Yards Lost, Total Kicking Points, Yards per Kick Return, Yards per Pass Attempt, Yards per Punt Return, Yards per Rush Attempt

Team stats (per game)

Post-game

Written after the game ends — not a live in-game feed. Last ingested 2026-08-30.

Endpoint
/v1/matches/:id/statistics
Last updated
2026-08-30

Fields (25)

Completions/Attempts, Defensive Touchdowns, First Downs, First Downs (passing), First Downs (penalty), First Downs (rushing), Fourth-Down Efficiency, Fumbles Lost, Interceptions Thrown, Net Passing Yards, Time of Possession, Red Zone Attempts, Rushing Attempts, Rushing Yards, Sacks / Yards Lost, Score, Third-Down Efficiency, Total Drives, Total Offensive Plays, Total Penalties Yards, Total Yards, Turnovers, Yards per Pass, Yards per Play, Yards per Rush Attempt

Not included

  • Not shown here — player_per_week_nflverse: nflverse per-week player stats — the same granularity as the primary per-game set, from a second source.
  • Not shown here — play_by_play: play-by-play events, not a stat line — mostly identifiers once classified.
  • Not shown here — rosters: roster listings — reference data, and no route serves them.

Missing a stat?

We build what people actually ask for. If a field you need is not on this page, tell us — requests are how we decide what to add next.

Name the field or the endpoint shape. Specifics help more than categories.

Goes straight to the team as a product signal. No newsletter, no account, nothing else done with your address.

What you can build

  • EPA / WP models

    Train expected-points and win-probability models on 291,603 plays that carry EPA.

  • Situational research

    Filter a game to third downs, to a play type, or to plays above an EPA threshold in one call.

  • Fantasy backtests

    Weekly PPR stat lines for every player across six seasons — 112,316 rows.

  • Game charting

    Reconstruct any game play by play with down, distance, field position, and game clock.

  • Roster-joined analysis

    Join weekly stats to season rosters to track position groups and depth over time.

  • Rest and venue studies

    Season schedules carrying stadium, roof, surface, and rest days for both teams.

See which endpoints are free: Free Sports API: 94 Free Endpoints.

Endpoints

On the gateway at api.bigballsdata.com. Authenticate with the bearer token from /dashboard/keys. Click any endpoint to see every field it returns.

7 endpoints · 113 documented fields. Click any row to see every field it returns.

CurrentResults through · next fixture

Read live from GET /v1/coverage — the same endpoint you can call yourself. Dates are absolute, not a build timestamp.

Start on the free tier

100 requests per minute and 1,000 per day, free — the highest per-minute burst of any free sports API we checked. Burst is what matters when something asks several questions in a row and waits on each answer.

  • Every sport and league we cover — the paid tiers add history depth and premium fields, not more leagues.
  • Calls are counted one for one — no credit weighting, no markets-times-regions arithmetic.
  • Link GitHub and the daily cap goes to 2,000.
  • No credit card.
Get a key →

Or ask your AI tool directly

Connect your account to Claude, ChatGPT, Cursor, Perplexity or any other MCP-compatible tool and ask for football data in conversation — scores, standings, player stats and Elo ratings, with no API key to paste and no code to write. Your plan and limits carry over exactly as they do here.

Connect your AI tool →

Integrate in a few lines

Node.js, @bigballsdata/sdktypescript
import { BigBallSportsClient } from '@bigballsdata/sdk';

const client = new BigBallSportsClient(process.env.BBS_API_KEY!);

type NflPlay = {
  posteam: string;
  defteam: string;
  play_type: string | null;
  down: number | null;
  ydstogo: number | null;
  epa: number | null;
  wp: number | null;
};

// Every third-down pass of the 2025 season opener, with EPA and win probability.
const plays = await client.get<NflPlay[]>('/v1/nfl/games/2025_01_DAL_PHI/plays', {
  play_type: 'pass',
  down: 3,
});

for (const p of plays.data) {
  console.log(`${p.posteam} 3rd & ${p.ydstogo}`, 'EPA', p.epa, 'WP', p.wp);
}

Everything NFL. One key.

Plays, schedules, weekly player stats, rosters, and standings sit behind a single API key and a single schema. No per-endpoint metering, no separate bill per data type, and no second vendor to fill in the history.

  • Six complete seasons, not a trailing window — 2020 through 2025, playoffs included.
  • Play-by-play, results, and rosters key on the same ids, so joins need no reconciliation.
  • Built on nflverse under CC BY 4.0 — redistributable, with attribution already handled.
  • The same canonical envelope as every other sport, so NFL code ports straight across.

A dedicated NFL plan is on the way. The free tier is live today — 1,000 req/day (2,000 with GitHub), no credit card, and the key you create now keeps working.

Frequently asked

Can I get live NFL scores?
When the NFL season is on, live scores refresh on a 15-second REST cache (~200ms typical round trip), with WebSocket push for score updates on the Pro+ plan. The NFL is currently between seasons (live resumes for the 2026 season); the nflverse historical surface is available now.
Does this NFL API include play-by-play?
Yes. /v1/nfl/games/:game_id/plays returns every play of a game, 294,989 across the six loaded seasons, with EPA (Expected Points Added) on 291,603 of them and win probability on 293,296. Each play also carries down, distance, field position, game clock, score differential, and the offensive and defensive team, and the endpoint filters by down, play_type, and min_epa.
Which NFL seasons does the API cover?
Six complete seasons, 2020 through 2025, each loaded all the way through the playoffs and the Super Bowl — 1,693 games, every one with a final score. The 2026 schedule is loaded too (272 games) and kicks off on 9 September 2026; results populate as it is played.
What dataset powers the NFL endpoints?
nflverse, the community-maintained NFL data project, published under CC BY 4.0 and refreshed weekly during the season. That licence is why this data is redistributable rather than scraped from a site that forbids it — see our attribution page. It is exposed through the same canonical envelope as the rest of the API.
Is there a free NFL stats API?
Yes. Schedules, weekly stats, play-by-play with EPA, and standings on the free tier at 1,000 req/day (2,000 with GitHub), no credit card. Injury reports are coming soon.
Does the NFL API include betting odds?
Not on the NFL surface today. The NFL endpoints are the nflverse dataset — schedules, play-by-play with EPA and Win Probability, weekly player stats, and standings. Betting odds and player props are served on other leagues (see the NBA and MLB APIs); they are not exposed on the NFL surface yet.
Can I join play-by-play to results and rosters?
That is the point of the surface. Plays, schedules, weekly player stats, and season rosters all key on the same game_id and player_id, so a play joins to its final score and to the roster the player was on that season without any reconciliation work on your side. A game_id looks like 2025_01_DAL_PHI (season, week, away, home), so you can construct one rather than look it up.
How much historical NFL data is there?
Six full seasons: 294,989 plays, 1,693 games with final scores, 112,316 weekly per-player stat rows, and season rosters for each year. It is built for backtesting and training situational models, queryable via /v1/nfl/games and /v1/nfl/games/:game_id/plays.
Are NFL injury reports available?
Not yet — NFL injury reports are coming soon.
How often does the NFL data refresh?
The nflverse surface refreshes weekly, after Monday Night Football closes out each week; standings update on the same schedule. Live in-game scores resume for the 2026 season.
Does the NFL API include team Elo ratings?
Yes. /v1/teams/:id/elo returns a team’s current Elo rating and its rank within the NFL, backed by a full backfill across every game since the 2020 season. /v1/teams/:id/elo/history?source=nfl returns the trend line, one point per settled game, opponent included. The source param is required for NFL: call the history endpoint without it and you get an empty array, because it defaults to the World Cup rating series.

Get an API key in 30 seconds