Run ItBack
Over eleven seasons, NFL offenses threw less, ran more, and handed a growing share of the run game to their quarterbacks.
From 259.1 in 2015 to 224.9 in 2025, the lowest of the period
▶ Run the passing playSummary
This report analyzes 66,228 game-by-game stat lines for every quarterback, running back, wide receiver and tight end who appeared in an NFL game from the 2015 through 2025 seasons: 1,900 players on 32 teams across 3,028 regular-season and playoff games, drawn from the open-source nflverse project. It measures how offensive production changed by season, position, team and venue. The main finding is that the league now passes less. Passing yards per team-game fell 13.2%, and 300-yard passing games dropped from 132 to 68. Rushing rose to 117.0 yards per team-game, and quarterbacks carried more of it: their share of rushing yards grew from 11.8% to 15.2%. Offenses also gave the ball away less often and were sacked more often. Home teams out-gained visitors in every season except 2020, when most stadiums were closed to fans.
Every trend, run as a play
Pick a play and a season. The plays run on that season’s real league averages. A run gains exactly the league’s yards per carry. A completed pass gains exactly its yards per attempt. The faint lines behind a play are one route per pass attempt (or one lane per carry) in an average team-game. Hover a yard line, or click a player for that position’s numbers.
Before you read: draw how you think passing changed
In 2015, NFL teams averaged 259.1 passing yards per game. Drag across the chart to sketch where you think that number went over the next ten seasons, then reveal the real line.
Keyboard: focus the chart, use ←/→ to pick a season and ↑/↓ to set it, and Enter to reveal.
Passing yards per team-game, regular season
Your guess vs. the data
I. The air game
Passing volume fell to its lowest level of the period in 2025
In 2015, the average NFL team threw for 259.1 passing yards per game. By 2025 that figure was 224.9, down 13.2% and the lowest of the 11 seasons. 2015 was the high point.
The decline is mostly about volume, not efficiency. Pass attempts fell from 35.7 to 32.0 per team-game (−10.3%), while yards per attempt moved only from 7.25 to 7.02. Teams are simply choosing to throw less.
Passing yards per team-game, regular season
Σ passing yards ÷ team-games played, by season
Note: y-axis does not start at zero. Passing yards are gross (sack yardage not subtracted).
Show the numbers
The 300-yard passing game has nearly been cut in half
Quarterbacks posted 132 regular-season games of 300 or more passing yards in 2015. In 2025 they managed 68, a 48.5% drop, even though the schedule grew from 16 to 17 games per team in 2021.
As a share of all team-games, a 300-yard passer went from roughly one game in four (25.8%) to one in eight (12.5%). Across the whole period there were 1,206 such games.
Regular-season games with 300+ passing yards by one player
Count of player-games with passing_yards ≥ 300
Hover a column for the rate per team-game.
Show the numbers
Quarterbacks are getting sacked more often
Fewer throws have not meant cleaner pockets. The sack rate (sacks per dropback, where a dropback is a pass attempt or a sack) rose from 6.09% in 2015 to 6.87% in 2025, peaking at 7.15% in 2023.
Comparing five-season blocks smooths out year-to-year noise: 6.33% of dropbacks ended in a sack in 2015–2019, against 6.76% in 2021–2025. Pressure on the passer is one plausible reason teams now lean on the run and on mobile quarterbacks (findings 5 and 6).
Sack rate by season, regular season
Σ sacks ÷ (Σ pass attempts + Σ sacks)
Show the numbers
Offenses gave the ball away less than ever in 2025
Interceptions plus lost fumbles by skill-position players fell from 1.43 per team-game in 2015 to 1.14 in 2025, the lowest of any season in the data.
Both parts improved. The interception rate slipped from 2.38% of pass attempts to 2.18%. Lost fumbles dropped from 0.58 to 0.44 per team-game, a 23.6% decline.
Giveaways per team-game, regular season
(Σ interceptions thrown + Σ fumbles lost) ÷ team-games
Note: y-axis does not start at zero. Fumbles by non-skill players (e.g. linemen, returners listed at other positions) are not in the dataset.
Show the numbers
II. The ground game
The run game gained ground, and got more efficient doing it
Rushing yards per team-game climbed from 108.7 in 2015 to 117.0 in 2025 (+7.6%), peaking at 121.5 in 2022.
Teams did not run much more often: carries per team-game barely moved (26.3 → 26.8). What changed is what each carry produced, with yards per carry rising from 4.13 to 4.36. The number of 1,000-yard rushers grew from 7 to 17, though the extra 17th game makes that milestone easier to reach after 2020.
Rushing yards per team-game, regular season
Σ rushing yards ÷ team-games played, by season
Note: y-axis does not start at zero.
Show the numbers
Quarterbacks became a bigger part of the run game
In 2015, quarterbacks gained 11.8% of all rushing yards by skill-position players. By 2024 that share had reached 16.9%, and in 2025 it stood at 15.2%.
In raw terms, QB rushing yards rose from 6,562 to 9,686 (+47.6%), topping out at 11,015 in 2024. QB carries grew from 1,624 to 2,215. These counts include designed runs, scrambles and kneel-downs (which count as carries with negative yards).
Quarterbacks’ share of rushing yards, regular season
Σ QB rushing yards ÷ Σ rushing yards by all QBs, RBs, WRs and TEs
Note: y-axis does not start at zero.
Show the numbers
Tight ends reclaimed targets as running backs lost them
Wide receivers still see most of the targets (58.0% in 2025), but the balance behind them shifted. Tight ends’ share fell to 20.1% in 2018, then climbed to 24.0% in 2025, the highest of the period.
Running backs moved the other way. They drew 21.7% of targets in 2017, but only 17.4% in 2024 and 18.0% in 2025. The running back of this era gains more on the ground (finding 5) and catches fewer passes.
Share of targets by position, regular season
Σ targets for each position ÷ Σ targets for all four positions
QB targets (trick plays) are under 0.2% in every season and are too thin to see.
Show the numbers
III. Where & who
Home offenses out-gain visitors, except in 2020, the season without crowds
Across all 11 regular seasons, offenses averaged 364.5 yards per game at home and 352.5 on the road, a home edge of 11.9 yards. They also scored 2.54 touchdowns per game at home against 2.31 away.
That edge showed up in every season but one. In 2020, when most stadiums were closed to fans because of COVID-19, visiting offenses averaged 377.8 yards to the home side’s 369.0. The largest home edge came in 2023 (+22.6).
Home minus away offensive yards per team-game
(passing + rushing yards) at home − on the road; regular season
Above zero = home offenses gained more.
Show the numbers
Kansas City Chiefs produced the most yards, by the slimmest of margins
Over 181 regular-season games each, the Kansas City Chiefs averaged 382.9 offensive yards per game, just ahead of TB (382.7). The league average was 358.5.
At the bottom, the New York Jets averaged 320.1, a gap of 62.8 yards per game to the top. That is roughly one long touchdown drive, every week, for 11 years. The best single season belonged to DAL in 2019 (440.9).
2015–2025 regular season, per team-game. Same numbers as the chart.
Offensive yards per game by team, 2015–2025
(Σ passing + Σ rushing yards) ÷ team-games; regular season; ranked
Top & bottom team All others
Franchises that relocated are shown under their current name (Raiders, Chargers, Rams).
Show the numbers
Quarterbacks are the most dependable fantasy scorers
Measured in PPR fantasy points per player-game, quarterbacks averaged 14.04. That is 64% more than wide receivers (8.55), with running backs (8.46) and tight ends (6.24) further behind.
The shape of the distribution matters as much as the average. The QB median (14.1) sits right on the mean, so a typical QB game looks like an average one. For RBs and WRs the medians (6.2 and 6.4) sit far below the means, pulled up by a few big games. QBs hit 20+ points in 25.6% of games, versus 9.7% for RBs, 9.3% for WRs and 3.9% for TEs.
PPR fantasy points per player-game, by position
Regular season, games where the player recorded a stat; percentiles of the distribution
Show the numbers
Derrick Henry is the era’s yardage leader
No player gained more scrimmage yards (rushing + receiving) in the 2015–2025 regular seasons than Derrick Henry: 14,819 yards in 152 games with a recorded stat. Christian McCaffrey is second with 12,979, and he needed only 112 games. His 115.9 yards per game is the best rate in the top 10.
The top 10 is split between 4 running backs, 5 wide receivers and 1 tight end. Durable receivers can pile up totals over many seasons, while backs need fewer games to get there.
Most regular-season scrimmage yards, 2015–2025
Σ rushing yards + Σ receiving yards per player; teams in order played for
Headshots: NFL via nflverse. Initials are shown if an image is unavailable.
Show the numbers
Six points, by the numbers
The play is illustrative. The statistic is real, from the same data as the rest of this report.
How these numbers were made
Every figure on this page is computed by one script, analysis/analysis.py, from the cleaned dataset in this project’s repository. The same file feeds the charts, so the text and the graphics cannot disagree. The interactive dashboard recomputes the same measures in your browser, and a test script checks that both pages agree.
1Data source
Weekly player statistics from the nflverse open-data project (the same data returned by nflreadr::load_player_stats()), downloaded 28 September 2026. nflverse compiles NFL play-by-play into per-player, per-game box scores. NFL data belongs to its respective owners.
2What one row is
One player’s stat line in one game: for example, Patrick Mahomes in Week 5 of 2023. The file has 66,228 rows and 40 columns, covering 1,900 players, 32 teams and 3,028 games. A player only has a row for games where he appeared in the stat sheet. Weeks he didn’t play are absent, not zero.
3Time period
The 2015 through 2025 NFL seasons (11 complete seasons), regular season and playoffs. The 2026 season is excluded because it is still in progress. Teams played 16 regular-season games through 2020 and 17 from 2021, so seasons are compared per team-game, not by raw totals.
4Cleaning
- Combined 11 season files with an identical schema (199,868 raw rows × 150 columns), and kept 40 columns.
- Added
home_awayfrom the game ID, mapping historic team codes (OAK→LV, SD→LAC, STL→LA). - Added team name, conference and division; derived scrimmage yards, total yards and total TDs; converted sack yards to positive numbers.
- Validated the result: no duplicate player-games, no missing values, completions ≤ attempts, receptions ≤ targets.
5Rows removed & excluded
- 236 rows removed with no player ID. These are team-level placeholder rows, not players.
- 133,404 rows removed for defensive, special-teams and offensive-line players. Those positions almost never record offensive statistics, and the project studies offensive production.
- 2026 season not loaded, because it was incomplete at download time.
- Kept but flagged: 6,530 rows where a player appeared but recorded no offensive stat. They add zero to totals and are excluded from per-player-game averages and medians.
- Postseason rows (2,841) are kept in the data and the dashboard. The report’s findings use the regular season only (63,387 rows), because playoff length differs by team and changed in 2020.
6How every measure is calculated
Rates are always a ratio of sums, never an average of per-game ratios, so big and small games are weighted by their volume. A team-game is one team’s side of one game: 512 per regular season through 2020, 544 from 2021 (542 in 2022, when one game was cancelled).
| Measure | Formula | Used in |
|---|---|---|
| Per team-game | Σ stat ÷ number of distinct (game, team) pairs | Findings 1, 4, 5, 8, 9; dashboard |
| Offensive yards | Σ passing_yards + Σ rushing_yards | Findings 8, 9; KPIs. Receiving yards are not added, because they duplicate passing yards. |
| Touchdowns scored | Σ (total_tds − passing_tds) | = rushing + receiving + return TDs; passing TDs would double count receiving TDs. |
| 300-yard games | count of rows with passing_yards ≥ 300 | Finding 2; rate = count ÷ team-games |
| Yards per attempt | Σ passing_yards ÷ Σ attempts | Finding 1 |
| Yards per carry | Σ rushing_yards ÷ Σ carries | Finding 5 |
| 1,000-yard rushers | players with Σ rushing_yards ≥ 1,000 in a regular season | Finding 5 |
| QB rushing share | Σ rushing_yards (QB) ÷ Σ rushing_yards (all four positions) | Finding 6 |
| Target share | Σ targets (position) ÷ Σ targets (all) | Finding 7 |
| Interception rate | Σ interceptions ÷ Σ attempts | Finding 4 |
| Giveaways per team-game | (Σ interceptions + Σ fumbles_lost) ÷ team-games | Finding 4 |
| Sack rate | Σ sacks ÷ (Σ attempts + Σ sacks) | Finding 3 |
| Home edge | offensive yards per home team-game − per away team-game | Finding 8 |
| Average / median per player-game | mean / median of the stat over rows where no_stats_flag = False | Finding 10; dashboard |
| Percentiles | 10th, 25th, 50th, 75th, 90th percentile (linear interpolation) | Finding 10 |
| Scrimmage yards | Σ rushing_yards + Σ receiving_yards | Finding 11; ranking = sort descending |
| Completion % / catch rate | Σ completions ÷ Σ attempts; Σ receptions ÷ Σ targets | Dashboard |
| % change | (last ÷ first − 1) × 100 | Throughout |
| Draw-it score | mean of |your guess − actual| over the seasons you drew | “Your call”; head-to-head gap = yds/game difference × 181 games |
| Animated plays | run gain = season yards per carry; completion gain = season yards per attempt; faint traces = round(attempts or carries per team-game); sack tag = 1 in round(100 ÷ sack rate) dropbacks | Field of Play, play insets, touchdown moment. Formations and routes are illustrative; every number shown on them is data |
| 3D column height | value ÷ highest team value (from zero); zoomed: (value − min) ÷ (max − min) | Dashboard 3D stadium; exact values in tooltips and the table |
7Limitations
- Only QBs, RBs, WRs and TEs are included. Team totals therefore leave out the rare offensive stat by another position (for example, a trick-play pass by a punter). Official team statistics will differ slightly.
- Passing yards are gross (sack yardage is not subtracted), unlike the NFL’s official net passing figure.
- Teams are shown under their current franchise code for all years (LV = Oakland Raiders through 2019; LAC = San Diego through 2016; LA = St. Louis in 2015).
- These are descriptive trends. The report does not claim to explain why they happened.
Explore the data yourself
Filter all 66,228 player-games by season, team, position, conference, venue, season type or player. Switch the stat and the breakdown, and check every number in the table.
- 7 filters with one-click reset
- 6 live summary numbers
- 6 interactive charts, including a 3D stadium
- Click any bar to filter · shareable links
- Sortable, searchable data table