Career

5 seasons since 2014 · box-score totals, snap share estimated from play-by-play

SeasonTeamGSnapsRecRec ydsRec TDTgt share
2025Duke#44 · 9-51459%43508612.3%
2024Duke#53 · 9-41355%47413313.0%
2023Duke#26 · 8-51060%30260014.4%
2022 *Duke#44 · 9-41242%31400514.3%
2021Duke#122 · 3-932%1505.0%

Past seasons are summed from ESPN box scores; success rates and snap shares come from the play-by-play. Sahmir Hagans's team rank is that season's final TDC rank. A dash means the stat wasn't recorded. * Defense rebuilt from the play-by-play (ESPN's box scores that season are missing it); about 10% below official totals.

Game Log

Sahmir Hagans's box score, game by game, from ESPN, with a 0–10 game score for each (hover it for how it works). Click a result for the full game

6.4 avg. game scoreBest: 8.4 at Clemson (Week 10)1 of 14 games at 8.0+
ReceivingReturns
WkOpponentResultGame scoreRecYdsY/RTDLongKRKR ydsPRPR ydsTD
1ElonW 45–177.755410.8221·····
2IllinoisL 19–452.433311.0024·····
3@TulaneL 27–346.412929.0129·····
4NC StateW 45–337.436321.0133·····
5@SyracuseW 38–36.955911.8023·····
6@CaliforniaW 45–215.6263.003261···
8Georgia TechL 18–277.956913.8124135···
10@ClemsonW 46–458.4320.7032117··1
11@UConnL 34–376.322311.5017262···
12VirginiaL 17–344.513535.0035338···
13@North CarolinaW 32–256.533010.0022140···
14Wake ForestW 49–327.922914.51302101···
15vsVirginiaW 27–205.523115.5035113···
BowlsvsArizona StateW 42–396.66457.509·····
2025 · 14 games6.44350811.863514467··1
2025 charting · Duke

2025 season. ESPN's play-by-play only has throw and catch spots for part of 2025 (7 of Hagans’s games here), so treat the maps as a sample.

Charted targets
29
16 caught (55%)
Avg. depth of target
10.4
air yards per target
YAC per catch
2.8
44 yds after the catch
Air yards caught
99
of 143 yds on charted catches
Deep targets
24%
20+ air yards

Where he's targeted29 targets charted

67% comp10.4 avg. depth2.8 YAC/catch24% 20+ air yds6–0 TD–INT
101020203030LOSLeft, Behind air yards: 2 targets (7%), 2 caught (100%), -1 yds, -0.5 per target2100% · -1yLeft, 0–4 air yards: 3 targets (10%), 2 caught (67%), 17 yds, 5.7 per target367% · 17yLeft, 5–9 air yards: 5 targets (17%), 4 caught (80%), 28 yds, 5.6 per target580% · 28yLeft, 10–14 air yards: noneLeft, 15–19 air yards: 3 targets (10%), 0 caught (0%), 0 yds, 0.0 per target30% · 0yLeft, 20–29 air yards: 3 targets (10%), 1 caught (33%), 22 yds, 7.3 per target333% · 22yLeft, 30+ air yards: 3 targets (10%), 2 caught (67%), 65 yds, 21.7 per target367% · 65yMiddle, Behind air yards: noneMiddle, 0–4 air yards: 1 targets (3%), 1 caught (100%), 8 yds, 8.0 per target1100% · 8yMiddle, 5–9 air yards: noneMiddle, 10–14 air yards: noneMiddle, 15–19 air yards: noneMiddle, 20–29 air yards: noneMiddle, 30+ air yards: 1 targets (3%), 0 caught (0%), 0 yds, 0.0 per target10% · 0yRight, Behind air yards: 4 targets (14%), 4 caught (100%), 4 yds, 1.0 per target4100% · 4yRight, 0–4 air yards: 2 targets (7%), 0 caught (0%), 0 yds, 0.0 per target20% · 0yRight, 5–9 air yards: 1 targets (3%), 0 caught (0%), 0 yds, 0.0 per target10% · 0yRight, 10–14 air yards: 1 targets (3%), 0 caught (0%), 0 yds, 0.0 per target10% · 0yRight, 15–19 air yards: noneRight, 20–29 air yards: noneRight, 30+ air yards: none
fewer more targets
Direction and air yards come from the play-by-play (left / middle / right thirds of the field), so each glow sits in its zone rather than on an exact spot. Hover a zone for detail.