Oddspedia API Alternative: Raw JSON Odds from 350+ Books (Free Tier)
Hunting for an Oddspedia API? Here is the thing most developers find out only after signing up: Oddspedia is built for publishers, not developers. Their product is a set of free, embeddable odds-comparison widgets, drop-in HTML blocks you paste onto a content site, plus a publisher-oriented data feed behind a dashboard login. It is a brand-awareness and affiliate play, and it is genuinely good at that job.
But if you want raw odds in JSON, the prices to feed a bot, a model, a line-shopping tool, or your own app, a widget is the wrong shape. This guide shows the honest difference between Oddspedia’s widget feed and a developer-first odds API, then pulls real MLB prices across 15 bookmakers with a free OddsPapi key in about ten lines of Python.
Oddspedia vs OddsPapi: Widgets vs a Real API
Let us be fair to Oddspedia. Per their own site, “Oddspedia Widgets and API Data feeds are 100% free, no hidden fees,” and the widgets “cover more than 30 sports and more than 8000 competitions.” They update worldwide coverage daily and share it with publishers via widgets and a raw data feed. If you run a betting-content or affiliate site and want a polished, customizable odds table on the page in five minutes, that is exactly what Oddspedia is for.
The catch for developers: the widgets are display objects, HTML/JS you embed, and the data feed sits behind a registered-publisher dashboard (widgets.oddspedia.com/dashboard). It is designed for putting odds on a page, not for querying prices programmatically and doing math on them. There is no self-serve developer REST key that returns clean JSON for any fixture.
| Oddspedia | OddsPapi | |
|---|---|---|
| Primary product | Embeddable odds widgets | Raw JSON odds API |
| Built for | Publishers & affiliates | Developers, modelers, bettors |
| Output | HTML/JS widget on your page | JSON you parse and compute on |
| Access | Publisher dashboard login | Self-serve API key, query param |
| Price | Free | Free tier |
| Coverage | 30+ sports, 8000+ competitions | 69 sports, 372 bookmakers |
| Sharps & exchanges | Comparison display | Pinnacle, Betfair, Polymarket, Kalshi in JSON |
| Historical odds | Not a developer feed | Free on every fixture |
| Real-time | Daily-updated display | REST + WebSocket push |
The Pivot: A Widget Cannot Run Your Logic
You cannot write if best_price > pinnacle_fair: alert() against an HTML widget. The moment you want to do anything with odds, compare books, remove the vig, find the best line, detect movement, backtest a model, you need the numbers as data, not as a rendered table. Tools like jedibets (a player-props odds screener with Discord alerts) exist precisely because punters want odds turned into actionable signals, not just a pretty grid.
So let us get the raw numbers. Same odds-comparison idea Oddspedia renders visually, but as JSON you control. (If you want the full grid version, see our odds comparison API guide; for the screener landscape, the Oddschecker API alternative covers the same publisher-vs-developer split.)
Tutorial: Raw Odds Comparison in Python
Step 1: Authenticate
Grab a free key. The one gotcha: the API key is a query parameter, not a header.
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.oddspapi.io/v4"
r = requests.get(f"{BASE_URL}/sports", params={"apiKey": API_KEY})
print(r.status_code) # 200
Step 2: Find a Fixture
Discover fixtures for a sport over a date window (max 10 days), keeping only those with odds attached. MLB is sportId=13.
from datetime import date, timedelta
today = date.today()
params = {
"apiKey": API_KEY,
"sportId": 13, # MLB
"from": today.isoformat(),
"to": (today + timedelta(days=2)).isoformat(),
}
fixtures = requests.get(f"{BASE_URL}/fixtures", params=params).json()
games = [f for f in fixtures if f.get("hasOdds")]
for f in games[:5]:
print(f["participant1Name"], "vs", f["participant2Name"], "|", f["fixtureId"])
Our worked example: Philadelphia Phillies vs New York Mets (fixtureId id1300010963301993).
Step 3: Pull Every Book’s Price
Hit /odds and walk the nested structure: bookmakerOdds -> {slug} -> markets -> {marketId} -> outcomes -> {outcomeId} -> players["0"] -> price. The MLB moneyline (“Winner incl. extra innings”) is market 131, with outcomes 131 (home) and 132 (away). Always check active before trusting a price.
fid = "id1300010963301993"
books = requests.get(f"{BASE_URL}/odds",
params={"apiKey": API_KEY, "fixtureId": fid}).json()["bookmakerOdds"]
def moneyline(slug):
outs = books.get(slug, {}).get("markets", {}).get("131", {}).get("outcomes", {})
row = {}
for oid in ("131", "132"):
node = outs.get(oid, {}).get("players", {}).get("0", {})
if node and node.get("active"):
row[oid] = node["price"]
return row
for slug in sorted(books):
p = moneyline(slug)
if p:
print(f"{slug:18} PHI {p.get('131')} NYM {p.get('132')}")
Real output, 11 active books on the moneyline:
| Bookmaker | Phillies | Mets |
|---|---|---|
| pinnacle (sharp) | 1.584 | 2.56 |
| polymarket | 1.587 | 2.632 |
| kalshi | 1.587 | 2.632 |
| fanduel | 1.54 | 2.54 |
| draftkings | 1.53 | 2.53 |
| caesars | 1.526 | 2.58 |
| betmgm | 1.53 | 2.55 |
| hardrockbet | 1.50 | 2.70 |
| pointsbet.com.au | 1.53 | 2.60 |
| williamhill | 1.526 | 2.58 |
Step 4: De-Vig the Sharp and Find the Best Line
This is what a widget cannot do for you. De-vig Pinnacle for a fair-probability anchor, then sweep every book for the best available price on each side.
pin = moneyline("pinnacle") # {'131': 1.584, '132': 2.56}
inv = 1/pin["131"] + 1/pin["132"]
print(f"Pinnacle overround: {(inv-1)*100:.2f}%")
print(f"Fair: PHI {1/(1/pin['131']/inv):.3f} NYM {1/(1/pin['132']/inv):.3f}")
def best(oid):
quotes = [(moneyline(s).get(oid), s) for s in books]
return max((q for q in quotes if q[0]), default=(None, None))
print("Best Phillies:", best("131"))
print("Best Mets:", best("132"))
Result: Pinnacle’s overround is just 2.19% (no-vig fair line PHI 1.619 / NYM 2.616, so the Phillies are a 61.8% favorite). The best available prices were 1.587 on the Phillies (Polymarket and Kalshi) and 2.70 on the Mets (HardRock). That HardRock 2.70 is 6.7% better than DraftKings’ 2.53 on the exact same bet, and it sits above Pinnacle’s de-vigged fair, the best available price here, though as a soft outlier, not a guaranteed edge. You only see that gap when the odds are data you can sort, never from a rendered widget. That sweep is the core of line shopping in Python.
Free Historical Odds for Backtesting
One more thing Oddspedia’s publisher feed is not built for: pulling a fixture’s full price history to backtest. OddsPapi exposes it free on /historical-odds, where players["0"] is a list of timestamped snapshots (note the different shape from the live endpoint, max three bookmakers per call).
h = requests.get(f"{BASE_URL}/historical-odds",
params={"apiKey": API_KEY, "fixtureId": fid,
"bookmakers": "pinnacle,fanduel,draftkings"}).json()
snaps = h["bookmakers"]["pinnacle"]["markets"]["131"]["outcomes"]["131"]["players"]["0"]
for s in snaps[:5]:
print(s["createdAt"], s["price"])
Where Oddspedia Fits
To keep it honest: if you run a betting-affiliate or content site and want free, attractive, daily-updated odds-comparison widgets across 30+ sports with zero backend work, Oddspedia is a great fit and OddsPapi is not trying to be that. Their widgets, broad competition coverage, and publisher-friendly free model are a real strength for the brand-awareness use case.
But if you are a developer building software, an arb scanner, a value model, an odds dashboard, a price-movement alert bot, you need odds as queryable JSON with sharp, exchange, and prediction-market prices and a real-time push channel. That is a different product, and it is the one OddsPapi ships. Weighing several feeds? Our best odds APIs of 2026 buyer’s guide ranks them by use case.
FAQ
Does Oddspedia have a public API?
Oddspedia offers free widgets and a publisher data feed, accessed through a registered dashboard at widgets.oddspedia.com. It is aimed at publishers embedding odds-comparison displays, not at developers who want self-serve raw JSON odds. For a developer-first REST API, OddsPapi returns JSON for any fixture with a free key.
Is Oddspedia free?
Yes. Per Oddspedia, their widgets and API data feeds are “100% free, no hidden fees,” monetized through affiliate partnerships. OddsPapi also offers a free tier with a self-serve key.
What is the difference between an odds widget and an odds API?
A widget is rendered HTML/JS you embed to display odds on a page. An API returns raw odds as JSON you can parse, compare, de-vig, and compute on, which is what you need to build bots, models, or apps.
How many bookmakers can I compare with OddsPapi?
372 bookmakers across 69 sports, including sharps (Pinnacle), exchanges (Betfair), and prediction markets (Polymarket, Kalshi). On this MLB example, 15 books priced the fixture and 11 quoted an active moneyline.
Can I get historical odds for backtesting?
Yes, free. The /historical-odds endpoint returns the full timestamped price history for a fixture (up to three bookmakers per call).
Get Raw Odds, Not Just a Widget
Oddspedia is a solid widget product for publishers. But if you need the numbers, sharp lines, exchange and prediction-market prices, and free history, in JSON you can actually build on, you can have them in the next five minutes. Start with the free odds API guide, then get your free OddsPapi API key and pull your first real odds comparison today.