Prop notes

Week 9 player prop notes: usage trends through Week 8

Quick answer: Over each team's last 3 games through Week 8, 59 skill players gained 10+ points of snap share on their earlier average and 34 lost that much. Biggest roles on the rise: A.J. Brown (44% to 84%), Ollie Gordon II (42% to 77%) and Woody Marks (45% to 84%). With a teammate out, re-check Kyle Williams (NE) and Tyler Allgeier (ARI). These are usage trends to compare with your book's number, not picks.

Players compared
329
Trending up (+10 pts)
59
Trending down (−10 pts)
34
Out or Doubtful with a role
14

How did we measure it?

Every player prop starts with an assumption about playing time. These notes check it: 59 players' snap share is up 10+ points over their last 3 games and 34 are down that much, plus the Week 9 roles that open up because a teammate is out.

Snap share is the percentage of a team's offensive plays a player was on the field for, and it's the usage number that moves before the box score does. For every QB, RB, WR and TE we compared his average share over his team's last 3 games through Week 8 with his average in the games before them. Byes don't count, and a game he missed is left out rather than counted as 0%, so an injury doesn't read as a demotion. Trending up means he gained at least 10 points and averaged 40% or more in the last 3; trending down means he averaged 50% or more before and lost at least 10.

Every number comes from the GridIron API: /players, /snaps, /stats and /projections, with injury statuses as of Friday, November 6 at 3:26 pm ET. Projections appear only as a gap against recent output, never as a raw number. Nothing here is a pick: it's usage data to set against the number you're looking at. BAL and JAX already played Week 9, so their players are left out.

Whose snap share is trending up?

Snap share trending up: last 3 games vs earlier, through Week 8 (2026)
PlayerPosTeamEarlier avgLast 3 avgChangeWk 8Last 3 PPR avg
Omar Cooper Jr.WRNYJ7%75%+6878%14.9
Jalen BrooksWRARI14%58%+44—4.8
Germie BernardWRPIT48%90%+4285%13.1
Brandin CooksWRSF12%53%+41—4.1
A.J. BrownWRNE44%84%+40—6.8
Woody MarksRBHOU45%84%+39—10.6
Ollie Gordon IIRBMIA42%77%+3582%13.0
Darius CooperWRPHI48%83%+3596%2.8
Jonah ColemanRBDEN23%58%+3466%14.6
Tory HortonWRSEA22%53%+3168%3.3

What it means for a prop model

  • A.J. Brown (WR, NE) has played 84% of snaps over his team's last 3 games, up from 44% before that. He's averaged 6.8 PPR points in that stretch. A number set on his earlier role may not reflect this one.
  • Ollie Gordon II (RB, MIA) has played 77% of snaps over his team's last 3 games, up from 42% before that. He's averaged 13.0 PPR points in that stretch. A number set on his earlier role may not reflect this one.
  • Woody Marks's snap share climbed from 45% to 84% across the last 3 games. He's averaged 10.6 PPR points in that stretch. That's a usage trend to compare with your book's number, not a pick.
  • Germie Bernard (WR, PIT) has played 90% of snaps over his team's last 3 games, up from 48% before that. He's averaged 13.1 PPR points in that stretch. A number set on his earlier role may not reflect this one.

Whose snap share is trending down?

Snap share trending down: last 3 games vs earlier, through Week 8 (2026)
PlayerPosTeamEarlier avgLast 3 avgChangeWk 8Status today
Isaiah WilliamsWRNYJ77%18%-6016%Healthy
Marvin Harrison Jr.WRHOU74%20%-54—Active
Terry McLaurinWRWAS77%34%-43—Injury Reserve
Jameis WinstonQBNYG96%54%-42—Active
Jake FergusonTEDAL72%38%-345%Questionable
Tre' HarrisWRLAC77%48%-2951%Active
Johnny MundtTEPHI53%24%-2819%Healthy
Isaac TeSlaaWRDET68%41%-2736%Active

What it means for a prop model

  • Marvin Harrison Jr. (WR, HOU) is down from 74% to 20% of snaps over the last 3 games (he missed 1 of them). If the number you're shown still assumes the old role, that's the gap to look at.
  • Jake Ferguson's role shrank: 72% of snaps earlier, 38% over the last 3 games. Listed Questionable today.
  • Terry McLaurin (WR, WAS) is down from 77% to 34% of snaps over the last 3 games (he missed 1 of them). If the number you're shown still assumes the old role, that's the gap to look at.

Whose role grows because a teammate is out?

When a starter sits, his snaps don't disappear: someone at his position plays them, and that player's volume is the number most likely to be stale. The table lists fantasy-relevant players who are Doubtful, Out or on a reserve list for Week 9 after playing in at least one of their team's last 3 games, and the teammate in line for the work, from Week 8 snap share.

