Integration GuidesReference Docs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

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:

CoverageBegins
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:

FeedScopeUse
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_KEY
  • season_year: the year the NFL season began, so 2020 addresses the 2020 season
  • season_type: PRE (preseason), REG (regular season), or PST (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_KEY

The request takes the player's unique player_id, which a game, team, or schedule feed supplies. Two paths:

Two Paths to a Player Profilestart from league structure or from schedules
League pathLeague HierarchyTeamsTeam ProfilePlayer Profile
Schedule pathSeason ScheduleWeekly ScheduleTeam ProfilePlayer Profile
Both paths surface the player id the profile request takes.

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_KEY

Season ScheduleGame Statisticseach game id keys a statistics request

Season 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

Historical Retrieval WorkflowWalk the catalog, load each season, drill into players and games
CatalogSeasonsREG and PST from 2000, PRE from 2015
Per seasonSeason ScheduleSeasonal StatisticsPostgame StandingsPRE, REG, and PST per year
Per weekWeekly ScheduleWeekly InjuriesWeekly Depth Chartsone week of a past season
Per playerPlayer Profilecareer statistics by team and season type
Per gameGame StatisticsGame BoxscoreGame RosterPlay-by-Playlocal store
Dashed pills = optional depth. Catch statistical updates to past seasons with the Daily Change Log.


Best Practices

  • Address a past season by {season_year}/{season_type}, where season_year is the year the season began (2020 for 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

Did this page help you?