Vig is the tax on every bet you place. Calculating it takes 30 seconds and tells you exactly how much the sportsbook is charging you. This guide covers the formula, code, and the breakpoints that separate sharp books from overpriced ones.

The Vig Formula

Vig calculation works identically across all odds formats. The core idea: a fair market has outcomes summing to exactly 100% probability. Sportsbooks inflate that total. The amount above 100% is the vig.

Step 1: Convert Odds to Implied Probability

American odds (negative):

Implied Probability = |odds| / (|odds| + 100)

Example: -110 → 110 / 210 = 0.5238 = 52.38%

American odds (positive):

Implied Probability = 100 / (odds + 100)

Example: +120 → 100 / 220 = 0.4545 = 45.45%

Decimal odds:

Implied Probability = 1 / decimal_odds

Example: 1.91 → 1 / 1.91 = 0.5236 = 52.36%

Step 2: Sum All Probabilities

For a two-way market (spread, total, moneyline with two outcomes):

Total = P(Side A) + P(Side B)

Example: -110 / -110 → 52.38% + 52.38% = 104.76%

For a three-way market (soccer moneyline with draw):

Total = P(Home) + P(Draw) + P(Away)

Step 3: Vig = Total - 100%

Vig = 104.76% - 100% = 4.76%

That’s it. The book is charging 4.76% on this market.

Worked Examples

Standard Line: -110 / -110

Side A: 110 / 210 = 52.38%
Side B: 110 / 210 = 52.38%
Total: 104.76%
Vig: 4.76%

This is the default price at most regulated US sportsbooks for spread and total bets.

Reduced Juice: -105 / -105

Side A: 105 / 205 = 51.22%
Side B: 105 / 205 = 51.22%
Total: 102.44%
Vig: 2.44%

BetAnySports and LowVig.ag offer this on standard sides and totals. Half the vig of mainstream books. For a full breakdown, see our guide to reduced juice sportsbooks.

Uneven Moneyline: -140 / +120

Favorite: 140 / 240 = 58.33%
Underdog: 100 / 220 = 45.45%
Total: 103.78%
Vig: 3.78%

Heavy Favorite: -300 / +240

Favorite: 300 / 400 = 75.00%
Underdog: 100 / 340 = 29.41%
Total: 104.41%
Vig: 4.41%

High-Vig Prop: -130 / +100

Favorite: 130 / 230 = 56.52%
Underdog: 100 / 200 = 50.00%
Total: 106.52%
Vig: 6.52%

Player props regularly carry 6-12% vig. This is where books make the most margin.

Calculating No-Vig Fair Odds

To find what the odds should be without the sportsbook’s margin, divide each probability by the total.

For -140 / +120 (total 103.78%):

Fair probability A: 58.33% / 103.78% = 56.21%
Fair probability B: 45.45% / 103.78% = 43.79%
Fair odds A: -(56.21 / (100 - 56.21)) × 100 = -128.3
Fair odds B: ((100 - 43.79) / 43.79) × 100 = +128.3

The fair line is roughly -128 / +128. The book moved it to -140 / +120 to extract 3.78% vig.

Python Code for Betting Agents

AI betting agents calculate vig programmatically across every book before placing a bet. Here’s the core function:

def calculate_vig(odds_a: int, odds_b: int) -> dict:
    """Calculate vig from American odds for a two-way market."""

    def implied_prob(odds: int) -> float:
        if odds < 0:
            return abs(odds) / (abs(odds) + 100)
        else:
            return 100 / (odds + 100)

    prob_a = implied_prob(odds_a)
    prob_b = implied_prob(odds_b)
    total = prob_a + prob_b
    vig = (total - 1) * 100

    # No-vig fair probabilities
    fair_a = prob_a / total
    fair_b = prob_b / total

    return {
        "vig_pct": round(vig, 2),
        "implied_a": round(prob_a * 100, 2),
        "implied_b": round(prob_b * 100, 2),
        "fair_prob_a": round(fair_a * 100, 2),
        "fair_prob_b": round(fair_b * 100, 2),
        "total_implied": round(total * 100, 2),
    }

# Examples
print(calculate_vig(-110, -110))
# {'vig_pct': 4.76, 'implied_a': 52.38, 'implied_b': 52.38, ...}

print(calculate_vig(-105, -105))
# {'vig_pct': 2.44, 'implied_a': 51.22, 'implied_b': 51.22, ...}

print(calculate_vig(-140, 120))
# {'vig_pct': 3.78, 'implied_a': 58.33, 'implied_b': 45.45, ...}

An agent’s line-shopping loop looks like this:

from odds_api import get_odds  # The Odds API client

def find_best_vig(event_id: str, market: str) -> dict:
    """Find the sportsbook with lowest vig for a given market."""
    all_odds = get_odds(event_id, market)
    best = None
    for book, odds in all_odds.items():
        result = calculate_vig(odds["home"], odds["away"])
        if best is None or result["vig_pct"] < best["vig_pct"]:
            best = {**result, "book": book}
    return best

For the full API integration, see our Prediction Market API Reference.

Vig and Break-Even Win Rates

Vig directly determines how often you need to win to break even.

OddsVigBreak-Even Win %
-105 / -1052.44%51.22%
-108 / -1083.70%51.92%
-110 / -1104.76%52.38%
-115 / -1156.52%53.49%
-120 / -1208.33%54.55%

The difference between -105 and -110 seems small — it’s 1.16% on the break-even rate. But over 1,000 bets, that 1.16% is worth roughly 12 extra wins you need to achieve the same result. At $100 per bet, that’s $1,200.

Vig Reference Tiers

Based on the AgentBet Vig Index, sportsbooks fall into clear tiers. For a sport-by-sport breakdown, see best sportsbook odds by sport.

TierVig RangeBooksDescription
Sharp2.0-3.0%Circa, Pinnacle, BetAnySports, LowVig.ag, CRISBest prices. Where sharp bettors and AI agents prioritize.
Competitive3.0-4.5%Heritage, DraftKings, FanDuel, Bet365Good prices on high-volume markets. Acceptable for most bettors.
Standard4.5-5.5%BetMGM, Caesars, BetRivers, ESPN BET, Bovada, BetOnlineAverage prices. Promotions may offset higher vig.
Recreational5.5%+MyBookie, Fanatics, small regionalsPoor prices. Only use for specific promos or props unavailable elsewhere.

What’s Next