Fair prices for +EV

Sharp odds API

Sharp books are the market's best estimate of the true probability. PinnFeed streams Pinnacle prices with the margin already removed, so every outcome arrives with its fair probability and fair decimal price.

01Fair prices for +EV

Margin removal included

Each market carries its overround (margin) and, per outcome, fairProb and fair — computed with the multiplicative method on the raw Pinnacle price.

02Fair prices for +EV

Find +EV in one comparison

Compare a soft bookmaker's price against our fair decimal: if theirs is higher, the bet has positive expected value against the sharp line. Our docs include a 10-line example.

03Fair prices for +EV

Max stake as a signal

Every market includes Pinnacle's maximum stake. Higher limits mean more confidence in the line — useful for weighting signals.

04Fair prices for +EV

Close the loop with CLV

Builder and above store the closing price of every market so you can measure closing-line value on every bet you place.

# pip install websockets
import asyncio, json, os, websockets

async def main():
    url = "wss://pinnfeed.io/v1/stream"
    async with websockets.connect(url, additional_headers={"x-api-key": os.environ["PINNSOCKET_KEY"]}) as ws:
        await ws.send(json.dumps({"type": "subscribe", "sports": ["soccer"], "live": True}))
        async for raw in ws:
            msg = json.loads(raw)
            if msg["type"] == "ping": await ws.send('{"type":"pong"}')
            elif msg["type"] == "delta":
                for c in msg["changes"]:
                    if c["kind"] == "market" and c["op"] == "upsert":
                        m = c["market"]; print(m["key"], [(o["name"], o["decimal"], o["fair"]) for o in m["outcomes"]])

asyncio.run(main())
{
  "type": "delta", "seq": 48213, "ts": 1762679412093,
  "changes": [{
    "kind": "market", "op": "upsert",
    "market": {
      "id": "1640278226:s;0;m", "eventId": 1640278226,
      "type": "moneyline", "period": 0, "main": true, "live": true,
      "margin": 0.0357, "maxStake": 1500,
      "outcomes": [
        { "name": "home", "american": -128, "decimal": 1.781, "fair": 1.845, "fairProb": 0.5421 },
        { "name": "draw", "american": 262,  "decimal": 3.62,  "fair": 3.750, "fairProb": 0.2667 },
        { "name": "away", "american": 405,  "decimal": 5.05,  "fair": 5.230, "fairProb": 0.1912 }
      ]
    }
  }]
}
FAQ

Sharp odds API: common questions

Which de-vig method do you use?

Multiplicative (proportional) normalization. The raw prices are included so you can apply power, Shin or additive methods yourself.

Are props included?

Yes, player props and futures are available on Builder and above.

Try it free today.

Delayed REST data free forever. Real-time WebSocket from $29/mo.