NFL Historical Data Download

Every NFL Game Since 1966.
Clean CSV. Weekly Updates.

Scores, point spreads, over/unders, weather conditions, stadium data, ELO ratings, and more — in one canonical dataset trusted by 30,000+ analysts.

14,371 Total Games
35 Core Columns
119 Enhanced Columns
1966 Earliest Season
What's Included

Three Datasets. One Source of Truth.

Each tier builds on the last — start free and upgrade as your needs grow.

Starter
Free

Download the 2025 NFL season data. Test the format with your tools, no commitment.

  • 2025 season (current year)
  • Core 35 columns
  • Point spreads & over/unders
  • Weather & stadium fields
  • Historical seasons 1966–2024
  • Playoffs & Super Bowls
  • Weekly updates
  • Enhanced analytics dataset
Download Free Sample
Analyst
$79 /year

Pro + the 119-column enhanced dataset with pre-built features for ML, research, and serious modeling.

  • Everything in Pro
  • 119-column enhanced CSV
  • ELO ratings pre & post game
  • Pythagorean win expectations
  • ATS records & rolling windows
  • Rest advantage & bye flags
  • Weather impact scores
  • Priority email support
Contact for Access →

Limited spots · Custom onboarding included

🔒
7-Day Money-Back Guarantee

Not satisfied? Email support@spreadspoke.com within 7 days of purchase for a full refund. No questions asked.

Data Dictionary

Column Reference

Every field in the Pro dataset, documented. Snake_case naming, consistent types.

▸ SCHEDULE & GAME INFO

ColumnTypeDescription
schedule_dateStringGame date (MM-DD-YYYY)
schedule_seasonIntegerNFL season year (e.g., 2024)
schedule_weekStringWeek number or "Wildcard", "Division", "Conference", "Superbowl"
schedule_playoffBooleanTRUE if postseason playoff game
stadiumStringStadium name
stadium_neutralBooleanTRUE if played at neutral venue

▸ TEAMS & SCORES

ColumnTypeDescription
team_homeStringFull home team name
home_team_idString2-or-3-letter team ID (e.g., "KC", "SF"). Team ID represents the franchise and accounts for team name or city changes.
score_homeIntegerHome team final score
team_awayStringFull away team name
away_team_idString2-or-3-letter team ID (e.g., "KC", "SF"). Team ID represents the franchise and accounts for team name or city changes.
score_awayIntegerAway team final score
team_winner_idStringWinning team's 2-or-3-letter team ID (e.g., "KC", "SF").
home_winBooleanTRUE if home team won
away_winBooleanTRUE if away team won
tieBooleanTRUE if game ended in tie
div_gameBooleanTRUE if divisional matchup

▸ BETTING LINES

ColumnTypeDescription
team_favorite_idStringTeam ID of the betting favorite; "PICK" for pick'em games with no favorite
team_underdog_idStringTeam ID of the betting favorite; "PICK" for pick'em games with no favorite
spread_favoriteFloatPoint spread for the favorite (negative = favored by that many). -7 would mean the favorite is a 7 point favorite.
favorite_spread_outcomeString"Cover", "No Cover", or "Push" from favorite's perspective
spread_outcomeString"Favorite" (i.e., favorite covers spread), "Underdog" (i.e., favorite does not cover spread), or "Push".
home_spread_outcomeString"Cover", "No Cover", or "Push" from home team's perspective
away_spread_outcomeString"Cover", "No Cover", or "Push" from away team's perspective
spread_homeIntegerHome team score minus away team score
spread_awayIntegerAway team score minus home team score
over_under_lineFloatPosted total points line (over/under)
score_totalIntegerActual combined game score
ou_outcomeString"Over", "Under", or "Push"

▸ WEATHER

ColumnTypeDescription
weather_temperatureFloatGame temperature in °F (72 for dome games)
weather_wind_mphFloatWind speed in mph (0 for dome games)
weather_humidityFloatHumidity percentage (Note, several blanks due to missing humidity data)
weather_detailStringCondition description: "indoor" (i.e., if dome game), "rain", "snow", "fog","snow | fog" (i.e., if snow and fog), etc.
temp_bucketStringClassification by temperature band: "Hot","Warm","Comfortable","Mild","Cool","Chilly","Freezing" and unknown if no temperature data.
high_windBooleanTRUE if wind speed is 15 mph or higher.
rain_flagBooleanTRUE if a rainy game.
snow_flagBooleanTRUE if a snowy game.
weather_impactInteger0 if no impact. 1 or 2 which represents total number of extreme wind or extreme weather impacts.

▸ ENHANCED COLUMNS (Analyst Tier — 119 total)

ColumnTypeDescription
home_rest_daysIntegerNumber of days since home team last played. Blank for week 1 games.
away_rest_daysIntegerNumber of days since away team last played. Blank for week 1 games.
home_bye_flagBooleanTRUE if home team coming off a bye week (i.e., didn't play last week)
away_bye_flagIntegerTRUE if away team coming off a bye week (i.e., didn't play last week
home_rest_advFloatRest advantage (home_rest_days − away_rest_days)
elo_home_preIntegerHome team ELO rating entering the game. ELO is a numerical rating that rises with wins and drops with losses, where a higher rating indicates a higher likelihood of winning against lower-rated opponents.
elo_away_preIntegerAway team ELO rating entering the game
elo_home_postIntegerHome team ELO rating after the game result
elo_away_postIntegerAway team ELO rating after the game result
elo_home_pred_spreadFloatPredicted spread for the home team using the difference between home and away teams' ELO ratings
elo_away_pred_spreadFloatPredicted spread for the away team using the difference between home and away teams' ELO ratings
pyth_home_preFloatHome team Pythagorean win expectation. Estimates a team's expected winning percentage based on points scored vs. allowed in prior games.
pyth_away_preFloatAway team Pythagorean win expectation
pyth_fav_preFloatFavorite team Pythagorean win expectation.
pyth_fav_postFloatFavorite team Pythagorean win expectation after game result.
pyth_home_postFloatHome team Pythagorean win expectation after game result
pyth_away_postFloatAway team Pythagorean win expectation after game result
win_pctFloatHome team all-time win percentage
cover_pctFloatHome team all-time against-the-spread win percentage
over_pctFloatHome team all-time over win percentage
win_pct_rollFloatHome team rolling 4-game win percentage
cover_pct_rollFloatHome team rolling 4-game against-the-spread win percentage
over_pct_rollFloatHome team rolling 4-game over win percentage
pts_for_rollFloatHome team average points scored rolling 4-games
pts_against_rollFloatHome team average points allowed rolling 4-games
mov_rollFloatHome team average margin of victory rolling 4-games
opp_win_pctFloatOpponent team all-time win percentage
opp_cover_pctFloatOpponent team all-time against-the-spread win percentage
opp_over_pctFloatOpponent team all-time over win percentage
opp_win_pct_rollFloatOpponent team rolling 4-game win percentage
opp_cover_pct_rollFloatOpponent team rolling 4-game against-the-spread win percentage
opp_over_pct_rollFloatOpponent team rolling 4-game over win percentage
opp_pts_for_rollFloatOpponent team average points scored rolling 4-games
opp_against_rollFloatOpponent team average points allowed rolling 4-games
opp_mov_rollFloatOpponent team average margin of victory rolling 4-games
home_ats_win_cumIntegerHome team cumulative against the spread wins
home_ats_loss_cumIntegerHome team cumulative against the spread losses
home_ats_push_cumIntegerHome team cumulative against the spread pushes
home_ats_win_rollIntegerHome team 4-game rolling against the spread wins
home_ats_loss_rollIntegerHome team 4-game rolling against the spread losses
home_ats_push_rollIntegerHome team 4-game rolling against the spread pushes
opp_ats_win_cumIntegerOpponent team cumulative against the spread wins
opp_ats_loss_cumIntegerOpponent team cumulative against the spread losses
opp_ats_push_cumIntegerOpponent team cumulative against the spread pushes
opp_ats_win_rollIntegerOpponent team 4-game rolling against the spread wins
opp_ats_loss_rollIntegerOpponent team 4-game rolling against the spread losses
opp_ats_push_rollIntegerOpponent team 4-game rolling against the spread pushes
+ more columns — contact us for the full schema
Request Full Schema →
Team Mapping

Historical Franchise IDs

Teams that have relocated keep consistent IDs for historical comparisons. Full mapping included in nfl_teams.csv.

Current NameHistorical NameID
Arizona CardinalsPhoenix Cardinals / St. Louis CardinalsARI
Atlanta FalconsATL
Baltimore RavensBAL
Buffalo BillsBUF
Carolina PanthersCAR
Chicago BearsCHI
Cincinnati BengalsCIN
Cleveland BrownsCLE
Dallas CowboysDAL
Denver BroncosDEN
Detroit LionsDET
Green Bay PackersGB
Houston TexansHOU
Indianapolis ColtsBaltimore ColtsIND
Jacksonville JaguarsJAX
Kansas City ChiefsKC
Los Angeles ChargersSan Diego ChargersLAC
Los Angeles RamsSt. Louis RamsLAR
Las Vegas RaidersOakland Raiders / Los Angeles RaidersLVR
Miami DolphinsMIA
Minnesota VikingsMIN
New England PatriotsBoston PatriotsNE
New Orleans SaintsNO
New York GiantsNYG
New York JetsNYJ
Philadelphia EaglesPHI
Pittsburgh SteelersPIT
Seattle SeahawksSEA
San Francisco 49ersSF
Tampa Bay BuccaneersTB
Tennessee TitansHouston Oilers / Tennesee OilersTEN
Washington CommandersWashington Redskins / Washington Football TeamWAS
Also Available Free

On Kaggle

The core dataset is available free on Kaggle with 30,000+ downloads. Create a Kaggle account to download and explore in notebooks — no payment required.

View on Kaggle →
Kaggle vs. Spreadspoke Pro
Feature Kaggle Pro
Full historical data
Weekly in-season updates Delayed ✓ Weekly
Direct CSV download Login req'd ✓ Instant
Enhanced 119-col dataset Analyst tier
Email support

Start With the Data That Started It All

Free sample, no email required. Or go Pro for $24.99 and get 59 seasons instantly.

Research use only · Not for gambling · 7-day refund policy