What 9,670 two-sided price observations across nine sportsbooks say about what parlays actually cost.
MLB · 2–24 August 2026 · 447 games · 9 books · 9,670 two-sided market–book observations
A single MLB bet at these nine books carried an average theoretical hold of 5.01%. Combine three of those bets into a parlay and the hold is 14.30%. At five legs it is 22.67%.
You are not paying the margin once and spreading it across the legs. You are paying it on every leg, on the same stake. The margins multiply, because that is exactly how a parlay is priced — the book multiplies the decimal odds together, and the margin baked into each one comes along.
Most people know the vig on a standard bet is about 4.5%. Far fewer have looked at what it becomes at five legs. For comparison, the house edge on American roulette is 5.26% — so a single MLB bet here is roughly a roulette spin, and a three-leg parlay is close to three spins' worth of edge paid on one stake.
| Book | Snapshots | 1 leg | 3 legs | 5 legs |
|---|---|---|---|---|
| lowvig | 649 | 3.00% | 8.72% | 14.11% |
| betonlineag | 670 | 3.76% | 10.87% | 17.44% |
| betus | 823 | 4.01% | 11.55% | 18.49% |
| draftkings | 1,694 | 4.79% | 13.71% | 21.78% |
| fanduel | 1,189 | 5.10% | 14.52% | 23.01% |
| betmgm | 1,097 | 5.11% | 14.57% | 23.08% |
| bovada | 1,137 | 5.28% | 15.03% | 23.77% |
| mybookieag | 1,157 | 5.81% | 16.44% | 25.88% |
| betrivers | 1,254 | 6.46% | 18.15% | 28.38% |
Percentage points between the cheapest and dearest book. The gap compounds exactly as the margin does.
This is the more defensible number, and the one you can act on. The all-books average in the board above leans toward whichever books we observed most — DraftKings is 1,694 of the 9,670 observations, lowvig 649. A gap between two books does not have that problem, because each book is measured against its own prices.
If the books quoted different games, the gap could be market mix rather than pricing. So here is the same comparison restricted to the 242 markets every one of the nine books quoted — identical games, identical market types, no mix to argue about:
| Book | 1 leg | 5 legs |
|---|---|---|
| lowvig | 3.02% | 14.20% |
| betonlineag | 3.71% | 17.23% |
| betus | 3.77% | 17.48% |
| fanduel | 4.24% | 19.49% |
| draftkings | 4.29% | 19.67% |
| betmgm | 4.72% | 21.48% |
| bovada | 4.81% | 21.85% |
| mybookieag | 5.01% | 22.67% |
| betrivers | 5.60% | 25.02% |
The order barely moves and the gap survives: 2.58 points at one leg, 10.83 at five, on identical markets. Smaller than the full-sample figure, because 242 markets is a narrower and more liquid slice — but it is the like-for-like number, and it says the difference is pricing rather than which games each book happened to post.
| Market | Snapshots | Overround | Median | p25 | p75 |
|---|---|---|---|---|---|
| Moneyline | 584 | 4.01% | 4.20% | 3.63% | 4.39% |
| Spread | 729 | 4.62% | 4.76% | 4.46% | 4.76% |
| Total | 888 | 4.79% | 4.76% | 4.71% | 4.76% |
Moneyline is the cheapest and the most variable — its interquartile range spans about three-quarters of a point, because moneyline margin moves with how lopsided the matchup is. Totals are the most consistent: the p25 and p75 sit five basis points apart, which is what a market priced off a standard template looks like.
Deliberately simple, so it can be checked rather than trusted.
2026-08-24 20:37 UTC. Re-running against live data will not reproduce them;
re-running with that cutoff will.
d₁ and d₂:
S = 1/d₁ + 1/d₂A market with no margin sums to exactly 1.0. Everything above that is the book's overround.
overround = S − 1 theoretical hold = (S − 1) / SOverround is the margin expressed against a fair book. Hold is the share of total handle the book keeps on perfectly balanced action, and it is the smaller of the two. Both are in the board above so neither has to be taken on faith.
S_parlay = S₁ × S₂ × … × SₙThat step is arithmetic, not a model. The only assumption is which legs — the board uses the sample's average leg, which is why it is labelled as an average rather than as your parlay.
S
outside 1.0–1.5 would be excluded as malformed. Zero were excluded — every
two-sided pair in the sample fell inside that range. The filter is reported because it was
applied, not because it changed anything.The caveats matter more than the headline, and leaving them out is how a study like this gets taken apart in the replies.
The sample is small, narrow and not continuous. MLB only. 447 games, nine books, 9,670 two-sided market–book observations. It is not a season, it is not every sport, and it is not every book.
Coverage is uneven, and three days are missing entirely. Observations fall on nineteen calendar dates from 2 August. The early ones are thin because the poller was failing silently at the time; later ones are near-continuous:
| Date | Span of coverage | Note |
|---|---|---|
| 2–5 Aug | 34 min · 15 h 01 · 24 min · 13 min | poller failing silently |
| 6–7 Aug | 20 h 51 · 12 h 17 | |
| 8–9 Aug | nothing | collector host slept |
| 10–12 Aug | 23 h 29 · 22 h 10 · 45 min | |
| 13 Aug | nothing | collector host slept |
| 14–17 Aug | 1 h 05 · 23 h 11 · 35 min · 6 h 01 | |
| 18–23 Aug | 23 h 55 · 23 h 57 · 23 h 56 · 23 h 56 · 23 h 15 · 18 h 08 | near-continuous |
8, 9 and 13 August contributed nothing at all — the machine running the collector went to sleep and nothing restarted it. Margin is fairly stable intraday, so gaps affect coverage more than the central estimate, but this is not a clean panel and anyone reading it as three uninterrupted weeks would be reading it wrong.
These are in-window snapshots, not closing lines. They are the prices that were on the board, which is arguably the more relevant number — it is what you face when you actually place a bet — but they are not closes, and any claim about closing-line value would need different data.
This says nothing about same-game parlays. The multiplication above holds for legs across different games. A same-game parlay is priced with a correlation adjustment, and its margin is a separate question with a separate answer. Conflating the two is the most common error in this topic and this study does not do it.
Hold is the book's margin, not automatically your loss. The margin is what the book keeps on balanced action. Your expected loss equals it only if you have no edge on the price. If you can beat the number, the margin is the thing you have to beat — it is a cost, not a verdict.
Nine books is a slice, not the market. Several here are offshore. Their inclusion widens the spread and should be read as such.
Every figure above comes from two files. Neither requires our database or our word.
game_id · market_id · bet_type_id · sportsbook_id · observed_at · selection_id · decimal_odds
The CSV is the sample after pinning and de-duplication — one observation per market per book, both sides, nothing else removed. Rebuilding the headline figure from it takes four lines in any language:
import csv, collections
rows = list(csv.DictReader(open('parlay-hold-observations.csv')))
mk, n = collections.defaultdict(float), collections.Counter()
for r in rows:
k = (r['market_id'], r['sportsbook_id'])
mk[k] += 1 / float(r['decimal_odds']); n[k] += 1
S = [s for k, s in mk.items() if n[k] == 2]
mean = sum(S) / len(S)
print(len(S), mean, (mean - 1) / mean) # 9670 1.052770 0.0501
If that gives you something other than 9,670 observations and a 5.01% hold, we would like to know.
We are building a tool that shows what a parlay costs before you place it. This is the number the tool is built around, so it seemed reasonable to show our working rather than assert it.
It is worth being plain about what this finding is and is not. It will not make anyone a winning bettor. Nothing will — parlay betting has a negative expected return over time, and knowing the margin more precisely does not reverse that arithmetic. It only means you know what you are paying.
We take no money from sportsbooks. No affiliate links, no referral deals, no partnerships. The per-book table above is the reason that matters: nothing a book pays us could move a row in it.
The data, the method and the caveats are all above. If something here is wrong, we would rather hear it than not.
A 500-person beta opens 19 August, on the preseason slate. One email when it does, and nothing else until then.