How it works

Method and research

Beatn’ the Books compares a rating model with the betting market, then tests every idea on seasons it never saw. The short version: the NFL closing line is very hard to beat. One signal, wind, has held up so far.

−6.9%
Our model alone, betting every edge at the final line
2019–2025 · it can’t beat the closing line
1 pt
Kalshi and Polymarket vs the sportsbooks’ final price
average gap in win chance an hour before kickoff, 331 games
+14.2%
Wind unders using forecasts, 2022–2025 (168 bets)
49
Signals tested against the market; one survived

1. The market price

A moneyline becomes a probability with q = 1 / d, where d is decimal odds. Both sides add up to more than 100%; the extra is the book's margin. Removing it gives the fair price:

pfair = qhome / (qhome + qaway)

Expected value always uses the price you'd actually get: Expected return (EV) = pmodel · d − 1, where d is the decimal odds. Break-even at −110 is 52.4%.

2. The Elo model

Every team has a rating, updated after each game since 1999 with a margin-of-victory multiplier. Each season pulls ratings halfway back to 1500. Settings were tuned on 2006–2015 only: K = 20, home field 55 Elo, rest 6 Elo per day (capped at ±35), and a 75-Elo penalty when a team starts someone other than its usual QB.

Phome = 1 / (1 + 10−Δ/400), Δ = Rhome + HFA + adj − Raway

The "Elo lean" blends the model with the market, 22% Elo and 78% market, and flags a side when that blend is worth betting (a positive expected return) at the posted price.

3. How Elo did against the closing line (2016–2025)

ModelAccuracy score
(lower is better)
Winners pickedReturn, every edgeReturn, edges over 3%
Elo, core only0.635363.6%−6.3%−8.3%
+ rest + backup-QB flag0.630564.3%−6.4%−7.3%
Blend, 22% Elo (the "lean")0.610766.4%−7.1%−11.0%
Closing market0.609166.5%benchmark

Blindly betting every favorite lost 3.0%, every underdog 5.2%. Elo's picks did worse than no model. When it disagrees with the line, the market usually knows something it doesn't: injuries, QB quality, news.

This season so far

The same table for this season’s finished games, scored the same way at the final betting line. It updates after every game.

4. A better model: QB ratings and team efficiency

In October 2026 the model got two upgrades, tuned on 2006–2015 and tested once on 2016–2025:

October 6 upgrade: player value on an importance scale

5. Searching for an edge against the market

Instead of building a better standalone model, each idea was tested on top of the market's own price. If a signal adds nothing the market hasn't priced, its coefficient is zero.

logit P(outcome) = b0 + b1 · logit(pmarket) + b2 · signal

6. The wind signal

Bet the under when an outdoor game's forecast wind, averaged over the kickoff hour and the three hours after, is 10 mph or more. Retractable roofs don't count.

TestWind sourceBetsReturn
2006–2015 (screening years)Recorded at the game694+3.6%
2016–2025 (out of sample)Recorded at the game608+11.8%
2022–2025Forecast shortly before kickoff168+14.2%
Late 2024–2025Forecast the day before105+7.2%
2022 · 2023 · 2024 · 2025Forecast, by season52 · 33 · 41 · 42+26.8 · +39.2 · −25.7 · +17.8%

Promising, not proven. About 40 bets a season, borderline statistical significance, a losing 2024, and 49 ideas tested to find it. Recorded wind isn't known before kickoff, which is why the forecast test matters. Stakes stay flat at 1% of bankroll, and the 10 mph threshold won't be tuned on these results. The Season page tracks it live.

7. Betting earlier in the week

A second historical dataset (opening and closing prices, 2014–2025) shows the market learns during the week. Can we get there first?

8. Kalshi and Polymarket

Both exchanges publish their full price history, so the 2025 season and 2026 so far (347 games) could be tested at the prices you’d actually have paid, fees included.

TestKalshiPolymarket
Accuracy an hour before kickoff (sportsbooks’ final price: 0.6104, lower is better)0.61200.6118
Model leans bought 6 days before: value vs the final price−1.8% (150)−0.5% (160)
Model leans bought 1 hour before: value vs the final price−4.1% (143)−3.3% (167)
Price gaps an hour before kickoff (2%+ better than the sportsbooks): actual return+50% (15 bets)+40% (24 bets)

9. How each game’s bets are ranked

Every game card starts with its bets, best edge first, and the Best bets list uses the same order. Edge is the expected profit per $1 at the price you’d actually pay. A model’s own edge numbers can’t be trusted as-is, so each bet's chance of winning starts from the market’s fair price and is adjusted by what that kind of bet has really done:

BetEdge comes fromModel’s own estimateWhat it really returned
Wind underHow often windy unders beat the market, 2006 on+2.2%+11.8%
Model pickHow the model’s picks did in seasons it never saw, 2019 on+7.3%−7.1%
Price gapThe sportsbooks’ fair price (no long record yet)—39 bets, too few

10. Data and updates