THE SHORT ANSWER
The Seattle Seahawks retake No. 1 heading into Week 8 at 1681 ELO after a 20–3 win over Kansas City while Buffalo was on a bye. Buffalo (1665) slips to second, and Minnesota (1637) and Denver (1633) follow. Full table below.
Every week, Spreadspoke ranks every NFL team by ELO rating, a single number that rises with wins and falls with losses. How far it moves depends on the margin of victory and on how strong the opponent was. The league average is 1500.
NFL ELO power rankings (all 32 teams)
Ratings are before this week's games. Move is the change in rank from last week's rankings.
| Rank | Move | Team | Record | ELO | Week ± | Season | Last Game |
|---|---|---|---|---|---|---|---|
| 1 | ▲ 1 | Seattle Seahawks | 4–3 | 1681 | +17 | −11 | W 20–3 vs KC |
| 2 | ▼ 1 | Buffalo Bills | 5–1 | 1665 | – | ▲ +42 | Bye |
| 3 | ▲ 1 | Minnesota Vikings | 6–0 | 1637 | +5 | ▲ +80 | W 16–10 vs IND |
| 4 | ▲ 1 | Denver Broncos | 5–2 | 1633 | +14 | +15 | W 30–16 @ ARI |
| 5 | ▼ 2 | San Francisco 49ers | 6–1 | 1626 | ▼ −35 | ▲ +61 | L 20–29 @ ATL |
| 6 | ▲ 1 | Jacksonville Jaguars | 4–2 | 1602 | – | ▲ +36 | Bye |
| 7 | ▼ 1 | New England Patriots | 4–3 | 1598 | −19 | −4 | L 24–30 @ CHI |
| 8 | ▲ 1 | Los Angeles Rams | 3–4 | 1586 | +19 | ▼ −36 | W 35–21 @ LVR |
| 9 | ▲ 3 | Chicago Bears | 5–2 | 1576 | +20 | ▲ +47 | W 30–24 vs NE |
| 10 | – | Detroit Lions | 4–2 | 1571 | +10 | +4 | W 20–17 vs GB |
| 11 | ▲ 5 | Cincinnati Bengals | 4–2 | 1565 | ▲ +42 | ▲ +87 | W 35–13 @ BAL |
| 12 | ▼ 4 | Kansas City Chiefs | 5–1 | 1565 | −16 | ▲ +73 | L 3–20 @ SEA |
| 13 | ▲ 1 | Pittsburgh Steelers | 5–2 | 1553 | +12 | ▲ +43 | W 16–10 @ NO |
| 14 | ▲ 1 | Green Bay Packers | 4–3 | 1524 | −10 | −9 | L 17–20 @ DET |
| 15 | ▼ 2 | Houston Texans | 2–5 | 1518 | ▼ −33 | ▼ −101 | L 21–27 vs NYG |
| 16 | ▼ 5 | Baltimore Ravens | 4–3 | 1517 | ▼ −43 | ▼ −36 | L 13–35 vs CIN |
| 17 | ▲ 3 | Atlanta Falcons | 3–4 | 1478 | ▲ +35 | +15 | W 29–20 vs SF |
| 18 | ▲ 4 | Tampa Bay Buccaneers | 2–5 | 1470 | ▲ +50 | −6 | W 43–13 @ CAR |
| 19 | ▲ 2 | Dallas Cowboys | 3–4 | 1466 | ▲ +41 | +16 | W 38–21 @ PHI |
| 20 | ▼ 1 | Cleveland Browns | 5–2 | 1454 | +10 | ▲ +45 | W 27–24 @ TEN |
| 21 | ▼ 4 | Philadelphia Eagles | 2–5 | 1448 | ▼ −41 | ▼ −121 | L 21–38 vs DAL |
| 22 | ▲ 2 | New York Giants | 4–2–1 | 1446 | ▲ +33 | ▲ +37 | W 27–21 @ HOU |
| 23 | ▼ 5 | Carolina Panthers | 3–3 | 1436 | ▼ −50 | +23 | L 13–43 vs TB |
| 24 | ▲ 1 | Washington Commanders | 1–4–1 | 1411 | – | ▼ −46 | Bye |
| 25 | ▼ 2 | Indianapolis Colts | 2–5 | 1408 | −6 | ▼ −49 | L 10–16 @ MIN |
| 26 | ▲ 1 | Los Angeles Chargers | 0–6 | 1405 | – | ▼ −123 | Bye |
| 27 | ▼ 1 | New Orleans Saints | 2–5 | 1396 | −12 | ▼ −26 | L 10–16 vs PIT |
| 28 | – | Las Vegas Raiders | 3–4 | 1385 | −19 | ▲ +56 | L 21–35 vs LAR |
| 29 | ▲ 1 | Miami Dolphins | 1–5 | 1381 | +16 | ▼ −70 | W 28–25 @ NYJ |
| 30 | ▼ 1 | Arizona Cardinals | 2–5 | 1366 | −13 | −8 | L 16–30 vs DEN |
| 31 | – | New York Jets | 2–5 | 1343 | −16 | +5 | L 25–28 vs MIA |
| 32 | – | Tennessee Titans | 1–6 | 1288 | −10 | ▼ −41 | L 24–27 vs CLE |
Ratings are whole numbers; teams with the same rating are listed alphabetically.
Who has moved most since Week 1
ELO points gained or lost since the start of the season.
Sample code: build the rankings yourself
The rankings come from spreadspoke_enhanced.csv, which carries pre-game and post-game ELO for both teams in every game.
import pandas as pd
# Spreadspoke enhanced game file: one row per game, 1966 to present
games = pd.read_csv("spreadspoke_enhanced.csv", low_memory=False)
# 2026 regular season through Week 7
season = games[games["schedule_season"] == 2026].copy()
season["week"] = season["schedule_week_str"].astype(int)
season = season[season["week"] <= 7]
# Stack home and away sides into one row per team per game
home = season[["week", "home_team_id", "elo_home_pre", "elo_home_post"]]
home.columns = ["week", "team", "elo_pre", "elo_post"]
away = season[["week", "away_team_id", "elo_away_pre", "elo_away_post"]]
away.columns = ["week", "team", "elo_pre", "elo_post"]
teams = pd.concat([home, away], ignore_index=True)
# Each team's latest game (teams on a Week 7 bye keep their Week 6 rating)
latest = teams.sort_values("week").groupby("team").tail(1)
# Rank 1 to 32 on current ELO
latest = latest.sort_values("elo_post", ascending=False).reset_index(drop=True)
latest.index += 1
print(latest[["team", "week", "elo_post"]])
The ELO update behind each post-game number uses K = 20, a 65-point home-field edge (none at neutral sites) and a margin-of-victory multiplier. Here it is as a function you can run on any game:
import math
def elo_update(home_elo, away_elo, home_pts, away_pts, neutral=False, k=20, hfa=65):
diff = home_elo - away_elo + (0 if neutral else hfa)
p_home = 1 / (1 + 10 ** (-diff / 400)) # home win probability
result = 1 if home_pts > away_pts else 0 if home_pts < away_pts else 0.5
winner_diff = diff if result == 1 else -diff
mov_mult = math.log(abs(home_pts - away_pts) + 1) * 2.2 / (winner_diff * 0.001 + 2.2)
shift = k * mov_mult * (result - p_home)
return home_elo + shift, away_elo - shift
# Week 7: Carolina Panthers lost to Tampa Bay Buccaneers 13-43
print(elo_update(1486, 1420, 13, 43)) # (1436.3, 1469.7)
GET THE DATA
The file behind these rankings is included in the Spreadspoke ANALYST package. It includes historical data for every NFL game since 1966—including scores, closing spreads, weather, and pre- and post-game ELO ratings.
See ANALYST pricing →Frequently Asked Questions
What is a good ELO rating?
ELO centers around 1500 for an average team. Strong playoff-caliber teams sit above 1600; rebuilding teams fall below 1400. The gap between two teams maps to an expected point spread.
Methodology
All figures are computed from the Spreadspoke Analyst data package: spreadspoke_enhanced.csv (results with pre- and post-game ELO: elo_home_pre, elo_home_post, etc.) and nfl_elo_handicapping_master.csv (ELO, closing spreads and model edge per game). Coverage is all 107 regular-season games from Weeks 1–7 of 2026; Bills, Chargers, Commanders, and Jaguars were on a bye in Week 7 and keep their Week 6 rating. The model uses K = 20, a 65-point home-field advantage (none at neutral sites, such as Pittsburgh vs. New Orleans at Stade de France in Week 7) and a margin-of-victory multiplier. League average is 1500. This page is published weekly while games are played.
Explore: Power Rankings Tracker · ATS Standings · Over/Under Records · All 32 Teams