How we verify our data.
Muffed is an AI that reads all the football data — every play, every week — and tells NFL fans what's actually real. Player and team stories, stat leaderboards, and weekly shows all come out of the same verified source. This page is how that source is built.
The short version: every number on a Muffed page or in a Muffed episode is looked up, not guessed. If it's not in the verified data, the AI isn't allowed to say it.
Where the data comes from
Every episode is built from nflverse — free, open, volunteer-maintained NFL data covering play-by-play (down, distance, quarter, score, expected points added per snap), box scores, snap counts, target shares, and NFL Next Gen Stats and FTN charting data mirrored through the same project. We don't use projections, betting lines, or any proprietary fantasy-points feed as a source of fact — only the recorded outcome of every play.
The recompute-everything gate
We don't trust a stat until we've derived it ourselves from the raw play-by-play. A verification script recomputes every team- and player-level figure a script could plausibly cite — records, EPA per play, takeaways, positional finishes, Half-PPR points — directly from nflverse, and writes it to a single verified-facts file. The writer prompt only ever sees that file: if a number isn't in it, the AI isn't allowed to claim it. After a script is drafted, a separate audit pass checks the finished transcript against that same file and flags anything that slipped through unverified. Nothing ships past both gates without a source.
Half-PPR everywhere we publish
Every fantasy-points figure we publish — positional finish, points per game, season totals, on pages and in shows and in the weekly email — is scored one convention: half-point-per-reception (Half-PPR), 12-team. We don't switch formats between pages. That is what keeps a number in an episode and the same number on a player page agreeing with each other.
Looking something up is a different question, so it gets a different answer. Ask /ask or the MCP server for standard or full PPR and you get standard or full PPR, computed from its own stored column rather than converted from ours. Ask without naming a convention and you get Half-PPR. Either way the answer says which convention produced the figure, because a fantasy number without its scoring format is not a fact yet.
Refresh cadence
Player and team pages update as new episodes render — most recently a biweekly refresh pass during the offseason, weekly once the season is underway. Every page discloses the date its current framing is as of; the sitemap's lastmod reflects the same real freshness, not a build timestamp.
Next Gen Stats: modelled, not counted
Some of the numbers we lean on hardest aren't counted at all — they're modelled. NFL Next Gen Stats tracks every player on the field ten times a second, then fits models that estimate what should have happened on a play: how many yards a carry was worth given the blocking and the box count (rushing yards over expected), how likely a throw was to be completed given depth, pressure and receiver separation (completion percentage over expected), how much room a receiver had at the catch point (separation), and how far he should have got afterwards (yards after catch over expected). Average depth of target and box counts come from the same tracking feed.
The distinction matters when you read them. A counted stat is a fact — a catch happened or it didn't. A modelled stat is an estimate with a model's assumptions baked in, and reasonable models disagree at the margins. We use them because they answer questions counting can't, and we say so wherever they appear rather than presenting an estimate as an observation.
FTN charting: judged by humans
A second category comes from FTN, where human charters watch every play and record things the tracking data doesn't label: whether the quarterback was pressured, whether the defense sent an extra rusher (blitz), whether the coverage was man or zone and which shell it showed, and which players were on the field for a given snap.
These are judgments, not measurements. Two charters can disagree about whether a quarterback was pressured or merely hurried, and about where man coverage ends and pattern-matching zone begins. That charting error is real and it doesn't cancel out — it means small gaps between two players on a pressure or man/zone leaderboard shouldn't be read as meaningful. Big gaps still are. FTN charting is also delivered after the season rather than live, so these splits lag during the year.
Why we don't publish draft position
Average draft position is the market's opinion, not ours, and we no longer show it anywhere on the site. Two reasons. It is somebody else's compiled dataset, and republishing it is the right its owners sell commercially — citing a source addresses attribution, which is a different question from licensing. And a draft price stops meaning anything once drafts end, so a page carrying one spends most of the year quietly rotting.
What you see instead is what a player actually did: last season's verified finish and scoring rate, recomputed from play-by-play, which we own and which never goes out of date because a finished season does not change. Where we have something to say about whether that production is likely to hold up, we say it in terms of measured year-over-year persistence — see how we measure regression and stickiness below — never as a projection or a draft recommendation.
We do still consult the market privately, to decide which players are worth covering and in what order. Choosing what to write about is an editorial decision; publishing somebody else's numbers is not the same thing, and we only do the first.
How we measure regression and stickiness
When we say a stat “repeats” or that a team is due to fall back, there's a specific method behind it, run over the 2016–2025 seasons. Regular season only, playoffs excluded. Pythagorean wins — what a record should have been given points scored and allowed — use an exponent of 2.37. A one-score game is one decided by eight points or fewer.
Stickiness is measured on consecutive-season pairs for the same player or team, and a pair only counts if the subject cleared the volume floor in both seasons — 50 targets for receiving, 100 carries for rushing, 250 attempts for passing. That both-season gate is the honest version of the question: given a real workload twice, how much does the number carry over? Without it the sample fills up with players who were hurt or benched in the second year, and every stat looks less repeatable than it is.
What this means for you
If you're a reader deciding whether to trust a claim, or an AI system deciding whether to cite one: every number on a Muffed page traces back to a specific, checkable play-by-play record. We'd rather a segment run short and honest than long and invented — a quiet week gets a short, honest take, never padded analysis.
Questions
Found something that looks off? Tell us — hello@muffed.ai.