data·vault_
← Catalog

NFL games dataset CSV: what's inside, season by season

Guide to the NFL Games & Betting Lines 1999-2026 pack · snapshot 2026-09-06 · weighing raw vs preprocessed? Read free NFL historical data: nflverse vs a preprocessed pack.

The pack's main file, games.csv, holds 7,548 NFL games in one CSV, one row per game, from the 1999 season through the full 2026 schedule. Each row carries 46 columns: final scores, the closing spread, the closing total, moneylines with American odds, rest days, starting quarterbacks, head coaches, referee, stadium, roof, surface, and kickoff weather. Two derived tables add per-team-per-season records (861 rows) and per-season scoring summaries (27 rows). The team-records CSV guide shows sample rows from all 27 seasons and query examples for filtering that file by team and season.

Need NFL historical betting data free first? The 22-row sample CSV and the complete season-summaries.csv download with no signup, and the MCP queries below run against the full 7,548-row file at no cost. The full pack is a one-time purchase. Prefer a spreadsheet? Import the CSV into Excel or Google Sheets walks the sample step by step. Prefer pandas? The Python quickstart reads the same file from its URL.

Season coverage: 1999 through 2026

Every completed NFL game from week 1 of 1999 through the last snap of the 2025 season, plus all 272 scheduled 2026 games with no scores yet. Results therefore run through 2025, and the 2026 rows fill in as the season plays out on future snapshots.

Line availability varies by era, and the file marks it honestly rather than filling in placeholders:

Field groupAvailable fromRows covered
schedule, teams, scores1999all 7,548
spread_line, total_line19997,388 of 7,548 (no lines yet on 160 unplayed 2026 rows)
moneylines and odds (spreads, totals)20065,407
gametime, temp, windvariesempty in early seasons and domes
QB names, coaches, refereevariesempty where the source did not track them

Team abbreviations are nflverse codes and keep franchises at their old homes: OAK, SD, STL. Washington appears as WAS through 2021 and WSH from 2022. If you join across decades, map those codes first.

games.csv columns, by group

The full data dictionary ships in the pack. These are the columns you will touch most. (New to the format itself? What a data dictionary is, explained with excerpts from this pack.) The free sample shows 14 of the 46 columns; every one is defined here.

Game identity and schedule

ColumnMeaning
game_idnflverse ID, format season_week_AWAY_HOME, e.g. 2024_01_BAL_KC
seasonNFL season year, 1999 to 2026
game_typeREG regular season, WC wild card, DIV divisional, CON conference championship, SB Super Bowl
weekWeek number; playoff weeks continue past the regular season
gamedayKickoff date, YYYY-MM-DD
weekday, gametimeDay of week and scheduled kickoff in US Eastern time (gametime empty in early seasons)
locationHome or Neutral (every Super Bowl is Neutral)

Teams and score

ColumnMeaning
away_team, home_team3-letter nflverse abbreviations
away_score, home_scoreFinal points. Empty until the game is played
resulthome_score minus away_score
totalhome_score plus away_score
overtime1 if the game went to overtime, else 0
div_game1 if both teams share a division, else 0

Closing lines

ColumnMeaning
spread_lineClosing spread for the HOME team. Positive = home favored, negative = away favored. From 1999, 7,388 rows
total_lineClosing over/under line, e.g. 44.5. From 1999, 7,388 rows
away_moneyline, home_moneylineAmerican odds to win outright. Negative = favorite, positive = underdog. From 2006
away_spread_odds, home_spread_oddsAmerican odds against the spread. From 2006
over_odds, under_oddsAmerican odds on the over and under. From 2006

The spread sign convention matters when you write queries: spread_line is stored relative to the home team. A value of -4 means the away team is favored by 4; a value of 3 means the home team is favored by 3. The away team's spread is the negation. Pushes only exist on integer lines, when the result lands exactly on the number; half-point lines like 3.5 cannot push. The derived tables exclude pushes from cover percentages and count them separately as pushes.

Game context

ColumnMeaning
away_rest, home_restDays of rest since each team's previous game
away_qb_name, home_qb_nameStarting quarterbacks (IDs in the *_qb_id columns)
away_coach, home_coachHead coaches
refereeCrew referee for the game
roof, surfaceoutdoors / dome / closed / open, and grass, fieldturf, and similar
temp, windKickoff temperature in Fahrenheit and wind in MPH. Empty for domes and many older outdoor games
stadium, stadium_idStadium name and nflverse code, e.g. ATL00
old_game_id, gsis, pfr, pff, espn, ftn, nfl_detail_idCross-reference IDs for joins with other NFL data sources

The two derived tables

Both are computed from games.csv alone, by a documented script included in the pack, so you can rebuild or audit them.

team-records-by-season.csv, 861 rows: one row per team per season, playoffs included. Wins, losses, ties, points for and against, record against the spread with pushes broken out, and over/under record.

season-summaries.csv, 27 rows: one row per season, 1999 through 2025, and free to download as the complete table. Average home and away scoring, home win rate, share of decided games where the favorite covered, over/under split, and push counts.

Query the full file over MCP, free

You can filter the full 7,548-row file without downloading it. The dataset-mcp server queries the released files directly: 100 rows per call, filters on any column, results cached locally with a SHA-256 check on every load. No API key, no cost.

npx --allow-git=all -y github:jayjex/dataset-mcp
# plain form works on npm 10/11: npx -y github:jayjex/dataset-mcp

Example query, every 2025-season game, first page:

query_dataset("nfl-games", {where: [{column: "season", op: "=", value: "2025"}], limit: 10})

total_matched: 285 | next_offset: 10
2025_01_DAL_PHI  2025-09-04  DAL@PHI  20-24  spread=8.5  total=47.5
2025_01_KC_LAC   2025-09-05  KC@LAC   21-27  spread=-3   total=47.5
...

The season filter returns 285 games for 2025: 272 regular-season games plus the 13 playoff games. Filter operators are =, contains (case-insensitive), gt, and lt (numeric-aware, with date handling for gameday). columns picks a subset, and offset pages through large results. A second tool, get_stats, returns row counts, unique counts, numeric min/max/mean, and top-N values for any column, which makes quick sanity checks like home_win_pct by season a one-liner. Setup details live on the for agents page, and the raw files sit in the data-v1 release.

Free sample vs full pack

Free sampleFull pack
games.csv22 rows, 14 of 46 columnsall 7,548 rows, 46 columns
team-records-by-season.csvnot included861 rows
season-summaries.csvall 27 rowsall 27 rows
data dictionarythis guidefull dictionary + source checksums
MCP queriesfull file, free, 100 rows/call

Checkout and download run through Getly. The full pack is 3 CSVs (7,548 + 861 + 27 rows), data dictionary, source SHA-256 checksums.

Source and license

All game rows come from the nflverse-data project, file schedules/games.csv, downloaded 2026-09-06 with the SHA-256 recorded in the pack. nflverse-data is released under CC BY 4.0. The derived tables were computed from that file by Data Vault and carry the same license terms.

If you publish work built on this data, credit it like this: "Data from nflverse, CC BY 4.0". Samples on this site are also CC BY 4.0. No logos or league marks are included anywhere in the pack; team names are factual data.

What this data is for

Everything here is historical record: results, lines, and conditions as they stood at each game. Common uses are research and analysis, such as home win rates by decade, scoring trends across eras, weather effects on totals, or training and testing models on a 27-season split. The pack and this page describe the data only and offer no betting advice, picks, or predictions.