How to remove vig from betting odds
Enter every outcome from one sportsbook market. Compare four no-vig methods, inspect the overround and copy the calculation into Python.
No-vig odds calculator
Enter every outcome from the same sportsbook market. The calculator shows the quoted overround, then removes it four different ways.
- Book total
- —
- Overround
- —
- Normalized margin
- —
- Outcomes
- —
| Method | Fair probability | Fair decimal odds |
|---|---|---|
| Enter a complete market and calculate. | ||
A no-vig result is a market-implied estimate. It is not the known probability of the outcome.
The basic no-vig formula
Sportsbook odds contain an implied probability and a margin. Convert every price in the market, add the probabilities, then bring the total back to 100% using a declared method.
raw_probability = 1 / decimal_odds
book_total = sum(raw_probabilities)
overround = book_total - 1
fair_probability = raw_probability / book_total
fair_decimal_odds = 1 / fair_probability
For odds of 1.55 and 2.55, the raw probabilities are 64.516% and 39.216%. They total 103.732%, so the quoted overround is 3.732 percentage points.
Overround comes from a complete set of quoted prices. Hold is the operator’s realized revenue after the actual mix of bets, results, promotions, voids and other adjustments. One cannot be substituted for the other.
Four ways to remove the vig
Every method forces the adjusted probabilities back to 100%. They disagree on where the bookmaker placed the margin.
| Method | Assumption | Useful when | Main limitation |
|---|---|---|---|
| Multiplicative | Margin is removed in proportion to each raw implied probability. | You need a simple, reproducible baseline. | It does not model favourite–longshot bias. |
| Additive | Every outcome loses an equal number of probability points. | You want a transparent correction that moves more margin away from longshots in relative terms. | It can produce zero or negative probabilities in extreme markets. |
| Power | Each raw probability is raised to one fitted exponent. | You need valid probabilities across uneven books and want a smooth non-linear correction. | The fitted exponent is still an assumption, not observed truth. |
| Shin | An iterative market model allocates margin with an insider-trading parameter. | You are testing markets where favourite–longshot effects may matter. | Its theoretical assumptions do not fit every sport or market. |
Which method should you use?
Start with multiplicative when you need a clean baseline. Use another method because it improved out-of-sample calibration for the market you model—not because it creates a larger edge.
Two-way additive and Shin results are equivalent under the standard Shin calculation. Differences become more useful to inspect in uneven and multi-outcome markets.
The methods produce different fair odds
Two-way market: 1.55 / 2.55
| Method | Outcome 1 | Outcome 2 |
|---|---|---|
| Multiplicative | 1.608 | 2.645 |
| Additive | 1.596 | 2.677 |
| Power | 1.590 | 2.694 |
| Shin | 1.596 | 2.677 |
Three-way market: 2.10 / 3.20 / 3.30
The implied probabilities total 109.172%. A three-way book makes the allocation assumption easier to see.
| Method | Outcome 1 | Outcome 2 | Outcome 3 |
|---|---|---|---|
| Multiplicative | 2.293 | 3.494 | 3.603 |
| Additive | 2.244 | 3.547 | 3.670 |
| Power | 2.243 | 3.549 | 3.670 |
| Shin | 2.257 | 3.533 | 3.652 |
The gap is not an error. It measures model risk: each method makes a different claim about how the 9.172-point overround was distributed.
Match the exact market first
The maths is useless when the inputs describe different bets. Require every mutually exclusive outcome from one complete market and match the normalized market, period and line fields.
- 1Same bookmaker and timestamp
Do not combine one current price with an opposing side captured five minutes earlier.
- 2Same event and period
Full-game odds cannot complete a first-half market.
- 3Same market and line
Over 224.5 and under 225.5 are not opposite outcomes. Home −3.5 and away +4 are not a complete spread.
- 4Same player and metric
A player-points over needs the under for the same player, line, period and settlement rule. The NBA player-prop workflow in Python shows the full selection key.
- 5Every possible winner
A football 1X2 market needs home, draw and away. Leaving out the draw does not turn it into a two-way market.
You cannot remove vig from one selection. The missing outcomes still occupy probability space.
Calculate all four methods in Python
The function takes one complete market in decimal odds. It returns fair decimal odds for every valid method and refuses malformed prices.
from math import sqrt
def remove_vig(decimal_odds):
if len(decimal_odds) < 2 or any(o <= 1 for o in decimal_odds):
raise ValueError("Use at least two decimal prices above 1.00")
raw = [1 / o for o in decimal_odds]
book_total = sum(raw)
if book_total <= 1:
raise ValueError("The market has no positive overround to remove")
probabilities = {
"multiplicative": [p / book_total for p in raw],
}
margin_each = (book_total - 1) / len(raw)
additive = [p - margin_each for p in raw]
if all(p > 0 for p in additive):
probabilities["additive"] = additive
def power_total(exponent):
return sum(p ** exponent for p in raw)
low, high = 1.0, 2.0
while power_total(high) > 1:
high *= 2
for _ in range(80):
midpoint = (low + high) / 2
if power_total(midpoint) > 1:
low = midpoint
else:
high = midpoint
probabilities["power"] = [p ** high for p in raw]
def shin_probabilities(z):
return [
(sqrt(z * z + 4 * (1 - z) * p * p / book_total) - z)
/ (2 * (1 - z))
for p in raw
]
low, high = 0.0, 0.999999999
for _ in range(80):
midpoint = (low + high) / 2
if sum(shin_probabilities(midpoint)) > 1:
low = midpoint
else:
high = midpoint
probabilities["shin"] = shin_probabilities((low + high) / 2)
return {
method: [round(1 / p, 3) for p in values]
for method, values in probabilities.items()
}
print(remove_vig([1.55, 2.55]))
Request no-vig fields from the API
For normalized sportsbook data, request the available no-vig fields with the quoted odds. Keep null values as unavailable evidence.
curl --request GET \
--header "X-API-Key: $ODDS_API_KEY" \
"https://api.odds-api.net/v1/events/{event_id}/odds/snapshot?price_fields=odds,novig&include_unavailable=true"
Supported lines can include odds_no_vig, odds_no_vig_multiplicative_method, odds_no_vig_additive_method, odds_no_vig_power_method and odds_no_vig_shin_method. A null means the response did not contain enough comparable evidence for that calculation.
Build a weighted market consensus
Do not average raw sportsbook prices. One bookmaker may quote a 3% overround and another 9%. Averaging them first carries both margins into the model.
- ValidateMatch event, market, period, player and exact line.
- De-vigRemove margin inside each complete bookmaker market.
- FilterReject stale, suspended, incomplete and extreme inputs.
- WeightCombine comparable probabilities using declared rules.
- TestMeasure calibration on later events, not the training sample.
consensus_probability = sum(weight × fair_probability) / sum(weights)
consensus_fair_odds = 1 / consensus_probability
Possible weights include source sharpness, price freshness, liquidity, historical calibration and coverage. Require a minimum source count and cap or reject outliers. Fit those choices on earlier data, then test them on later events.
Keep the de-vig method fixed during a backtest. Switching methods because one creates a better-looking result is another form of overfitting.
Compare bookmaker vig without inventing a leaderboard
A defensible bookmaker comparison needs complete markets captured at the same fixed horizons. A single attractive selection price does not prove that the bookmaker runs a lower-margin book.
First, build an exact bookmaker comparison so each row represents the same bet across sources.
- Choose operators by a dated, cited country-level measure. “Europe” is not one bookmaker market.
- Pre-register the sports, leagues, market types and collection horizons.
- Calculate overround within each bookmaker before comparing operators.
- Separate two-way and three-way markets.
- Report event counts, complete-market counts, medians, distributions and event-level confidence intervals.
Four bookmaker prices from one match can demonstrate the calculation. They cannot support a regional “lowest-vig bookmaker” claim.
No-vig odds questions
How do you remove vig from betting odds?
Convert every outcome in the same market to implied probability, add those probabilities, then apply a named de-vig method. The common multiplicative method divides each implied probability by the market total so the adjusted probabilities sum to 100%.
Can you remove vig from one betting price?
No. One price does not reveal the bookmaker's complete margin. You need every mutually exclusive outcome from the same bookmaker, market, period, line and timestamp.
Which de-vig method is best?
There is no universal winner. Multiplicative is the clearest baseline. Additive, power and Shin make different assumptions about how margin is distributed, especially in uneven or multi-outcome markets. Test the chosen method on the market you model.
Are no-vig odds the true probability?
No. No-vig odds are a fair-price estimate derived from the bookmaker's quoted market. They remove an assumed allocation of margin but do not remove bad information, stale prices or bias.
What is the difference between overround and hold?
Overround is calculated from a complete set of quoted odds at one point in time. Hold is a realized revenue measure affected by the money wagered, results, promotions, voids and other commercial factors. They are not interchangeable.
Does odds-api.net return no-vig odds?
Yes. Supported odds responses can include odds_no_vig plus multiplicative, additive, power and Shin method fields when the required comparable outcomes are available. Request no-vig price fields and treat unavailable values as null.
Use the calculation on real odds
Create a free API key, request the quoted and no-vig fields, then test the exact markets your model uses.
Method and sources
The calculator implements the formulas shown in the copy and was checked against repository test markets on 22 September 2026. Method choice should be validated against the sport and market being modelled.