Buffalo Bills vs Cleveland Browns: Full Player Stats
Buffalo Bills vs Cleveland Browns Match Player Stats: Full Game Breakdown (December 21, 2025)
The Buffalo Bills came into Cleveland needing a win to maintain their AFC East lead. The Cleveland Browns, playing for pride and momentum heading into the final stretch, had other plans. What followed was a tight, physical battle that came down to a field goal and a Buffalo running game that simply could not be stopped. Final score: Buffalo Bills 23, Cleveland Browns 20.
This complete guide breaks down every layer of the buffalo bills vs cleveland browns match player stats — from the running backs who decided this game to the defensive stops that made the difference in the fourth quarter.
Game at a Glance: Score by Quarter
Before getting into individual player performance, here’s how each quarter shaped this game:
| Quarter | Cleveland Browns | Buffalo Bills |
|---|---|---|
| Q1 | 7 | 7 |
| Q2 | 3 | 13 |
| Q3 | 7 | 3 |
| Q4 | 3 | 0 |
| Final | 20 | 23 |
Buffalo built its lead in the second quarter, but Cleveland answered with a strong third quarter before nearly stealing the win with a fourth-quarter field goal. The Bills held on by three points, thanks to their dominant rushing attack earlier in the game.
Buffalo Bills Team Stats Overview
The Bills did not need a big passing game to win this one. They ran the ball efficiently, protected it perfectly, and let their defense do the rest.
| Category | Buffalo Bills |
|---|---|
| Total Yards | 259 |
| Rushing Yards | 164 |
| Passing Yards | 130 |
| Rush Attempts | 29 |
| Pass Attempts | 19 |
| Completions | 12 |
| Completion % | 63.2% |
| Passing TDs | 0 |
| Rushing TDs | 3 |
| Interceptions Thrown | 0 |
| Sacks Allowed | 2 |
| Turnovers | 0 |
| Time of Possession | 24:37 |
| Penalties | 5 (35 yards) |
| First Downs | 16 |
| Avg Gain Per Play | 5.2 |
| Passer Rating | 83.2 |
Buffalo’s zero turnovers told the story. In a game decided by three points, protecting the ball was the single most important factor.
Cleveland Browns Team Stats Overview
Cleveland actually outgained Buffalo in time of possession and ran more plays — but two costly interceptions erased what could have been a Cleveland win.
| Category | Cleveland Browns |
|---|---|
| Total Yards | 294 |
| Rushing Yards | 160 |
| Passing Yards | 157 |
| Rush Attempts | 31 |
| Pass Attempts | 30 |
| Completions | 20 |
| Completion % | 66.7% |
| Passing TDs | 1 |
| Rushing TDs | 1 |
| Interceptions Thrown | 2 |
| Sacks Allowed | 3 |
| Turnovers | 2 |
| Time of Possession | 35:23 |
| Penalties | 5 (44 yards) |
| First Downs | 22 |
| Avg Gain Per Play | 4.6 |
| Passer Rating | 62.8 |
Cleveland actually outgained Buffalo in total yards (294 vs 259) and controlled the ball for over 10 more minutes. This is a critical detail: the Browns moved the ball — they just could not protect it.
Buffalo Bills Rushing Stats: The Ground Game That Won It
The Bills rushed for 164 yards and all three of their touchdowns came on the ground. That is the defining storyline of the buffalo bills vs cleveland browns match player stats.
James Cook
James Cook was the centerpiece. He delivered two rushing touchdowns — including a 44-yard score in Q1 that immediately answered Cleveland’s opening touchdown.
| Stat | Total |
|---|---|
| Rushing Attempts | Key carries |
| Longest Rush | 44 yards (TD) |
| Rushing TDs | 2 (44-yd run Q1, 3-yd run Q2) |
Cook’s 44-yard burst was the longest rushing play of the game by either team. He hit the hole, found open space, and showed the speed that makes him one of the AFC’s most dangerous backs. His second score — a grinding 3-yard run in Q2 — pushed the Bills to a 20-10 lead and effectively put the pressure on Cleveland’s offense.
Ty Johnson
Ty Johnson added the Bills’ third rushing touchdown — a 2-yard score up the middle in the second quarter that briefly put Buffalo up 13-7. Johnson’s short-yardage effectiveness proved crucial when the Bills needed to punch it in near the goal line.
| Stat | Total |
|---|---|
| Rushing TD | 1 (2-yard run, Q2) |
Bills Rushing Team Totals
| Stat | Total |
|---|---|
| Rush Attempts | 29 |
| Rushing Yards | 164 |
| Rushing TDs | 3 |
| Avg Yards Per Carry | 5.66 |
| Longest Run | 44 yards |
| Redzone Rush Attempts | 6 |
| First Downs via Rush | 10 |
| Yards After Contact | 65 |
Buffalo Bills Passing Stats
The Bills kept it simple through the air. With a 3-0 turnover advantage and a lead to protect, the passing game served as a compliment to the run, not the engine of the offense.
| Stat | Total |
|---|---|
| Pass Attempts | 19 |
| Completions | 12 |
| Completion % | 63.2% |
| Passing Yards | 130 |
| Passing TDs | 0 |
| Interceptions | 0 |
| Sacks Taken | 2 |
| Sack Yards Lost | 35 |
| Longest Completion | 21 yards |
| Passer Rating | 83.2 |
| Air Yards | 27 |
| Avg Pocket Time | 2.73 seconds |
| On-Target Throws | 16 |
| Dropped Passes | 3 |
The Bills’ passer made smart, clean decisions — no interceptions and a solid 83.2 rating even without a passing touchdown. Three dropped passes by receivers hurt what could have been a stronger final line.
Buffalo Bills Receiving Stats
| Stat | Total |
|---|---|
| Targets | 18 |
| Receptions | 12 |
| Receiving Yards | 130 |
| Receiving TDs | 0 |
| Avg Yards Per Reception | 10.83 |
| Longest Reception | 21 yards |
| Yards After Catch | 103 |
| First Downs via Pass | 6 |
| Redzone Targets | 2 |
| Dropped Passes | 3 |
Buffalo’s receivers gained over 100 yards after the catch — a sign that quick, short throws were gaining significant ground after the ball arrived.
Cleveland Browns Rushing Stats
Cleveland ran the ball well on this day. Their ground game gave them a platform to compete — and Hakeem Fannin’s rushing touchdown in Q3 was the moment Cleveland briefly looked like they might steal this win.
| Stat | Total |
|---|---|
| Rush Attempts | 31 |
| Rushing Yards | 160 |
| Rushing TDs | 1 |
| Avg Yards Per Carry | 5.16 |
| Longest Run | 16 yards |
| Redzone Rush Attempts | 7 |
| First Downs via Rush | 12 |
| Yards After Contact | 89 |
| Scrambles | 4 |
Cleveland actually matched Buffalo nearly yard-for-yard on the ground. The difference was not the rushing game — it was the passing game and the turnovers.
Hakeem Fannin — Receiving & Rushing Highlight
Hakeem Fannin had the biggest individual game for the Browns, contributing on both sides of the ball:
- Receiving TD: Caught a 13-yard scoring pass from Sanders in Q1 (13-yard reception)
- Rushing TD: Ran for 1 yard up the middle for a score in Q3
Fannin was Cleveland’s most complete offensive weapon in this game. His Q3 rushing score cut the Bills lead to 23-17 and gave Cleveland real hope entering the fourth quarter.
Cleveland Browns Passing Stats
Sanders led Cleveland’s passing attack and moved the ball — but two interceptions wiped out what could have been a winning performance.
| Stat | Total |
|---|---|
| Pass Attempts | 30 |
| Completions | 20 |
| Completion % | 66.7% |
| Passing Yards | 157 |
| Passing TDs | 1 |
| Interceptions | 2 |
| Sacks Taken | 3 |
| Sack Yards Lost | 23 |
| Longest Completion | 26 yards |
| Passer Rating | 62.8 |
| Avg Pocket Time | 2.81 seconds |
| On-Target Throws | 22 |
| Throw-Aways | 3 |
| Poor Throws | 2 |
| Blitzes Faced | 10 |
| Batted Passes | 3 |
Sanders’ completion percentage (66.7%) was actually higher than Buffalo’s, and he threw for a touchdown. But two interceptions — both returned by Buffalo — dropped his passer rating to 62.8 and proved decisive.
Cleveland Browns Receiving Stats
| Stat | Total |
|---|---|
| Targets | 27 |
| Receptions | 20 |
| Receiving Yards | 157 |
| Receiving TDs | 1 |
| Avg Yards Per Reception | 7.85 |
| Longest Reception | 26 yards |
| Yards After Catch | 142 |
| First Downs via Pass | 8 |
| Redzone Targets | 3 |
| Dropped Passes | 1 |
Cleveland’s receivers did their job — one drop, 142 yards after the catch, and a touchdown reception. The issue was not the receiving corps. The turnovers were the issue.
Defensive Stats: Bills Defense Was the Difference
Buffalo’s defense stepped up in every critical moment of this game. Two interceptions, three sacks, and 11 quarterback hits on just 19 passes thrown — the Bills defensive unit made Cleveland’s offense pay for every mistake.
Buffalo Bills Defense
| Defensive Stat | Total |
|---|---|
| Total Tackles | 32 |
| Tackle Assists | 40 |
| Combined Tackles | 72 |
| Sacks | 3.0 |
| Sack Yards | 23 |
| Interceptions | 2 |
| Interception Return Yards | 11 |
| Passes Defended | 6 |
| QB Hits | 11 |
| Tackles for Loss | 5.0 |
| TFL Yards | 29 |
| Blitzes Sent | 13 |
| Forced Three-and-Outs | 1 |
| 4th Down Stops | 1 |
| Batted Passes | 3 |
| Missed Tackles | 6 |
Two interceptions with zero touchdowns surrendered through the air by their own offense — the Bills defense completely controlled the turnover battle. Buffalo’s 11 QB hits on Sanders was a relentless defensive pressure campaign that disrupted timing all game.
Cleveland Browns Defense
| Defensive Stat | Total |
|---|---|
| Total Tackles | 25 |
| Tackle Assists | 26 |
| Combined Tackles | 51 |
| Sacks | 2.0 |
| Sack Yards | 35 |
| Interceptions | 0 |
| Passes Defended | 1 |
| QB Hits | 5 |
| Tackles for Loss | 1.0 |
| TFL Yards | 13 |
| Blitzes Sent | 3 |
| Forced Three-and-Outs | 3 |
| 4th Down Stops | 2 |
| Missed Tackles | 4 |
Cleveland’s defense forced three three-and-outs and took two sacks — solid work. But the offense’s two turnovers gave the defense impossible situations to overcome.
Scoring Plays: Drive-by-Drive Breakdown
Every point scored in this game, in order:
| Time | Quarter | Play | Score |
|---|---|---|---|
| 10:47 | Q1 | Sanders pass to H. Fannin, 13-yard TD | CLE 6 – BUF 0 |
| 10:42 | Q1 | A. Szmyt extra point good | CLE 7 – BUF 0 |
| 7:58 | Q1 | J. Cook 44-yard rushing TD | CLE 7 – BUF 6 |
| 7:47 | Q1 | M. Badgley extra point good | CLE 7 – BUF 7 |
| 12:57 | Q2 | T. Johnson 2-yard rushing TD | CLE 7 – BUF 13 |
| 12:54 | Q2 | M. Badgley extra point no good | CLE 7 – BUF 13 |
| 5:41 | Q2 | A. Szmyt 24-yard FG good | CLE 10 – BUF 13 |
| 2:27 | Q2 | J. Cook 3-yard rushing TD | CLE 10 – BUF 19 |
| 2:23 | Q2 | M. Badgley extra point good | CLE 10 – BUF 20 |
| 9:41 | Q3 | M. Badgley 41-yard FG good | CLE 10 – BUF 23 |
| 1:39 | Q3 | H. Fannin 1-yard rushing TD | CLE 16 – BUF 23 |
| 1:36 | Q3 | A. Szmyt extra point good | CLE 17 – BUF 23 |
| 8:50 | Q4 | A. Szmyt 41-yard FG good | CLE 20 – BUF 23 |
Final: Buffalo Bills 23 – Cleveland Browns 20
The fourth quarter was scoreless for Buffalo. Cleveland’s 41-yard field goal with 8:50 remaining in Q4 made it a one-possession game, but the Bills defense held from that point forward.
Kickers and Special Teams Stats
Buffalo Bills Kicking
| Kicker | Stat | Total |
|---|---|---|
| M. Badgley | FG Attempts | 1 |
| M. Badgley | FG Made | 1 |
| M. Badgley | FG Distance | 41 yards |
| M. Badgley | FG % | 100% |
| M. Badgley | Extra Points | 2/3 (1 missed) |
Badgley’s missed extra point after Ty Johnson’s Q2 touchdown — the kick hit the upright — meant Buffalo finished at 23 instead of 24. In a 3-point game, that missed PAT will be discussed for a long time in Buffalo.
Cleveland Browns Kicking
| Kicker | Stat | Total |
|---|---|---|
| A. Szmyt | FG Attempts | 2 |
| A. Szmyt | FG Made | 2 |
| A. Szmyt | FG % | 100% |
| A. Szmyt | FG Distances | 24 yards, 41 yards |
| A. Szmyt | Extra Points | 3/3 |
Szmyt was perfect on the day — 2-for-2 on field goals and a clean 3-for-3 on extra points. He gave Cleveland every point the offense earned.
Punting and Return Game Stats
Punting
| Team | Punter | Attempts | Avg Yards | Longest | Inside-20 |
|---|---|---|---|---|---|
| Buffalo Bills | M. Wishnowsky | 3 | 49.7 | 62 yards | 0 |
| Cleveland Browns | C. Bojorquez | 2 | 51.5 | 52 yards | 1 |
Kick Returns
| Team | Attempts | Total Yards | Avg | Longest |
|---|---|---|---|---|
| Buffalo Bills | 4 | 92 yards | 23.0 | 26 yards |
| Cleveland Browns | 4 | 107 yards | 26.75 | 31 yards |
Punt Returns
| Team | Attempts | Total Yards | Avg | Longest |
|---|---|---|---|---|
| Buffalo Bills | 2 | 7 yards | 3.5 | 4 yards |
| Cleveland Browns | 1 | 3 yards | 3.0 | 3 yards |
Neither team broke a return. Special teams played it conservative, and field position rarely swung dramatically in either direction.
Turnover Battle: The Margin That Decided Everything
| Turnover Type | Buffalo Bills | Cleveland Browns |
|---|---|---|
| Interceptions Thrown | 0 | 2 |
| Fumbles Lost | 0 | 0 |
| Total Turnovers | 0 | 2 |
This table tells the story of the game in three rows. Cleveland moved the ball. Cleveland ran it effectively. Cleveland’s receivers caught 20 passes. None of it was enough to overcome two turnovers against a Buffalo defense that converted that turnover margin into field position and ultimately into a three-point win.
First Downs and Possession Breakdown
| Stat | Buffalo Bills | Cleveland Browns |
|---|---|---|
| Total First Downs | 16 | 22 |
| First Downs by Rush | 10 | 12 |
| First Downs by Pass | 6 | 8 |
| First Downs by Penalty | 0 | 2 |
| Time of Possession | 24:37 | 35:23 |
| Total Plays Run | 50 | 64 |
Cleveland ran 14 more plays and held the ball for over 10 more minutes — and still lost. This is the clearest sign of how much the two turnovers cost the Browns. Quality of possessions, not quantity, decided this game.
Penalty Summary
| Team | Penalties | Yards Lost |
|---|---|---|
| Buffalo Bills | 5 | 35 |
| Cleveland Browns | 5 (2 giving 1st downs) | 44 |
Both teams were penalized equally in count, but Cleveland’s penalties gave Buffalo two first downs and cost 9 more yards. In tight games, penalty discipline shapes outcomes — and Cleveland paid a small but real price here.
Key Performance Matchup Table
| Performance Category | Buffalo Bills | Cleveland Browns | Edge |
|---|---|---|---|
| Total Yards | 259 | 294 | Browns |
| Rushing Yards | 164 | 160 | Bills (slight) |
| Passing Yards | 130 | 157 | Browns |
| Rushing TDs | 3 | 1 | Bills |
| Passing TDs | 0 | 1 | Browns |
| Turnovers | 0 | 2 | Bills |
| Sacks Taken | 2 | 3 | Bills |
| Interceptions Taken | 2 | 0 | Bills |
| Time of Possession | 24:37 | 35:23 | Browns |
| Completion % | 63.2% | 66.7% | Browns |
| Passer Rating | 83.2 | 62.8 | Bills |
| First Downs | 16 | 22 | Browns |
| QB Hits Landed | 11 | 5 | Bills |
| Field Goal % | 100% | 100% | Tie |
| Final Score | 23 | 20 | Bills WIN |
The Bills won 6 of 15 statistical categories outright — but they won the categories that matter most: turnovers, sacks on the opposing QB, rushing touchdowns, and interceptions taken. Football rewards efficiency over volume, and the Bills were the more efficient team.
FAQs: Buffalo Bills vs Cleveland Browns Match Player Stats
Who won the Buffalo Bills vs Cleveland Browns game on December 21, 2025?
The Buffalo Bills won 23-20 in a close, physical game played at Cleveland. The Bills needed every point, as Cleveland closed to within three with a fourth-quarter field goal but could not complete the comeback.
Supporting detail: Buffalo led for most of the second half but never put the game away comfortably. James Cook’s two rushing touchdowns and the Bills defense’s two interceptions were the defining performances in the final result.
Who had the most rushing yards in the Bills vs Browns match player stats?
Buffalo edges Cleveland in this category — the Bills rushed for 164 yards versus Cleveland’s 160. James Cook led the ground attack with two touchdowns, including a 44-yard run that was the longest rushing play of the game.
Supporting detail: Both teams committed to the run, making this genuinely a ground battle. Cleveland’s 31 rush attempts compared to Buffalo’s 29 shows how close the rushing strategies were — but Cook’s big-play ability gave the Bills the edge.
How many interceptions did the Buffalo Bills defense take against the Browns?
Buffalo’s defense intercepted Cleveland’s quarterback twice. The two interceptions returned for a combined 11 yards gave the Bills outstanding field position and completely shut down Cleveland’s ability to come back from any deficit.
Supporting detail: Cleveland’s quarterback completed 20 of 30 passes (66.7%) but the two interceptions dropped his passer rating to 62.8. The Bills sent 13 blitzes and registered 11 quarterback hits — a sustained defensive pressure campaign.
What was James Cook’s stat line in the Bills vs Browns game?
James Cook scored two rushing touchdowns — a 44-yard burst in Q1 and a 3-yard run in Q2. His 44-yard score immediately erased Cleveland’s early 7-0 lead and set the physical tone for the entire game.
Supporting detail: Cook’s explosiveness was the centerpiece of a Bills rushing attack that finished with 5.66 yards per carry. Buffalo’s entire game plan built around Cook’s ability to find space against Cleveland’s front seven.
Did the Cleveland Browns have any missed scoring opportunities?
Yes — two significant ones. Cleveland’s 2 interceptions were the most damaging, eliminating drives that could have produced points. Additionally, Buffalo’s own kicker missed one extra point (after Ty Johnson’s Q2 touchdown), which meant Buffalo won 23-20 instead of 24-20 — a small margin that made Cleveland’s late field goal look far more threatening than it should have.
Supporting detail: Cleveland also left points on the field through three sacks (23 lost yards) and two poor throws. The combination of turnovers and pressure-forced mistakes meant the Browns generated less from their 294 total yards than those yards deserved.
How did Buffalo’s passing stats compare to Cleveland’s in this game?
Cleveland’s quarterback actually completed passes at a higher rate (66.7% vs 63.2%) and threw for more yards (157 vs 130). But Buffalo’s passer threw zero interceptions and held a passer rating of 83.2 compared to Cleveland’s 62.8 — the turnovers are what drove that gap.
Supporting detail: Buffalo’s game plan prioritized ball security over production. With a running game generating 164 yards and three scores, the Bills passing attack only needed to manage the game — and it did exactly that. Cleveland needed their passing game to produce more to compensate for the turnovers, and it fell short.
What These Stats Mean for Both Teams Going Forward
For the Buffalo Bills, this win confirmed something important: this team does not need Josh Allen to throw for 300 yards to win. A ground-heavy game plan with zero turnovers and a defense that creates interceptions is a complete, championship-caliber formula.
For the Cleveland Browns, the lesson is equally clear. Their offense moved the ball well enough to win. They controlled time of possession by 10 minutes. Their receivers caught 20 passes. None of that mattered because two turnovers handed the game to a team that capitalized completely.
The buffalo bills vs cleveland browns match player stats reveal a game that was far closer than three points suggests — and one that Cleveland will feel they left behind.
Final Numbers at a Glance
| Category | Buffalo Bills | Cleveland Browns |
|---|---|---|
| Final Score | 23 | 20 |
| Total Yards | 259 | 294 |
| Rushing TDs | 3 | 1 |
| Turnovers | 0 | 2 |
| Interceptions (Taken) | 2 | 0 |
| Passer Rating | 83.2 | 62.8 |
| Sacks | 3 | 2 |
| Penalties | 5 (35 yds) | 5 (44 yds) |
| Field Goals | 1/1 | 2/2 |
| Time of Possession | 24:37 | 35:23 |
If you want the full box score history for every Bills game this 2025 NFL season, or a deeper breakdown of James Cook’s season-long rushing statistics, those analyses are available. This game was one chapter in what has been a high-stakes AFC season — and the buffalo bills vs cleveland browns match player stats make the story of that chapter easy to read.






