Historical Data
The NFL API carries the league's history back to the 2000 season through the same feeds that serve the current season: any feed that takes a season_year parameter addresses a past season the same way it addresses the current one, and ID-keyed feeds such as Player Profile and the game feeds reach past seasons through the IDs a past schedule or team feed returns. This page covers what is on file, how past-season data changes, and a workflow for loading it.
What Is on File
The Seasons feed is the catalog, one entry per year and season type. Coverage reaches back as follows:
| Coverage | Begins |
|---|---|
Regular season (REG) and postseason (PST) | 2000 season |
Preseason (PRE) | 2015 season |
Seasons 2000 to 2020 were sourced in part directly from the NFL, so those seasons can carry additional or separate data points compared with current data. Beginning with the 2021 season, all NFL data is collected by Sportradar's expert operators.
Historical statistics live inside the NFL API itself; no separate API or add-on package is required. Any feed that takes the season_year parameter retrieves historical data:
| Feed | Scope | Use |
|---|---|---|
| Daily Change Log | {year}/{month}/{day} | Entities that changed on a past league day |
| Daily Transactions | {year}/{month}/{day} | Transactions recorded on a past league day |
| Postgame Standings | {season_year}/{season_type} | Final standings of a past season |
| Seasonal Statistics | {season_year}/{season_type}, {team_id} | Team, opponent, and player totals for a past season |
| Season Schedule | {season_year}/{season_type} | Every game of a past season, with the game IDs that key the game feeds |
| Weekly Depth Charts | {season_year}/{season_type}/{nfl_season_week} | Depth charts for a past week |
| Weekly Injuries | {season_year}/{season_type}/{nfl_season_week} | Injury reports for a past week |
| Weekly Schedule | {season_year}/{season_type}/{nfl_season_week} | One week of a past season |
Feeds keyed by ID rather than by season reach the same history: Player Profile carries a player's statistics for every season on file, and the game feeds serve any game ID a past Season Schedule returns. Both are shown under Data Accessibility.
Data Updates
- Past-season statistics can change after the fact: catch statistical updates to past seasons with the Daily Change Log, which lists the entities that changed on a given league day
- Datasets are continually enhanced, so certain stats may be unavailable in past years or in earlier API versions
- New data points are typically available in the most recent API version from the point they are added going forward; the NFL API Change Log carries the specifics on added data
- The 2000 to 2020 seasons can carry additional or separate data points compared with current seasons (see What Is on File), so read each season's fields from its own responses rather than assuming the current shape
Data Accessibility
The retrieval samples below are starting points for historical statistics by team, by player, and by game.
Team seasonal statistics
Seasonal Statistics provides complete team and player seasonal statistics for a given season and season type. The request takes three parameters:
GET https://api.sportradar.com/nfl/official/trial/v7/en/seasons/2020/REG/teams/33405046-04ee-4058-a950-d606f8c30852/statistics.json
x-api-key: YOUR_API_KEYseason_year: the year the NFL season began, so2020addresses the 2020 seasonseason_type:PRE(preseason),REG(regular season), orPST(postseason)team_id: the team's unique ID, found in the League Hierarchy feed
The Minnesota Vikings' 2020 regular season: https://api.sportradar.com/nfl/official/trial/v7/en/seasons/2020/REG/teams/33405046-04ee-4058-a950-d606f8c30852/statistics.xml
The response breaks the season down by team (record), opponent (opponents), and player (player_records); the full data-point list is in the Seasonal Statistics data points reference. The three tabs below show each section, with the player section trimmed to one player:
<record games_played="16">
<touchdowns pass="35" rush="20" total_return="0" total="55" fumble_return="0" int_return="0" kick_return="0" punt_return="0" other="0"/>
<rushing avg_yards="4.878" attempts="468" touchdowns="20" tlost="21" tlost_yards="-38" yards="2283" longest="70" longest_touchdown="70" redzone_attempts="100" broken_tackles="49" kneel_downs="7" scrambles="17" yards_after_contact="1068"/>
<receiving targets="485" receptions="349" avg_yards="12.221" yards="4265" touchdowns="35" yards_after_catch="1936" longest="71" longest_touchdown="71" redzone_targets="56" air_yards="2329" broken_tackles="31" dropped_passes="18" catchable_passes="26" yards_after_contact="674"/>
<punts attempts="56" yards="2435" net_yards="2054" blocked="2" touchbacks="3" inside_20="11" return_yards="321" avg_net_yards="36.679" avg_yards="43.482" longest="59" hang_time="233.375" avg_hang_time="4.322"/>
<punt_returns avg_yards="4.313" returns="16" yards="69" longest="13" touchdowns="0" longest_touchdown="0" faircatches="11"/>
<penalties penalties="82" yards="650"/>
<passing attempts="516" completions="349" cmp_pct="67.636" interceptions="13" sack_yards="256" rating="105.0" touchdowns="35" avg_yards="8.266" sacks="39" longest="71" longest_touchdown="71" air_yards="2329" redzone_attempts="62" net_yards="4009" yards="4009" gross_yards="4265" throw_aways="27" poor_throws="67" defended_passes="52" dropped_passes="18" spikes="3" blitzes="181" hurries="56" knockdowns="78" pocket_time="1423.786" batted_passes="11" on_target_throws="395"/>
<misc_returns yards="10" touchdowns="0" longest_touchdown="0" blk_fg_touchdowns="0" blk_punt_touchdowns="0" fg_return_touchdowns="0" ez_rec_touchdowns="0" returns="2"/>
<kickoffs endzone="8" inside_20="4" return_yards="670" returned="0" touchbacks="53" yards="5053" out_of_bounds="0" kickoffs="85" onside_attempts="5" onside_successes="0" squib_kicks="2"/>
<kick_returns avg_yards="21.879" yards="722" longest="38" touchdowns="0" longest_touchdown="0" faircatches="0" returns="33"/>
<interceptions return_yards="65" returned="15" interceptions="15"/>
<int_returns avg_yards="4.333" yards="65" longest="16" touchdowns="0" longest_touchdown="0" returns="15"/>
<fumbles fumbles="22" lost_fumbles="10" own_rec="9" own_rec_yards="-13" opp_rec="7" opp_rec_yards="7" out_of_bounds="3" forced_fumbles="11" own_rec_tds="0" opp_rec_tds="0" ez_rec_tds="0"/>
<first_downs pass="212" penalty="32" rush="139" total="383"/>
<field_goals attempts="22" made="15" blocked="0" yards="524" avg_yards="23.818" longest="53" missed="7" pct="68.182" attempts_19="0" attempts_29="6" attempts_39="4" attempts_49="7" attempts_50="5" made_19="0" made_29="6" made_39="3" made_49="4" made_50="2"/>
<defense tackles="606" assists="389" combined="995" sacks="23.0" sack_yards="126.0" interceptions="15" passes_defended="56" forced_fumbles="8" fumble_recoveries="4" qb_hits="70" tloss="54.0" tloss_yards="181.0" safeties="1" sp_tackles="56" sp_assists="9" sp_forced_fumbles="3" sp_fumble_recoveries="5" sp_blocks="2" misc_tackles="12" misc_assists="2" misc_forced_fumbles="0" misc_fumble_recoveries="7" def_targets="528" def_comps="361" blitzes="249" hurries="49" knockdowns="44" missed_tackles="131" batted_passes="3"/>
<extra_points>
<kicks attempts="43" blocked="0" made="37" pct="86.047"/>
<conversions pass_attempts="8" pass_successes="5" rush_attempts="4" rush_successes="3" defense_attempts="0" defense_successes="0" turnover_successes="0"/>
</extra_points>
<efficiency>
<goaltogo attempts="41" successes="31" pct="75.61"/>
<redzone attempts="59" successes="42" pct="71.186"/>
<thirddown attempts="181" successes="74" pct="40.884"/>
<fourthdown attempts="23" successes="13" pct="56.522"/>
</efficiency>
</record><opponents games_played="16">
<touchdowns pass="30" rush="19" total_return="4" total="53" fumble_return="2" int_return="1" kick_return="1" punt_return="0" other="0"/>
<rushing avg_yards="4.557" attempts="472" touchdowns="19" tlost="28" tlost_yards="-58" yards="2151" longest="42" longest_touchdown="42" redzone_attempts="80" broken_tackles="32" kneel_downs="16" scrambles="28" yards_after_contact="965"/>
<receiving targets="514" receptions="358" avg_yards="11.919" yards="4267" touchdowns="30" yards_after_catch="1744" longest="61" longest_touchdown="48" redzone_targets="72" air_yards="2523" broken_tackles="23" dropped_passes="22" catchable_passes="30" yards_after_contact="466"/>
<punts attempts="42" yards="1929" net_yards="1780" blocked="0" touchbacks="4" inside_20="18" return_yards="69" avg_net_yards="42.381" avg_yards="45.929" longest="61" hang_time="186.91899999999998" avg_hang_time="4.45"/>
<punt_returns avg_yards="9.727" returns="33" yards="321" longest="32" touchdowns="0" longest_touchdown="0" faircatches="11"/>
<penalties penalties="83" yards="723"/>
<passing attempts="541" completions="358" cmp_pct="66.174" interceptions="15" sack_yards="126" rating="97.0" touchdowns="30" avg_yards="7.887" sacks="23" longest="61" longest_touchdown="48" air_yards="2523" redzone_attempts="77" net_yards="4141" yards="4141" gross_yards="4267" throw_aways="20" poor_throws="86" defended_passes="49" dropped_passes="22" spikes="6" blitzes="158" hurries="36" knockdowns="44" pocket_time="1373.238" batted_passes="3" on_target_throws="398"/>
<misc_returns yards="15" touchdowns="0" longest_touchdown="0" blk_fg_touchdowns="0" blk_punt_touchdowns="0" fg_return_touchdowns="0" ez_rec_touchdowns="0" returns="1"/>
<kickoffs endzone="11" inside_20="2" return_yards="722" returned="0" touchbacks="71" yards="6654" out_of_bounds="1" kickoffs="105" onside_attempts="0" onside_successes="0" squib_kicks="2"/>
<kick_returns avg_yards="24.815" yards="670" longest="104" touchdowns="1" longest_touchdown="104" faircatches="0" returns="27"/>
<interceptions return_yards="177" returned="13" interceptions="13"/>
<int_returns avg_yards="13.615" yards="177" longest="43" touchdowns="1" longest_touchdown="43" returns="13"/>
<fumbles fumbles="17" lost_fumbles="7" own_rec="8" own_rec_yards="-23" opp_rec="10" opp_rec_yards="91" out_of_bounds="2" forced_fumbles="18" own_rec_tds="0" opp_rec_tds="2" ez_rec_tds="0"/>
<first_downs pass="208" penalty="22" rush="136" total="366"/>
<field_goals attempts="39" made="35" blocked="1" yards="1299" avg_yards="34.184" longest="55" missed="3" pct="89.744" attempts_19="2" attempts_29="9" attempts_39="8" attempts_49="12" attempts_50="8" made_19="2" made_29="8" made_39="8" made_49="11" made_50="6"/>
<defense tackles="607" assists="380" combined="987" sacks="39.0" sack_yards="256.0" interceptions="13" passes_defended="65" forced_fumbles="16" fumble_recoveries="9" qb_hits="117" tloss="50.0" tloss_yards="213.0" safeties="2" sp_tackles="38" sp_assists="23" sp_forced_fumbles="2" sp_fumble_recoveries="2" sp_blocks="2" misc_tackles="14" misc_assists="3" misc_forced_fumbles="0" misc_fumble_recoveries="7" def_targets="493" def_comps="355" blitzes="293" hurries="62" knockdowns="78" missed_tackles="137" batted_passes="11"/>
<extra_points>
<kicks attempts="46" blocked="1" made="42" pct="91.304"/>
<conversions pass_attempts="5" pass_successes="1" rush_attempts="2" rush_successes="2" defense_attempts="0" defense_successes="0" turnover_successes="0"/>
</extra_points>
<efficiency>
<goaltogo attempts="41" successes="27" pct="65.854"/>
<redzone attempts="58" successes="34" pct="58.621"/>
<thirddown attempts="185" successes="73" pct="39.459"/>
<fourthdown attempts="24" successes="17" pct="70.833"/>
</efficiency>
</opponents><?xml version="1.0" ?>
<!-- Generation started @ 2026-09-01 09:20:51 +0000 -->
<season xmlns="http://feed.elasticstats.com/schema/football/statistics-v7.0.xsd" id="2eec467f-9ce1-484c-b58f-e11615bede68" year="2020" type="REG" name="REG">
<team id="33405046-04ee-4058-a950-d606f8c30852" name="Vikings" market="Minnesota" alias="MIN" sr_id="sr:competitor:4423">
<player_records>
<player id="016a6d56-0b72-490e-8dae-41b5d3d2db63" name="Jaleel Johnson" jersey="91" position="DT" sr_id="sr:player:1130133" games_played="16" games_started="16">
<penalties penalties="2" yards="10" first_downs="0"/>
<defense tackles="22" assists="22" combined="44" sacks="1.5" sack_yards="8.5" interceptions="0" passes_defended="0" forced_fumbles="0" fumble_recoveries="0" qb_hits="2" tloss="3.0" tloss_yards="7.0" safeties="0" sp_tackles="0" sp_assists="0" sp_forced_fumbles="0" sp_fumble_recoveries="0" sp_blocks="0" misc_tackles="0" misc_assists="0" misc_forced_fumbles="0" misc_fumble_recoveries="0" def_targets="4" def_comps="3" blitzes="0" hurries="0" knockdowns="0" missed_tackles="3" batted_passes="0"/>
</player>
<!-- ... omitted for brevity -->
</player_records>
<!-- ... omitted for brevity -->
</team>
</season>
<!-- Generation ended @ 2026-09-01 09:20:51 +0000 -->Player seasonal statistics
Player Profile provides biographical information, draft information, and seasonal statistics for one player, broken down by team and season type (preseason, regular season, and postseason) and reaching back to the beginning of data collection (see What Is on File).
GET https://api.sportradar.com/nfl/official/trial/v7/en/players/11cad59d-90dd-449c-a839-dddaba4fe16c/profile.json
x-api-key: YOUR_API_KEYThe request takes the player's unique player_id, which a game, team, or schedule feed supplies. Two paths:
On either path, retrieve the Chiefs' team.id (through the Hierarchy feed, a Schedule feed, or a Game feed), then parse the Team Profile for Patrick Mahomes' unique player.id.
Patrick Mahomes' career: https://api.sportradar.com/nfl/official/trial/v7/en/players/11cad59d-90dd-449c-a839-dddaba4fe16c/profile.xml
The full data-point list is in the Player Profile reference. The response below is trimmed to the header, team, draft, references, and the first season entry:
{
"id": "11cad59d-90dd-449c-a839-dddaba4fe16c",
"name": "Patrick Mahomes",
"jersey": "15",
"last_name": "Mahomes",
"first_name": "Patrick",
"abbr_name": "P.Mahomes",
"birth_date": "1995-09-17",
"weight": 225.0,
"height": 74,
"position": "QB",
"birth_place": "Tyler, TX, USA",
"high_school": "Whitehouse (TX)",
"college": "Texas Tech",
"college_conf": "Big Twelve Conference",
"rookie_year": 2017,
"status": "ACT",
"sr_id": "sr:player:1129537",
"experience": 10,
"salary": 28062269,
"team": {
"id": "6680d28d-d4d2-49f6-aace-5292d3ec02c2",
"name": "Chiefs",
"market": "Kansas City",
"alias": "KC",
"sr_id": "sr:competitor:4422"
},
"draft": {
"year": 2017,
"round": 1,
"number": 10,
"team": {
"id": "6680d28d-d4d2-49f6-aace-5292d3ec02c2",
"name": "Chiefs",
"market": "Kansas City",
"alias": "KC",
"sr_id": "sr:competitor:4422"
}
},
"references": [
{
"source_id": "MAH401939"
},
{
"source_id": "00-0033873"
}
],
"seasons": [
{
"id": "3d6abb6b-9c91-40a9-9441-bbadc8a56f0e",
"year": 2017,
"type": "PRE",
"name": "PRE",
"teams": [
{
"id": "6680d28d-d4d2-49f6-aace-5292d3ec02c2",
"name": "Chiefs",
"market": "Kansas City",
"alias": "KC",
"sr_id": "sr:competitor:4422"
}
]
}
]
}<?xml version="1.0" ?>
<!-- Generation started @ 2026-09-01 07:00:15 +0000 -->
<player xmlns="http://feed.elasticstats.com/schema/football/profile-v7.0.xsd" id="11cad59d-90dd-449c-a839-dddaba4fe16c" name="Patrick Mahomes" jersey="15" last_name="Mahomes" first_name="Patrick" abbr_name="P.Mahomes" birth_date="1995-09-17" weight="225.0" height="74" position="QB" birth_place="Tyler, TX, USA" high_school="Whitehouse (TX)" college="Texas Tech" college_conf="Big Twelve Conference" rookie_year="2017" status="ACT" sr_id="sr:player:1129537" experience="10" salary="28062269">
<team id="6680d28d-d4d2-49f6-aace-5292d3ec02c2" name="Chiefs" market="Kansas City" alias="KC" sr_id="sr:competitor:4422"/>
<draft year="2017" round="1" number="10">
<team id="6680d28d-d4d2-49f6-aace-5292d3ec02c2" name="Chiefs" market="Kansas City" alias="KC" sr_id="sr:competitor:4422"/>
</draft>
<reference source_id="MAH401939"/>
<reference source_id="00-0033873"/>
<season id="3d6abb6b-9c91-40a9-9441-bbadc8a56f0e" year="2017" type="PRE" name="PRE">
<team id="6680d28d-d4d2-49f6-aace-5292d3ec02c2" name="Chiefs" market="Kansas City" alias="KC" sr_id="sr:competitor:4422">
<!-- ... omitted for brevity -->
</team>
</season>
<!-- ... omitted for brevity -->
<!-- ... omitted for brevity -->
</player>
<!-- Generation ended @ 2026-09-01 07:00:15 +0000 -->Game statistics
Historical game detail comes from the game feeds, each keyed by game_id: Game Boxscore, Game Roster, Game Statistics, or Game Play-by-Play, depending on the use case. To retrieve the game statistics for an entire past season, collect that season's game IDs from the Season Schedule feed and request Game Statistics for each:
GET https://api.sportradar.com/nfl/official/trial/v7/en/games/6b5b649e-7134-4e3e-a637-4347f32b732e/statistics.json
x-api-key: YOUR_API_KEYSeason Schedule takes the same season_year (the year the season began, so 2020 for the 2020 season) and season_type (PRE, REG, or PST) parameters. The 2020 regular season: https://api.sportradar.com/nfl/official/trial/v7/en/games/2020/REG/schedule.xml
The response below is trimmed to the first game of week 1:
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" charset="UTF-8" href="/xslt/football/schedule-v7.0.xsl"?>
<!-- Generation started @ 2025-11-18 07:15:44 +0000 -->
<season xmlns="http://feed.elasticstats.com/schema/football/schedule-v7.0.xsd" id="2eec467f-9ce1-484c-b58f-e11615bede68" year="2020" type="REG" name="REG">
<week id="fd51f745-b7eb-4c01-8550-d9095aa5407d" sequence="1" title="1">
<game id="6b5b649e-7134-4e3e-a637-4347f32b732e" status="closed" reference="58168" number="1" scheduled="2020-09-11T00:20:00+00:00" attendance="15895" utc_offset="-6" entry_mode="INGEST" sr_id="sr:match:21980349" conference_game="false">
<venue id="2ec4c411-dac2-403d-b091-6b6aa4a0a914" name="GEHA Field at Arrowhead Stadium" city="Kansas City" state="MO" country="USA" zip="64129" address="One Arrowhead Drive" capacity="76416" surface="turf" roof_type="outdoor" sr_id="sr:venue:8189">
<!-- ... omitted for brevity -->
</venue>
<home id="6680d28d-d4d2-49f6-aace-5292d3ec02c2" name="Kansas City Chiefs" alias="KC" game_number="1" sr_id="sr:competitor:4422"/>
<away id="82d2d380-3834-4938-835f-aec541e5ece7" name="Houston Texans" alias="HOU" game_number="1" sr_id="sr:competitor:4324"/>
<!-- ... omitted for brevity -->
</game>
<!-- ... omitted for brevity -->
</week>
<!-- ... omitted for brevity -->
</season>
<!-- Generation ended @ 2025-11-18 07:15:45 +0000 -->Each game.id in the schedule keys a Game Statistics request; for the first game above: https://api.sportradar.com/nfl/official/trial/v7/en/games/6b5b649e-7134-4e3e-a637-4347f32b732e/statistics.xml. The same walk applies to every NFL season on file; swap in whichever Game feed the use case needs.
Historical Retrieval Workflow
Best Practices
- Address a past season by
{season_year}/{season_type}, whereseason_yearis the year the season began (2020for the 2020 season) - Take team IDs from League Hierarchy and game IDs from that season's Season Schedule: they key Seasonal Statistics and the game feeds for every season on file, and the same schedule-then-game walk works for any Game feed
- Read each season's fields from its own responses: the 2000 to 2020 seasons can carry additional or separate data points, and data points added later are available from the point they were added going forward
- Watch the Daily Change Log for statistical updates to past seasons, and the NFL API Change Log for added data
Updated 8 days ago
