Across 7,276 games from 1999 to 2025, 187 ended in a shutout. The rate halved from 3.5% of games in the 2000s to 2.0% — then stopped falling, holding at 2.2% since 2017. The steadier decline belongs to the near-shutout: one side held to 6 or fewer slid from 13.5% of games to 8.9%. The 27-season count, the 2024 record low of two, the 2025 rebound of seven, and why finals alone can't name the rule change that did it.
By C. B. Zakarian · Published July 26, 2026
Every time a scoreboard shows a zero after sixty minutes, the broadcast reaches for the same framing: a relic, a throwback, "you just don't see this anymore." It's a checkable claim, because the nflverse game file carries the final score of every NFL game since 1999. This page counts all of it: 7,276 played games from 1999 to 2025, playoffs included, of which 187 ended with one team on zero — about one game in 39.
Two lines per season: the share of games in which one side scored 0, and the share in which one side was held to 6 or fewer (the second group includes the first). The dashed segments are the averages of the three 9-season eras.
| Era | Games | Shutouts | Shutout rate | Per season | One side ≤6 |
|---|---|---|---|---|---|
| 1999–2007 | 2,379 | 83 | 3.49% | 9.2 | 13.54% |
| 2008–2016 | 2,403 | 49 | 2.04% | 5.4 | 9.78% |
| 2017–2025 | 2,494 | 55 | 2.21% | 6.1 | 8.86% |
| All games | 7,276 | 187 | 2.57% | — | 10.69% |
The extremes frame the era. 2000 and 2006 each produced 15 shutouts (5.79% and 5.62% of their games) — a pace the league hasn't approached since. At the other end, 2024 produced exactly two, an all-time low for the file at 0.70%: New Orleans blanked 34-0 at Green Bay on December 23, and Kansas City blanked 38-0 at Denver in Week 18. Between those poles, single seasons bounce hard: 2017 spiked to 11 shutouts (4.12%) in the middle of the supposedly shutout-proof modern era, while 2013, 2015, 2016, and 2020 managed just three apiece.
And one near-miss of history: in 7,276 games there is not a single 0-0 tie. Somebody has scored in every NFL game in the file.
The era table says the shutout collapsed between the 2000s and the 2010s — from 9.2 a season to 5.4 — and then quietly stopped collapsing. The last nine seasons actually run slightly above the middle era (2.21% vs 2.04%). "The shutout is dying" was true a decade ago; the honest present tense is "the shutout already died halfway, and has held there since."
Why trust the near-shutout line more? Counts. A shutout season is a sample of 2 to 15 events, so the blue line is mostly noise wrapped around a step down. The ≤6 group runs four times larger (778 games total vs 187) and behaves accordingly: its correlation with the season number is r = −0.77, versus −0.48 for shutouts. Being held under a touchdown is the signal; the zero itself is the garnish on top of it.
The slide also isn't an artifact of where the threshold sits. Held to 3 or fewer: 9.37% → 5.95% → 5.77% across the three eras. Held to 9 or fewer: 23.75% → 17.69% → 16.64%. Every version of "offense had a terrible day" shows the same shape — a big drop into the 2010s, then a flattening — which is exactly the shape of the league's scoring rise generally (about four points a game over the span; see the scoring trend explainer).
What you cannot get from final scores is the cause. The candidate list is long and bundled: the 2004 point of emphasis on illegal contact, the expanding defenseless-receiver protections, the 2011 kickoff changes, the 2018 helmet and roughing enforcement, two decades of quarterback-friendly scheme evolution, and the analytics-era habit of going for it on fourth down rather than punting the ball back. All of those pushed scoring up during the same years, and a file of finals cannot separate them. This page claims the trend; it does not claim which rule built it.
All of these are straight rows from the game file:
One public file: games.csv from nflverse nfldata, bundled at /data/games.csv. Take every played game, compute the losing side's score, and count zeroes (and ≤6s) per season. The chart and the full console breakdown come from explainer_src/make_shutout_chart.py; the core fits in a dozen lines of pandas:
import pandas as pd
df = pd.read_csv("data_layer/games.csv")
g = df.dropna(subset=["home_score", "away_score"]).copy() # 7,276 played games
g["lo"] = g[["home_score", "away_score"]].min(axis=1) # losing side's points
print(len(g), int((g.lo == 0).sum())) # 7276 187
per = g.groupby("season").agg(
games=("lo", "size"),
shutouts=("lo", lambda s: int((s == 0).sum())),
under7=("lo", lambda s: int((s <= 6).sum())))
print(100 * per.shutouts / per.games) # the blue line
print(100 * per.under7 / per.games) # the rust line
for a, b in ((1999, 2007), (2008, 2016), (2017, 2025)):
e = g[g.season.between(a, b)]
print(a, b, round(100 * (e.lo == 0).mean(), 2),
round(100 * (e.lo <= 6).mean(), 2))
# 1999 2007 3.49 13.54 2008 2016 2.04 9.78 2017 2025 2.21 8.86
recent = g[g.lo == 0].sort_values("gameday").tail(2)
print(recent[["gameday", "away_team", "away_score",
"home_team", "home_score"]]) # the Dec 14, 2025 double
All figures on this page were computed 2026-07-26 on the 1999–2025 file (the 272 scoreless 2026 schedule rows drop out of the played-games filter). Numbers will shift slightly as future seasons append.
Data: nflverse/nfldata, public. All rates pool regular season and playoffs; the ≤6 group includes the shutouts by construction; ties never appear here because a 0-0 final has never occurred in the file.
Want the code behind these metrics? Work through the 45-chapter NFL analytics tutorial.
Browse tutorials Free tools