Every bet you place at worse-than-best odds costs you money. Across 1,000 bets, that compounds to 3–5% annual ROI left on the table. One API call shows you the best line from 50 books for any outcome.
50
Books in one call
3–5%
Annual ROI from line shopping
30s
Refresh cycle
{
"event": "Dodgers vs Yankees",
"market": "h2h",
"bookmakers": [
{"key": "pinnacle", "home": -128, "away": +118},
{"key": "draftkings", "home": -135, "away": +115},
{"key": "fanduel", "home": -130, "away": +112},
{"key": "betmgm", "home": -132, "away": +115},
{"key": "caesars", "home": -125, "away": +110}
],
"best_home": {"book": "caesars", "price": -125},
"best_away": {"book": "pinnacle", "price": +118}
}
Best lines: Betting Dodgers? Caesars -125 saves you 7–10pts vs other books. Betting Yankees? Pinnacle +118 gives you 3–8pts more than US retail books.
Worst Line (FanDuel)
Yankees +110
Implied: 47.6%
Best Line (Pinnacle)
Yankees +118
Implied: 45.9%
Savings Per Bet
1.7%
Pure edge from shopping
Betting Yankees +110 instead of +118 costs you 1.7% per bet in expected value. Over 500 bets/year at $100/bet, that's $850 in lost edge — just from not checking other books. With 50 books in one API call, finding the best line takes milliseconds instead of 10 minutes of tab-switching.
Find the best line in one call.
import requests
response = requests.get(
"https://api.theoddsapi.com/v4/sports/baseball_mlb/odds",
headers={"x-api-key": "YOUR_KEY"},
params={"markets": "h2h"}
)
for event in response.json():
for outcome_idx, outcome_name in enumerate(event["outcomes"]):
prices = [(b["key"], b["markets"][0]["outcomes"][outcome_idx]["price"])
for b in event["bookmakers"]]
best_book, best_price = max(prices, key=lambda x: x[1])
worst_book, worst_price = min(prices, key=lambda x: x[1])
spread = best_price - worst_price
if spread > 5: # Significant disagreement
print(f"{event['event']} — {outcome_name}")
print(f" Best: {best_book} {best_price} | Worst: {worst_book} {worst_price} | Spread: {spread}pt")
const res = await fetch(
"https://api.theoddsapi.com/v4/sports/baseball_mlb/odds?markets=h2h",
{ headers: { "x-api-key": "YOUR_KEY" } }
);
const events = await res.json();
events.forEach(event => {
const prices = event.bookmakers.map(b => ({
book: b.key,
home: b.markets[0].outcomes[0].price,
away: b.markets[0].outcomes[1].price
}));
const bestHome = prices.reduce((a, b) => a.home > b.home ? a : b);
const bestAway = prices.reduce((a, b) => a.away > b.away ? a : b);
console.log(`${event.event}: Home→${bestHome.book} ${bestHome.home} | Away→${bestAway.book} ${bestAway.away}`);
});
DraftKings
US regulated
FanDuel
US regulated
BetMGM
US regulated
Caesars
US regulated
Pinnacle
Sharp (intl)
Betfair
Exchange (intl)
BetRivers
US regulated
Bovada
US offshore
William Hill
UK/Intl
Marathonbet
EU
Unibet
EU
+ 39 more
Global coverage
Free tier includes odds comparison across NBA and MLB. Pro unlocks all 24 sports and 50 books.