# NFL team form aggregates, 2016-2025

Three files. Every number is a team's recent form entering a given week. Nothing in any file uses
the week's own game.

## Files

| file | one row = | columns |
|---|---|---|
| team_state_2016_2025.parquet | one team entering one week | season, week, team, played_this_week, 44 attributes, 7 counts |
| matchup_2016_2025.parquet | one regular-season game | season, week, home, away, neutral_site, home_ and away_ copies of the 51 state fields |
| team_rank_2016_2025.parquet | one team entering one week | season, week, team, then value, __pct_week, __pct_pooled for each of the 44 attributes |

Column names, definitions, and the direction of each attribute are in schema.json.

## What "entering week W" means

The team's form over up to its last 6 games played before week W (fewer early in a season). The
week W game itself is never included. Rows start at week 5.

## Coverage and keys

- Seasons 2016-2025. Weeks 5-17 for 2016-2020, weeks 5-18 for 2021-2025.
- Teams use three-letter codes listed in schema.json (for example GNB, KAN, LVR, NOR, NWE, SFO, TAM,
  LAR). schema.json also lists the alternate spellings that map onto them.
- A team with no game in a week still has a team_state row, flagged played_this_week = false. Its
  numbers are the same state it carries into its next game. The matchup file has no row for it
  that week. The rank file includes it, so every weekly comparison is over all 32 teams.

## Attribute groups (44)

| group | count | what it measures |
|---|---|---|
| pass | 10 | passing offense and defense per pass play: yards, 20+ yard plays, sacks, touchdowns, interceptions |
| rush | 8 | rushing offense and defense per rush play: yards, 10+ yard runs, touchdowns, fumbles |
| sit | 7 | third-down conversion, red-zone touchdown rate, average drive start for own and opponent drives, field-goal make rate |
| gs | 7 | share of game time spent trailing by 9+, 4-8, 1-3, tied, leading by 1-3, 4-8, 9+ |
| pen | 1 | penalties per game |
| td | 10 | touchdowns per drive, by the quarter the drive started and over all regulation drives, for offense and defense |
| bal | 1 | pass share of all offensive plays |

Counts (7) are the play and drive totals in the window, so a thin sample is visible.

## Direction and percentiles

Each attribute in schema.json carries a direction: +1 means higher is better, -1 means lower is
better, 0 means a style measure with no better or worse. In team_rank, percentiles are oriented by
that direction so 1.0 is always best; direction-0 attributes are left as raw percentiles.

- __pct_week: share of the 32 teams entering that week at or below this team's value after
  orienting by direction, so 1.0 is best (direction 0: the raw value, no orientation).
- __pct_pooled: share of all 4,320 team-weeks 2016-2025 at or below this team's value,
  oriented the same way.

## Not included

Game results.

## Getting this data

The files are sold per request over x402, an open payment protocol for plain HTTP. A request to a
paid route answers 402 with the terms in its PAYMENT-REQUIRED header; the buyer's client signs those
terms and retries with a PAYMENT-SIGNATURE header; the data comes back with the response. No account,
API key or sign-up. Any x402 client works, for example @x402/fetch for JavaScript or the Coinbase
agentic wallet tools. Coinbase's x402 Bazaar lists these routes for agent discovery.

- Free: GET / lists every route, its price and the coverage; /sample returns one row of each kind;
  /README.md and /schema.json are this document and the field definitions; /openapi.json describes
  every route for tools.
- Paid: one team, one game, one week, one season, or the whole dataset as a zip. Prices are in GET /
  and in each 402; they are not repeated here.
- Accepted payment: the 402 terms list every network and token accepted and the receiving address.
  Take the address only from the 402 header, never from a third party. Today's terms are USDC on
  Base.
- A request for a game that was not played that week, or an unknown team code, answers 404 and
  nothing is charged.
