Savant FootballSAVANTFootball
1.01
On the clock
—
—

Player Data

The two blends — where every number starts

Blended points (BPTS). Every source’s raw stat line (FantasyPros, ESPN, CBS, FFToday for offense; FantasyPros and FFToday for IDP) is re-scored under your league’s own scoring rules, then averaged with equal weights. A missing source is dropped and the rest reweighted — nothing is penalized for silence. Pre-scored totals from a source are never blended; only raw lines, so the math is always your league’s math. A calibration shrink then pulls each projection toward the positional mean of the draftable pool, because every projector over-spreads: QB ×.67, TE ×.72, RB ×.79, WR ×.85 (IDP unshrunk until we can measure it).

Blended ADP (BADP). Format-matched market streams only — FF Calculator (nearest league size), FantasyPros site ADPs, ESPN, CBS — equal weights, missing streams dropped. Spread stats (FFC’s std deviation, CBS’s HI/LO) ride alongside for future survival math.

Two layers: projection is static, value is live

A player’s projection never changes because somebody else got drafted. Every value below does: the three baselines are read from the players still on the board and the starter seats still open, so the board you see at pick 60 is the board for pick 60. Before the first pick the live board and the preseason board are the same thing.

VORP — value over replacement

The draft pool is teams × rounds players. For each position, the replacement is the best player still available whose market price falls past that pool — the guy freely available when the music stops. VORP = your points − his points. A player no ADP feed prices (most IDP) is not treated as undraftable: the engine estimates where he goes from roster demand — this league’s starter seats at his position, scaled to the draft’s length, with FantasyPros’ positional rank ordering the position — and flags that estimate low confidence in his card.

VOLS — value over last starter

Starter seats per position = teams × roster slots; FLEX seats are pooled and handed out greedily to whichever eligible position’s next man up scores highest. Live, every drafted player fills a seat (his position’s first, then the flex family), so the baseline is the last starter among the seats still open: VOLS = your points − the last starter’s points. When a position’s starter seats are all gone, VOLS runs from the best player left — everyone there is bench now.

VONA — value over next available

Snake math finds your next open pick — a keeper pinned in one of your slots is not a pick you get to make. Survivors are the available players whose market price falls after it. VONA = best available at the position − best expected survivor. High VONA means the position craters before the draft comes back to you — the on-the-clock urgency number.

VBD — the composite

VBD = V·VORP + L·VOLS + N·VONA. Live weights right now: V ? · L ? · N ? (phase: ?). Presets: pre-draft V .6 / L .3 / N .1 leans on season-long value; live draft V .3 / L .2 / N .5 leans on what dies before your next pick. The Phase / V·L·N knobs in Advanced’s verification toolbar are live — turn them and every board reorders.

Tiers — experts first, for real

Every player gets an expert mean, and every voice is read on its own scale first: an expert’s tier is a fraction of how many tiers that expert uses at the position, so Dave’s tier 3 of 6 and FantasyPros’ tier 5 of 12 both mean “the middle of the board” instead of 3 and 5. The position’s common scale is the weighted average of the voices’ tier counts, and the mean is the weighted average fraction put back on that scale — with one voice weighted, that is exactly that voice’s tiers, verbatim. Every voice has its own weight (the dials below; 0 silences a voice): FantasyPros starts at 2 — their tiers are a consensus of many rankers — the four individuals at 1. Trust the individuals over the consensus? Drop FantasyPros to 1 or 0. Tier = the mean, rounded (halves round to the worse tier), and the label is the tier number — T4 always means consensus tier 4. The order IS the expert mean: tier, then the un-rounded mean, then projection — so experts can drop a man below his projection (the whole point). A voice that tiers fewer than four men at a position, or uses a single tier, is thin and sits that position out (a half-parsed article must not set a scale). A man with no usable voice — or fewer than Min voices — is placed by his projection beside the voiced players and marked ⬚; only players who project below every voiced man drop to a tail tier. Monster VBD cliffs — a gap bigger than Cliff× the position’s average gap — only SUB-SPLIT a tier (T4a / T4b), never renumber it; Cliff× 0 turns math off. A position with no usable voices at all falls back to pure VBD cliffs, and the voices table above tells you which world each position lives in.

