NFL games dataset CSV: what's inside, season by season
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 group | Available from | Rows covered |
|---|---|---|
| schedule, teams, scores | 1999 | all 7,548 |
| spread_line, total_line | 1999 | 7,388 of 7,548 (no lines yet on 160 unplayed 2026 rows) |
| moneylines and odds (spreads, totals) | 2006 | 5,407 |
| gametime, temp, wind | varies | empty in early seasons and domes |
| QB names, coaches, referee | varies | empty 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
| Column | Meaning |
|---|---|
| game_id | nflverse ID, format season_week_AWAY_HOME, e.g. 2024_01_BAL_KC |
| season | NFL season year, 1999 to 2026 |
| game_type | REG regular season, WC wild card, DIV divisional, CON conference championship, SB Super Bowl |
| week | Week number; playoff weeks continue past the regular season |
| gameday | Kickoff date, YYYY-MM-DD |
| weekday, gametime | Day of week and scheduled kickoff in US Eastern time (gametime empty in early seasons) |
| location | Home or Neutral (every Super Bowl is Neutral) |
Teams and score
| Column | Meaning |
|---|---|
| away_team, home_team | 3-letter nflverse abbreviations |
| away_score, home_score | Final points. Empty until the game is played |
| result | home_score minus away_score |
| total | home_score plus away_score |
| overtime | 1 if the game went to overtime, else 0 |
| div_game | 1 if both teams share a division, else 0 |
Closing lines
| Column | Meaning |
|---|---|
| spread_line | Closing spread for the HOME team. Positive = home favored, negative = away favored. From 1999, 7,388 rows |
| total_line | Closing over/under line, e.g. 44.5. From 1999, 7,388 rows |
| away_moneyline, home_moneyline | American odds to win outright. Negative = favorite, positive = underdog. From 2006 |
| away_spread_odds, home_spread_odds | American odds against the spread. From 2006 |
| over_odds, under_odds | American 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
| Column | Meaning |
|---|---|
| away_rest, home_rest | Days of rest since each team's previous game |
| away_qb_name, home_qb_name | Starting quarterbacks (IDs in the *_qb_id columns) |
| away_coach, home_coach | Head coaches |
| referee | Crew referee for the game |
| roof, surface | outdoors / dome / closed / open, and grass, fieldturf, and similar |
| temp, wind | Kickoff temperature in Fahrenheit and wind in MPH. Empty for domes and many older outdoor games |
| stadium, stadium_id | Stadium name and nflverse code, e.g. ATL00 |
| old_game_id, gsis, pfr, pff, espn, ftn, nfl_detail_id | Cross-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 sample | Full pack | |
|---|---|---|
| games.csv | 22 rows, 14 of 46 columns | all 7,548 rows, 46 columns |
| team-records-by-season.csv | not included | 861 rows |
| season-summaries.csv | all 27 rows | all 27 rows |
| data dictionary | this guide | full dictionary + source checksums |
| MCP queries | full 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.