Skip to the guide

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.

Results always include fair decimal odds and probabilities.

Use the third input for a three-way market such as football 1X2. Do not mix bookmakers, periods or lines.

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 is not realized hold.

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

MethodOutcome 1Outcome 2
Multiplicative1.6082.645
Additive1.5962.677
Power1.5902.694
Shin1.5962.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.

MethodOutcome 1Outcome 2Outcome 3
Multiplicative2.2933.4943.603
Additive2.2443.5473.670
Power2.2433.5493.670
Shin2.2573.5333.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.

  • 1
    Same bookmaker and timestamp

    Do not combine one current price with an opposing side captured five minutes earlier.

  • 2
    Same event and period

    Full-game odds cannot complete a first-half market.

  • 3
    Same 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.

  • 4
    Same 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.

  • 5
    Every 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.

remove_vig.pyPython
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.

request.shShell
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.

  1. ValidateMatch event, market, period, player and exact line.
  2. De-vigRemove margin inside each complete bookmaker market.
  3. FilterReject stale, suspended, incomplete and extreme inputs.
  4. WeightCombine comparable probabilities using declared rules.
  5. 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.

Continue with the full sports betting model guide.

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.
A snapshot is an example, not an average.

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.