On the wire · 04:34:49 UTC Live 547 · Prematch 14,368 · Markets 56,929 Vol. I · No. 5 · Friday 13 November 2026 wss://pinnfeed.io/v1/stream
PinnFeed
Answer · Spreadsheet · Fair odds

No-vig calculator in Excel or Google Sheets

Updated · PinnFeed · 2 min read

Answer: to remove the margin proportionally, turn each decimal price into an implied probability (=1/B2), divide each by the sum of all implied probabilities in that market, and invert to get the fair price. In a sheet with prices in B2:B4 (1X2) the fair probability of row 2 is =(1/B2)/SUMPRODUCT(1/$B$2:$B$4) and the fair price is =1/C2. PinnFeed already returns fair, fairProb and margin on every outcome, computed exactly this way, so you can also skip the formulas.

Formulas#

CellFormulaMeaning
B2:B4prices, e.g. 2.10 / 3.45 / 3.60decimal odds of one market
D2=SUMPRODUCT(1/B2:B4)-1margin (overround), e.g. 0.0438 = 4.38% for the prices above
C2=(1/B2)/(1+$D$2)fair probability
E2=1/C2fair (no-vig) decimal price

Two-way markets (over/under, moneyline without draw) use the same formulas over two rows. This is the proportional method; other methods (power, Shin) give slightly different numbers for longshots. To check one market without a spreadsheet, use the in-browser no-vig calculator.

Pull live Pinnacle prices into the sheet#

Google Sheets (Apps Script, key kept in Script properties as PINNFEED_KEY):

function pinnacleFair() {
  const key = PropertiesService.getScriptProperties().getProperty('PINNFEED_KEY'); // ps_live_...
  const url = 'https://pinnfeed.io/v1/odds?sport=soccer&market=moneyline&main=true&limit=20';
  const data = JSON.parse(UrlFetchApp.fetch(url, { headers: { 'x-api-key': key } }).getContentText());
  const rows = [['Event', 'Outcome', 'Price', 'Fair', 'FairProb', 'Margin', 'MaxStake']];
  data.events.forEach(e => e.markets.forEach(m => m.outcomes.forEach(o =>
    rows.push([e.home + ' v ' + e.away, o.name, o.decimal, o.fair, o.fairProb, m.margin, m.maxStake]))));
  const sh = SpreadsheetApp.getActive().getSheetByName('Pinnacle') || SpreadsheetApp.getActive().insertSheet('Pinnacle');
  sh.clearContents().getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}

Run it from a time-driven trigger: Sheets refresh trigger. Do not put the key in an IMPORTDATA cell; anyone with view access can read it (why). Excel: Power Query.

Compare a price you were offered#

With your book's price in F2 and the fair probability in C2, expected value per unit is =F2*C2-1. A positive number means the offered price is above Pinnacle's no-vig price; it is an estimate, not a promise. Sizing: Kelly with fair odds.

Plans#

fair, fairProb and margin are on every plan. Free is 30 s delayed (2 sports, 1,000 requests/day); Hobby (€29/mo) is real-time REST; Builder (€99/mo) adds WebSocket push. 3-day trial; a card is required and it is charged after day 3 unless you cancel.

Educational content for adults (18+). No tips, no guaranteed profit.

Related: Pinnacle margin calculator.

Questions people ask#

Why use Pinnacle prices for no-vig?#

Pinnacle's low margins make its no-vig line a common reference. It is still an estimate of the true probability.

Does the formula work for 3-way markets?#

Yes. Sum the implied probabilities of all three outcomes, as in the table.

Can I get fair odds without any formula?#

Yes. Each PinnFeed outcome has fair and fairProb: no-vig fair odds API.

The WebSocket plan: Builder, €99/mo.

Real-time Pinnacle odds pushed over one WebSocket, all 13 sports, every market, no-vig fair odds and closing lines. 3 days free, cancel in one click.

Form K-1 · Free API key

Get your free API key.

One field. No password, no card: enter your email, click the link we send, and your key is on screen.

By continuing you agree to the Terms and Privacy Policy.

One free key per email. Link valid for 20 minutes.