For twenty straight seasons — 2005 through 2024 — the NFC East never crowned the same champion twice in a row, the longest no-repeat run of the eight-divisions-of-four era, until Philadelphia's 11-6 title defense ended it in 2025. This preview derives all 24 champions from 6,223 games and lays out the four 2025 ledgers: Dallas scored a division-high 471 points at 7-9-1, and the Giants went 1-7 in one-score games. Ahead: a 12-game 2026 division calendar with 7 games by week 9, two short-week Thursdays, and a −15 net-rest ledger for the champion.
By C. B. Zakarian · Published August 12, 2026
Derive every division champion from the game file — 6,223 regular-season games, 2002 through 2025, standings by win percentage and then the official tiebreaker chain — and the NFC East stands alone. From 2005 through 2024 the division crowned a new champion twenty seasons in a row, the longest no-repeat run any division has produced in the eight-divisions-of-four era. No other division is close: the NFC South's eleven straight new champions (2003–2013) is the runner-up streak, and the AFC East sits at the opposite pole with 18 repeat transitions in the same 23-year window against the NFC East's three. Then 2025 happened: Philadelphia went 11-6, held off a 7-9-1 Dallas, and became the first NFC East champion to defend a title since Philadelphia in 2004. All three defenses in the era — 2003, 2004, 2025 — belong to one franchise.
That is the frame 2026 inherits. This page lays out what the file says entering the season: the champions timeline, each team's 2025 ledger, and the shape of the twelve-game 2026 division calendar. It makes no win predictions — the site's forecasts live at the predictions page and the model explainer — and the league-wide mechanics of division-title repeats are owned by the division-repeats page, whose standings code this page's exhibit imports directly.
One dot per season, one row per franchise, 2002 through 2025. Diamonds mark the only defended titles; the shaded band is the streak:
The title count doubles as a division power ledger: Philadelphia 11, Dallas 7, the Giants 3, Washington 3. Inside the streak the crown passed hand to hand every single year — PHI→NYG→PHI→DAL→NYG→DAL→PHI→NYG→WAS→PHI→DAL→WAS→DAL→PHI→DAL→PHI→WAS→DAL→PHI→DAL→PHI, 2004 through 2024. For how unusual that is league-wide — and for the tiebreaker chain itself, verified against all 23 titles in the window that required one — see the division-repeats page.
From the file's played 2025 regular-season games (one-score = decided by eight points or fewer):
| Team | 2025 | PF | PA | Diff | One-score |
|---|---|---|---|---|---|
| Philadelphia | 11-6 | 379 | 325 | +54 | 8-4 |
| Dallas | 7-9-1 | 471 | 511 | −40 | 4-3-1 |
| Washington | 5-12 | 356 | 451 | −95 | 2-5 |
| N.Y. Giants | 4-13 | 381 | 439 | −58 | 1-7 |
Three details worth pulling out. First, the champion's margin was modest: Philadelphia's 11-6 leaned on an 8-4 record in one-score games — twelve of its seventeen games were within eight points. Second, Dallas was the division's most extreme team on both sides of the ball: a division-high 471 points scored and a division-high 511 allowed, netting to −40. Third, the bottom of the table is inverted: the Giants' −58 differential was 37 points better than Washington's −95, yet they finished a game behind — the gap lives almost entirely in close games, where New York went 1-7. Close-game records are the noisiest component of a season ledger, which cuts in every direction here; the limitations section returns to that.
The 2026 schedule rows give the division twelve intramural games, and the league stacked them early: 7 of the 12 fall in weeks 1–9. Two arrive on opening Sunday itself — Washington at Philadelphia and Dallas at the Giants, September 13 — and those head-to-heads belong to the week-1 slate page. After that: Washington at Dallas in week 2, the Giants at Washington in week 5, and a Monday-night Dallas at Philadelphia in week 7 (October 26, both teams on 8 days' rest).
The rest fields turn interesting in the season's middle third, and they lean one way. In week 8, Philadelphia visits Washington on 6 days' rest against a host coming off 13 — a bye-week ambush by scheduling. The next week the pattern repeats against the Eagles: the Giants arrive in Philadelphia on 14 days' rest to the hosts' 7. Those two games alone put Philadelphia 14 net rest-days behind its opponents — nearly all of its division-worst −15 net rest across the full slate. Then come the short weeks: Washington at the Giants on Thursday of week 10 (4 days apiece), and Philadelphia at Dallas on Thanksgiving Thursday, November 26, also 4v4. The calendar closes divisional: the Giants at Dallas in week 17, then a week-18 finale pair on January 10 — Philadelphia at the Giants, Dallas at Washington — so every team ends the season inside the division. The league-wide rest-and-byes accounting lives at the schedule-quirks page; why division games behave differently is its own explainer.
On paper strength, the four schedules cluster tightly in the league's middle: by 2026 opponents' 2025 win percentage, Washington draws the division's hardest slate (.5017, opponents 144-143-2, 16th), the Giants .4983 (17th), Dallas .4931 (20th), and Philadelphia the softest (.4810, opponents 138-149-2, 23rd) — a spread of about two percentage points, worth exactly as much as preseason SOS is ever worth, which the schedule-strength page quantifies. The net-rest four-pack is less symmetrical: Dallas +12, Washington +9, the Giants +3, Philadelphia −15. The champion, in other words, gets the softest opponents and the worst calendar.
One public file: games.csv from nflverse nfldata, bundled at /data/games.csv. The champions timeline requires the full tiebreaker chain (imported from make_division_repeat_chart.py), but the ledgers, the division calendar, and the rest math are a screenful of pandas — the chart and complete console breakdown come from explainer_src/make_nfc_east_2026_chart.py:
import pandas as pd, numpy as np
df = pd.read_csv("data_layer/games.csv", low_memory=False)
EAST = ["PHI", "DAL", "NYG", "WAS"]
# 2025 ledgers: W-L-T, PF, PA, one-score record
g25 = df[(df.season == 2025) & (df.game_type == "REG") & df.home_score.notna()]
for t in EAST:
m = g25[(g25.home_team == t) | (g25.away_team == t)]
pf = np.where(m.home_team == t, m.home_score, m.away_score)
pa = np.where(m.home_team == t, m.away_score, m.home_score)
close = abs(pf - pa) <= 8
print(t, f"{(pf > pa).sum()}-{(pf < pa).sum()}-{(pf == pa).sum()}",
int(pf.sum()), int(pa.sum()),
f"{(close & (pf > pa)).sum()}-{(close & (pf < pa)).sum()}")
# PHI 11-6-0 379 325 8-4 ... NYG 4-13-0 381 439 1-7
# the 2026 division slate: 12 games, 7 by week 9
s26 = df[(df.season == 2026) & (df.game_type == "REG")]
dg = s26[s26.home_team.isin(EAST) & s26.away_team.isin(EAST)].sort_values("week")
print(len(dg), int((dg.week <= 9).sum())) # 12 7
print(dg[["week", "gameday", "weekday", "away_team", "home_team",
"away_rest", "home_rest"]].to_string(index=False))
# net rest across each team's full 17-game slate
for t in EAST:
m = s26[(s26.home_team == t) | (s26.away_team == t)]
own = np.where(m.home_team == t, m.home_rest, m.away_rest)
opp = np.where(m.home_team == t, m.away_rest, m.home_rest)
print(t, int((own - opp).sum())) # PHI -15 DAL +12 NYG +3 WAS +9
All figures on this page were computed 2026-08-12 from the file's played games: the champions timeline and title counts from its 6,223 regular-season games 2002–2025, the ledgers from the played 2025 rows, and the calendar, SOS, and rest four-packs from the unplayed 2026 schedule rows as recorded that day. Nothing is hand-entered.
Data: nflverse/nfldata, public. Standings and tiebreakers derived per the division-repeats method; one-score = final margin of eight points or fewer.
Want the code behind these metrics? Work through the 45-chapter NFL analytics tutorial.
Browse tutorials Free tools