Week 9: who is out, and whose role grows (2026)
PlayerPosTeamStatusSeason snapsWho gets the work
A.J. BrownWRNEOut70%Kyle Williams filled in: 30% to 83% in Wk 8
Jeremiyah LoveRBARIIR43%Next by Wk 8 snaps: Tyler Allgeier (59%)
Garrett WilsonWRNYJOut89%Next by Wk 8 snaps: Adonai Mitchell (61%)
Davante AdamsWRLARIR74%Puka Nacua filled in: 84% to 96% in Wk 8
TreVeyon HendersonRBNEOut33%Rhamondre Stevenson filled in: 63% to 77% in Wk 8
RJ HarveyRBDENIR39%Jonah Coleman filled in: 32% to 66% in Wk 8
Romeo DoubsWRNEIR58%Kyle Williams filled in: 30% to 83% in Wk 8
Jacory Croskey-MerrittRBWASIR45%Austin Ekeler filled in: 16% to 33% in Wk 8
Terry McLaurinWRWASIR60%Antonio Williams filled in: 55% to 83% in Wk 8
Brian Robinson Jr.RBATLOut30%Next by Wk 8 snaps: Bijan Robinson (81%)
Tyjae SpearsRBTENOut41%Tony Pollard filled in: 59% to 82% in Wk 8
Dameon PierceRBPHIIR79%Elijah Mitchell filled in: 21% to 57% in Wk 8

What it means for a prop model

  • A.J. Brown is out. When he sat in Week 8, Kyle Williams took the work, 30% to 83% of snaps.
  • With Jeremiyah Love on a reserve list, Tyler Allgeier is next in line by Week 8 snaps (59%). His role is the one to re-check.
  • Garrett Wilson is out; Adonai Mitchell played 61% of snaps in Week 8 and is next in line for the work.
  • With Davante Adams on a reserve list, look at Puka Nacua: the last time Davante Adams sat (Week 8), Puka Nacua went from 84% to 96% of snaps.
  • With TreVeyon Henderson out, look at Rhamondre Stevenson: the last time TreVeyon Henderson sat (Week 8), Rhamondre Stevenson went from 63% to 77% of snaps.

Still Questionable for Week 9: Amon-Ra St. Brown (DET, 84% of snaps this season), Christian McCaffrey (SF, 69% of snaps this season), Saquon Barkley (PHI, 36% of snaps this season), George Pickens (DAL, 78% of snaps this season), DeVonta Smith (PHI, 87% of snaps this season), Malik Nabers (NYG, 76% of snaps this season), Cam Skattebo (NYG, 55% of snaps this season), Emeka Egbuka (TB, 86% of snaps this season). Their status settles closer to kickoff; if one sits, the same teammate math applies.

What changed on the injury report this week?

112 status changes were recorded between Monday, November 2 at 3:28 pm ET and Friday, November 6 at 3:28 pm ET, from the Pro /injuries/changes feed. Each one can move a teammate's role.

Injury status changes this week, Week 9
PlayerPosTeamFromToDetected
Jeremy McNicholsRBWASQUESTIONABLEDOUBTFULMonday, November 2 at 3:44 pm ET
KhaDarel HodgeWRQUESTIONABLEACTIVEMonday, November 2 at 4:00 pm ET
Jadarian PriceRBSEAIRACTIVEMonday, November 2 at 4:24 pm ET
Kendrick BourneWRARIQUESTIONABLEDOUBTFULMonday, November 2 at 4:46 pm ET
Kendrick BourneWRARIDOUBTFULOUTMonday, November 2 at 6:18 pm ET
Matthew StaffordQBLARACTIVEQUESTIONABLEMonday, November 2 at 6:22 pm ET
Drew LockQBSEAQUESTIONABLEOUTMonday, November 2 at 6:54 pm ET
Case KeenumQBCHIACTIVEOUTMonday, November 2 at 7:00 pm ET
A.J. BrownWRNEOUTQUESTIONABLEMonday, November 2 at 7:25 pm ET
Behren MortonQBNEOUTACTIVEMonday, November 2 at 7:25 pm ET
David MontgomeryRBHOUOUTQUESTIONABLEMonday, November 2 at 7:25 pm ET
Deebo Samuel Sr.WRSFOUTQUESTIONABLEMonday, November 2 at 7:25 pm ET
Hunter HenryTENEOUTQUESTIONABLEMonday, November 2 at 7:25 pm ET
Jared WayneWROUTACTIVEMonday, November 2 at 7:25 pm ET
Jordyn TysonWRNOIRACTIVEMonday, November 2 at 7:25 pm ET

Where does the Week 9 projection disagree with recent output?

We compared each player's Week 9 projection with his PPR average over his team's last 3 games and kept the gaps of 4 points or more (179 players had a weekly projection and at least 2 recent games). Only the gap is shown; the projection itself is one call away in /projections/9.

Week 9 projection above recent output
PlayerPosTeamGap vs last 3 PPR avgGamesLast 3 snapsStatus
Bijan RobinsonRBATL+10.9380%Healthy
Baker MayfieldQBTB+10.7295%Healthy
Nico CollinsWRHOU+7.7370%Healthy
Cade OttonTETB+6.4395%Active
J.J. McCarthyQBNYG+6.3346%Healthy
Juwan JohnsonTENO+6.3359%Healthy
Drake LondonWRATL+6.2392%Healthy
Brock PurdyQBSF+6.03100%Healthy
Week 9 projection below recent output
PlayerPosTeamGap vs last 3 PPR avgGamesLast 3 snapsStatus
Kyler MurrayQBMIN-12.53100%Questionable
Mike EvansWRSF-11.3252%Questionable
Joe BurrowQBCIN-10.8398%Healthy
Malik NabersWRNYG-10.0383%Questionable
Braelon AllenRBNYJ-9.3383%Healthy
Isaiah LikelyTENYG-7.6386%Healthy
Jameson WilliamsWRDET-7.0385%Healthy
Kirk CousinsQBLV-6.83100%Healthy

