Methodology · rules v1 · rebuttal rules v2
How a receipt earns its number
Everything below is a product choice, not an official league rule. Thresholds are centralised in code and displayed here exactly as applied.
What a receipt is
A receipt is one metric, for one team or player, over one exact window, compared with a cohort of peers in the same window. It stores the headline, the number, the numerator and denominator, the rank and cohort size, the evidence label, the caveats, the source fields and the calculation version. Receipts are immutable snapshots: a shared link never silently turns into today’s number.
Timeframes
- Latest completed game and last five completed games: the entity’s own most recent final games, regular season and playoffs combined, in date order.
- Current season: completed games so far, labelled “in progress” and “through Week N” until every scheduled game is final.
- Previous completed season, selected playoffs, and covered history (every covered season). Regular season and playoffs are always separate unless a rivalry window says “regular season + playoffs”.
- “Career” is never offered unless full career coverage exists. A six-season dataset is labelled covered history, never all-time.
Rates and counts
Every rate is the summed numerator divided by the summed denominator across the games in the window. We never average per-game rates. Zero denominators are undefined, not zero, and are excluded from rankings. Missing source values are excluded, never converted to zero. Standings and records come from final scores in the schedule, not from who played quarterback. A traded player’s rows from different teams are summed once.
Qualification thresholds (per window)
| Entity | Rule | Minimum |
|---|---|---|
| Teams | completed games for season rate rankings | 4 |
| Teams | offensive plays for per-play rates | 200 |
| QB | pass attempts for passing rates | 100 |
| QB | dropbacks (attempts + sacks) for sack rate | 100 |
| RB | rushing attempts | 50 |
| WR / TE | targets | 25 |
| K | field goal attempts | 10 |
| Teams | playoff games for a playoff record | 3 |
| Teams | head-to-head games before a rivalry record is more than descriptive | 3 |
| Any | qualified peers before any rank is claimed | 8 |
Thresholds apply to the chosen window and never relax to force an answer. Single-game receipts use their own opportunity minimums (QB 10 attempts, RB 8 carries, WR/TE 4 targets, K 2 attempts) and are always “descriptive only”.
Ranking and ties
Within a qualified cohort, rank 1 is the worst (negative leaderboards). Ties share the best available rank and the tie count is shown (“tied 2nd-most of 32 teams”). Ordering is deterministic: value, then entity ID. A result counts as a supported weakness only when it ranks within the worst 25% of its qualified cohort and its whole tie group fits inside that quarter (a value shared by half the league is not a weakness). Middle-of-the-pack numbers are shown as “further results”, never dressed up as weaknesses.
Evidence labels
- Strong sample: meets the threshold and the cohort has at least 8 qualified peers.
- Limited sample: at least 25% of the threshold, or qualified but with too few peers to rank.
- Descriptive only: below that, or any single-game window.
Labels describe coverage and opportunity. They are not confidence intervals and not proof of causation. There is no invented confidence percentage and no opaque player-quality score.
Candidate selection
For a case: reject incomplete or undefined results; keep supported weaknesses; order by evidence tier, then extremity (percentile from the worst end), then a fixed metric priority, then metric ID; keep one receipt per metric family (for example interception count and interception rate never both appear); stop at five. Weak evidence is never padded to five.
Cherry-pick warning
Custom windows, unusually narrow splits, and recent-form windows whose full-season result differs by more than 35 percentile points carry a cherry-pick notice that quotes the broader result. It is a context notice, not an accusation. We do not search thousands of splits to manufacture one.
Team finishing definitions
- Blown lead: lost after leading by at least 10 points at any recorded score state (after a scoring play). Score states are ordered by quarter and clock. Overtime losses count; ties are not losses. One per game.
- Late fourth-quarter loss: lost after leading or being tied at the last recorded score state before the final 5:00 of regulation.
- Losing run: consecutive losses; a tie ends a run. A run that begins at the first covered game is “at least N”.
- Blowout loss (timeline): lost by 17 or more.
Metric registry
| Metric | Applies to | Definition | Worse when |
|---|---|---|---|
Win percentageteam.win_pct@1 | Teams | Wins plus half of ties, divided by completed games, from final scores in the schedule. Ties are shown explicitly. | lower |
Points allowed per gameteam.points_allowed_pg@1 | Teams | Opponent points from final scores, divided by completed games. Includes points scored against the offense and special teams, not only the defense. | higher |
Points scored per gameteam.points_scored_pg@1 | Teams | Team points from final scores, divided by completed games. | lower |
Scoring margin per gameteam.scoring_margin@1 | Teams | Points scored minus points allowed, divided by completed games. | lower |
Giveawaysteam.giveaways@1 | Teams | Interceptions thrown plus fumbles lost (all units), summed across games. | higher |
Giveaway rateteam.giveaway_rate@1 | Teams | Giveaways divided by offensive plays, where offensive plays = pass attempts + rushing attempts + sacks taken. Summed numerator over summed denominator. | higher |
Turnover marginteam.turnover_margin@1 | Teams | Takeaways (defensive interceptions + opponent fumbles recovered) minus giveaways (interceptions thrown + fumbles lost), summed across games. | lower |
Sack rate allowedteam.sack_rate_allowed@1 | Teams | Sacks taken divided by dropbacks, where dropbacks = pass attempts + sacks taken (scrambles excluded). Summed over games. | higher |
Penalty yards per gameteam.penalty_yards_pg@1 | Teams | Accepted penalty yards against the team, divided by games with stats. | higher |
Blown double-digit leadsteam.blown_leads@1 | Teams | Losses in games where the team led by at least 10 points at any recorded score state (after a scoring play). Overtime losses count; ties do not. One per game. | higher |
Late fourth-quarter lossesteam.late_losses@1 | Teams | Losses in games where the team led or was tied at the last recorded score state before the final 5:00 of regulation. | higher |
Longest losing runteam.losing_run@1 | Teams | Longest run of consecutive losses within the window (ties end a run). A run that starts at the beginning of coverage is reported as 'at least N'. | higher |
Playoff recordteam.playoff_record@1 | Teams | Postseason wins and losses from final scores within the covered seasons. Not a franchise all-time record. | lower |
Playoff eliminationsteam.playoff_exits@1 | Teams | Postseason losses within covered seasons (each is a season-ending elimination). Seasons without a playoff appearance are not eliminations and are not counted. | higher |
Record vs opponentteam.record_vs@1 | Teams | Wins, losses and ties against one opponent from final scores within the window. Regular season and playoffs are separated unless the window says otherwise. | lower |
Scoring margin vs opponentteam.margin_vs@1 | Teams | Points scored minus points allowed against one opponent, divided by head-to-head games in the window. | lower |
Interceptions thrownqb.interceptions@1 | QB | Passes intercepted, summed across games in the window. | higher |
Interception rateqb.int_rate@1 | QB | Interceptions divided by pass attempts. Summed numerator over summed denominator across games. | higher |
Completion percentageqb.completion_pct@1 | QB | Completions divided by pass attempts (sacks excluded). Summed numerator over summed denominator across games. | lower |
Yards per attemptqb.yards_per_attempt@1 | QB | Passing yards divided by pass attempts (sack yardage excluded). Summed numerator over summed denominator. | lower |
Sack rateqb.sack_rate@1 | QB | Sacks taken divided by dropbacks, where dropbacks = pass attempts + sacks taken. Scrambles are not counted as dropbacks because the source weekly stats do not expose them. | higher |
Fumbles lostqb.fumbles_lost@1 | QB | Fumbles lost on sacks plus fumbles lost on rushes, as attributed to the quarterback by the source. | higher |
Yards per rushrb.yards_per_rush@1 | RB, FB | Rushing yards divided by rushing attempts. Summed numerator over summed denominator. | lower |
Fumbles lostrb.fumbles_lost@1 | RB, FB | Fumbles lost on rushes plus fumbles lost after receptions. | higher |
Yards per targetwr.yards_per_target@1 | WR, TE | Receiving yards divided by targets. Summed numerator over summed denominator. | lower |
Catch ratewr.catch_rate@1 | WR, TE | Receptions divided by targets. This is not a drop rate: it depends on target depth, throw accuracy and coverage. | lower |
Fumbles lostwr.fumbles_lost@1 | WR, TE | Fumbles lost after receptions plus fumbles lost on rushes. | higher |
Field goals missedk.fg_misses@1 | K | Field goal attempts that were missed (wide or short). Blocked kicks are excluded and listed separately when present. | higher |
Field goal percentagek.fg_pct@1 | K | Field goals made divided by field goal attempts (blocked attempts count as attempts, as in the source). | lower |
Context metrics used only by rebuttals: Comeback wins from 10+ down, Late fourth-quarter wins, Takeaways, Pass attempts, Touches, Targets, Average depth of target, Share of misses from 50+ yards.
Case categories
- Find the strongest case: Every supported metric, ranked by how bad it is.
- Turnover trouble: Giveaways, interceptions and fumbles lost.
- Inefficient production: Points, yards per attempt, completion and catch rates, kicking accuracy.
- Can't finish games: Blown double-digit leads and late fourth-quarter losses, by documented definitions.
- Playoff disappointment: Postseason results inside covered seasons only.
- Rivalry struggles: Record and margin against one chosen opponent.
- Overrated (playful): Weak metrics only. No reputation, salary or draft baseline is measured.
“Overrated” measures only on-field weakness. No reputation, salary, draft position or consensus ranking is in the dataset, so none is claimed.
Talk Back: rebuttal rules
Rebuttals never simply negate a claim or attach an unrelated positive stat. Each rule names a related metric and how its scope relates to the claim, and the result is classified from actual numbers:
- Correction: a later dataset changed the number; the original stays online with a notice and a link to the replacement.
- Qualification: true, but omits material context (workload, target depth, kick distance, a small sample, or a broader window, always labelled as a different timeframe).
- Counterpoint: a directly related metric in the same window sits in the better half of the cohort.
- No strong rebuttal: the related numbers are also bad. The claim stands.
| Rule | Applies to | Checks | Scope |
|---|---|---|---|
team.points_allowed.giveaways | team.points_allowed_pg | Offensive giveaways that set up short fields | same window |
team.win_pct.margin | team.win_pct, team.losing_run | Scoring margin in the same window | same window |
team.margin.win_pct | team.scoring_margin | Record in the same window | same window |
team.giveaways.rate | team.giveaways | Giveaways per offensive play | same window |
team.giveaways.margin | team.giveaways, team.giveaway_rate | Net turnover margin | same window |
team.turnover_margin.takeaways | team.turnover_margin | Giveaway rate | same window |
team.blown_leads.comebacks | team.blown_leads | Comeback wins from 10+ down | same window |
team.late_losses.late_wins | team.late_losses | Late fourth-quarter wins | same window |
team.playoffs.reg_record | team.playoff_record, team.playoff_exits | Regular-season record this season | full season (labelled) |
team.rivalry.margin | team.record_vs | Head-to-head scoring margin | same window |
team.rivalry.record | team.margin_vs | Head-to-head record | same window |
team.rivalry.reg_split | team.record_vs, team.margin_vs | Regular-season games only | REG split (labelled) |
team.rivalry.post_split | team.record_vs, team.margin_vs | Playoff games only | POST split (labelled) |
qb.int.rate | qb.interceptions | Interception rate on the same attempts | same window |
qb.int_rate.volume | qb.int_rate, qb.sack_rate, qb.fumbles_lost | Workload (pass attempts) | same window |
qb.int_rate.ypa | qb.int_rate, qb.interceptions, qb.completion_pct, qb.sack_rate | Yards per attempt in the same window | same window |
qb.ypa.completion | qb.yards_per_attempt | Completion percentage in the same window | same window |
qb.ypa.int_rate | qb.yards_per_attempt, qb.completion_pct | Interception rate in the same window | same window |
rb.ypr.volume | rb.yards_per_rush, rb.fumbles_lost | Workload (touches) | same window |
wr.catch_rate.adot | wr.catch_rate | Average depth of target | same window |
wr.catch_rate.ypt | wr.catch_rate | Yards per target in the same window | same window |
wr.ypt.catch_rate | wr.yards_per_target | Catch rate in the same window | same window |
wr.volume | wr.yards_per_target, wr.fumbles_lost, wr.catch_rate | Workload (targets) | same window |
k.distance | k.fg_misses, k.fg_pct | Distance of the misses | same window |
k.misses.pct | k.fg_misses | Accuracy on the same attempts | same window |
any.broader_season | any short-window claim | Full current season | full season (labelled) |
“Fire back at their team” is a separate, labelled new attack and is never presented as a rebuttal.
What “Verified Petty” means
The stamp means the receipt passed this application’s checks against the published dataset: complete games only, defined denominators, stated window and cohort. It is not a league endorsement and not independent certification.
See also data coverage and status.