Six books, one screen — spreads, totals, moneylines, props & kickoff weather
📲 Install this as an app — tap Share then Add to Home Screen
⚠️
No sportsbook has an official public API — this pulls the books' publicly posted lines from an aggregator feed. Coverage varies by book and game; the strip below shows the book keys actually returned. Data tool, not betting advice.
best available price in rowgreen = beats fairred = worse than fair
🧮 Bet calculator (single or parlay)
Comma-separate odds to price a parlay (e.g. -110, +120, +150). Kelly uses YOUR win % estimate (not the book's) and the first odds entered; half-Kelly is the safer stake.
WeekViewMin edge%
Hit Load live odds to see the board.
Pulled from ESPN's unofficial public API — no auth needed. Injury designations are published by teams Wednesday–Friday of game week, so this tab will show "None reported" early in the week. Check back Wednesday for the first practice reports.
Player props load per game on demand — they use extra API credits, so tap a game only when you want its props.
Line history — saved on this device each time you load odds
⚠️ This is a validated regression model (ridge regression, trained on 2023-2024, graded on the full untouched 2025 season) — not a hand-picked formula. Its honest, out-of-sample result: -1.2% ROI on flagged bets. That was the closest to breakeven of everything tested, but it is not a proven profitable edge — treat every signal below as research, not instruction.
Predicted spread = a fixed set of coefficients (learned by ridge regression, never hand-adjusted) applied to opponent-adjusted, recency-weighted play-by-play efficiency: EPA/play split by pass and rush (both sides of the ball), success rate, CPOE, pass-rate-over-expected, pressure rate, rest-days differential, and live wind. The raw output is then anchored to the closing line as a Bayesian prior (25% model / 75% market — the market is the far more efficient estimate by every backtest run against it) and hard-capped at a 3.0-point disagreement, so "My spread" can never show as an implausible blowout number even when the underlying model is noisy. Source: nflverse play-by-play (nflfastR) + Sleeper for starting QBs.
Model vs market — sorted by biggest gap first · tap a game to load it into the Kelly calculator
This table is read-only — every number comes from the import button above, nothing is hand-typed, and the formula's coefficients are fixed (fit offline against 2023-2025 results, not adjustable here). Each team's rating is an exponential moving average (recent games weighted more) of their play-by-play efficiency, filtered to exclude garbage-time snaps (win probability between 5% and 95%), then adjusted for the strength of opponents actually faced. Pass and rush EPA are tracked separately on both offense and defense. Starting QB is identified from Sleeper's live depth chart (catches trades/signings/returns before a first game is even played) and shown for reference — the regression found no incremental signal from QB-specific EPA once team-level splits were included, so it's display-only and doesn't affect the prediction. Rest-days differential and live wind (from the Weather tab's forecast) are also in the formula; home-field edge is learned as part of the regression rather than a flat constant. This import pulls the entire current season's play-by-play file (a few MB early in the season, growing to 40-50MB by December) plus the small season schedule file and Sleeper's player list — noticeably heavier than a typical import, especially late in the season. Load live odds first so wind can be pulled from each game's forecast. Early-season weeks are seeded from 2025's final ratings instead of a blank league average — tuned on one season transition and confirmed on a separate held-out one (early-season ROI improved slightly, no downside on the full season); the seed's influence fades on its own as real 2026 games accumulate, and it's a fixed table that needs manually refreshing once 2026 ends.
No sportsbook offers a public API to link your account, so bets are logged manually — pick the game, market, side, price, and book, then mark the result once it settles (win/loss/push). Everything here is stored only in this browser; nothing is sent anywhere. Log it here once and it automatically feeds the CLV tab too.
Your betsUnit size $
Bets logged in the My Bets tab show up here automatically. Keep tapping Load live odds on the Board tab as kickoff nears — the last line seen for a game before it leaves the feed is used as its closing line. CLV compares the number you took to that closing number: positive means you beat the market's final price. This is your own observed closing snapshot, not an official closing-line feed.