The market is the sixth voice (9/6). At depth the expert mean thins to one voice, and FantasyPros’ tier 8 of 14 reads as “middle of the board” on their own scale while the CBS writers stopped tiering sixty men ago — that floated Kyle Williams (ADP 227) into WR T6 above DK Metcalf, and a healthy RB4 nobody drafts into RB T6. The market never thins: every priced man has an ADP, and the men no feed prices are the men nobody drafts. So his blended ADP is read as a positional rank against how many of his position this league drafts, put on the position’s common scale (the M chip), and averaged in at the Market weight — unpriced, or priced past the draft, is one tier past the last. It never counts toward Min voices, never defines a scale alone, and sits out a position with fewer than six priced men (IDP). Sideline drops the men Sleeper lists on IR / out / inactive into an OUT tier at the bottom — they hold no value and set no baseline — and Stale after retires a source’s record on a man that source has since dropped (the 216 stale points on a receiver out for the year).

Research is the seventh voice — as a nudge, not a scale (9/7). The daily research ledger (Player Data → Research ledger; the site’s copy loads itself) records who said what about whom: sleeper, breakout, bust, role, market, scheme calls with their outlet, date and evidence. Every player’s buzz counts the live calls of the last 14 days, one vote per outlet (three FantasyPros pages are one outlet), weighted by source tier and strength and halved every 5 days; net = up − down. Net buzz moves his expert mean by up to one tier (±net ÷ 2, clamped) × the Research dial, so three fresh independent up-calls ≈ one tier better and a lone August mention ≈ nothing. Health and availability events show as a ⚕ chip and never move a tier — the Sideline gate reads Sleeper for that. The ▲/▼ chips on every row open the evidence on hover; the player card’s Research tab has the full timeline and the still-a-value check against today’s ADP; the Research channel under Players is the day’s file, sortable.

The dials, live right here — every change re-tiers all the boards instantly:

Voice weights

Reality checks

Tier inspector — the receipts, player by player

Pick a position: expert order, each man’s tier and expert mean, his VBD, the gap to the man above him, every expert tier we imported for him, how many voices counted (⬚ = placed by projection), and exactly where and WHY each boundary landed (⚖ expert tier steps down · ⚡ monster sub-split). Copy it and paste it wherever the argument is happening.

Market gap & verdicts

Market gap = current pick − BADP for a player still on the board — how far past his market price he has fallen (positive) or how early taking him would be (negative). The Jumbotron’s verdict stamps read the same gap:

GapVerdict
≥ +8STEAL
≥ +3VALUE
≥ −3ON MARKET
≥ −8REACH
belowBIG REACH

Want different numbers?

Everything above is deliberate and adjustable: blend weights, shrink slopes, phase presets, tier sensitivity, verdict thresholds. The V·L·N and relevance knobs are live in Advanced today; the rest changes in a build — now that the machinery is on the table, say which dial and where.

New here? Two minutes to a full app, in order: 1 · Grab a free FantasyPros API key — the blue box below has the links and takes about two minutes. 2 · Paste it in the box. 3 · Hit Load all data and let it work. (Already have a savant-pool-….json from a friend? Drop it on the Players tab and skip all of this.) The numbered buttons below re-run one source at a time; the verification board at the bottom shows every number next to the source that said it.

Free and takes about two minutes: read the current terms at fantasypros.com/api-data, request your key at secure.fantasypros.com/api-keys/request, and paste it above — it’s saved in this browser and sent only as a header on your own FantasyPros calls through the Worker (relayed, never stored there); it’s the one thing Load all data needs from you. We’re working with FantasyPros on site-wide access so this step can disappear.
Just looking? 240 real players with invented numbers — no key, no pulls, clearly labeled, and a canned 10-team league to draft in. Loading real data later replaces it.

Load all data