What it means: a projection well above recent output expects something to change: a bigger role, a softer matchup or a teammate's absence. If the snap trend above doesn't show the bigger role, the projection is leaning on something else, and that's worth knowing before you compare any number. Gaps below the average work the other way. Either way it's a question to ask, not an answer.

How can I pull this data myself?

Everything on this page is a few API calls away, so you can run the same numbers through your own model. /players returns every player's weekly snap share, so one paginated sweep gets the whole league and the trend math runs locally. This reproduces the trending-up table:

import requests
from collections import defaultdict

API = "https://api.gridirondata.com/api/v1"
H = {"x-api-key": "YOUR_KEY"}
SEASON, THROUGH, WINDOW = "2026", 8, 3

players, cursor = [], None
while True:                                   # about 18 requests for the whole league
    params = {"limit": 100, **({"cursor": cursor} if cursor else {})}
    body = requests.get(f"{API}/players", headers=H, params=params).json()
    players += body["players"]
    cursor = body.get("next_cursor")
    if not cursor:
        break

def snaps(p):
    return p.get("seasons", {}).get(SEASON, {}).get("snap_counts", {}).get("weekly", {})

team_weeks = defaultdict(set)                 # weeks each team played; byes drop out
for p in players:
    for wk, row in snaps(p).items():
        if int(wk) <= THROUGH:
            team_weeks[row["team"]].add(int(wk))

def avg(xs):
    xs = [x for x in xs if x]                 # a missed game is left out, not a 0
    return sum(xs) / len(xs) if xs else None

trends = []
for p in players:
    rows = snaps(p)
    last = rows.get(str(THROUGH))
    if p["position"] not in ("RB", "WR", "TE") or not last:
        continue
    weeks = sorted(team_weeks[last["team"]])
    share = lambda ws: avg([(rows.get(str(w)) or {}).get("offense_pct") for w in ws])
    recent, earlier = share(weeks[-WINDOW:]), share(weeks[:-WINDOW])
    if recent and earlier:
        trends.append((recent - earlier, earlier, recent, p["player_id"]))

for delta, before, after, pid in sorted(trends, reverse=True)[:10]:
    print(f"{delta:+5.0f}  {before:3.0f}% -> {after:3.0f}%  {pid}")

Then go player by player, or pull the rest of the week's inputs:

  • GET /snaps/{player_id}?trend=3: one player's weekly snap rows plus his recent and season averages, in one call.
  • GET /projections/9?source=weekly&position=WR: the week's projections by position; the gap table above compares them with recent PPR output from /stats.
  • GET /injuries/changes?since=... (Pro): just the players whose status flipped since a timestamp, so a teammate's role change reaches your model the same morning.
  • GET /props?player_id=...&stat=rec_yds&line=... and GET /defense?position=WR (Pro): turn a stat line into P(over/under) and a fair price, and rank matchups by what each defense allows.

/props (the probability a player goes over or under a stat line, with a fair price) and /defense (what each defense allows by position) are on the Pro plan ($29/month or $249/year), along with game lines on /schedule, per-stat projections on /projections and the injury-change feed. Free and Basic keys get a 403 pro_required answer for them.

The sweep is about 18 requests and runs on Basic ($5/month, 5,000 a month); the prop, defense and injury-change endpoints are part of Pro. A free key covers player lookups and this week's projections. See the snap share guide for the details of the snap data.

Frequently asked questions

Are these picks?

No. They're usage trends computed from actual NFL data: snap share, role changes when a teammate is out, and how far a projection sits from recent output. Nothing here says which side of any number to take. Compare the trend with the number you're shown and make your own call.

Why does snap share matter for player props?

Because volume comes from playing time. A receiver on the field for 85% of his team's plays has more chances at catches and yards than one at 50%, and snap share shifts before the box score does when a coach changes a role.

Why the last 3 games?

One game is noisy: a blowout, an early injury or one game plan can swing it. 3 games smooth that out while staying recent enough to catch a real role change. Byes and missed games are left out of the average.

Where does the injury data come from?

Statuses come from /players, which refreshes on a schedule through the week, and status flips from the Pro /injuries/changes feed. This page shows them as of Friday, November 6 at 3:26 pm ET and isn't updated after it's published.

Can I use this data in my own model?

Yes. Every number here comes from the GridIron API. The snap and stats data behind it takes Basic ($5/month, 5,000 requests a month), where a full-league /players sweep is about 18 requests. The /props and /defense endpoints, game lines on /schedule and per-stat projections are on Pro ($29/month or $249/year). A free key covers player lookups and this week's projections.