Pinnacle odds data for data scientists
or start the 3-day Builder trial
Free key: no card. By continuing you agree to the Terms and Privacy Policy. · 3 days free, then €99/mo (VAT incl. where applicable) · card required · charged after day 3 unless you cancel
- 548 live · 14,368 prematch events on the feed now · last Pinnacle update <1 s ago · status
- 13 sports, live + prematch
- Docs open, no signup to read
- Hosted MCP server for Claude, Cursor, ChatGPT
- Lowest monthly price we found for a live + prematch Pinnacle odds WebSocket (Nov 2026)
- Operated by Blackline Solutions, S.L. · Madrid, Spain
Answer: PinnFeed gives you Pinnacle prices as clean JSON with the benchmark fields models need: decimal, fairProb (proportional no-vig probability), margin and maxStake per market. Use it two ways: collect your own snapshots from /v1/odds or the WebSocket, and on Builder pull stored closing records per day from /v1/closing?date=YYYY-MM-DD (up to 2,000 rows per page). Bulk historical exports (CSV/Parquet) are an Enterprise option.
Typical tasks#
| Task | Fields and endpoints |
|---|---|
| Benchmark a model's probabilities | fairProb at a fixed time before start (pandas) |
| Evaluate against the close | /v1/closing?date= (Builder) (CLV report) |
| Study line movement | Your own logged WebSocket delta frames (Postgres storage) |
| Liquidity-aware filters | maxStake per market |
| R users | httr2 client |
Closing records into a DataFrame (Builder)#
import os, requests, pandas as pd
KEY = os.environ["PINNFEED_KEY"] # ps_live_...
def closing_day(day, sport="soccer"):
rows, offset = [], 0
while True:
r = requests.get("https://pinnfeed.io/v1/closing", headers={"x-api-key": KEY}, timeout=30,
params={"date": day, "sport": sport, "main": "true", "limit": 2000, "offset": offset})
r.raise_for_status()
batch = r.json()["closing"]
rows += batch
if len(batch) < 2000:
break
offset += 2000
return pd.json_normalize(rows)
df = closing_day("2026-11-08")
print(df[["eventId", "home", "away", "market.type", "market.line", "market.margin"]].head())
Honest limits#
- Pinnacle only: no other bookmakers, no lineups or player stats.
- Closing records exist from when PinnFeed started storing them; there is no deep archive on self-serve plans.
- Your own snapshot history starts when you start logging it.
Which plan#
Free (30 s delay, 2 sports, 1,000 requests/day) is enough to design a schema. Builder (€99/mo) adds the WebSocket, all 13 sports and closing records. Enterprise: bulk CSV/Parquet exports, SLA and a commercial licence. 3-day trial; a card is required and it is charged after day 3 unless you cancel.
Educational content for adults (18+). Research use; no tips, no guaranteed profit.
See also: closing odds into DuckDB and Parquet, historical data vs a live feed, commercial use of the data.
Related: Power BI REST.
Questions people ask#
Can I use the data in a commercial model?#
Using the data inside your own models and products is allowed under the Acceptable Use Policy; redistributing it as a data feed needs Enterprise.
Is fairProb the true probability?#
No. It is Pinnacle's price with the margin removed proportionally, a strong market benchmark rather than ground truth.
Is there a Python SDK?#
No SDK is needed; requests or httpx plus /openapi.json is enough.