2025 Week 13 · Sun, Nov 30, 2025 · FirstEnergy Stadium
San Francisco 49ersWinner
26
Cleveland Browns
8
San Francisco 49ers 26–8 — never really in doubt late. Biggest swing: Q1 10:40, SF +12% win probability on one snap. Played in 20 mph wind — weigh that when reading the passing lines.
The game in one curve — scrub to replay it
Win probability
(10:40) 13-C.Bojorquez punts 48 yards to SF 18, Center-50-R.Sunahara. 9-S.Moore pushed ob at CLE 16 for 66 yards (86-B.Whiteheart).
Highest-leverage plays
- Q1 · 10:40SF +12% win prob(10:40) 13-C.Bojorquez punts 48 yards to SF 18, Center-50-R.Sunahara. 9-S.Moore pushed ob at CLE 16 for 66 yards (86-B.Whiteheart).
- Q2 · 0:47CLE +12% win prob(:47) (Shotgun) 12-S.Sanders pass deep left to 44-H.Fannin for 34 yards, TOUCHDOWN.
- Q3 · 7:08SF +8% win prob(7:08) 74-T.Jenkins reported in as eligible. Direct snap to 44-H.Fannin. 44-H.Fannin FUMBLES (Aborted) at CLE 32, RECOVERED by SF-57-L.Gifford at CLE 32.
- Q2 · 0:15CLE +8% win prob(:15) (Shotgun) 13-B.Purdy pass deep left to 85-G.Kittle to CLE 7 for 33 yards (33-R.Hickman).
How the points landed
Scoring summary
- Q1 · 8:15SF Touchdown
(8:15) (Shotgun) 23-C.McCaffrey up the middle for 1 yard, TOUCHDOWN. (kick good)
Score after this play: SF 7 — CLE 0 - Q2 · 0:47CLE Touchdown
(:47) (Shotgun) 12-S.Sanders pass deep left to 44-H.Fannin for 34 yards, TOUCHDOWN. (two-point conversion good)
Score after this play: SF 7 — CLE 8 - Q2 · 0:04SF Field goal
(:04) 14-M.Gay 25 yard field goal is GOOD, Center-46-J.Weeks, Holder-7-T.Morstead.
Score after this play: SF 10 — CLE 8 - Q3 · 1:33SF Touchdown
(1:33) (Shotgun) 13-B.Purdy left end for 2 yards, TOUCHDOWN. (kick good)
Score after this play: SF 17 — CLE 8 - Q4 · 11:09SF Touchdown
(11:09) (Shotgun) 13-B.Purdy pass short middle to 15-J.Jennings for 7 yards, TOUCHDOWN.
Score after this play: SF 23 — CLE 8 - Q4 · 4:13SF Field goal
(4:13) 14-M.Gay 31 yard field goal is GOOD, Center-46-J.Weeks, Holder-7-T.Morstead.
Score after this play: SF 26 — CLE 8
Down-to-down truth
Situational splits
| Metric | 49ers | Browns |
|---|---|---|
| Offensive plays | 64 | 61 |
| Total yards | 253 | 255 (edge) |
| Yards per play | 4.0 | 4.2 (edge) |
| Expected points added / play | 0.01 (edge) | -0.20 |
| Success rate | 34% | 43% (edge) |
| Dropback rate | 52% | 49% |
| Dropback efficiency (EPA/play) | 0.05 (edge) | -0.20 |
| Rush efficiency (EPA/play) | -0.03 (edge) | -0.19 |
| Third downs | 11/17 (edge) | 3/11 |
| Red-zone trips → TDs | 0 → 0 | 0 → 0 |
| Explosive plays (10+ rush / 20+ pass) | 2 | 2 |
| First downs gained on snaps | 19 (edge) | 16 |
| Sacks taken | 1 (edge) | 3 |
| Turnovers | 0 (edge) | 1 |
Browns outgained 49ers 255–253 but lost the turnover battle 1–0. That was the game.
Who moved the needle
Top performers
Passing · SF
16/29, 168 yds, 1 TD, 0 INT
3.4 expected points added · +9.5% completion over expected
Passing · CLE
16/25, 149 yds, 1 TD, 0 INT
-3.9 expected points added · +0.3% completion over expected
Receiving · CLE
3/5 for 43 yds, 1 TD
22% of team targets · 1.6 expected points added
Possession by possession
Drive chart
| # | Team | Start | Plays | Scrim yds | Clock | Result | |
|---|---|---|---|---|---|---|---|
| 1 | SF | SF 25 | 6 | 24 | 1:48 | Punt | |
| 2 | CLE | CLE 13 | 6 | 21 | 2:50 | Punt | |
| 3 | SF | CLE 16 | 7 | 16 | 2:10 | Touchdown +7 | |
| 4 | CLE | CLE 30 | 11 | 49 | 5:13 | Turnover on downs | |
| 5 | SF | SF 21 | 4 | 1 | 1:31 | Punt | |
| 6 | CLE | CLE 39 | 8 | 17 | 4:04 | Punt | |
| 7 | SF | SF 20 | 9 | 35 | 6:03 | Punt | |
| 8 | CLE | CLE 10 | 11 | 92 | 5:42 | Touchdown +8 | |
| 9 | SF | SF 35 | 7 | 58 | 0:39 | Field goal +3 | |
| 10 | CLE | CLE 27 | 7 | 14 | 2:49 | Punt | |
| 11 | SF | SF 22 | 9 | 24 | 3:05 | Punt | |
| 12 | CLE | CLE 24 | 4 | 9 | 2:01 | Fumble | |
| 13 | SF | CLE 32 | 10 | 32 | 5:36 | Touchdown +7 | |
| 14 | CLE | CLE 5 | 5 | 1 | 1:01 | Punt | |
| 15 | SF | CLE 47 | 4 | -1 | 2:01 | Punt | |
| 16 | SF | CLE 18 | 7 | 18 | 2:22 | Touchdown +6 | |
| 17 | CLE | CLE 32 | 8 | 20 | 3:41 | Turnover on downs | |
| 18 | SF | CLE 42 | 9 | 34 | 3:15 | Field goal +3 | |
| 19 | CLE | CLE 35 | 10 | 32 | 2:29 | Turnover on downs | |
| 20 | SF | SF 38 | 4 | 12 | 1:40 | End of game |
6 of 20 drives ended in points. Longest march: Browns gained 92 scrimmage yards over 11 plays for a touchdown.
Full stat lines
Box score
San Francisco 49ers
Passing
| Player | C/Att | Yds | TD | INT | Sacked | EPA |
|---|---|---|---|---|---|---|
| Brock Purdy | 16/29 | 168 | 1 | 0 | 1 | 3.4 |
| Christian McCaffrey | 0/1 | 0 | 0 | 0 | 0 | -0.8 |
Rushing
| Player | Att | Yds | Avg | TD | EPA |
|---|---|---|---|---|---|
| Christian McCaffrey | 20 | 53 | 2.6 | 1 | -1.4 |
| Brian Robinson | 8 | 26 | 3.3 | 0 | -2.0 |
| Demarcus Robinson | 1 | 6 | 6.0 | 0 | 0.3 |
| Brock Purdy | 2 | 4 | 2.0 | 1 | 1.0 |
| Mac Jones | 2 | 2 | 1.0 | 0 | -0.8 |
Receiving
| Player | Rec | Tgt | Yds | TD | Tgt share | EPA |
|---|---|---|---|---|---|---|
| George Kittle | 4 | 5 | 67 | 0 | 22% | 2.4 |
| Jauan Jennings | 4 | 6 | 39 | 1 | 26% | 5.5 |
| Kyle Juszczyk | 2 | 2 | 27 | 0 | 9% | 1.6 |
| Christian McCaffrey | 4 | 4 | 21 | 0 | 17% | 2.6 |
| Ricky Pearsall | 2 | 3 | 14 | 0 | 13% | -0.4 |
| Demarcus Robinson | 0 | 1 | 0 | 0 | 4% | -0.6 |
| Luke Farrell | 0 | 1 | 0 | 0 | 4% | -0.4 |
| Kendrick Bourne | 0 | 1 | 0 | 0 | 4% | -1.2 |
Defense (top contributors)
| Player | Solo | Ast | Sacks | INT | PD |
|---|---|---|---|---|---|
| Clelin Ferrell | 6 | 3 | 2.0 | 0 | 0 |
| Upton Stout | 5 | 2 | 0.0 | 0 | 0 |
| Dee Winters | 3 | 3 | 0.0 | 0 | 0 |
| Curtis Robinson | 3 | 3 | 0.0 | 0 | 0 |
| Malik Mustapha | 4 | 2 | 0.0 | 0 | 1 |
| Ji'Ayir Brown | 4 | 1 | 0.0 | 0 | 0 |
| Deommodore Lenoir | 1 | 3 | 0.0 | 0 | 0 |
| Keion White | 3 | 0 | 1.0 | 0 | 0 |
| Renardo Green | 3 | 0 | 0.0 | 0 | 0 |
| Jason Pinnock | 2 | 0 | 0.0 | 0 | 0 |
Cleveland Browns
Passing
| Player | C/Att | Yds | TD | INT | Sacked | EPA |
|---|---|---|---|---|---|---|
| Shedeur Sanders | 16/25 | 149 | 1 | 0 | 3 | -3.9 |
| Dillon Gabriel | 1/1 | 0 | 0 | 0 | 0 | -0.6 |
Rushing
| Player | Att | Yds | Avg | TD | EPA |
|---|---|---|---|---|---|
| Quinshon Judkins | 23 | 91 | 4.0 | 0 | -4.2 |
| Dylan Sampson | 4 | 23 | 5.8 | 0 | 0.7 |
| Isaiah Bond | 1 | 9 | 9.0 | 0 | 0.6 |
| Malachi Corley | 1 | 9 | 9.0 | 0 | 0.6 |
| Shedeur Sanders | 1 | 6 | 6.0 | 0 | -1.4 |
| Harold Fannin Jr. | 1 | 0 | 0.0 | 0 | -3.6 |
Receiving
| Player | Rec | Tgt | Yds | TD | Tgt share | EPA |
|---|---|---|---|---|---|---|
| Harold Fannin Jr. | 3 | 5 | 43 | 1 | 22% | 1.6 |
| Jerry Jeudy | 3 | 4 | 26 | 0 | 17% | 0.5 |
| Gage Larvadain | 2 | 3 | 23 | 0 | 13% | 1.5 |
| Quinshon Judkins | 3 | 3 | 18 | 0 | 13% | 0.2 |
| Isaiah Bond | 1 | 2 | 18 | 0 | 9% | 0.3 |
| Jerome Ford | 3 | 3 | 17 | 0 | 13% | 1.5 |
| David Njoku | 2 | 2 | 4 | 0 | 9% | -1.1 |
| Cedric Tillman | 0 | 1 | 0 | 0 | 4% | -0.7 |
Defense (top contributors)
| Player | Solo | Ast | Sacks | INT | PD |
|---|---|---|---|---|---|
| Carson Schwesinger | 4 | 5 | 0.0 | 0 | 0 |
| Ronnie Hickman Jr. | 4 | 4 | 0.0 | 0 | 1 |
| Devin Bush | 1 | 6 | 0.0 | 0 | 0 |
| Tyson Campbell | 3 | 3 | 0.0 | 0 | 2 |
| Grant Delpit | 2 | 3 | 0.0 | 0 | 0 |
| Myles Garrett | 2 | 3 | 1.0 | 0 | 0 |
| Shelby Harris | 3 | 1 | 0.0 | 0 | 0 |
| Mason Graham | 3 | 1 | 0.0 | 0 | 0 |
| Mohamoud Diabate | 1 | 3 | 0.0 | 0 | 0 |
| Myles Harden | 1 | 1 | 0.0 | 0 | 0 |
Closing number vs result
Betting context
- Closing spread
- SF -5.5
- Closing total
- 35.5
- SF moneyline
- -250
- CLE moneyline
- +205
49ers closed -5.5 and covered, winning by 18.
Total closed 35.5; the game landed 34 — under by 1.5.
Conditions and crew
Game environment
- Venue
- FirstEnergy Stadium
- Roof / surface
- outdoors · grass
- Kickoff weather
- 35°F, wind 20 mph
- Referee
- Brad Allen
- Rest
- SF 6 days · CLE 7 days
- Coaches
- Kyle Shanahan vs Kevin Stefanski
Wind at 20 mph is the kind that drags passing depth and kicking range — weigh it when reading the splits.