Game recaps › Week 4
Denver Broncos 14, San Francisco 49ers 24: our projections vs the box score
AI-assisted. Written automatically from our model's own numbers with fixed templates; nothing is invented, and no language model adds facts. How this works.
The 49ers beat the Broncos 24-14 (kickoff Oct 4, 2026, 3:25 PM CT). This recap compares the projections we published before kickoff with the final box score, then grades every prop forecast we logged before the game. Nothing below was adjusted after the game.
Projection note: the projections graded here came from an earlier simulation (last refreshed 10:34 a.m. CT), not a final pre-kickoff refresh. From 2:12 p.m. CT until kickoff, our live updater queued re-simulations for this game, but every one was held back by a failing automated check on other games (a bug in the updater, since fixed). Status changes on these two teams that the published projections and prop prices did not reflect: Dallen Bentley (DEN) active to out; Sam Ehlinger (DEN) active to out; Jordan James (SF) active to out; Kurtis Rourke (SF) active to out; Mike Evans (SF) questionable to active. Results are graded against the projections as published.
Among the 12 fantasy-relevant players (projected or scoring 5+ FanDuel points), 10 finished inside our 10th-90th percentile range (83%; a well-calibrated range should hold about 80%). Average miss versus our mean: 4.2 FanDuel points.
The game's big outlier: Tyler Badie scored 6.9 FanDuel points against a projected median of 0.8 (90th percentile 5.3).
Below our range: Courtland Sutton managed 0.9 points against a 6.3 median (10th percentile 1.3).
Status changes our injury feed showed after kickoff: Pat Bryant (6.2 points), questionable from 6:00 PM CT.
Projections vs results (FanDuel points)
| Player | Team | Pos | Proj. mean | Median | 10–90 range | Actual | Result |
|---|---|---|---|---|---|---|---|
| Bo Nix | DEN | QB | 19.7 | 18.5 | 10.2–31.1 | 13.6 | in range |
| Brock Purdy | SF | QB | 19.6 | 17.9 | 9.8–31.6 | 19.6 | in range |
| Christian McCaffrey | SF | RB | 18.1 | 16.1 | 6.5–32.2 | 14.5 | in range |
| Deebo Samuel Sr. | SF | WR | 7.4 | 5.9 | 1.5–15.7 | 15.5 | in range |
| George Kittle | SF | TE | 11.5 | 9.1 | 2.7–24.1 | 15.0 | in range |
| RJ Harvey | DEN | RB | 7.1 | 5.8 | 1.3–14.5 | 14.3 | in range |
| Jaylen Waddle | DEN | WR | 10.4 | 8.4 | 2.4–22.0 | 12.0 | in range |
| J.K. Dobbins | DEN | RB | 10.3 | 8.2 | 3.0–21.0 | 6.2 | in range |
| Mike Evans | SF | WR | 8.0 | 6.4 | 1.5–17.1 | 10.1 | in range |
| Courtland Sutton | DEN | WR | 8.2 | 6.3 | 1.3–17.6 | 0.9 | below range |
| Tyler Badie | DEN | RB | 1.8 | 0.8 | 0.0–5.3 | 6.9 | above range |
| Pat Bryant | DEN | WR | 4.2 | 3.1 | 0.0–9.5 | 6.2 | in range |
| Kaelon Black | SF | RB | 4.7 | 3.1 | 0.3–11.2 | 1.3 | in range |
| Evan Engram | DEN | TE | 4.1 | 2.7 | 0.0–10.0 | 1.1 | in range |
| Kyle Juszczyk | SF | RB | 1.8 | 0.6 | 0.0–5.8 | 3.8 | in range |
| Jacob Cowing | SF | WR | 1.2 | 0.0 | 0.0–3.4 | 0.2 | in range |
| Marvin Mims Jr. | DEN | WR | 0.9 | 0.0 | 0.0–2.5 | -0.5 | below range |
| Adam Trautman | DEN | TE | 0.8 | 0.0 | 0.0–2.0 | 0.0 | in range |
| Brandin Cooks | SF | WR | 0.7 | 0.0 | 0.0–2.2 | 0.0 | in range |
| Luke Farrell | SF | TE | 0.6 | 0.0 | 0.0–1.7 | 0.0 | in range |
FanDuel scoring computed from the ESPN box score with FanDuel's rules: half-PPR, 2-point conversions, and +3 bonuses for 100+ rushing, 100+ receiving and 300+ passing yards. 'No box-score line' means the player recorded no stats (did not play or was not targeted).
Stat projections vs box score
| Player | Stat | Our median | 10–90 range | Actual | vs range |
|---|---|---|---|---|---|
| Bo Nix | Pass yds | 235.0 | 138.0–326.0 | 214 | in range |
| Bo Nix | Pass TD | 1.0 | 0.0–4.0 | 1 | in range |
| Bo Nix | Rush yds | 14.0 | 0.0–45.0 | 10 | in range |
| Brock Purdy | Pass yds | 240.0 | 145.0–350.0 | 218 | in range |
| Brock Purdy | Pass TD | 1.0 | 0.0–4.0 | 2 | in range |
| Brock Purdy | Rush yds | 16.0 | 1.0–44.0 | 29 | in range |
| Christian McCaffrey | Rush yds | 50.0 | 23.0–106.0 | 52 | in range |
| Christian McCaffrey | Carries | 14.0 | 8.0–21.0 | 15 | in range |
| Christian McCaffrey | Catches | 4.0 | 1.0–8.0 | 3 | in range |
| George Kittle | Rec yds | 51.0 | 17.0–122.0 | 70 | in range |
| George Kittle | Catches | 5.0 | 2.0–9.0 | 4 | in range |
| Jaylen Waddle | Rec yds | 50.0 | 13.0–119.0 | 35 | in range |
| Jaylen Waddle | Catches | 4.0 | 1.0–7.0 | 5 | in range |
| J.K. Dobbins | Rush yds | 50.0 | 22.0–106.0 | 40 | in range |
| J.K. Dobbins | Carries | 13.0 | 8.0–20.0 | 11 | in range |
| J.K. Dobbins | Catches | 1.0 | 0.0–2.0 | 2 | in range |
| Courtland Sutton | Rec yds | 33.0 | 6.0–87.0 | 4 | below |
| Courtland Sutton | Catches | 3.0 | 1.0–6.0 | 1 | in range |
| Mike Evans | Rec yds | 35.0 | 7.0–91.0 | 76 | in range |
| Mike Evans | Catches | 3.0 | 1.0–7.0 | 5 | in range |
Props graded
We logged 28 sportsbook forecasts with positive estimated EV for this game before kickoff (final pre-kickoff version of each). Official record (4 picks priced on our market-blended fair probability, as the board showed them): 3 won, 1 lost, for +2.52 units at the posted prices (1 unit risked per pick). Unders went 3-1; overs 0-0.
Not in the official record: 24 rows whose final pre-kickoff version was still priced on raw simulation probability (logged before the board switched to fair probabilities and never re-logged). Graded anyway and listed below: 12 won, 9 lost, 3 void, +2.30 units. Grading rule.
| Player | Prop | Pick | Price | Est. EV | Official | Actual | Result | Units |
|---|---|---|---|---|---|---|---|---|
| Christian McCaffrey | Catches | Under 4.5 | +104 FanDuel | +1.3% | Yes (fair) | 3 | Win | +1.04 |
| Adam Trautman | Catches | Under 0.5 | +136 FanDuel | +0.8% | Yes (fair) | 0 | Win | +1.36 |
| George Kittle | Catches | Under 4.5 | +112 FanDuel | +0.5% | Yes (fair) | 4 | Win | +1.12 |
| RJ Harvey | Catches | Under 3.5 | −136 FanDuel | +0.4% | Yes (fair) | 10 | Loss | −1.00 |
| Adam Trautman | Rec yds | Under 5.5 | −113 FanDuel | +34.2% | No (raw sim) | 0 | Win | +0.89 |
| Adam Trautman | Catches | Under 0.5 | +120 BetOnline | +31.5% | No (raw sim) | 0 | Win | +1.20 |
| Christian McCaffrey | Rush yds | Under 67.5 | −112 DraftKings | +26.0% | No (raw sim) | 52 | Win | +0.89 |
| Kyle Juszczyk | Rec yds | Under 8.5 | −112 DraftKings | +22.5% | No (raw sim) | 28 | Loss | −1.00 |
| George Kittle | Rec yds | Under 64.5 | −113 FanDuel | +22.4% | No (raw sim) | 70 | Loss | −1.00 |
| Pat Bryant | Rec yds | Under 22.5 | −113 FanDuel | +21.3% | No (raw sim) | 47 | Loss | −1.00 |
| Bo Nix | Anytime TD | Over 0.5 | +340 BetRivers | +17.7% | No (raw sim) | 0 | Loss | −1.00 |
| Bo Nix | Pass yds | Over 221.5 | −113 FanDuel | +14.8% | No (raw sim) | 214 | Loss | −1.00 |
| RJ Harvey | Rush yds | Under 15.5 | −113 FanDuel | +13.6% | No (raw sim) | 25 | Loss | −1.00 |
| Evan Engram | Rec yds | Under 17.5 | −113 FanDuel | +13.0% | No (raw sim) | 6 | Win | +0.89 |
| J.K. Dobbins | Rush yds | Under 59.5 | −113 FanDuel | +12.7% | No (raw sim) | 40 | Win | +0.89 |
| Jaylen Waddle | Rec yds | Under 56.5 | −113 FanDuel | +10.0% | No (raw sim) | 35 | Win | +0.89 |
| Courtland Sutton | Rec yds | Under 38.5 | −113 FanDuel | +9.9% | No (raw sim) | 4 | Win | +0.89 |
| George Kittle | Catches | Under 4.5 | +110 Bovada | +9.5% | No (raw sim) | 4 | Win | +1.10 |
| Christian McCaffrey | Rec yds | Under 39.5 | −113 FanDuel | +8.1% | No (raw sim) | 18 | Win | +0.89 |
| Kyle Juszczyk | Catches | Under 1.5 | −200 FanDuel | +7.4% | No (raw sim) | 2 | Loss | −1.00 |
| Christian McCaffrey | Catches | Under 4.5 | +103 DraftKings | +4.9% | No (raw sim) | 3 | Win | +1.03 |
| Brock Purdy | Rush yds | Under 17.5 | −112 DraftKings | +4.5% | No (raw sim) | 29 | Loss | −1.00 |
| Kaelon Black | Rush yds | Under 22.5 | −113 FanDuel | +2.9% | No (raw sim) | 13 | Win | +0.89 |
| Bo Nix | Rush yds | Under 16.5 | −113 FanDuel | +0.9% | No (raw sim) | 10 | Win | +0.89 |
| RJ Harvey | Rec yds | Under 21.5 | −113 FanDuel | +0.6% | No (raw sim) | 68 | Loss | −1.00 |
| Troy Franklin | Anytime TD | Over 0.5 | +900 BetOnline | +27.3% | No (raw sim) | — | Void | — |
| Troy Franklin | Catches | Over 0.5 | −189 BetOnline | +11.8% | No (raw sim) | — | Void | — |
| Troy Franklin | Rec yds | Over 5.5 | −113 FanDuel | +10.3% | No (raw sim) | — | Void | — |
Official = the pick's final pre-kickoff version was priced on our market-blended fair probability. 'No (raw sim)' rows were logged before the site switched EV to fair probabilities (08:22 CT on Oct 4, 2026) and never re-logged; they are graded and shown here but are not part of the official record. A player who appears only in the play-by-play is graded as 0. Not betting advice. 21+.
Pick'em forecasts (Underdog and PrizePicks two-leg format, graded per leg), official: 0 won, 2 lost. Raw-sim rows, not in the official record: 18 won, 17 lost, 5 void.
Correction (Oct 4, 2026, 7:23 PM CT): actual FanDuel points in this recap now include FanDuel's +3 yardage bonuses and 2-point conversions, and count negative yardage (e.g. -6 rushing yards) instead of zero; the first version did not, which changed 1 player totals. Projections and prop results did not change.
How these numbers are made: methodology. The full graded log, every week, lives on the Track Record.
Get this in your inbox every week
Free weekly email: start/sit, the props our model rates as unders, and every graded result, wins and losses. 21+.
More from Game recaps
- Arizona Cardinals 24, New York Giants 36: our projections vs the box score
- Dallas Cowboys 34, Houston Texans 30: our projections vs the box score
- Green Bay Packers 17, Tampa Bay Buccaneers 14: our projections vs the box score
- Indianapolis Colts 30, Washington Commanders 13: our projections vs the box score
- Jacksonville Jaguars 22, Cincinnati Bengals 17: our projections vs the box score
- Kansas City Chiefs 30, Las Vegas Raiders 27: our projections vs the box score
Model opinion, not advice. For entertainment and informational purposes only. 21+. Gambling problem? Call 1-800-GAMBLER. Methodology · Track record