The Marginbeta
Open data

Track our projections

Every week we freeze our college football game projections as a plain CSV, before kickoff, and never rewrite the file. If you run a picker tracker or want to grade us independently, this page is the contract.

Weekly frozen CSV

One row per FBS-vs-FBS game we rate, published on the Wednesday weekly cycle and frozen at publication:

https://data.margin.mcconnelldigital.com/cfb-projections-{season}-w{NN}.csv

example: .../cfb-projections-2026-w01.csv

Columns

season          2026
week            regular-season week number
date            game date (ET game date)
kickoff_utc     ISO kickoff time, UTC
away, home      school names (CFBD canonical spelling)
neutral         1 = neutral site (no home-field advantage applied)
margin_home     projected home margin; positive = home favored
total           projected total points
home_win_prob   home win probability, 0-1
frozen_at_utc   when this file was frozen

Do betting lines feed the projections?

No. The projection for a game is computed from our team ratings (a three-year SP+ blend with a talent and recruiting adjustment) plus a fixed home-field constant. No opening line, closing line, or market price is an input to that calculation, and in-season rating updates come from game results, not from line movement.

Two footnotes, so the answer above stays true in the strictest sense. First, two of the 138 teams (Sacramento State and North Dakota State) are new to FBS in 2026 and have no FBS history to rate, so their preseason priors were set from early market spreads; every projection involving those two carries that origin. Second, when we change the model we check the new version against the market as a pass or fail test before shipping it. We have rejected changes on that test, but we never fit parameters toward lines, and the model runs at its own scale even where a market-fitted scale would score better.

NFL: weekly frozen CSV

Same freeze contract as the CFB file above, one row per NFL game, published before kickoff and never rewritten:

https://data.margin.mcconnelldigital.com/nfl-projections-{season}-w{NN}.csv

live now: .../nfl-projections-2026-w01.csv
season, week, game_id      game identifier ({season}_{week}_{away}_{home})
away, home             team codes
model_margin_home      model's projected home margin; positive = home favored
model_home_win_prob    model home win probability, 0-1
market_spread_home     book's home margin, SAME sign convention as
                        model_margin_home (positive = home favored)
market_total           book's total
market_home_ml         book's home moneyline (American odds)
market_away_ml         book's away moneyline (American odds)
edge_spread_pts        model_margin_home - market_spread_home
frozen_at_utc          when this file was frozen

One file per week ships as the season plays out; a superseded file is preserved alongside any correction, same as CFB.

The open-data contract behind every JSON link on this site

Every page on The Margin reads static JSON from this same R2 bucket at build/runtime — there is no private API. The mapping from an endpoint path to its public file is mechanical: take/api/<path>?<query>, replace each / in the path with __, append __ plus the query string sorted by key, replace any character outside [A-Za-z0-9_=&.-] with _ (case is preserved), and add .json. A path with no query is just <path>.json.

/api/cfb-games?season=2026
  → https://data.margin.mcconnelldigital.com/cfb-games__season=2026.json

/api/algoedge/nfl/upcoming?season=2026&week=1
  → https://data.margin.mcconnelldigital.com/algoedge__nfl__upcoming__season=2026&week=1.json

/api/algoedge/nfl/v6/predictions/track-record?by=team&source=canonical
  → https://data.margin.mcconnelldigital.com/algoedge__nfl__v6__predictions__track-record__by=team&source=canonical.json

/api/cbb-ratings
  → https://data.margin.mcconnelldigital.com/cbb-ratings.json

Fetch any of these directly — no auth, no key, no rate limit we enforce (be reasonable; it's a CDN, not a database). Cached ~5 minutes at the edge, refreshed on our publish cycle. Fair use: take what you need for a tracker, a grader, a research notebook — attribution to The Margin is appreciated but not required.

The honesty rules

The frozen CSV is the graded record. The JSON behind our site pages recomputes daily as inputs move and is not an archive; grade us on the frozen files only. If a frozen file ever has to be corrected, the prior version is preserved alongside it and the change is noted, never silently rewritten. Projections come from the same model shown on the site, ratings frozen preseason and updated on a stated schedule in season.

More ways to follow along

RSS feed of journal entries and articles, if you'd rather read this in a reader than check back on the site.

Questions or want a different format? Say so on X and we will make it work.