28-day cross-book analysis
Which sportsbook prices player props most accurately?
We grade every prop against the league's official box-score feed (MLB Stats API, NBA CDN, NHL API, ESPN for soccer). Below is a real 28-day window across 7 sportsbooks and 12 markets — the closer a book's Over hit rate sits to 50.0%, the more balanced its line.
Bovada prices the most markets closest to 50/50
Bovada sits closest to a balanced 50% Over hit rate in 3 of 12 markets we tracked — more than any other book. That's the technical definition of "the sharpest line" before vig.
Bovada graded 17,816 outcomes in this window
Bovada carried the deepest coverage of any book here, with 17,816 Over outcomes graded across the 12 markets in the comparison. Sample size translates to confidence: cells from higher-volume books are statistically more reliable than thin ones.
Game lines Game Totals has a 16.6-point cross-book spread
Pinnacle's Game Totals Overs hit 47.2% while Bovada's hit 30.6% on the same market — same players, same league, same period. That's where cross-book line shopping lives.
Over hit rate by market and book
Each cell shows the percent of Over outcomes that won, last 28 days. Greener = closer to 50/50. A book's Over hitting at 48-52% on a market is balanced pricing; outside that range the book is taking a measurable side of the action.
| Market | Pinnacle | DraftKings | FanDuel | BetMGM | Bovada | BetRivers | Unibet |
|---|---|---|---|---|---|---|---|
Pitcher Strikeouts MLB | 54.4% n=632 | 52.1% n=486 | 51.9% n=568 | 51.6% n=395 | 51.4% n=628 | 53.2% n=556 | — |
Batter Hits MLB | — | 54.2% n=4,551 | — | 48.4% n=4,000 | — | 57.5% n=5,575 | — |
Batter Total Bases MLB | 46.6% n=5,780 | 40.0% n=2,055 | — | 46.0% n=3,985 | 38.4% n=2,887 | 34.9% n=5,672 | — |
Hits + Runs + RBIs MLB | — | 46.3% n=4,268 | — | 46.4% n=3,210 | 46.2% n=5,925 | — | — |
Player Points NBA | — | 44.9% n=385 | 40.7% n=440 | 42.0% n=281 | 44.2% n=747 | 45.9% n=109 | 45.5% n=110 |
Player Rebounds NBA | — | 46.2% n=357 | 44.2% n=405 | 49.0% n=257 | 44.8% n=647 | 46.3% n=95 | 46.3% n=95 |
Player Assists NBA | — | 44.4% n=322 | 43.4% n=316 | 42.6% n=223 | 46.2% n=498 | 50.8% n=65 | 51.6% n=64 |
Player 3s Made NBA | — | 41.8% n=311 | 34.2% n=342 | 38.8% n=227 | 40.1% n=521 | 46.7% n=75 | 46.7% n=75 |
Shots on Goal NHL | — | — | — | — | 42.5% n=468 | — | — |
Goalie Saves NHL | — | — | — | — | 37.3% n=51 | — | — |
Moneyline Game lines | — | — | — | — | — | — | — |
Game Totals Game lines | 47.2% n=8,679 | 32.6% n=622 | 40.0% n=617 | 32.1% n=627 | 30.6% n=5,444 | 36.0% n=595 | 35.3% n=597 |
| All markets (avg) | 47.3% | 47.4% | 42.9% | 46.2% | 39.9% | 46.0% | 39.6% |
Cell value = won ÷ total of all graded Over outcomes on that market / book in the window. Cells with fewer than 30 graded outcomes are omitted (insufficient sample). Highlighted cell per row = book closest to a balanced 50%. The footer row averages all markets per book.
How to read this
50% Over ≠ break-even at -110
A market with a 50% Over hit rate at standard -110 / -110 pricing still loses 4.5% over time to vig. To actually profit on the Over, you need it to hit at least 52.4%. So a book sitting at 48-50% on Overs is doing exactly what it's supposed to.
Low Over % = book-favorable, not necessarily mispriced
Markets with 0.5 lines on rare events (player_blocks, batter_doubles) naturally hit Over far below 50% because most players don't record any of the stat in a given game. That's the natural base rate, not a mispricing — though it does mean books print the Under consistently.
Why Pinnacle anchors fair-line math
Pinnacle is the closest-to-50% book on most markets here because they take sharp action and move lines until both sides clear equally. That's why our +EV calculator uses Pinnacle as the no-vig anchor.
Cross-book spreads are where shopping pays off
When two books on the same market sit 5+ percentage points apart on their Over hit rate, that's real pricing divergence — and the kind of edge a multi-book API surfaces that a single-book scrape never could.
Methodology
Source data: Every prop in the comparison is scraped from the listed book's public odds feed every 90 seconds, then matched against the league's official stats API after the game ends (MLB Stats API for baseball, NBA CDN for basketball, NHL Stats for hockey). Resolution is automatic and book-agnostic — we don't use any book's own settlement; the league's box score is the single source of truth.
Window: Last 28 days of graded outcomes. Rolling — refreshes hourly.
Sample-size floor: A (book, market) cell is included only if at least 30 Over outcomes were graded in the window. Cells below the floor are shown as —.
Books included: Pure sportsbooks with consistent Over/Under two-sided pricing. DFS books (PrizePicks, Underdog) and prediction-market exchanges (Polymarket, Smarkets, Matchbook, Kalshi) are excluded from this comparison because their pricing dynamics differ — their hit rates aren't directly comparable to sportsbook Over %. They're still graded in our broader dataset.
Reproducibility: Every number in the table comes from the public GET /v1/markets/hit-rates?bookmaker=<book>&days=28 endpoint, available on the free tier. Run it yourself and check our work.
This is what multi-book grading looks like.
PropLine ingests 7+ sportsbooks plus 5exchanges and grades every prop against the league feed. The comparison above is impossible without that — single-book APIs can't tell this story.