Passing yards per team-game peaked at 259.2 in 2015 and fell to 225.0 in 2025, while rushing stayed between 109 and 122
Adding up every player's passing yards and dividing by team-games, offenses averaged 232.3 passing yards in 2009, climbed to 259.2 in 2015, and fell to 225.0 in 2025, the lowest of the 17 seasons. That is 13.2% below the peak. Passing topped 250 in 7 of the 8 seasons from 2013 to 2020, all but 2017, when it dipped to 239.6, and every season from 2021 on was below 250.
Rushing barely moved. Rushing yards per team-game stayed between 108.8 and 121.6 every season, and finished 2025 at 116.9. In these numbers the drop is in passing; rushing did not move with it.
View the numbers
| Season | Team-games | Passing yards per team-game | Rushing yards per team-game |
|---|---|---|---|
| 2009 | 512 | 232.3 | 116.7 |
| 2010 | 512 | 236.2 | 114.5 |
| 2011 | 512 | 245.0 | 117.2 |
| 2012 | 512 | 246.0 | 115.9 |
| 2013 | 512 | 252.3 | 112.9 |
| 2014 | 512 | 251.8 | 111.3 |
| 2015 | 512 | 259.2 | 108.8 |
| 2016 | 512 | 255.6 | 108.9 |
| 2017 | 512 | 239.6 | 109.7 |
| 2018 | 512 | 254.4 | 114.4 |
| 2019 | 512 | 251.8 | 112.9 |
| 2020 | 512 | 254.9 | 118.9 |
| 2021 | 544 | 244.1 | 115.2 |
| 2022 | 542 | 234.4 | 121.6 |
| 2023 | 544 | 236.3 | 112.7 |
| 2024 | 544 | 233.5 | 119.8 |
| 2025 | 544 | 225.0 | 116.9 |
Fewer quarterbacks reach 4,000 yards: 13 did in 2016, only 6 in 2025
A 4,000-yard passing season used to be common. In 2016, 13 quarterbacks got there, the most of any season. It was 6 in both 2024 and 2025.
This counts each player's regular-season total for one season. Seasons were 16 games through 2020 and 17 from 2021, so counts from 2021 on have a little extra room to reach the threshold. Each block in the chart is one player, colored by his team; hover a block to see who.
View the numbers
| Season | Players with 4,000+ passing yards | League leader (team) and total |
|---|---|---|
| 2009 | 10 | Matt Schaub (HOU) 4,770 |
| 2010 | 5 (lowest value in this table) | Philip Rivers (LAC) 4,710 |
| 2011 | 10 | Drew Brees (NO) 5,535 (highest value in this table) |
| 2012 | 11 | Drew Brees (NO) 5,177 |
| 2013 | 9 | Peyton Manning (DEN) 5,477 |
| 2014 | 11 | Ben Roethlisberger (PIT) 4,952 |
| 2015 | 12 | Drew Brees (NO) 4,870 |
| 2016 | 13 (highest value in this table) | Drew Brees (NO) 5,208 |
| 2017 | 8 | Tom Brady (NE) 4,577 (lowest value in this table) |
| 2018 | 12 | Ben Roethlisberger (PIT) 5,129 |
| 2019 | 11 | Jameis Winston (TB) 5,109 |
| 2020 | 12 | Deshaun Watson (HOU) 4,823 |
| 2021 | 10 | Tom Brady (TB) 5,316 |
| 2022 | 9 | Patrick Mahomes (KC) 5,250 |
| 2023 | 10 | Tua Tagovailoa (MIA) 4,624 |
| 2024 | 6 | Joe Burrow (CIN) 4,918 |
| 2025 | 6 | Matthew Stafford (LA) 4,707 |
LowestHighestShading compares the seasons in this table, column by column. It marks highest and lowest, not good or bad.
Everyone who reached it, by season
| Season | Players with 4,000+ passing yards | Who (team) and total, top block first |
|---|---|---|
| 2009 | 10 | Matt Schaub (HOU) 4,770; Peyton Manning (IND) 4,500; Tony Romo (DAL) 4,483; Aaron Rodgers (GB) 4,434; Tom Brady (NE) 4,398; Drew Brees (NO) 4,388; Ben Roethlisberger (PIT) 4,328; Philip Rivers (LAC) 4,254; Brett Favre (MIN) 4,202; Eli Manning (NYG) 4,021 |
| 2010 | 5 | Philip Rivers (LAC) 4,710; Peyton Manning (IND) 4,700; Drew Brees (NO) 4,620; Matt Schaub (HOU) 4,370; Eli Manning (NYG) 4,002 |
| 2011 | 10 | Drew Brees (NO) 5,535; Tom Brady (NE) 5,235; Matthew Stafford (DET) 5,100; Eli Manning (NYG) 4,933; Aaron Rodgers (GB) 4,636; Philip Rivers (LAC) 4,624; Tony Romo (DAL) 4,184; Matt Ryan (ATL) 4,177; Ben Roethlisberger (PIT) 4,077; Cam Newton (CAR) 4,051 |
| 2012 | 11 | Drew Brees (NO) 5,177; Matthew Stafford (DET) 4,967; Tony Romo (DAL) 4,903; Tom Brady (NE) 4,827; Matt Ryan (ATL) 4,719; Peyton Manning (DEN) 4,659; Andrew Luck (IND) 4,374; Aaron Rodgers (GB) 4,295; Josh Freeman (TB) 4,065; Carson Palmer (LV) 4,018; Matt Schaub (HOU) 4,008 |
| 2013 | 9 | Peyton Manning (DEN) 5,477; Drew Brees (NO) 5,162; Matthew Stafford (DET) 4,650; Matt Ryan (ATL) 4,515; Philip Rivers (LAC) 4,478; Tom Brady (NE) 4,343; Andy Dalton (CIN) 4,293; Carson Palmer (ARI) 4,274; Ben Roethlisberger (PIT) 4,261 |
| 2014 | 11 | Ben Roethlisberger (PIT) 4,952; Drew Brees (NO) 4,952; Andrew Luck (IND) 4,761; Peyton Manning (DEN) 4,727; Matt Ryan (ATL) 4,694; Eli Manning (NYG) 4,410; Aaron Rodgers (GB) 4,381; Philip Rivers (LAC) 4,286; Matthew Stafford (DET) 4,257; Tom Brady (NE) 4,109; Ryan Tannehill (MIA) 4,045 |
| 2015 | 12 | Drew Brees (NO) 4,870; Philip Rivers (LAC) 4,792; Tom Brady (NE) 4,770; Carson Palmer (ARI) 4,671; Matt Ryan (ATL) 4,591; Eli Manning (NYG) 4,432; Blake Bortles (JAX) 4,428; Matthew Stafford (DET) 4,262; Ryan Tannehill (MIA) 4,208; Kirk Cousins (WAS) 4,166; Jameis Winston (TB) 4,042; Russell Wilson (SEA) 4,024 |
| 2016 | 13 | Drew Brees (NO) 5,208; Matt Ryan (ATL) 4,944; Kirk Cousins (WAS) 4,917; Aaron Rodgers (GB) 4,428; Philip Rivers (LAC) 4,386; Matthew Stafford (DET) 4,327; Joe Flacco (BAL) 4,317; Andrew Luck (IND) 4,240; Carson Palmer (ARI) 4,233; Russell Wilson (SEA) 4,219; Andy Dalton (CIN) 4,206; Jameis Winston (TB) 4,090; Eli Manning (NYG) 4,027 |
| 2017 | 8 | Tom Brady (NE) 4,577; Philip Rivers (LAC) 4,515; Matthew Stafford (DET) 4,446; Drew Brees (NO) 4,334; Ben Roethlisberger (PIT) 4,259; Matt Ryan (ATL) 4,095; Kirk Cousins (WAS) 4,093; Alex Smith (KC) 4,042 |
| 2018 | 12 | Ben Roethlisberger (PIT) 5,129; Patrick Mahomes (KC) 5,097; Matt Ryan (ATL) 4,924; Jared Goff (LA) 4,688; Andrew Luck (IND) 4,593; Aaron Rodgers (GB) 4,442; Tom Brady (NE) 4,355; Philip Rivers (LAC) 4,308; Eli Manning (NYG) 4,299; Kirk Cousins (MIN) 4,298; Deshaun Watson (HOU) 4,165; Derek Carr (LV) 4,049 |
| 2019 | 11 | Jameis Winston (TB) 5,109; Dak Prescott (DAL) 4,902; Jared Goff (LA) 4,638; Philip Rivers (LAC) 4,615; Matt Ryan (ATL) 4,466; Russell Wilson (SEA) 4,110; Tom Brady (NE) 4,057; Derek Carr (LV) 4,054; Carson Wentz (PHI) 4,039; Patrick Mahomes (KC) 4,031; Aaron Rodgers (GB) 4,002 |
| 2020 | 12 | Deshaun Watson (HOU) 4,823; Patrick Mahomes (KC) 4,740; Tom Brady (TB) 4,633; Matt Ryan (ATL) 4,581; Josh Allen (BUF) 4,544; Justin Herbert (LAC) 4,336; Aaron Rodgers (GB) 4,299; Kirk Cousins (MIN) 4,265; Russell Wilson (SEA) 4,212; Philip Rivers (IND) 4,169; Derek Carr (LV) 4,103; Matthew Stafford (DET) 4,084 |
| 2021 | 10 | Tom Brady (TB) 5,316; Justin Herbert (LAC) 5,014; Matthew Stafford (LA) 4,886; Patrick Mahomes (KC) 4,839; Derek Carr (LV) 4,804; Joe Burrow (CIN) 4,611; Dak Prescott (DAL) 4,449; Josh Allen (BUF) 4,407; Kirk Cousins (MIN) 4,221; Aaron Rodgers (GB) 4,115 |
| 2022 | 9 | Patrick Mahomes (KC) 5,250; Justin Herbert (LAC) 4,739; Tom Brady (TB) 4,694; Kirk Cousins (MIN) 4,547; Joe Burrow (CIN) 4,475; Jared Goff (DET) 4,438; Josh Allen (BUF) 4,283; Geno Smith (SEA) 4,282; Trevor Lawrence (JAX) 4,113 |
| 2023 | 10 | Tua Tagovailoa (MIA) 4,624; Jared Goff (DET) 4,575; Dak Prescott (DAL) 4,516; Josh Allen (BUF) 4,306; Brock Purdy (SF) 4,280; Patrick Mahomes (KC) 4,183; Jordan Love (GB) 4,159; C.J. Stroud (HOU) 4,108; Baker Mayfield (TB) 4,044; Trevor Lawrence (JAX) 4,016 |
| 2024 | 6 | Joe Burrow (CIN) 4,918; Jared Goff (DET) 4,629; Baker Mayfield (TB) 4,500; Geno Smith (SEA) 4,320; Sam Darnold (MIN) 4,319; Lamar Jackson (BAL) 4,172 |
| 2025 | 6 | Matthew Stafford (LA) 4,707; Jared Goff (DET) 4,564; Dak Prescott (DAL) 4,552; Drake Maye (NE) 4,394; Sam Darnold (SEA) 4,048; Trevor Lawrence (JAX) 4,007 |
1,000-yard rushers swing widely, from 7 in some seasons to 17 in others
The number of players who ran for 1,000 yards in a season was 17 in 2010, fell to 7 in 2015 and 7 in 2021, then came back to 16 in 2024 and 17 in 2025.
There is no steady trend to explain it. The count is lowest in 2015, 2021 (7) and highest in 2010, 2025 (17). Each block in the chart is one player, colored by his team; hover a block to see who.
View the numbers
| Season | Players with 1,000+ rushing yards | League leader (team) and total |
|---|---|---|
| 2009 | 15 | Chris Johnson (TEN) 2,006 |
| 2010 | 17 (highest value in this table) | Arian Foster (HOU) 1,614 |
| 2011 | 15 | Maurice Jones-Drew (JAX) 1,606 |
| 2012 | 16 | Adrian Peterson (MIN) 2,097 (highest value in this table) |
| 2013 | 13 | LeSean McCoy (PHI) 1,607 |
| 2014 | 13 | DeMarco Murray (DAL) 1,845 |
| 2015 | 7 (lowest value in this table) | Adrian Peterson (MIN) 1,485 |
| 2016 | 12 | Ezekiel Elliott (DAL) 1,631 |
| 2017 | 9 | Kareem Hunt (KC) 1,327 (lowest value in this table) |
| 2018 | 9 | Ezekiel Elliott (DAL) 1,434 |
| 2019 | 16 | Derrick Henry (TEN) 1,540 |
| 2020 | 9 | Derrick Henry (TEN) 2,027 |
| 2021 | 7 (lowest value in this table) | Jonathan Taylor (IND) 1,811 |
| 2022 | 16 | Josh Jacobs (LV) 1,653 |
| 2023 | 12 | Christian McCaffrey (SF) 1,459 |
| 2024 | 16 | Saquon Barkley (PHI) 2,005 |
| 2025 | 17 (highest value in this table) | James Cook (BUF) 1,621 |
LowestHighestShading compares the seasons in this table, column by column. It marks highest and lowest, not good or bad.
Everyone who reached it, by season
| Season | Players with 1,000+ rushing yards | Who (team) and total, top block first |
|---|---|---|
| 2009 | 15 | Chris Johnson (TEN) 2,006; Steven Jackson (LA) 1,424; Thomas Jones (NYJ) 1,402; Maurice Jones-Drew (JAX) 1,391; Adrian Peterson (MIN) 1,389; Ray Rice (BAL) 1,339; Ryan Grant (GB) 1,253; Cedric Benson (CIN) 1,251; Jonathan Stewart (CAR) 1,133; Ricky Williams (MIA) 1,121; Frank Gore (SF) 1,120; Jamaal Charles (KC) 1,120; DeAngelo Williams (CAR) 1,117; Rashard Mendenhall (PIT) 1,108; Fred Jackson (BUF) 1,062 |
| 2010 | 17 | Arian Foster (HOU) 1,614; Jamaal Charles (KC) 1,467; Michael Turner (ATL) 1,371; Chris Johnson (TEN) 1,364; Maurice Jones-Drew (JAX) 1,324; Adrian Peterson (MIN) 1,298; Rashard Mendenhall (PIT) 1,273; Steven Jackson (LA) 1,241; Ahmad Bradshaw (NYG) 1,235; Ray Rice (BAL) 1,220; Peyton Hillis (CLE) 1,177; Darren McFadden (LV) 1,157; Cedric Benson (CIN) 1,111; LeSean McCoy (PHI) 1,080; Matt Forte (CHI) 1,069; BenJarvus Green-Ellis (NE) 1,008; LeGarrette Blount (TB) 1,007 |
| 2011 | 15 | Maurice Jones-Drew (JAX) 1,606; Ray Rice (BAL) 1,364; Michael Turner (ATL) 1,340; LeSean McCoy (PHI) 1,309; Arian Foster (HOU) 1,224; Frank Gore (SF) 1,211; Marshawn Lynch (SEA) 1,204; Willis McGahee (DEN) 1,199; Steven Jackson (LA) 1,145; Ryan Mathews (LAC) 1,091; Reggie Bush (MIA) 1,086; Cedric Benson (CIN) 1,067; Shonn Greene (NYJ) 1,054; Chris Johnson (TEN) 1,047; Chris Wells (ARI) 1,047 |
| 2012 | 16 | Adrian Peterson (MIN) 2,097; Alfred Morris (WAS) 1,613; Marshawn Lynch (SEA) 1,590; Jamaal Charles (KC) 1,509; Doug Martin (TB) 1,454; Arian Foster (HOU) 1,424; Stevan Ridley (NE) 1,263; C.J. Spiller (BUF) 1,244; Chris Johnson (TEN) 1,243; Frank Gore (SF) 1,214; Ray Rice (BAL) 1,143; BenJarvus Green-Ellis (CIN) 1,094; Matt Forte (CHI) 1,094; Shonn Greene (NYJ) 1,063; Steven Jackson (LA) 1,045; Ahmad Bradshaw (NYG) 1,015 |
| 2013 | 13 | LeSean McCoy (PHI) 1,607; Matt Forte (CHI) 1,339; Jamaal Charles (KC) 1,287; Alfred Morris (WAS) 1,275; Adrian Peterson (MIN) 1,266; Marshawn Lynch (SEA) 1,257; Ryan Mathews (LAC) 1,255; Eddie Lacy (GB) 1,178; Frank Gore (SF) 1,128; DeMarco Murray (DAL) 1,121; Chris Johnson (TEN) 1,077; Knowshon Moreno (DEN) 1,038; Reggie Bush (DET) 1,006 |
| 2014 | 13 | DeMarco Murray (DAL) 1,845; Le'Veon Bell (PIT) 1,361; LeSean McCoy (PHI) 1,319; Marshawn Lynch (SEA) 1,306; Justin Forsett (BAL) 1,266; Arian Foster (HOU) 1,246; Eddie Lacy (GB) 1,139; Jeremy Hill (CIN) 1,124; Frank Gore (SF) 1,106; Lamar Miller (MIA) 1,099; Alfred Morris (WAS) 1,074; Matt Forte (CHI) 1,038; Jamaal Charles (KC) 1,033 |
| 2015 | 7 | Adrian Peterson (MIN) 1,485; Doug Martin (TB) 1,402; Todd Gurley (LA) 1,106; Darren McFadden (DAL) 1,089; Chris Ivory (NYJ) 1,070; Latavius Murray (LV) 1,066; Devonta Freeman (ATL) 1,056 |
| 2016 | 12 | Ezekiel Elliott (DAL) 1,631; Jordan Howard (CHI) 1,313; DeMarco Murray (TEN) 1,287; Jay Ajayi (MIA) 1,272; Le'Veon Bell (PIT) 1,268; LeSean McCoy (BUF) 1,267; David Johnson (ARI) 1,239; LeGarrette Blount (NE) 1,161; Devonta Freeman (ATL) 1,079; Lamar Miller (HOU) 1,073; Mark Ingram (NO) 1,043; Frank Gore (IND) 1,025 |
| 2017 | 9 | Kareem Hunt (KC) 1,327; Todd Gurley (LA) 1,305; Le'Veon Bell (PIT) 1,291; LeSean McCoy (BUF) 1,138; Mark Ingram (NO) 1,124; Jordan Howard (CHI) 1,122; Melvin Gordon (LAC) 1,105; Leonard Fournette (JAX) 1,040; C.J. Anderson (DEN) 1,007 |
| 2018 | 9 | Ezekiel Elliott (DAL) 1,434; Saquon Barkley (NYG) 1,307; Todd Gurley (LA) 1,251; Joe Mixon (CIN) 1,168; Chris Carson (SEA) 1,151; Christian McCaffrey (CAR) 1,098; Derrick Henry (TEN) 1,059; Adrian Peterson (WAS) 1,042; Phillip Lindsay (DEN) 1,037 |
| 2019 | 16 | Derrick Henry (TEN) 1,540; Nick Chubb (CLE) 1,494; Christian McCaffrey (CAR) 1,387; Ezekiel Elliott (DAL) 1,357; Chris Carson (SEA) 1,230; Lamar Jackson (BAL) 1,206; Leonard Fournette (JAX) 1,152; Josh Jacobs (LV) 1,150; Joe Mixon (CIN) 1,137; Dalvin Cook (MIN) 1,135; Marlon Mack (IND) 1,091; Aaron Jones (GB) 1,084; Carlos Hyde (HOU) 1,070; Mark Ingram (BAL) 1,018; Phillip Lindsay (DEN) 1,011; Saquon Barkley (NYG) 1,003 |
| 2020 | 9 | Derrick Henry (TEN) 2,027; Dalvin Cook (MIN) 1,557; Jonathan Taylor (IND) 1,169; Aaron Jones (GB) 1,104; David Montgomery (CHI) 1,070; James Robinson (JAX) 1,070; Nick Chubb (CLE) 1,067; Josh Jacobs (LV) 1,065; Lamar Jackson (BAL) 1,005 |
| 2021 | 7 | Jonathan Taylor (IND) 1,811; Nick Chubb (CLE) 1,259; Joe Mixon (CIN) 1,205; Najee Harris (PIT) 1,200; Dalvin Cook (MIN) 1,159; Antonio Gibson (WAS) 1,037; Ezekiel Elliott (DAL) 1,002 |
| 2022 | 16 | Josh Jacobs (LV) 1,653; Derrick Henry (TEN) 1,538; Nick Chubb (CLE) 1,525; Saquon Barkley (NYG) 1,312; Miles Sanders (PHI) 1,269; Dalvin Cook (MIN) 1,173; Justin Fields (CHI) 1,143; Christian McCaffrey (CAR/SF) 1,139; Travis Etienne (JAX) 1,125; Aaron Jones (GB) 1,121; Jamaal Williams (DET) 1,066; Kenneth Walker III (SEA) 1,050; Rhamondre Stevenson (NE) 1,040; Tyler Allgeier (ATL) 1,035; Najee Harris (PIT) 1,034; Tony Pollard (DAL) 1,007 |
| 2023 | 12 | Christian McCaffrey (SF) 1,459; Derrick Henry (TEN) 1,167; Kyren Williams (LA) 1,144; James Cook (BUF) 1,122; D'Andre Swift (PHI) 1,049; James Conner (ARI) 1,040; Najee Harris (PIT) 1,035; Joe Mixon (CIN) 1,034; David Montgomery (DET) 1,015; Raheem Mostert (MIA) 1,012; Travis Etienne (JAX) 1,008; Tony Pollard (DAL) 1,005 |
| 2024 | 16 | Saquon Barkley (PHI) 2,005; Derrick Henry (BAL) 1,921; Bijan Robinson (ATL) 1,456; Jonathan Taylor (IND) 1,431; Jahmyr Gibbs (DET) 1,412; Josh Jacobs (GB) 1,329; Kyren Williams (LA) 1,299; Chuba Hubbard (CAR) 1,195; Aaron Jones (MIN) 1,138; Bucky Irving (TB) 1,122; James Conner (ARI) 1,094; Rico Dowdle (DAL) 1,079; Tony Pollard (TEN) 1,079; Najee Harris (PIT) 1,043; Joe Mixon (HOU) 1,016; James Cook (BUF) 1,009 |
| 2025 | 17 | James Cook (BUF) 1,621; Derrick Henry (BAL) 1,595; Jonathan Taylor (IND) 1,585; Bijan Robinson (ATL) 1,478; De'Von Achane (MIA) 1,350; Kyren Williams (LA) 1,252; Jahmyr Gibbs (DET) 1,223; Christian McCaffrey (SF) 1,202; Javonte Williams (DAL) 1,201; Saquon Barkley (PHI) 1,140; Travis Etienne (JAX) 1,107; D'Andre Swift (CHI) 1,087; Tony Pollard (TEN) 1,082; Rico Dowdle (CAR) 1,076; Breece Hall (NYJ) 1,065; Kenneth Walker III (SEA) 1,027; Chase Brown (CIN) 1,019 |
300-carry seasons: 7 in 2010, never more than 3 a year from 2013 to 2023, then 6 in 2024 and 4 in 2025
A 300-carry season was more common early on: 6 players in 2009 and 7 in 2010. From 2013 to 2023 the count never passed 3, and in 2023 no one reached it.
The count was 6 in 2024 and 4 in 2025. The counts are small, so one or two bell-cow backs (a running back who gets most of his team's carries) make a visible difference. Each block in the chart is one player, colored by his team; hover a block to see who.
View the numbers
| Season | Players with 300+ carries | League leader (team) and total |
|---|---|---|
| 2009 | 6 | Chris Johnson (TEN) 358 |
| 2010 | 7 (highest value in this table) | Michael Turner (ATL) 334 |
| 2011 | 2 | Maurice Jones-Drew (JAX) 343 |
| 2012 | 5 | Arian Foster (HOU) 351 |
| 2013 | 2 | LeSean McCoy (PHI) 314 |
| 2014 | 2 | DeMarco Murray (DAL) 392 (highest value in this table) |
| 2015 | 1 | Adrian Peterson (MIN) 327 |
| 2016 | 1 | Ezekiel Elliott (DAL) 322 |
| 2017 | 1 | Le'Veon Bell (PIT) 321 |
| 2018 | 1 | Ezekiel Elliott (DAL) 304 |
| 2019 | 2 | Derrick Henry (TEN) 303 |
| 2020 | 2 | Derrick Henry (TEN) 378 |
| 2021 | 2 | Jonathan Taylor (IND) 332 |
| 2022 | 3 | Derrick Henry (TEN) 349 |
| 2023 | 0 (lowest value in this table) | None (lowest value in this table) |
| 2024 | 6 | Saquon Barkley (PHI) 345 |
| 2025 | 4 | Jonathan Taylor (IND) 323 |
LowestHighestShading compares the seasons in this table, column by column. It marks highest and lowest, not good or bad.
Everyone who reached it, by season
| Season | Players with 300+ carries | Who (team) and total, top block first |
|---|---|---|
| 2009 | 6 | Chris Johnson (TEN) 358; Thomas Jones (NYJ) 332; Steven Jackson (LA) 325; Adrian Peterson (MIN) 315; Maurice Jones-Drew (JAX) 312; Cedric Benson (CIN) 301 |
| 2010 | 7 | Michael Turner (ATL) 334; Steven Jackson (LA) 330; Arian Foster (HOU) 326; Rashard Mendenhall (PIT) 324; Cedric Benson (CIN) 321; Chris Johnson (TEN) 316; Ray Rice (BAL) 307 |
| 2011 | 2 | Maurice Jones-Drew (JAX) 343; Michael Turner (ATL) 301 |
| 2012 | 5 | Arian Foster (HOU) 351; Adrian Peterson (MIN) 348; Alfred Morris (WAS) 335; Doug Martin (TB) 319; Marshawn Lynch (SEA) 315 |
| 2013 | 2 | LeSean McCoy (PHI) 314; Marshawn Lynch (SEA) 301 |
| 2014 | 2 | DeMarco Murray (DAL) 392; LeSean McCoy (PHI) 312 |
| 2015 | 1 | Adrian Peterson (MIN) 327 |
| 2016 | 1 | Ezekiel Elliott (DAL) 322 |
| 2017 | 1 | Le'Veon Bell (PIT) 321 |
| 2018 | 1 | Ezekiel Elliott (DAL) 304 |
| 2019 | 2 | Derrick Henry (TEN) 303; Ezekiel Elliott (DAL) 301 |
| 2020 | 2 | Derrick Henry (TEN) 378; Dalvin Cook (MIN) 312 |
| 2021 | 2 | Jonathan Taylor (IND) 332; Najee Harris (PIT) 307 |
| 2022 | 3 | Derrick Henry (TEN) 349; Josh Jacobs (LV) 340; Nick Chubb (CLE) 302 |
| 2023 | 0 | |
| 2024 | 6 | Saquon Barkley (PHI) 345; Derrick Henry (BAL) 325; Kyren Williams (LA) 316; Bijan Robinson (ATL) 304; Jonathan Taylor (IND) 303; Josh Jacobs (GB) 301 |
| 2025 | 4 | Jonathan Taylor (IND) 323; Christian McCaffrey (SF) 311; James Cook (BUF) 309; Derrick Henry (BAL) 307 |
100-catch seasons got more common: never more than 7 a year through 2017, at least 7 a year from 2020, and 12 in 2023
The count was 6 in 2009 and only 2 in 2010 and 2011. It reached 12 in 2023 and was 7 in 2025, so the rise is uneven.
The count of 100-catch players and team passing yards per game did not move together: 12 players in 2023 with 236.3 yards per team-game, against 7 players in 2015 with 259.2. These are counts of individual players, so a few high-volume receivers can move the number from one season to the next. Seasons were 16 games through 2020 and 17 from 2021. The data do not say why. Each block in the chart is one player, colored by his team; hover a block to see who.
View the numbers
| Season | Players with 100+ receptions | League leader (team) and total |
|---|---|---|
| 2009 | 6 | Wes Welker (NE) 123 |
| 2010 | 2 (lowest value in this table) | Roddy White (ATL) 115 |
| 2011 | 2 (lowest value in this table) | Wes Welker (NE) 122 |
| 2012 | 6 | Calvin Johnson (DET) 122 |
| 2013 | 5 | Pierre Garcon (WAS) 113 |
| 2014 | 5 | Antonio Brown (PIT) 129 |
| 2015 | 7 | Antonio Brown (PIT) 136 |
| 2016 | 3 | Larry Fitzgerald (ARI) 107 (lowest value in this table) |
| 2017 | 5 | Jarvis Landry (MIA) 112 |
| 2018 | 11 | Michael Thomas (NO) 125 |
| 2019 | 5 | Michael Thomas (NO) 149 (highest value in this table) |
| 2020 | 8 | Stefon Diggs (BUF) 127 |
| 2021 | 10 | Cooper Kupp (LA) 145 |
| 2022 | 9 | Justin Jefferson (MIN) 128 |
| 2023 | 12 (highest value in this table) | CeeDee Lamb (DAL) 135 |
| 2024 | 10 | Ja'Marr Chase (CIN) 127 |
| 2025 | 7 | Puka Nacua (LA) 129 |
LowestHighestShading compares the seasons in this table, column by column. It marks highest and lowest, not good or bad.
Everyone who reached it, by season
| Season | Players with 100+ receptions | Who (team) and total, top block first |
|---|---|---|
| 2009 | 6 | Wes Welker (NE) 123; Steve Smith (NYG) 107; Andre Johnson (HOU) 101; Brandon Marshall (DEN) 101; Dallas Clark (IND) 100; Reggie Wayne (IND) 100 |
| 2010 | 2 | Roddy White (ATL) 115; Reggie Wayne (IND) 111 |
| 2011 | 2 | Wes Welker (NE) 122; Roddy White (ATL) 100 |
| 2012 | 6 | Calvin Johnson (DET) 122; Brandon Marshall (CHI) 118; Wes Welker (NE) 118; Andre Johnson (HOU) 112; Jason Witten (DAL) 110; Reggie Wayne (IND) 106 |
| 2013 | 5 | Pierre Garcon (WAS) 113; Antonio Brown (PIT) 110; Andre Johnson (HOU) 109; Julian Edelman (NE) 105; Brandon Marshall (CHI) 100 |
| 2014 | 5 | Antonio Brown (PIT) 129; Demaryius Thomas (DEN) 111; Julio Jones (ATL) 104; Matt Forte (CHI) 102; Emmanuel Sanders (DEN) 101 |
| 2015 | 7 | Antonio Brown (PIT) 136; Julio Jones (ATL) 136; DeAndre Hopkins (HOU) 111; Jarvis Landry (MIA) 110; Brandon Marshall (NYJ) 109; Larry Fitzgerald (ARI) 109; Demaryius Thomas (DEN) 105 |
| 2016 | 3 | Larry Fitzgerald (ARI) 107; Antonio Brown (PIT) 106; Odell Beckham Jr. (NYG) 101 |
| 2017 | 5 | Jarvis Landry (MIA) 112; Larry Fitzgerald (ARI) 109; Michael Thomas (NO) 104; Keenan Allen (LAC) 102; Antonio Brown (PIT) 101 |
| 2018 | 11 | Michael Thomas (NO) 125; Zach Ertz (PHI) 116; DeAndre Hopkins (HOU) 115; Adam Thielen (MIN) 113; Julio Jones (ATL) 113; Davante Adams (GB) 111; JuJu Smith-Schuster (PIT) 111; Christian McCaffrey (CAR) 107; Antonio Brown (PIT) 104; Travis Kelce (KC) 103; Stefon Diggs (MIN) 102 |
| 2019 | 5 | Michael Thomas (NO) 149; Christian McCaffrey (CAR) 116; DeAndre Hopkins (HOU) 104; Keenan Allen (LAC) 104; Julian Edelman (NE) 100 |
| 2020 | 8 | Stefon Diggs (BUF) 127; Davante Adams (GB) 115; DeAndre Hopkins (ARI) 115; Darren Waller (LV) 107; Travis Kelce (KC) 105; Allen Robinson (CHI) 102; Keenan Allen (LAC) 100; Tyler Lockett (SEA) 100 |
| 2021 | 10 | Cooper Kupp (LA) 145; Davante Adams (GB) 123; Tyreek Hill (KC) 111; Justin Jefferson (MIN) 108; Diontae Johnson (PIT) 107; Mark Andrews (BAL) 107; Keenan Allen (LAC) 106; Jaylen Waddle (MIA) 104; Hunter Renfrow (LV) 103; Stefon Diggs (BUF) 103 |
| 2022 | 9 | Justin Jefferson (MIN) 128; Tyreek Hill (MIA) 119; Travis Kelce (KC) 110; Stefon Diggs (BUF) 108; Austin Ekeler (LAC) 107; CeeDee Lamb (DAL) 107; Amon-Ra St. Brown (DET) 106; Chris Godwin Jr. (TB) 104; Davante Adams (LV) 100 |
| 2023 | 12 | CeeDee Lamb (DAL) 135; Amon-Ra St. Brown (DET) 119; Tyreek Hill (MIA) 119; Evan Engram (JAX) 114; Michael Pittman (IND) 109; Keenan Allen (LAC) 108; Stefon Diggs (BUF) 107; A.J. Brown (PHI) 106; Puka Nacua (LA) 105; Adam Thielen (CAR) 103; Davante Adams (LV) 103; Ja'Marr Chase (CIN) 100 |
| 2024 | 10 | Ja'Marr Chase (CIN) 127; Amon-Ra St. Brown (DET) 115; Brock Bowers (LV) 112; Trey McBride (ARI) 111; Malik Nabers (NYG) 109; Justin Jefferson (MIN) 103; CeeDee Lamb (DAL) 101; Garrett Wilson (NYJ) 101; Drake London (ATL) 100; Jaxon Smith-Njigba (SEA) 100 |
| 2025 | 7 | Puka Nacua (LA) 129; Trey McBride (ARI) 126; Ja'Marr Chase (CIN) 125; Jaxon Smith-Njigba (SEA) 119; Amon-Ra St. Brown (DET) 117; Christian McCaffrey (SF) 102; Chris Olave (NO) 100 |
Interceptions per team-game fell from 1.025 in 2009 to 0.699 in 2025
Defenses came up with 1.025 interceptions per team-game in 2009. By 2025 that had fallen to 0.699, a drop of 32%.
The decline is gradual, with small year-to-year bumps and no single-season cliff. The data show that it happened, not why.
View the numbers
| Season | Interceptions | Interceptions per team-game |
|---|---|---|
| 2009 | 525 | 1.025 |
| 2010 | 510 | 0.996 |
| 2011 | 506 | 0.988 |
| 2012 | 468 | 0.914 |
| 2013 | 502 | 0.980 |
| 2014 | 450 | 0.879 |
| 2015 | 436 | 0.852 |
| 2016 | 415 | 0.811 |
| 2017 | 430 | 0.840 |
| 2018 | 419 | 0.818 |
| 2019 | 410 | 0.801 |
| 2020 | 395 | 0.771 |
| 2021 | 440 | 0.809 |
| 2022 | 418 | 0.771 |
| 2023 | 430 | 0.790 |
| 2024 | 387 | 0.711 |
| 2025 | 380 | 0.699 |
Players with 6+ interceptions fell from 11 in 2009 to 5 or fewer in every season since 2013, and 1 in 2025
In 2009, 11 defenders had six or more interceptions. By 2013 it was 4, and in 2025 only 1 player did it. Every season from 2013 to 2025 had between 1 and 5.
The season high in the data is 11 interceptions, by Trevon Diggs in 2021. Each block in the chart is one player, colored by his team; hover a block to see who.
View the numbers
| Season | Players with 6+ interceptions | League leader (team) and total |
|---|---|---|
| 2009 | 11 (highest value in this table) | Asante Samuel (PHI) 9 |
| 2010 | 9 | Ed Reed (BAL) 8 |
| 2011 | 7 | Charles Woodson (GB) 7 |
| 2012 | 6 | Tim Jennings (CHI) 9 |
| 2013 | 4 | Richard Sherman (SEA) 8 |
| 2014 | 2 | Glover Quin (DET) 7 |
| 2015 | 5 | Marcus Peters (KC) 8 |
| 2016 | 4 | Casey Hayward (LAC) 7 |
| 2017 | 4 | Darius Slay (DET) 8 |
| 2018 | 4 | Damontae Kazee (ATL) 7 |
| 2019 | 3 | Anthony Harris (MIN) 6 (lowest value in this table) |
| 2020 | 3 | Xavien Howard (MIA) 10 |
| 2021 | 3 | Trevon Diggs (DAL) 11 (highest value in this table) |
| 2022 | 4 | C.J. Gardner-Johnson (PHI) 6 (lowest value in this table) |
| 2023 | 3 | DaRon Bland (DAL) 9 |
| 2024 | 5 | Kerby Joseph (DET) 9 |
| 2025 | 1 (lowest value in this table) | Kevin Byard (CHI) 7 |
LowestHighestShading compares the seasons in this table, column by column. It marks highest and lowest, not good or bad.
Everyone who reached it, by season
| Season | Players with 6+ interceptions | Who (team) and total, top block first |
|---|---|---|
| 2009 | 11 | Asante Samuel (PHI) 9; Charles Woodson (GB) 9; Darren Sharper (NO) 9; Jairus Byrd (BUF) 9; Brent Grimes (ATL) 6; Darrelle Revis (NYJ) 6; Dominique Rodgers-Cromartie (ARI) 6; Johnathan Joseph (CIN) 6; Leon Hall (CIN) 6; Nick Collins (GB) 6; Zack Bowman (CHI) 6 |
| 2010 | 9 | Ed Reed (BAL) 8; Asante Samuel (PHI) 7; Devin McCourty (NE) 7; Troy Polamalu (PIT) 7; Aqib Talib (TB) 6; DeAngelo Hall (WAS) 6; Jason Allen (MIA/HOU) 6; Joe Haden (CLE) 6; Tramon Williams (GB) 6 |
| 2011 | 7 | Charles Woodson (GB) 7; Eric Weddle (LAC) 7; Kyle Arrington (NE) 7; Brandon Browner (SEA) 6; Carlos Rogers (SF) 6; Corey Webster (NYG) 6; Dashon Goldson (SF) 6 |
| 2012 | 6 | Tim Jennings (CHI) 9; Richard Sherman (SEA) 8; Stevie Brown (NYG) 8; Patrick Peterson (ARI) 7; Casey Hayward (GB) 6; Thomas DeCoud (ATL) 6 |
| 2013 | 4 | Richard Sherman (SEA) 8; Antrel Rolle (NYG) 6; Brandon Boykin (PHI) 6; Deandre Levy (DET) 6 |
| 2014 | 2 | Glover Quin (DET) 7; Tashaun Gipson (CLE) 6 |
| 2015 | 5 | Marcus Peters (KC) 8; Reggie Nelson (CIN) 8; Kurt Coleman (CAR) 7; Trumaine Johnson (LA) 7; Marcus Williams (NYJ) 6 |
| 2016 | 4 | Casey Hayward (LAC) 7; Dominique Rodgers-Cromartie (NYG) 6; Marcus Peters (KC) 6; Quintin Demps (HOU) 6 |
| 2017 | 4 | Darius Slay (DET) 8; Kevin Byard (TEN) 8; A.J. Bouye (JAX) 6; Eric Weddle (BAL) 6 |
| 2018 | 4 | Damontae Kazee (ATL) 7; Kyle Fuller (CHI) 7; Xavien Howard (MIA) 7; Eddie Jackson (CHI) 6 |
| 2019 | 3 | Anthony Harris (MIN) 6; Stephon Gilmore (NE) 6; Tre'Davious White (BUF) 6 |
| 2020 | 3 | Xavien Howard (MIA) 10; J.C. Jackson (NE) 9; Tyrann Mathieu (KC) 6 |
| 2021 | 3 | Trevon Diggs (DAL) 11; J.C. Jackson (NE) 8; Amani Oruwariye (DET) 6 |
| 2022 | 4 | C.J. Gardner-Johnson (PHI) 6; Justin Simmons (DEN) 6; Minkah Fitzpatrick (PIT) 6; Riq Woolen (SEA) 6 |
| 2023 | 3 | DaRon Bland (DAL) 9; Geno Stone (BAL) 7; Jessie Bates (ATL) 6 |
| 2024 | 5 | Kerby Joseph (DET) 9; Xavier McKinney (GB) 8; Byron Murphy (MIN) 6; C.J. Gardner-Johnson (PHI) 6; Marlon Humphrey (BAL) 6 |
| 2025 | 1 | Kevin Byard (CHI) 7 |
Sacks per pass attempt rose from 6.4% in 2009 to 7.3% in 2025
Dividing sacks by pass attempts, the sack rate was 6.38% in 2009 and 7.33% in 2025. It peaked at 7.64% in 2023.
Sacks are not counted in pass attempts, so this rate is sacks per attempt. Over the same seasons interceptions per team-game fell while sacks per attempt rose. The data show what changed, not why.
View the numbers
| Season | Sacks | Pass attempts | Sacks per pass attempt |
|---|---|---|---|
| 2009 | 1,086 | 17,035 | 6.38% |
| 2010 | 1,121 | 17,272 | 6.49% |
| 2011 | 1,181 | 17,422 | 6.78% |
| 2012 | 1,162 | 17,788 | 6.53% |
| 2013 | 1,288 | 18,136 | 7.10% |
| 2014 | 1,207 | 17,879 | 6.75% |
| 2015 | 1,182 | 18,298 | 6.46% |
| 2016 | 1,106 | 18,295 | 6.05% |
| 2017 | 1,190 | 17,488 | 6.80% |
| 2018 | 1,270 | 17,670 | 7.19% |
| 2019 | 1,269 | 17,853 | 7.11% |
| 2020 | 1,131 | 18,018 | 6.28% |
| 2021 | 1,232 | 18,712 | 6.58% |
| 2022 | 1,291 | 18,069 | 7.14% |
| 2023 | 1,399 | 18,315 | 7.64% |
| 2024 | 1,304 | 17,811 | 7.32% |
| 2025 | 1,278 | 17,439 | 7.33% |
J.J. Watt owns 4 of the 10 biggest QB-hit seasons, led by 51 in 2014
The top 10 single seasons for quarterback hits include 4 by J.J. Watt, in 2012 (43), 2013 (46), 2014 (51), 2015 (50). The record in the data is 51.
The source does not say how consistently QB hits were recorded over time, so treat this as a ranking of recorded hits, not a full count of pressure.
View the numbers
| Player | Season | Team | QB hits |
|---|---|---|---|
| J.J. Watt | 2014 | HOU | 51 |
| J.J. Watt | 2015 | HOU | 50 |
| Nick Bosa | 2022 | SF | 48 |
| Zach Allen | 2025 | DEN | 47 |
| J.J. Watt | 2013 | HOU | 46 |
| J.J. Watt | 2012 | HOU | 43 |
| Aaron Donald | 2018 | LA | 41 |
| T.J. Watt | 2020 | PIT | 41 |
| Zach Allen | 2024 | DEN | 40 |
| Myles Garrett | 2025 | CLE | 39 |
The sack leader each season ranged from 15 (T.J. Watt, 2020) to 23 (Myles Garrett, 2025)
Every season has one clear sack leader, with no ties. The lowest leading total was 15 by T.J. Watt in 2020. The highest was 23 by Myles Garrett in 2025.
T.J. Watt led the league in 3 of the 17 seasons. Each bar is colored by the leader's team, and a leader who changed teams that season would show a bar split between them. Hover a bar to see who led.
View the numbers
| Season | Leader | Team | Sacks |
|---|---|---|---|
| 2009 | Elvis Dumervil | DEN | 16.5 |
| 2010 | DeMarcus Ware | DAL | 15.5 |
| 2011 | Jared Allen | MIN | 22 |
| 2012 | J.J. Watt | HOU | 20.5 |
| 2013 | Robert Mathis | IND | 19.5 |
| 2014 | Justin Houston | KC | 22 |
| 2015 | J.J. Watt | HOU | 17.5 |
| 2016 | Vic Beasley | ATL | 15.5 |
| 2017 | Chandler Jones | ARI | 17 |
| 2018 | Aaron Donald | LA | 20.5 |
| 2019 | Shaquil Barrett | TB | 19.5 |
| 2020 | T.J. Watt | PIT | 15 (lowest value in this table) |
| 2021 | T.J. Watt | PIT | 22.5 |
| 2022 | Nick Bosa | SF | 18.5 |
| 2023 | T.J. Watt | PIT | 19 |
| 2024 | Trey Hendrickson | CIN | 17.5 |
| 2025 | Myles Garrett | CLE | 23 (highest value in this table) |
LowestHighestShading compares the seasons in this table, column by column. It marks highest and lowest, not good or bad.
Patrick Mahomes in 2022 was the best quarterback season by EPA over replacement, and only 4 of the top 10 are also in the top 10 for passing yards
EPA (expected points added) says how many points a play was worth compared with the average play in the same situation; an example is in "Terms in plain words" below. EPA over replacement (EPAOR) is a quarterback's total EPA minus what a replacement-level passer (the quarterbacks ranked below the top 32 by plays, described in finding 12) would have added on the same number of opportunities (his pass attempts, sacks and carries). The top season in 2009 to 2025 is Patrick Mahomes in 2022 with 308.1 points, ranked 4 in passing yards across all 17 seasons.
Ranking all quarterback seasons by EPAOR and by passing yards, 4 of the top 10 seasons appear on both lists. Passing yards reward volume; EPAOR also rewards efficiency and counts sacks, interceptions and scrambles. This is this site's own version of a value-over-replacement stat, not a full WAR. The replacement rule is in the data section below.
View the numbers
| Rank | Player-season | Team | EPAOR | Total EPA | Opportunities | Passing-yards rank (of all QB seasons, 2009 to 2025) |
|---|---|---|---|---|---|---|
| 1 | Patrick Mahomes 2022 | KC | 308.1 | 217.4 | 735 | 4 |
| 2 | Tom Brady 2012 | NE | 298.7 | 197.8 | 687 | 27 |
| 3 | Patrick Mahomes 2018 | KC | 298.1 | 237.0 | 666 | 12 |
| 4 | Peyton Manning 2013 | DEN | 296.0 | 233.4 | 709 | 2 |
| 5 | Lamar Jackson 2019 | BAL | 295.9 | 198.9 | 600 | 333 |
| 6 | Aaron Rodgers 2011 | GB | 281.2 | 227.3 | 597 | 48 |
| 7 | Drew Brees 2011 | NO | 280.7 | 217.1 | 705 | 1 |
| 8 | Peyton Manning 2009 | IND | 274.0 | 161.7 | 600 | 68 |
| 9 | Drew Brees 2009 | NO | 267.6 | 163.5 | 556 | 86 |
| 10 | Tom Brady 2011 | NE | 267.5 | 205.6 | 686 | 5 |
Under this site's rule, quarterback replacement level averaged -0.113 EPA per play across the 17 seasons, below zero and below the 0.064 of the top 32
Each season, the quarterbacks ranked below the top 32 by plays form the replacement pool. Their EPA per play averaged -0.113, from -0.187 (2009) to -0.067 (2020). The top 32 averaged 0.064, above the replacement level in 17 of 17 seasons.
Read these figures with care. The pool is biased low by construction: it holds the players who ended up with the fewest plays, which includes benched and injured players, so it is a low bar and not a typical backup. The -0.113 is a simple mean of 17 season rates, not one rate pooled over every play, and the range from -0.187 to -0.067 is just the lowest and highest season, not a trend. For wide receivers the same rule gives a replacement level that averaged 0.125 EPA per opportunity (carries plus targets), from 0.036 (2017) to 0.219 (2020), against 0.241 for the top 64. The bar differs by position, so EPAOR scores should only be compared within a position.
View the numbers
| Season | QB pool size | QB replacement EPA per play | Top 32 QB EPA per play | WR replacement EPA per opportunity | Top 64 WR EPA per opportunity |
|---|---|---|---|---|---|
| 2009 | 45 | -0.187 | 0.054 | 0.118 | 0.186 |
| 2010 | 48 | -0.130 | 0.062 | 0.098 | 0.205 |
| 2011 | 43 | -0.090 | 0.052 | 0.096 | 0.210 |
| 2012 | 38 | -0.147 | 0.063 | 0.087 | 0.235 |
| 2013 | 34 | -0.088 | 0.062 | 0.138 | 0.209 |
| 2014 | 41 | -0.118 | 0.062 | 0.108 | 0.233 |
| 2015 | 42 | -0.098 | 0.072 | 0.111 | 0.239 |
| 2016 | 38 | -0.077 | 0.069 | 0.121 | 0.229 |
| 2017 | 41 | -0.142 | 0.035 | 0.036 | 0.204 |
| 2018 | 39 | -0.092 | 0.080 | 0.157 | 0.281 |
| 2019 | 39 | -0.162 | 0.073 | 0.155 | 0.284 |
| 2020 | 49 | -0.067 | 0.103 | 0.219 | 0.315 |
| 2021 | 49 | -0.076 | 0.060 | 0.164 | 0.251 |
| 2022 | 51 | -0.123 | 0.055 | 0.105 | 0.248 |
| 2023 | 49 | -0.139 | 0.032 | 0.081 | 0.264 |
| 2024 | 46 | -0.082 | 0.080 | 0.149 | 0.268 |
| 2025 | 49 | -0.104 | 0.077 | 0.185 | 0.239 |
Where the numbers come from and how they are computed
Source. The nflverse-data
stats_player release: weekly player stats, one file per season, licensed CC-BY-4.0. Credit to the nflverse
project and its contributors. Definitions of the advanced columns come from the nflverse player stats data dictionary.
What one row is. One row is one player in one game. The cleaned data has 304,515 rows and 69 columns for 17 seasons (2009 to 2025), 8,093 players (8,081 in the regular season) and 32 teams. The time column is season (and week) and the group columns are player and team. This report and the dashboard's starting view use regular-season rows only, which is 291,750 of them; playoffs can be added with the dashboard's season-type filter.
Rows dropped and other cleaning. The source files hold 304,877 rows. 362 were dropped for having no player (below), 0 for having no opponent and 0 as duplicates, which leaves 304,515 rows.
- 362 rows dropped for having no player. These rows have no player ID, no player name and no position, so they cannot be a player-game. There is exactly one such row for each of the 362 season-weeks in the source (21 to 22 per season, 294 in the regular season and 68 in the playoffs), not one per team per week. Each has a team code, and 337 of them have non-zero stats, almost all penalties (330 rows) and safeties (84 rows). The source does not say what they are; they look like penalties and other plays charged to a team instead of a player. What was lost, counting regular-season totals in the dropped rows out of all rows: sacks 11 of 20,708, interceptions 0 of 7,521, solo tackles 163 of 353,204, QB hits 6 of 47,631, passing yards 0 of 2,163,026, rushing yards 0 of 1,016,067, receptions 2 of 191,313. Penalties are the one number that is visibly affected: 2,764 of 55,658 (5.0%) sit in dropped rows, so penalty rates on the dashboard and the team field are about 5% lower than the source's total. Nothing in the findings above uses penalties.
- 4,536 all-zero rows kept. 4,536 rows (4,342 of them in the regular season) have a player ID, name, position and team but no tracked stat in the columns kept here (mostly linemen, defensive backs and linebackers who played without recording a stat). They are real players who appeared in the game (1.5% of regular-season rows), so dropping them would understate who played. They add nothing to any sum, and they do count as player-games in the "Player-games" measure and in per-player-game averages.
- Team codes. The source uses one code per franchise across moves: the Raiders are LV, the Chargers LAC and the Rams LA in every season, so there are 32 teams in all 17 seasons and no renaming was needed.
Tackles for loss are not recorded in 2009 to 2011 and are marked NA (not zero) there. More generally, NA means the source has no value for that player in that game (for example, no pass attempts means no passing EPA); sums skip NA. Player names are not unique,
so players are identified by player_id. Full details are in data/DATA_QUALITY.md and
data/DATA_DICTIONARY.md.
Terms in plain words.
- EPA (expected points added)
- How many points a play was worth compared with the average play in the same situation. Example with made-up round numbers: a drive worth 1.0 expected points before a pass and 2.0 after a 20-yard catch gives that pass an EPA of +1.0. The values come from nflverse's model, not from this project.
- Team-game
- One team in one game. A season of 17 games is 17 team-games for that team.
- Sack
- A tackle of the quarterback behind the line of scrimmage before he throws. Defenders can share one (each gets half).
- QB hit
- A defender hits the quarterback as or just after he throws, without a sack.
- Carry
- One running play: a player runs with the ball (a rush attempt).
- Dropback
- A pass attempt or a sack: every time the quarterback drops back to pass. EPA per dropback is passing EPA divided by attempts plus sacks.
- CPOE (completion percentage over expected)
- How much more or less often a passer completes passes than nflverse's model expects given how hard each throw was, in percentage points. +2 means two points better than expected.
- Opportunities
- The plays a player was directly involved in: pass attempts + sacks + carries for a quarterback, carries + targets for a running back, receiver or tight end. For quarterbacks, "EPA per play" in finding 12 means EPA per opportunity.
- Replacement level
- What the players just below the starters produced: this site's rule puts everyone ranked below the top 32 quarterbacks (64 receivers) by opportunities in the replacement pool. The pool includes benched and injured players, so it is a low bar.
- EPA over replacement (EPAOR)
- A player's total EPA minus what the replacement rate would have produced on the same number of opportunities.
- Bell-cow
- A running back who gets most of his team's carries.
How every number is computed.
- Team-game: one team in one game. Per-team-game rates add up every player's stat for the season and divide by the number of regular-season team-games (32 teams, 16 games each through 2020, 17 from 2021, with one fewer game in 2022).
- Player-season counts (4,000-yard passers, 1,000-yard rushers, 300-carry backs, 100-catch receivers, players with 6+ interceptions): each player's regular-season total for one season is compared to the threshold, and players who met it are counted once. A player who changed teams has one total across teams.
- Interceptions per team-game is defensive interceptions divided by team-games.
- Sacks per pass attempt is defensive sacks (halves count) divided by pass attempts. Sacks are not part of attempts.
- QB hits and sack leaders are single-season player totals. Ranking ties are broken by player name. No two players tied for the sack lead in any season.
- Sack rates (two different ones): finding 8's "sacks per pass attempt" is defenders' sacks (halves count) divided by pass attempts, for the whole league. The dashboard's "Sack rate (sacks taken per dropback)" is sacks suffered by quarterbacks divided by attempts plus sacks, so the two are not the same number and are not expected to match.
- Percent change: 1 minus the later value divided by the earlier value (for example 2025 against the peak, or against 2009).
- Top 32 and top 64 "starter" rate: the starters' total EPA divided by the starters' total opportunities in that season, one pooled rate, like the replacement rate. The "averaged" figures in finding 12 are simple means of the 17 season rates, not one rate pooled over every play.
- Players who changed teams: a player's season total is one number across teams. In the charts his block is split by team in proportion to each team's share of the stat (for EPAOR, each team's share of his opportunities).
- Advanced stats on the dashboard: EPA per dropback is passing EPA divided by attempts plus sacks. ANY/A is (passing yards + 20 x touchdowns - 45 x interceptions + sack yards lost) divided by (attempts + sacks), with sack yards stored as negatives. CPOE is each game's CPOE weighted by that game's attempts. RACR is receiving yards divided by receiving air yards. Target share, air-yards share and WOPR are averages over games in which the player was targeted. Each dashboard measure states its definition under the chart.
- EPA over replacement (EPAOR, this site's version): regular season only, one position group at a time (quarterbacks, running backs, wide receivers, tight ends). Opportunities are attempts + sacks + carries for quarterbacks and carries + targets for the others. Each season players are ranked by opportunities (ties by player ID); the top 32 quarterbacks, 32 running backs, 64 wide receivers and 32 tight ends are the starters and everyone below them is the replacement pool. The replacement rate r is the pool's total EPA divided by the pool's opportunities, and EPAOR = a player's EPA - r x opportunities. The cutoffs are a judgment call, not nflWAR's. Scores are in expected points, not wins, and are only comparable within a position. A pass's EPA appears under both the passer and the receiver, so EPA must not be added across players.
Limits. Totals are nflverse's numbers and can differ slightly from official league totals. Stats are only as good as the source; tackles depend on stat-crew scoring and are not used here. Metrics that need play-by-play, Next Gen Stats or Pro Football Reference data (EPA allowed, pressure rate, time to throw, missed tackles) are not in this dataset. Reasons for the trends, such as rule changes, are outside the data and are not tested here.
Every number on this page is computed by scripts/build_report.py from data/seasons/, and
scripts/check_numbers.js recomputes them with the dashboard's own code.