Skip to content

Data

NFL play-by-play data with EPA

Every NFL play since 1999 with EPA, win probability and the full set of model columns, filterable by team, down, play type and win probability. REST or MCP.

EndzoneAPI serves NFL play-by-play for every game since 1999, with expected points added (EPA), win probability and the rest of the model columns attached to each play.

Filter by season, week, offense, defense, down, quarter, play type, red zone, third down or win-probability range, and get back up to 1,000 plays a call. No R, no Python package, no parquet files to download first. The table below is read from the database.

Coverage by season

Counted from the database on November 12, 2026: finished regular-season and playoff games.

SeasonGamesCoveredPlays
2026136100%23,822
2025285100%48,771
2024285100%49,492
2023285100%49,665
2022284100%49,434
2021285100%49,922
2020269100%47,705
2019267100%47,260
2018267100%47,109
2017267100%47,245
2016267100%47,651
2015267100%48,122
2014267100%47,629
2013267100%48,158
2012267100%47,834
2011267100%47,448
2010267100%46,892
2009267100%46,519
2008267100%45,917
2007267100%46,266
2006267100%46,299
2005267100%46,823
2004267100%46,705
2003267100%46,811
2002267100%47,355
2001259100%44,969
200025999%45,491
1999259100%46,136

How to get it

get_plays, 10 credits a call. A full 2025 season is 49 calls and 490 credits, inside the 500 free credits every account gets each month. In Python, pip install endzoneapi and set ENDZONEAPI_API_KEY.

curl -X POST https://mcp.endzoneapi.com/v1/get_plays \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
  "season": 2024,
  "posteam": "KC",
  "third_down": true,
  "limit": 200
}'

What comes back

plays[]List of objects
plays[].game_id
plays[].play_id
plays[].season
plays[].week
plays[].posteam
plays[].defteam
plays[].qtr
plays[].time
plays[].down
plays[].ydstogo
plays[].yardline_100
plays[].yrdln
plays[].play_type

Every field and a real response: get_plays docs.

Questions

How far back does NFL play-by-play go?

Every game since the 1999 season, updated through the current week.

Do I have to load files to use it?

No. You query it over HTTP, filtered by team, down, play type and win probability, so there is nothing to download or parse.

Can I filter to specific situations?

Yes: down, quarter, red zone, third down, play type, offense, defense, passer, rusher, receiver and win-probability range, in any combination.

Can I use it from Claude or ChatGPT?

Yes. EndzoneAPI is an MCP server as well as a REST API: add one URL to Claude, Cursor or any MCP client and ask in plain English.

Is it free?

Every account gets 500 free credits every month and no card. Plans start at $19 a month for 10,000 credits.

What it will not do

  • Up to 1,000 plays per call. A full season is about 50 calls.
  • Player tracking (Next Gen Stats speed and separation per play) is not attached to plays; weekly NGS aggregates are a separate endpoint.
  • EPA and win probability are served as published by the models that produced them. We do not refit them.

Works with

Start with 500 free credits every month

No card. REST or MCP.