One click pulls every source — rankings, projections, ADP, tiers and three seasons of history, including the FantasyPros exports staged on this site. It takes a few minutes; the bar below narrates. Needs your FantasyPros key from Step 1 above — free, two minutes, explained in the blue box.

Automatic sources — Refresh all pulls every one of these in order. A button re-runs just that source. In a fresh session 1 and 2 must exist first (Refresh all handles the order for you).
Every active NFL player with their IDs — the skeleton every other source attaches to.
The DynastyProcess ID map — teaches the app that ESPN’s, CBS’s and FantasyPros’ names are all the same player.
FF Calculator ADP at 8/10/12 teams, every format plus 2QB (the superflex engine's market read).
API consensus ranks (positional tiers included) and raw projections, per format. Uses your FP key when set.
FP IDP ranking pages (DL / LB / DB) — full lists, replacing the API plan's capped previews.
Draft ranks, ADP (their 168-pick ceiling is detected and never poisons the blend), projections, roster %.
CBS consensus rank plus each expert's own board — Eisenberg, Richard, Cummings.
CBS season projections per position — raw stat lines, re-scored under YOUR league's rules.
CBS draft averages, PPR and standard.
Dave Richard's and Jamey Eisenberg's tier articles, auto-found on the news index and both writers' pages — newest version (1.0/2.0/3.0) per expert per position wins. Feeds the tier cuts.
FFToday season projections, all nine positions, paginated.
Rankings with staff tiers + one-line comments; K/DL/LB/DB season stat tables ride along (the only K/IDP history source).
FFToday dynasty boards + superflex Top 225, FP dynasty and dynasty-superflex — display & relevance streams, never blended into redraft ADP.
Research ledger — the daily sleepers / breakouts / busts file ChatGPT writes (spec: savant-research-ledger-spec). Its own layer beside projections and tiers: who said what, when. The site’s copy (data/research-ledger.json) loads itself when it is newer than what this browser holds; drop a file to load one by hand.
Probing the site for data/research-ledger.json…
Nothing loaded yet.
Manual imports — NOT part of Refresh all: files you download or save yourself, plus once-a-season pulls. Each button says exactly what it eats.
Three seasons of real CBS results — 18 pages, ~90 seconds. Once a season is plenty; feeds the Stats tab.
Paste a direct link to one Dave / Jamey / Heath tiers article the 8b auto-scan missed — writer pages only show their freshest handful, so older articles roll off.
FantasyPros Overall ADP page exports (the CSV download is login-only, so it's manual). Select all three format files at once — format auto-detected from the columns. This is where Sleeper ADP enters the blend. Don't want to hunt for them? Our copies live in the green Hosted data box above.
FantasyPros Rankings page exports — works for Overall, any single position, or the IDP tabs (its most common job: full IDP lists when the API caps out). IDP/K/DST are scoring-independent and land in every format; offense rows detect their scoring from the filename (FP names the file after the page — "half-point", "ppr" …), defaulting to PPR with a note in the log. No superflex ranks importer exists — superflex boards come from step 11 (Dynasty).
The live page pull — currently useless (FP hydrates the real table in-browser, the fetch only sees a 5-row widget), so it's out of Run all. Kept here for the day FP unhides it.
ESPN builds its IDP article in-browser, so a normal fetch gets an empty shell. Open the article, save the rendered page (Ctrl+S → HTML only) or select-all into a .txt, and feed the file here.
Sleeper FF Calculator FantasyPros ESPN CBS DynastyProcess crosswalk · cell dot = which source that value came from
Pull log
Imported data

What actually landed. The cards below are per-source coverage counts from the last run — matched players, unmatched names, anything clamped or repaired. Under them, the verification board is the engine's output rendered raw, straight from this workbench, so you can eyeball the data with your own eyes before trusting it on draft day: filter the universe, sanity-check a projection, click a row for the full player record. The Phase / V·L·N weights in its toolbar are live — they drive the Rankings and Savant Board too. The ECR≤ / Proj≥ / IDP≤ boxes set the relevance filter: who counts as a real player when the pool commits to the app.

Verification board
Load sample data, or run the live steps in order.
×