How we remove sportsbook margins, estimate a fair probability, and decide whether a price is worth betting
Sportsbooks build a margin ("vig") into every line. If you read probability straight off the odds, you'll see fake value: bets that look +EV but aren't once the margin is removed.
The short version: for every bet we estimate a fair (no-vig) probability from the whole market, then compare it with the best price at a book you can actually bet. EV is the headline number. It is an estimate, and every bet still carries risk.
The probability a price implies, vig included.
Example: -110 implies about 52.38%; +150 implies 40%.
In a fair market every outcome's probability adds up to 100%. Books price markets so the implied probabilities add up to more. The extra is the vig.
Example: -110 / -110 implies 52.38% + 52.38% = 104.76%. The extra 4.76% is the margin.
Our estimate of how likely the outcome is, with the vig removed. EV, edge and fair odds are all computed from it.
You can only remove the vig from a book's price if you also have that book's price on every other outcome. So first we group each book's prices by market:
Some markets have no other side to pair with: anytime and first scorer props, and "yes-only" ladders where books only sell one side. These get the one-sided estimate described in Step 4.
For each book that quotes every outcome, we turn its prices into implied probabilities and scale them back to exactly 100%. There are two ways to do the scaling; you can pick either in your settings.
Raises every implied probability to the same power k, choosing k so they add up to 100%. This takes relatively more of the margin off long shots, which is where books tend to hide it.
find k so that Σ p_i^k = 1, then fair p_i = p_i^kDivides each implied probability by the total, so every outcome loses the same share. Simpler, but it tends to overstate long shots.
fair p_i = p_i ÷ (p_1 + p_2 + …)Example: A +300 / -400 market implies 25% + 80% = 105%. Multiplicative gives 23.8% / 76.2%. Power gives 21.8% / 78.2%. On an even -110 / -110 market both give 50% / 50%.
Your reference method decides which books' no-vig prices make up the fair probability. It works the same way for 2-way and 3-way markets.
The plain average of every book's no-vig probability. Leave-one-out: when we price a bet at a book, that book's own prices are left out of the average as long as at least two other books remain. A book's price is never used to confirm itself.
Pinnacle's own no-vig price is the fair probability. When Pinnacle doesn't quote the market, we fall back to leave-one-out consensus and label the bet "Pinnacle fallback".
A weighted average with the same leave-one-out rule. You can set each book's weight from 0.5 to 3.0. Sharp books you haven't weighted start at a suggested weight: Pinnacle 2.5, Betfair 2.0, Matchbook 1.8. Every other book starts at 1.0.
If a de-vigged probability comes out above 95%, or more than 1.15× what the same books' own prices imply, we treat the other side's data as bad and use the fallback in Step 4 instead.
Both fallbacks start from the market average: the implied probability of every book's price, with the highest and lowest dropped when there are three or more. Using the average rather than the best price avoids judging an outlier by itself.
Used only when no book quotes any other outcome: scorer props, yes-only ladders, or a moneyline with a single side listed. We divide the market average by an estimated "total market factor":
fair probability = market average ÷ total market factorThese factors are estimates, not yet calibrated against results, so treat these bets with more caution than a true de-vig.
If both sides are listed but no book quotes both (or the sanity check failed), we use the market average with the vig left in. The one-sided factor would remove roughly twice the vig from a two-sided market, so we don't apply it. Keeping the vig understates the fair probability, which makes these EVs conservative, but the estimate is still rough.
EV is the main number: it drives the default sort, the Min EV filter and the value tiers.
EV = p × (d − 1) − (1 − p) = p × d − 1p = fair probabilityd = decimal odds of the price you'd bet (+120 is 2.20)The value bets list hides bets under 1% EV by default. 3% and up is high value, 5% and up is very high value (🔥).
Example: +120 with a fair probability of 47%: EV = 0.47 × 2.20 − 1 = +3.4%.
On a whole-number line (a -3 spread, a total of 44, 5 receptions) the bet can push and refund your stake. Books' prices don't tell us how likely a push is, so our fair probability is the chance of winning given the bet doesn't push, and we label EV on these lines "EV excl. push". The real EV per dollar staked is a little closer to zero, because pushes return your stake with no profit or loss.
A secondary column. It is the gap between the fair probability and the probability implied by the price you'd bet, in probability points:
edge = fair probability − implied probabilityExample: +120 implies 45.45%. With a fair probability of 47%, the edge is +1.5 pts (and EV is +3.4%).
Edge is shown in "pts", never "%", because it's a difference between two probabilities, not a return. Two bets with the same edge can have very different EV, which is why we rank by EV.
The price the bet would have with zero vig, from the fair probability alone:
fair decimal = 1 ÷ fair probabilitythen converted to American odds
A book that stopped updating can leave an old price up after the market has moved. That price looks like great value and isn't. So we drop any quote that was too old when we fetched it:
A stale quote can neither be the best price nor feed the fair price. Age is measured from the book's last update to when we fetched the odds, so check the "updated" time on the page too. In-play games are off by default on the board.
Prediction-market exchanges quote a contract price and charge a separate taker fee, so their prices are only comparable with a sportsbook's once the fee is added:
cost = price + rate × price × (1 − price)Value bets carry a badge saying how their fair probability was found. Hover it to see which normalization (power or multiplicative) was used:
No-vig consensus devig_two_way
Average no-vig price across the other books quoting both sides.
No-vig (3-way) devig_three_way
Average no-vig price across books quoting all three outcomes (win, draw, win).
Pinnacle reference devig_pinnacle
Pinnacle's own no-vig price. Premium setting.
Pinnacle fallback devig_pinnacle_fallback
You chose Pinnacle, but Pinnacle doesn't quote this market, so we used consensus.
Weighted consensus devig_weighted
No-vig consensus with sharper books weighted higher. Premium setting.
Adjusted estimate overround_adjusted_fallback
One-sided market: market average with an estimated margin removed.
Lower confidence vigged_fallback
Two-sided market with no usable pairs: market average with the vig left in.
Pick 6 legs with no matching sportsbook line have no fair price at all; they're counted as indicative only and never scored.
Using vigged probabilities, stale prices or books you can't bet makes bad bets look good.
Our system avoids that by: