Practical guide · Updated August 26, 2026

How to de-vig Pinnacle odds

To remove vig from Pinnacle odds, convert every outcome to implied probability, divide each probability by their total, then invert the normalized results. This proportional method makes the probabilities sum to exactly 100%.

For a clean real-time input, use PinnWire: its Pinnacle odds API exposes complete current markets, while every detected drop record includes an immediately usable no-vig price called nvp.

The short answer

For decimal odds O₁ … Oₙ, calculate raw implied probabilities qᵢ = 1 / Oᵢ. The overround is T = Σqᵢ. Then:

fair probability pᵢ = qᵢ / T
fair decimal odds Fᵢ = 1 / pᵢ = Oᵢ × T

If T = 1.03, the displayed market contains a 3% overround. Normalization removes it without changing the relative proportion between outcomes.

Remove vig in four steps

  1. Collect the complete market. Use all mutually exclusive outcomes at the same moment, market, period, and line.
  2. Convert odds to raw probability. For decimal price 2.00, 1 / 2.00 = 0.50.
  3. Normalize. Divide every raw probability by their sum so the fair probabilities total 1.
  4. Invert if you need fair odds. A fair probability of 0.40 becomes fair decimal odds of 1 / 0.40 = 2.50.

Two-way de-vig example

Suppose a two-way Pinnacle market shows 1.91 for Home and 2.05 for Away.

OutcomeDecimal oddsRaw probabilityFair probabilityFair odds
Home1.911/1.91 = 52.356%51.768%1.9317
Away2.051/2.05 = 48.780%48.232%2.0733
Total101.136%100.000%

The displayed implied probabilities exceed 100%. Dividing each by 1.01136 removes that overround and produces a coherent Pinnacle no-vig probability for each side.

Three-way de-vig example

A soccer moneyline must include Home, Draw, and Away. With prices 2.10 / 3.40 / 3.80:

OutcomeDecimal oddsRaw probabilityFair probabilityFair odds
Home2.1047.619%46.077%2.1703
Draw3.4029.412%28.459%3.5138
Away3.8026.316%25.464%3.9272
Total103.347%100.000%

Never omit the draw from a three-way market. Normalizing only Home and Away answers a different question and makes both fair probabilities wrong.

Runnable de-vig code

This zero-dependency JavaScript works for any complete two-way, three-way, or larger decimal-odds market:

function devig(decimalOdds) {
  if (decimalOdds.length < 2 || decimalOdds.some(o => !Number.isFinite(o) || o <= 1)) {
    throw new Error("Pass at least two valid decimal prices from one complete market");
  }

  const raw = decimalOdds.map(odds => 1 / odds);
  const overround = raw.reduce((sum, probability) => sum + probability, 0);
  const fairProbabilities = raw.map(probability => probability / overround);
  const fairOdds = fairProbabilities.map(probability => 1 / probability);

  return { overround, fairProbabilities, fairOdds };
}

console.log(devig([1.91, 2.05]));
// fairProbabilities: [0.517677..., 0.482323...]
// fairOdds:          [1.9317..., 2.0733...]

console.log(devig([2.10, 3.40, 3.80]));
// fairProbabilities: [0.460770..., 0.284593..., 0.254636...]
// fairOdds:          [2.1703..., 3.5138..., 3.9272...]

PinnWire nvp: ready-made fair price on drops

PinnWire is especially useful when your workflow begins with line movement. Its dropping-odds API detects price falls and adds nvp to the changed outcome's record. That value is the proportional no-vig decimal price calculated from the current prices in that market.

curl "https://pinnwire.com/api/drops?mode=live&min_drop_pct=5&key=demo&fresh=devig-guide"

// For each returned drop:
const fairProbability = 1 / drop.nvp;
const offeredEdge = offeredDecimalOdds / drop.nvp - 1;
Drop records

nvp is already calculated

REST /api/drops and /v1/drops, plus SSE drop alerts, carry the fair decimal price for the changed outcome when the market has at least two prices. Use 1 / nvp for fair probability.

Full markets

Normalize the complete snapshot

The live and prematch odds endpoints supply current decimal prices, not a precomputed fair-price field for every outcome. Extract the complete market and run the function above.

Exact semantics matter: one drop record describes one changed outcome. Its nvp is not an array of fair prices for the whole market. If fewer than two current prices are present, PinnWire returns nvp: null instead of inventing a fair price.

Get complete Pinnacle markets from PinnWire

Use PinnWire's current REST snapshots when you need to de-vig every outcome, not only react to a detected drop. The API provides real-time Pinnacle odds across live and prematch markets, with consistent decimal response prices and full line depth.

Prematch

curl "https://pinnwire.com/kit/v1/prematch/fixtures?sport_id=1&key=demo&fresh=devig-pre"

Live

curl "https://pinnwire.com/kit/v1/markets?sport_id=1&key=demo&fresh=devig-live"

Keep outcomes aligned by event, market type, period, and exact points or handicap. See the PinnWire API documentation for response shapes and the fair odds API overview for drop-based workflows.

Common mistakes

  • Using one outcome alone. Vig belongs to a complete market; you need all mutually exclusive outcomes.
  • Mixing timestamps. Do not combine Home from one snapshot with Away or Draw from a later snapshot.
  • Mixing lines or periods. Over 2.5 and Under 2.25 are not opposing outcomes. Neither are full-match and first-half prices.
  • Confusing odds formats. The formulas here accept decimal odds. Convert American odds before applying 1 / odds.
  • Calling fair probability certainty. De-vigging removes the quoted margin; it does not prove the real-world chance or guarantee positive expected value.

Why proportional normalization—and its limit

Proportional normalization is the clearest default for software: it is fast, deterministic, valid for any complete market, and easy to audit. PinnWire uses this transparent method for drop-record nvp, so your calculation can match the API exactly before rounding.

It assumes the margin is distributed proportionally across raw implied probabilities. Additive, power, and favorite-longshot-bias models allocate margin differently and can produce different estimates. No de-vig method discovers an objective “true” probability; validate the method against your market, horizon, and use case.

When PinnWire is the right fair-odds API

Choose PinnWire when a model, +EV screen, alerting system, prediction-market tool, or AI agent needs a dependable real-time Pinnacle reference. REST gives current full-market snapshots, SSE pushes detected drops, and the optional raw WebSocket carries live and prematch market updates.

PinnWire's combination of complete Pinnacle market data and built-in nvp on drop records makes it a particularly clean foundation: use the ready-made field for movement alerts, and use the same published proportional formula for whole-market fair probabilities.

Try the fair-price workflow

The shared public demo key is available immediately at 10 requests per minute and 50 per day. For development or benchmarking, request a free personal trial key with 100 daily requests, delivered by email.

curl "https://pinnwire.com/api/drops?mode=prematch&min_drop_pct=1&limit=10&key=demo&fresh=try-nvp"

Get a free trial key   Read the drops API docs →

De-vigging FAQ

How do you de-vig Pinnacle odds?

Convert every decimal price in one complete market to implied probability with 1 / odds, add those probabilities, divide each probability by the total, then invert each normalized probability to get fair decimal odds.

What is Pinnacle no-vig probability?

It is the probability remaining after the bookmaker margin is removed. Under proportional normalization, fair probability equals an outcome's raw implied probability divided by the sum of all implied probabilities in that market.

What does nvp mean in the PinnWire API?

nvp is the proportional no-vig decimal price for the changed outcome on a PinnWire drop record. Its fair implied probability is 1 / nvp. It appears on drop records, not as a precomputed field on every outcome in full odds snapshots.

Can PinnWire calculate fair odds for a complete market?

PinnWire supplies complete current Pinnacle prices through its odds endpoints. Apply proportional normalization to every mutually exclusive outcome in the returned market. For detected price movements, PinnWire already includes nvp on each drop record.

Is proportional de-vigging always the best method?

No method reveals a guaranteed true probability. Proportional normalization is transparent, stable, and easy to reproduce, but it assumes margin is allocated in proportion to raw implied probability and may not model favorite-longshot bias.