2024 replayed · 2025 holdout scored frozen · misses published

NFL player predictions,
with the receipts attached.

Snapcount projects every player's week as a calibrated range — floor, projection, ceiling, and a boom/bust read — then publishes exactly how each call landed. The model beats a recent-form baseline at RB, WR, and TE on walk-forward tests, and where it doesn't win (QB), we say so. Honesty is the product.

5,227
player-week projections
in the 2025 frozen replay
~70%
calibrated range coverage
honest, not false precision
3 / 4
positions beat the recency
baseline (RB · WR · TE)
2025
season sealed in training —
scored once, weights frozen
100%
of our misses published
week by week, both seasons
See the 2025 receipts → 2024 season replay Open the board
Scroll
Product surface · One model, three ways to use it

A model, a board, and a chat that shows its work.

Snapcount is the platform. SnapScore is the prediction model underneath everything. You use it through the Board, through SnapCall chat, or through your own AI agent. (SnapSim, the coach-simulation engine, lives in the Lab.)

01 / The model
SnapScore
Calibrated player projections

Walk-forward models built on projected opportunity (targets, carries, snaps) × efficiency. Every projection ships as a floor–ceiling range (~70% coverage) with boom/bust probabilities and a confidence read — never a single false-precision number.

RECEIPTS 2025 proofSTATUS Replayed 2024 + 2025
02 / The board
Board
Weekly player rankings + ranges

The week's slate, ranked per position on a TD-free score, with likely ranges, boom/bust flags, and an honest side-by-side of where our read differs from the market benchmark.

OPEN dashboard →STATUS Live demo
03 / The chat
SnapCall
Ask the board in plain English

Projections, start/sit calls, sleepers, and the why behind every number — grounded in the board, never invented. File your own thesis against a projection and get scored by what actually happens.

OPEN chat →STATUS Live
04 / Agent-native
MCP
The board, for your AI agent

An MCP server (snapcount-board) exposes the same projections, ranges, and boom/bust reads as tools — so your own assistant can ask the board, run start/sit, and pull player cards directly.

SURFACE 7 toolsSTATUS Early access
How it works · Six stages, idempotent

Ingest → Validate → Freeze → Features → Harness → Models

Every stage is re-runnable. Every stage refuses to start if the upstream stage failed. The validator hard-fails the pipeline before bad data reaches modeling.

01 / INGEST
nflreadpy

Pull 27 nflverse sources for 2016 → current NFL season. Auto-derives season range from today's date so a 2026 ingest just works.

~46s · 484K PBP rows
02 / VALIDATE
3-layer validator

Schema drift (added/removed/dtype-changed cols), coverage invariants (per-season weeks, dual-schema integrity), in-season currency. Hard-fails on regression.

14 live-critical sources
03 / FREEZE
Two-tier slice

Predicate-based filtering carves out validation (2024 wks 9+) and holdout (2025 entire). Two anti-leak invariants enforced. Stale parquets unlinked.

21 sources × 2 slices
04 / FEATURES
Layers 0–7

Identifiers, lagged player-game form, EPA/CPOE, NGS, game context, player attributes and draft capital, injury signal. Every layer is lagged — only pregame information. Anti-leakage gate at build time.

8 feature layers, all pregame
05 / HARNESS
Walk-forward CV

Predict at (S, W) using only data with (season < S) OR (season == S AND week < W). Imputer + scaler fit per fold. 17 boundary tests pin the contract.

14 folds · 2024 wks 9-22
06 / MODELS
Opportunity × efficiency

Same harness, plug-in models. Ridge and XGBoost baselines, then the production lever: project a player's volume (targets, carries, snaps) and multiply by shrunk efficiency. Promotions require paired significance tests, not eyeballed averages.

per-position canonical models
The scoreboard · Walk-forward · TD-free weekly ranking

Numbers, not narratives.

The metric that decides start/sit calls is weekly ordering: rank the week's players per position, score the ordering against what actually happened. We grade on a TD-free score (yards + receptions) so a lucky touchdown can't flatter the model, and we benchmark against a recent-form baseline and against the market leader — honestly.

In plain English
How to read ρ (Spearman)

ρ measures how well our Tuesday ordering matched Sunday's reality. 1.0 = perfect ordering, 0 = coin-flip.

The model beats the naive "recent form" baseline at RB, WR, and TE — the ordering edge that actually changes lineup decisions. Against RotoWire, the market leader, we sit at parity-to-slightly-below (within a few hundredths) using only our own free, pregame signals. We do not claim to beat the market, and at QB we don't yet clear our own bar — so we say so instead of shipping it quietly.

Weekly ranking quality (pooled Spearman ρ) · higher is better
Walk-forward, position-pure, TD-free score · 2025 sealed during development · benchmark shown for comparison only, never blended in
PositionSnapcountRotoWire (benchmark)Gapvs recency baseline
RB.700.741−.041Beats it
WR.680.690−.010Beats it
TE.623.637−.014Beats it
QBbelow our own barNot claimed
Pooled Spearman on the position-pure weekly ranking test (the narrative is on the methodology page; every formula, mask, and hyperparameter is in the white paper). The full receipts are public: the 2025 frozen-model replay (5,227 player-week projections, scored after the season) and the 2024 week-by-week replay, biggest misses included. The earlier MAE-era model-health snapshot is archived at metrics.
Out-of-time test · Sacred ship-gate

