players.csv in nflverse-data is the master roster file that assigns every NFL player a stable ID — and our live 71-book consensus feed shows how that roster data settles into betting lines. Zero dispersion on Chiefs -5.5 , Ravens -3.5 , and Falcons -3.5 proves the market has fully priced the player-level information.
The roster file is not a projection. It is the primary key. Every model that beats the market starts by joining play-by-play, snap counts, Next Gen Stats, and injuries to that player ID. Our consensus lines are the receipt — they show the market has read the same roster data you have.
What the roster file actually contains
The file ships with roughly 13,000 rows — every player who has appeared in an NFL game since 1999. Columns include the stable player ID (gsis_id), display name, position, team abbreviation, college, birth date, draft club, draft number, and status (ACTIVE, RETIRED, etc.). It updates weekly during the season. You download it once, then join everything else to it.
From roster to consensus — the pipeline
A model reads the roster file, filters to active rosters, merges play-by-play for EPA per play, snap counts for usage rates, and injuries for health. It outputs a team-strength rating. Sharp books ingest those ratings, set openers, and the market bets them to consensus. Our feed captures the endpoint: 71 books, zero dispersion, line settled.
This week the NFL slate shows that convergence. Bills -2.5 over Browns (71 books, 0.5 dispersion) . Seahawks -4.5 over Titans (71 books, 0 dispersion) . Cowboys -1.5 over Cardinals (71 books, 0 dispersion) . Commanders -1.5 over Lions (71 books, 3 dispersion) . The dispersion column tells you whether the roster picture is clear.
Where the key-number edges live
Ravens -3.5 and Falcons -3.5 sit on the 3.5 hook — one half-point off the most common NFL margin. In the NFL, roughly 15 percent of games land on 3. A settled line at -3.5 means the market has priced the hook using the same roster data you can download. If your model — built on roster-file joins — sees the true line at -3, you have a half-point edge on the favorite. That is the entire game.
College football: same principle, wider gaps
The nflverse toolkit includes cfbfastR for college rosters. The market prices those rosters into lines like North Carolina -7.5 at TCU (71 books, 0 dispersion) and San Jose State -38.5 at USC (71 books, 0 dispersion) . The -7.5 sits on a college key number (touchdown). The -38.5 reflects a talent gap the roster data quantifies. Both are consensus — but only the -7.5 sits near a decision threshold where a model disagreement creates value.
Other settled college lines: NC State -5.5 at Virginia , Jacksonville State -7 at North Dakota State , Sacramento State -8.5 at Eastern Michigan , Hawaii -5.5 at Stanford , Memphis -5.5 at UNLV .
How to use this in your pipeline
- Download the roster file from the nflverse-data releases page. It is a static CSV — no API key, no rate limit.
- Join to play-by-play using the stable player ID. The nflverse
nflreadrR package andnfl_data_pyPython package handle this automatically. - Build your feature set — EPA, success rate, snap share, injury flags — all keyed to the same roster.
- Test against our consensus. Open the NFL picks feed or workshop and compare your model line to the 71-book number. The CLV gap is your scoreboard.
What the duplicates tell you about data freshness
Several games appear twice with a half-point gap — NC State -5.5/-6 , Sacramento State -8.5/-9.5 , Hawaii -5.5/-6 , Memphis -5.5 twice . This happens when our feed captures the same game from two sources at slightly different timestamps. The half-point gap is the market digesting a roster update. Wait for the line to unify before calling it consensus.
What would change our mind
If a late-breaking roster move — a QB ruled out Friday, a star WR placed on IR — failed to move a zero-dispersion line by at least a half-point across 71 books, the link would be suspect. We watch the NFL picks feed every Sunday morning for exactly that signal. So far, every major roster shock has shifted the consensus.
Bottom line
The roster file is the key. The 71-book consensus is the proof that the market has read it. Download the roster, join the data, build the model, and check your line against ours. The track record page shows which models have beaten the consensus over time. Yours could be next.
Bet responsibly — set limits, never chase losses.
Expected bankroll growth at 55% edge
Expected geometric growth of a $100 bankroll under different Kelly multipliers across 1000 bets at p=0.55, decimal=2. Full Kelly maximises long-run growth but produces the deepest drawdowns; fractional Kelly trades growth for variance.
EV per $100 across win rate × odds grid
Expected value of a $100 stake at each combination of true win rate and market odds. Anywhere the cell is positive you have a long-run profitable bet; the magnitude shows how aggressive Kelly will size it.
Frequently asked questions
What is players.csv in nflverse?
How does roster data become a betting line?
Why does zero dispersion matter?
Can I use players.csv to build my own model?
load_pbp() for play-by-play, load_snap_counts() for usage, and load_injuries() for health. Our model builder lets you test the resulting features against our 71-book consensus without writing deployment code.

