What Are No-Vig Odds?
No-vig odds reveal what a fair coin would pay if sportsbooks took no cut. This guide explains the vig, the formula to remove it, why Pinnacle is the reference sharp line, and how to access no-vig odds programmatically for +EV detection.
No-vig odds remove the bookmaker's built-in margin (the "vig" or "juice") from a betting line, leaving only the estimated true probability of each outcome. To calculate them: convert each American price to implied probability, sum the probabilities (which exceed 100% due to the vig), divide each by the total to normalize to 100%, and convert back to American odds. SharpAPI pre-calculates Pinnacle no-vig odds on every line, exposed as no_vig_price in the API response.
1. What Is the Vig?
Every sportsbook builds a margin into its odds — the "vig" (short for vigorish), also called "juice" or "the take."
Example — NFL point spread:
| Outcome | Raw Odds | Implied Probability |
|---|---|---|
| Cowboys -3 | -110 | 52.38% |
| Eagles +3 | -110 | 52.38% |
| Total | 104.76% |
The two sides should sum to 100% (one of them wins). But they sum to 104.76%. The extra 4.76% is the sportsbook's expected profit — the vig. For -110/-110: vig = 1 - (1 / 1.0476) = 4.55% — the book keeps $4.55 per $100 bet on each side in expectation.
2. How to Calculate No-Vig Odds
# Step 1: Convert American odds to implied probability
# Negative (favorite):
implied_prob = abs(odds) / (abs(odds) + 100)
# Positive (underdog):
implied_prob = 100 / (odds + 100)
# Step 2: Sum all implied probabilities
total = prob_A + prob_B
# Step 3: Normalize each probability
no_vig_prob_A = prob_A / total
no_vig_prob_B = prob_B / total
# Step 4: Convert back to American odds
# If no_vig_prob > 0.5 (favorite):
american = -(no_vig_prob / (1 - no_vig_prob)) * 100
# If no_vig_prob < 0.5 (underdog):
american = ((1 - no_vig_prob) / no_vig_prob) * 1003. Worked Example
Given: Lakers -120 / Celtics +100
Implied probabilities
Lakers: 120 / (120 + 100) = 0.5455 (54.55%)
Celtics: 100 / (100 + 100) = 0.500 (50.00%)
Total & vig
Total: 0.5455 + 0.500 = 1.0455
Vig: 4.35%
No-vig probabilities
Lakers: 0.5455 / 1.0455 = 52.18%
Celtics: 0.500 / 1.0455 = 47.82%
No-vig American odds
Lakers: -109.1
Celtics: +91.6
Interpretation: The fair price for the Celtics is +91.6. If you can find them at +100 or better, you have a +EV bet.
4. Why Pinnacle Is the Reference Sharp Line
Not all sportsbooks are equal. Recreational books like DraftKings and FanDuel shade their lines based on public betting tendency — they want balanced action, not accurate prices.
Pinnacle is different
- • Accepts large bets from professional bettors (no limits for winning players)
- • Adjusts lines efficiently when sharp money comes in
- • Has the lowest vig in the market (often -105/-105 vs -110/-110 elsewhere)
- • Widely regarded as the most efficient pricing mechanism in sports betting
Why it matters
Using Pinnacle's lines as the reference for vig removal gives you the most accurate estimate of true probability — not a line shaped by public perception. SharpAPI calculates all no-vig values using Pinnacle's lines. If Pinnacle has Patriots -6 at -108/-112, the resulting no-vig line (~-110/-110) is your most reliable estimate of fair value.
See also: Pinnacle Odds API coverage.
5. Python Code — Calculate No-Vig Odds
def american_to_implied(odds: float) -> float:
if odds < 0:
return abs(odds) / (abs(odds) + 100)
return 100 / (odds + 100)
def implied_to_american(prob: float) -> float:
if prob >= 0.5:
return -(prob / (1 - prob)) * 100
return ((1 - prob) / prob) * 100
def remove_vig(*american_odds: float) -> list[float]:
"""Return no-vig American odds for a market with N outcomes."""
probs = [american_to_implied(o) for o in american_odds]
total = sum(probs)
no_vig_probs = [p / total for p in probs]
return [implied_to_american(p) for p in no_vig_probs]
# Example: -110/-110 (standard spread)
fair_odds = remove_vig(-110, -110)
print(f"No-vig: {fair_odds[0]:.1f} / {fair_odds[1]:.1f}")
# Output: No-vig: -100.0 / -100.0
# Example: Lakers -120 / Celtics +100
fair_odds = remove_vig(-120, 100)
print(f"No-vig: {fair_odds[0]:.1f} / {fair_odds[1]:.1f}")
# Output: No-vig: -109.1 / +91.66. Access No-Vig Odds via SharpAPI
SharpAPI pre-calculates Pinnacle no-vig odds on every line. Hobby plans and above include no_vig_price in the odds response:
from sharpapi import SharpAPI
client = SharpAPI(api_key="YOUR_KEY")
odds = client.odds.list(sport="basketball_nba", markets=["h2h"])
for event in odds.data:
for book in event.bookmakers:
for market in book.markets:
for outcome in market.outcomes:
raw = outcome.price
fair = outcome.no_vig_price # Pinnacle-derived fair value
if fair and raw > fair:
edge = raw - fair
print(f"+EV: {outcome.name} at {book.title}: "
f"raw={raw}, fair={fair:.1f}, edge={edge:.1f}")This is exactly how the EV betting endpoint works under the hood — comparing all book prices to Pinnacle's no-vig line.
7. No-Vig vs CLV vs +EV — Key Concepts
| Term | Definition | Use |
|---|---|---|
| No-vig odds | Market price with margin removed | Measure true probability |
| Pinnacle no-vig | Vig removed from Pinnacle's line | Best reference fair value |
| Closing line value (CLV) | Beat the closing no-vig line or not | Long-term skill benchmark |
| +EV bet | Raw price > no-vig fair value | Profitable bet in expectation |
| Vig / juice | Sportsbook margin | Cost of betting |