Get the data
Every number on this site is released as data: plays, teams, players and games, updated each week of the season.
Where
The release lives on GitHub: github.com/davisj2007/nfl_case_data . Every season from 2006 to the present has its own folder, in gzipped CSV and in Parquet — the same contents. Completed seasons are scored with the current model; the current season is updated weekly.
What is in it
| file | one row per |
|---|---|
case_plays
|
play: CASE, its two parts, win probability, leverage |
team_game, team_season
|
team and game, or team and season, with EPA, yards and points |
team_ledger_season, team_ledger_game
|
team: produced, allowed and net |
team_ledger_by_unit
|
team and unit: passing, rushing, special teams, penalty, clock |
player_season, player_game
|
player view (passing, rushing, receiving) |
game_summary
|
game: excitement, tension, lowest win probability, lead changes |
game_timeline
|
play, in each game's path |
implied_wins
|
team and second of game time |
Every column is documented in DICTIONARY.md , generated from the data itself.
Load it
In R:
library(readr)
plays <- read_csv(
"https://raw.githubusercontent.com/davisj2007/nfl_case_data/main/data/2026/case_plays_2026.csv.gz")
In Python:
import pandas as pd
plays = pd.read_csv(
"https://raw.githubusercontent.com/davisj2007/nfl_case_data/main/data/2026/case_plays_2026.csv.gz")
Before you publish
Read CAVEATS.md first. Three matter most:
- Player views are tabulations, not allocations: they do not add up to the team.
- Every figure carries an as_of stamp. Early in a season, a season table is a few games.
- CASE describes what happened, in context. It is not a forecast.
License and credit
Released under Creative Commons Attribution 4.0 : share and adapt it, including commercially, with credit. CASE is built on play-by-play data from nflverse , also CC BY 4.0 — please credit both.
Cite as: Davis, J. ( 2026 ). CASE: Context Aware Scoring Expectation . Jake Davis Analytics. case.jakedavisanalytics.com