2025 stayed in a vault. Then we opened it once.

2025
Sealed holdout season
285 games · 48,771 PBP rows
sealed through development
scored once, weights frozen

The research loop never trained, tuned, or selected against 2025. Period.

Every model fit and every walk-forward fold during development saw only 2016–2024. The 2025 season was physically separated from day one. After the season ended, we ran the frozen model over it exactly once and published every number — the full week-by-week scorecard, hits and misses alike.

Belt + suspenders: the baseline runner drops season == 2025 from the input frame before the harness even sees it; the harness's walk_forward_splits filters again; holdout_seasons is honored by every split shape. Three independent gates, enforced by tests that run on every commit.

Where we are · July 2026

Model first. Receipts second. Product now.

The early build chased raw point accuracy (the MAE era — archived at metrics) until the honest conclusion arrived: what decides lineups is weekly ordering plus calibrated ranges, and that is where the model broke through. Everything since is receipts and product.

01
Model breakthrough
Opportunity-first projection: predict a player's volume, multiply by shrunk efficiency. Beats the recency baseline at RB, WR, and TE on walk-forward ranking tests.
ScoreboardRB · WR · TEbeat recency baseline
02
Receipts published
2024 replayed week by week, biggest misses named. 2025 scored once with frozen weights — 5,227 player-week projections, all public.
Holdout replay5,227projections scored
03
Product
The board, SnapCall chat with thesis mode, and the agent-native MCP surface — all reading from the same calibrated projection grid.
Surfaces3board · chat · MCP
04
Live season
Weekly boards from Week 1 of the 2026 season, refreshed on live news, with the same published-misses discipline in-season.
WaitlistW1 2026opens at launch
Engineering principles · Not negotiable

The boring stuff that makes the predictions trustworthy.

Anti-leakage at split-time

The walk-forward harness invokes the leakage validator BEFORE the first fit. Any feature pipeline that references a participation column, a post-game PBP outcome, or measured weather/officials hard-fails when live=true. 16 tests pin the block list against the actual participation.parquet schema.

eval/leakage.py · 4 surfaces

Schema-drift validator

Every ingest writes a baseline schema. Future ingests diff against it: removed columns, dtype changes, missing seasons, missing weeks per season, depth-charts dual-schema invariants. In-season runs additionally check 14 live-critical sources for currency.

scripts/validate_raw.py · 3 layers

Walk-forward correctness

Predict at (season S, week W) reads ONLY rows where (season < S) OR (season == S AND week < W). Imputer + scaler fit on each fold's train rows separately — no global statistics leak across folds. 17 boundary tests prevent regressions.

eval/harness.py · tests/test_harness.py

Adversarial self-audit

Before a claim ships, an independent reviewer is instructed to break it. That discipline has retracted our own headline numbers more than once — inflated hit rates, floor-gamed metrics, too-lenient acceptance tests — and the honest number always wins. The modeling lane doesn't self-approve.

audits published · how we predict · white paper v1.0
The Lab · SnapSim · Experimental

SnapSim: a coach-simulation sandbox.

A research experiment, not the product: simulated coordinators call one illustrative drive, play by play, with parameters you can adjust. The projections above never depend on it. Want the full experiment? Run the Week 5 simulation slate →

Game Brief · ML Inputs Week 7 · KC @ SF · Sun 4:25p ET · Levi's Stadium · 68°F clear, no wind
Vegas Market
SpreadKC -3.0
Total48.5
KC Implied25.8
SF Implied22.7
Injury Report · Sun AM
Pacheco RBPROB
McDuffie CBQ
Bosa EDGEQ
Greenlaw LBOUT
Recent Form · Last 4
KC recordW W L W
SF recordW W L L
KC pace67.2 / g
SF pace63.8 / g
Rolling EPA · Rank
KC OFF+0.18#3
KC pass+0.22#2
SF DEF+0.04#15
SF run D-0.05#19
Simulated Inputs NFL Play-by-Play Coach Tendencies Vegas Lines Injury Report Weekly Form Weather
LIVE KC 10SF 14 | Q3 8:42 | 1st & 10 | KC 35 | Play 1/6
Drive 7 · Started KC 35
50
0 yds · 0:00 · 0/6
OC AGENT · Offensive Coordinator
Kyle Shanahan · play-calling tendencies
QB AGENT · Field General
Patrick Mahomes · pre-snap read & audibles
Chalkboard — Coaches' View
10 20 30 40 end zone LOS FS SS TE RB X H Z QB
Mahomes Pass Yds187O/U 274.5
Kelce Rec4O/U 5.5
Pacheco Rush42O/U 58.5
PPR
Mahomes14.2
Kelce9.8
Pacheco7.4
Rice8.2
DC AGENT · Defensive Coordinator
Steve Spagnuolo · coverage & pressure
PLAY RESOLVER · Statistical
300K-play calibrated · <5ms
Agent Pipeline
DATA
Historical + Form
OC
Play Call
DC
Coverage
QB
Audible
RES
Resolve
OUT
Result
Drive 1 · Play 1/6
Waitlist · Opens at launch

Want in when we go live?

Waitlist signups open at launch (August 2026). We don't store emails server-side yet — to make sure you're counted, send us a note and we'll reach out when the board opens.

Email hello@snapcount.ai →