data·vault_
← Catalog

NFL spread history CSV: 27 seasons of closing lines and ATS covers

Guide to the NFL Games & Betting Lines 1999-2026 pack · column definitions in the games.csv column guide · weather columns covered in the stadium weather guide · what a full betting dataset contains: NFL betting data explained. Counted from the game rows themselves; nothing on this page is betting advice.

What the spread_line column holds

Every NFL game since 1999 in the games CSV carries a spread_line: the closing point spread for the home team. The sign carries the direction. A positive number says the home team is favored and must win by more than that number. A negative number says the away team is favored, and the magnitude is the expected home defeat. Zero is a pick'em. The convention comes straight from the nflverse source feed the pack is built on, and it matches the result column, which is already home_score - away_score.

Two rows from the free 22-row sample, the first two games of the 1999 season:

game_idmatchupresultspread_linereading
1999_01_MIN_ATLMIN @ ATL-3 (17-14 ATL)-4Minnesota favored by 4; Atlanta lost by 3 and covered
1999_01_KC_CHIKC @ CHI3 (20-17 CHI)-3Kansas City favored by 3; Chicago won outright and covered

Over the full file, the home side is favored far more often, as home field would suggest: 4,731 of the 7,276 played games with a line (65.0%) have a positive spread_line, 2,514 (34.6%) are negative, and 31 (0.4%) are pick'ems. The line exists on every played game in the file, plus 112 of the 272 scheduled 2026 rows that already carry early numbers.

What "cover ATS" means, in arithmetic

Covering the spread (ATS) is a score-keeping idea, not a prediction. A team covers when it beats the line, and the CSV makes that a one-line formula because result and spread_line share the home-team sign convention:

home_margin_vs_line = result - spread_line
# > 0: home team covered
# < 0: away team covered
# == 0: push (only possible on integer lines)

Check it against the two sample rows. MIN @ ATL: result -3, spread_line -4, so -3 - (-4) = +1. The home team lost but covered, because losing by 3 is better than the 4 the line demanded. KC @ CHI: 3 - (-3) = +6, home underdog covers by six. The pack's derived table, team-records-by-season.csv, runs exactly this arithmetic on every row and sums it per team per season into ats_wins, ats_losses, and ats_pushes columns, so a query like "Kansas City's 2023 ATS record" is a filter, not a research project: 16-5-0. For how these rows assemble into a full betting dataset, spreads joined to results and totals on game_id, see the NFL betting data guide.

The spread history itself, season by season

The pack's second derived file, season-summaries.csv, rolls the cover counts up per season. These are its ATS columns, copied from the shipped file. Cover percentages exclude pushes.

SeasonGamesFavorite cover %Underdog cover %Pushes
199925947.053.010
200025947.652.47
200125946.653.412
200226744.355.75
200326749.650.49
200426750.249.86
200526758.841.210
200626743.656.48
200726750.849.25
200826749.051.06
200926748.651.48
201026749.250.85
201126748.851.211
201226748.151.95
201326753.546.57
201426747.952.16
201526745.954.110
201626752.347.75
201726751.748.38
201826745.754.39
201926746.753.310
202026944.255.80
202128546.653.44
202228445.354.710
202328552.048.014
202428552.747.34
202528548.651.41

Read as history, the table says the market keeps itself honest. Underdogs covered more often than favorites in 19 of the 27 seasons. The extreme favorite year, 2005 at 58.8%, sits next to the extreme underdog year, 2020 at 55.8% for dogs, and neither side ran away over any long stretch. Roll the same rows up by decade from games.csv and the pattern flattens further: home teams covered 51.0% in the 249 decided games of 1999, 48.7% in the 2000s (2,578 decided), 48.7% in the 2010s (2,594), and 49.9% in the 2020s so far (1,660 through 2025).

Pushes, half-points, and the deepest lines ever closed

A push happens when the winning margin lands exactly on an integer spread. It has occurred 195 times in 7,276 spread games, 2.7%, and the half-point lines that sportsbooks quote make it rare by design: a .5 anywhere in spread_line makes the game structurally push-proof. 2017 is the extreme case, 267 games and zero pushes, while 2023 had 14.

The deepest closing lines in the file show the other side of cover math. The five largest favorites since 1999:

game_idFavoritespread_lineResultCover
2013_06_JAX_DENDEN by 27-27Denver by 16Jacksonville
2007_12_PHI_NENE by 24-24New England by 3Philadelphia
2007_16_MIA_NENE by 22-22New England by 21Miami
2019_03_MIA_DALDAL by 22-22Dallas by 25Dallas
2007_15_NYJ_NENE by 20.5-20.5New England by 10NY Jets

Favorites went 1-4 against the number in the five deepest spots. That is the pattern the season table already showed, in its sharpest form: the line prices the blowout in, so the favorite must not just win but win by more than the market already expects.

What this dataset cannot tell you

The file records closing lines and final scores. It contains no opening lines, no in-game movement, no player injuries, and no probability of any future outcome. Cover rates describe what happened in 7,276 completed games; they are a research baseline for questions like "how often did double-digit favorites cover in dome games" or "which seasons had the most pushes", both answerable with a filter and a group-by. Nothing here predicts the next game, and none of it is a recommendation to place one.

Get the spread history as CSV

The free 22-row sample carries the same 46 columns, including spread_line, so the formula above runs on it as-is. The full pack is the 7,548-row games.csv (7,276 played with lines), team-records-by-season.csv with the ATS sums per team per season, season-summaries.csv, a data dictionary, and SHA-256 checksums. Prefer a notebook? The pandas quickstart loads the sample in two lines, the Excel and Google Sheets guide covers the spreadsheet route, and the MCP vs API guide shows how to let an agent filter the full file for you.

Checkout and download run through Getly. The sample and season-summaries download free here, no signup. Source: nflverse game and betting data, CC BY 4.0.

NFL spread history CSV questions

What does a negative spread_line mean?

The away team is favored. spread_line is the closing spread for the home team, so -4 reads "the visitor should win by about 4". Positive means the home team is favored, zero is a pick'em. In the played games since 1999: 65.0% positive, 34.6% negative, 0.4% zero.

How is a cover ATS calculated from the rows?

result - spread_line, with the sign deciding it. Positive means the home team covered, negative the away team, zero a push. Running that over all rows reproduces the ats_wins, ats_losses, and ats_pushes columns in team-records-by-season.csv exactly, which is the check worth running on any spread history CSV you download from anywhere.

Do favorites or underdogs cover more often?

Underdogs, slightly: 50.9% of the 7,081 decided games since 1999, against 49.0% for favorites, with 2.7% pushes. The season table above shows underdogs taking 19 of 27 seasons. That near-even split is what an efficient line produces, and it says nothing about any single future game.