Since 2002 the AFC West crown has changed hands in just nine reigns — Kansas City owns 11 of 24 titles including nine straight on a 112-36 run, until Denver's 14-3 in 2025 ended it outright. The rematch comes with 2026's meanest calendar: net rest of −24 for the Chargers (worst of all 32 teams), −13 for the Raiders, a division sum of −36 when six of eight divisions are positive. Derived game by game from the nflverse file, tiebreakers included.
By C. B. Zakarian · Published August 12, 2026
For nine straight Septembers, previewing the AFC West meant previewing everyone's chase of Kansas City. That framing died on the file's 2025 page: Denver went 14-3 and took the division outright, three games clear of the Chargers at 11-6, while Kansas City collapsed to 6-11 and Las Vegas finished 3-14. So 2026 opens with something the division hasn't offered since 2016: a defending champion that isn't Kansas City. This page sets up the race with two exhibits computed straight from the game file. The second is the story: the AFC West drew a combined net rest of −36 days in 2026, the worst of the eight divisions, with the Chargers' −24 the single worst figure in the league.
Both panels come from one script over games.csv: panel A derives every AFC West champion from the played games, 2002–2025, and draws the division as a single strip of reigns; panel B sums each team's 2026 schedule into net rest days and places the four AFC West clubs among all 32:
Derive the champion each year from the file — win percentage first, then the official tiebreaker chain, the same code path as the division-repeats study (which owns the league-wide repeat rates and the full chain walkthrough) — and the strip reads: Raiders 2002, Chiefs 2003, Chargers 2004, Broncos 2005, then the Chargers' four straight (2006–2009), a Chiefs one-off in 2010, Denver's five straight (2011–2015), Kansas City's nine straight (2016–2024), and Denver in 2025. That is nine reigns in 24 seasons, and the ledger of titles runs Kansas City 11, Denver 7, Chargers 5, Raiders 1.
Two textures worth pulling out. First, this has been a division of dynasties rather than churn: 18 of the 24 titles sit inside just three runs of four years or longer. The Chiefs' nine-year reign was built on a 112-36 regular-season record (.757); Denver's five-year run of 2011–2015 went 58-22. Second, the strip mostly didn't need lawyers: only four of the 24 titles required the tiebreaker chain at all — 2008, a three-way tie at 8-8 in 2011, 2016, and 2018. The 2025 handover wasn't one of them. Denver finished three full games clear, its first division title since the 2015 strip segment, while Kansas City's 6-11 left the streak's end without an asterisk.
Now the panel that frames the rematch. Take each team's 17 scheduled 2026 games and sum (own rest − opponent rest); week 1 is 7-versus-7 by convention and contributes zero. This is the same statistic the schedule-quirks page computes league-wide — that page owns the bye map and the calendar mechanics — but the division view is stark. The 2026 ledger runs from Chicago's +15 down to the Chargers' −24, the worst figure of all 32 teams and nine days worse than the next-worst club (Philadelphia, −15). Las Vegas sits at −13, third-worst. Kansas City is at −2, and Denver's +3 makes the Broncos the only AFC West team in the black. Summed by division: AFC West −36, AFC North −13, and all six other divisions positive, with the NFC North's +18 the friendliest. League-wide, 69 of the 272 scheduled games carry a rest gap of three days or more — the imbalance is common; the West simply collected the wrong side of it.
The Chargers' −24 decomposes into six games spotting the opponent three or more days: at Buffalo in week 3 (the Bills off a 10-day week), at Kansas City in week 6, home to Houston in week 9, at Baltimore on a week-10 Monday night, home to New England in week 12, and at Las Vegas in week 14. Four of the six opponents — Chiefs, Texans, Patriots, Raiders — come off their bye. Los Angeles gets exactly two favorable gaps back: its own post-bye trip to the Rams in week 8 (+7) and a +3 at Miami in week 16. Las Vegas's −13 concentrates in one stretch: weeks 9, 11, and 12 are all −7 road games against bye-fresh hosts (San Francisco, Denver, Cleveland). Denver, by contrast, gives up a big gap only once (−7 at the Jets in week 14) and banks its own bye against Las Vegas in week 11 — the defending champion drew the division's one tolerable calendar.
The division's 12 head-to-head games spread across ten weeks of the 2026 schedule. The rematch arrives immediately: Denver at Kansas City, Monday night of week 1 (September 14) — the new champion opening at the deposed one. Its head-to-head ledger and betting snapshot belong to the week-1 slate page, and the close-game-luck study uses Denver's opener as its live test, so this page leaves the matchup to both. At the other end, the schedule saves the division for itself: both week-18 games are intra-division — the Chargers at Denver and Las Vegas at Kansas City on January 10 — so whatever the race looks like, it closes head-to-head. In between, the six pairings each meet home-and-home (why those games behave differently is the division-games page's territory), with clusters in weeks 4–6 and 14–15.
One public file: games.csv from nflverse nfldata, bundled at /data/games.csv. The chart and the full console ledger — the reign list, all 32 net-rest figures, and the per-division sums — come from explainer_src/make_afc_west_2026_chart.py; the core fits on a screen:
import pandas as pd
from collections import defaultdict
df = pd.read_csv("data_layer/games.csv")
df[["home_team", "away_team"]] = df[["home_team", "away_team"]].replace(
{"SD": "LAC", "STL": "LA", "OAK": "LV"})
# (A) the reign strip: best record in the West each season, 2002-2025
reg = df[(df.game_type == "REG") & df.home_score.notna()]
west = ["DEN", "KC", "LAC", "LV"]
for s in range(2002, 2026):
g = reg[reg.season == s]
p = {}
for t in west:
m = g[(g.home_team == t) | (g.away_team == t)]
w = (((m.home_team == t) & (m.result > 0)) |
((m.away_team == t) & (m.result < 0))).sum()
p[t] = (w + 0.5 * (m.result == 0).sum()) / len(m)
print(s, max(p, key=p.get)) # ties (2008, '11, '16, '18): official chain
# 2016-2024 -> KC nine straight; 2025 -> DEN (14-3)
# (B) 2026 net rest: sum of (own rest - opponent rest) over 17 games
s26 = df[(df.season == 2026) & (df.game_type == "REG")]
net = defaultdict(int)
for r in s26.itertuples():
net[r.home_team] += r.home_rest - r.away_rest
net[r.away_team] -= r.home_rest - r.away_rest
print(sorted(net.items(), key=lambda kv: kv[1])[:3])
# [('LAC', -24), ('PHI', -15), ('LV', -13)]
All figures on this page were computed 2026-08-12 from the file's played regular-season games, 2002–2025, plus the rest and date fields of its 272 scheduled 2026 rows — no 2026 results exist and none are used. Nothing here is hand-entered.
Data: nflverse/nfldata, public. Champions derived by win percentage plus the official division tiebreaker chain; net rest as defined above, week 1 zero by convention.
Want the code behind these metrics? Work through the 45-chapter NFL analytics tutorial.
Browse tutorials Free tools