Odds API for Arbitrage Betting
An arbitrage betting API that returns every book's price per market through byBookmaker, so you can scan every sportsbook and alt line for arbs and middles.
- 1Pull every book in one call
Request an event with odds and read each market's byBookmaker map, where every book's odds, line, and available flag arrive pre-collated across main lines and alternates.
- 2Compute total implied probability under 100%
Take the best price per outcome across books, convert to decimal, and sum the inverses; a sum below 1.0 is an arbitrage, with margin (1 / sum) - 1 and stakes split by each outcome's implied probability.
- 3Where alt lines create middles, and why speed wins
Compare alternate spreads and totals across books for gaps where both sides can win (for example, one book at -5.5 and another at +6.5), and act fast, since these windows close in seconds.
An arbitrage betting API is a data feed that returns every bookmaker's price for the same market in one response, so your software can scan for outcomes whose combined implied probability falls below 100%. That sub-100% gap is the locked-in margin you're hunting for. SportsGameOdds is built for it: 85+ books, exchanges, and prediction markets priced side by side under a single byBookmaker object, including the alternate lines where most arbs and middles hide.
Why use SportsGameOdds for arbitrage
- One call returns every book's price. The
byBookmakerobject stacks 85+ sportsbooks, exchanges, and prediction markets against the same market, so a single request hands you the full price ladder to scan. You never poll each book or stitch separate feeds together. - Sharp anchors ship in the feed. Pinnacle and Circa sit next to DraftKings, FanDuel, BetMGM, Bet365, and Caesars, plus Kalshi and Polymarket prediction markets and DFS books like PrizePicks and Underdog. The sharp prices anchor your fair value, and the softer books are usually where the gap opens up.
- Alt lines are first-class. Most real arbs, and nearly every middle, live on alternate spreads and totals rather than the headline line. Those alternates come through the same
byBookmakerstructure on player and team props too, so your scanner picks them up automatically rather than missing the one edge that was actually on the board. - A fair line is already computed. Each market ships
fairOdds(no-vig consensus) andbookOdds(consensus with vig), so you can rank true edge and discard stale prices without building your own baseline first. - Deeplinks and settlement are bundled. Each priced outcome can carry a click-to-bet deeplink straight to the book's bet slip, and the
scorefield grades the bet at every tier. The same feed that surfaces the arb helps you place it and confirm how it settled.
How an arbitrage finder works with our data
With arbitrage, the math is the easy part. The hard part is having every book's price for the same market, at the same instant, in one place. Scrape books one at a time and your prices are minutes stale before you can even compare them. Pull the event once from our feed and the comparison is already assembled.
Pull every book in one call
Request an event with odds and each market arrives already collated. A market is identified by its betTypeID, sideID, and periodID. Inside that market's byBookmaker map, every sportsbook's entry sits next to the others, keyed by bookmaker, carrying its odds, the line in spread or overUnder, and an available flag. You aren't merging feeds. You're reading one object that already holds the whole price ladder, main lines and alternates alike.
Compute total implied probability under 100%
For each outcome, take the best available price across books and convert it to decimal. Sum the inverse of those decimals, and that sum is the total implied probability. A normal market sums to more than 100% because of the vig. An arbitrage exists only when the best cross-book prices push that sum below 1.0. Your margin is (1 / sum) - 1, and you split stakes proportional to (1 / decimalOdds) / sum so every outcome returns the same profit. So if over @ 2.05 at one book and under @ 2.00 at another imply 48.78% + 50.00% = 98.78%, you've locked a margin of about 1.23%.
Where alt lines create middles, and why speed wins
A middle is the upside case: book A posts Home -5.5 while book B posts Away +6.5, and if the favorite wins by exactly 6 you cash both sides. Those gaps only show up when you can see alternate lines across books at the same time, which is what byBookmaker gives you. The catch is decay, since these windows close in seconds. Free Amateur updates roughly every 10 minutes, Pro tightens to sub-minute, and WebSocket streaming on All-Star pushes line changes the moment they move, so your scanner reacts instead of polling a stale snapshot.
Example request
One call fetches every upcoming event with its full cross-book price ladder:
curl "https://api.sportsgameodds.com/v2/events?leagueID=NBA&finalized=false&oddsAvailable=true" \
-H "x-api-key: YOUR_API_KEY"
The same market comes back priced by every book under byBookmaker, with fairOdds and bookOdds already computed (trimmed):
{
"odds": {
"points-all-game-ou-over": {
"oddID": "points-all-game-ou-over",
"betTypeID": "ou",
"sideID": "over",
"fairOdds": "-108",
"bookOdds": "-112",
"byBookmaker": {
"pinnacle": { "odds": "-105", "overUnder": "224.5", "available": true },
"draftkings": { "odds": "+100", "overUnder": "224.5", "available": true },
"fanduel": { "odds": "-102", "overUnder": "225.5", "available": true },
"betmgm": { "odds": "-110", "overUnder": "224.5", "available": true }
}
}
}
}
Pair the over above with the best under price across books, sum the implied probabilities, and you have your scan. For the full stake-sizing and middle-detection logic, see the arbitrage calculator example, or browse the docs to wire it into your stack.
SportsGameOdds vs scraping books yourself
| Capability | SportsGameOdds | Scrape each sportsbook yourself |
|---|---|---|
| One-call multi-book coverage | 85+ books in a single byBookmaker response | A separate scraper per book, merged by hand |
| Alt lines | Included for spreads, totals, and props | Often gated behind extra requests or rendered JS |
| Latency / streaming | Sub-minute (Pro), WebSocket push (All-Star) | Throttled by each site's rate limits |
| Deeplinks to place the bet | Click-to-bet links on supported books | Build and maintain per book |
| Settlement / scores | score plus per-bet grading at every tier | Source and reconcile separately |
| Maintenance / anti-bot burden | We absorb layout changes and blocking | Breaks on every redesign or IP block |
Frequently asked questions
Related use cases
- Odds API for Positive EV Betting: rank long-run value with
fairOddswhen a clean arb isn't on the board. - Odds Comparison & Line Shopping API: the same
byBookmakerladder, framed for best-price shopping. - Sports Odds API for Betting Apps: ship odds, deeplinks, and settlement into a consumer product.
- Odds API for Prediction Market Arbitrage: extend the same scan to Kalshi and Polymarket against sportsbooks.
- The Odds API comparison: how our coverage, pricing, and streaming stack up.
- Pricing: per-event-object plans, including a free Amateur tier with no card.
Build your arbitrage finder
Free plan available. 2,500 objects/month. No credit card required.