Odds Comparison & Line Shopping API

Compare sportsbook odds with one API call. SportsGameOdds returns every book's price under byBookmaker, a consensus line, and click-to-bet deeplinks.

Updated June 2026Built on the live SportsGameOdds feed
How it works
  1. 1
    Fetch every book's price with byBookmaker

    Request an event or a league's full slate and read each market's byBookmaker object, where every book reports its odds, its line, and an available flag, giving you the whole price board in one fetch.

  2. 2
    Rank prices and benchmark against the consensus

    Iterate byBookmaker, skip unavailable entries, and keep the highest payout (in American odds the largest value wins), then compare it to bookOdds and fairOdds to show how much the best price beats the market.

  3. 3
    Deeplink the user to the market

    Where a book provides a deeplink, turn the best-price cell into a button that opens that market on the sportsbook, falling back to the event-level links.bookmakers.

An odds comparison API (or line shopping API) returns the same betting market priced by every sportsbook at once, so a tool can surface the best available number for any bet. SportsGameOdds is built around this: every event ships a byBookmaker object with live prices from 85+ books, spanning sportsbooks, exchanges, and DFS apps. Each market also carries a consensus line and a click-to-bet deeplink on supported books that opens that market on the sportsbook.

Why use SportsGameOdds for odds comparison

  • One request returns every book. A single /events call hydrates each market's byBookmaker map with side-by-side prices from 85+ books (Pinnacle, Circa, DraftKings, FanDuel, BetMGM, Bet365, and Caesars), plus prediction markets (Kalshi, Polymarket) and DFS apps (PrizePicks, Underdog). There are no per-book integrations to wire up.
  • A consensus line ships in the same payload. Each market includes bookOdds (the market consensus, with vig) and fairOdds (the no-vig fair price), giving you an instant baseline to flag which book is genuinely beating the market rather than just matching it.
  • Deeplink to the best price. Supported books include a click-to-bet deeplink, so once you've found the top number you can route the user to that market on the sportsbook instead of making them hunt for it. Every event also exposes per-book links in links.bookmakers.
  • Normalized oddID lines books up automatically. A shared oddID describes the exact same market (stat, side, period, and bet type) across every book, so DraftKings' moneyline and FanDuel's moneyline collapse onto one row with zero format reconciliation on your end.
  • Props and alt lines, not just the main number. Player props, team props, and alternate spreads and totals all arrive in the same byBookmaker shape, so your comparison grid can go far deeper than spread, moneyline, and total.

How a line-shopping tool works with our data

For a line-shopping product, the data is the whole problem, not the interface. Doing it yourself means integrating each sportsbook separately, normalizing a dozen incompatible market formats, and keeping all of it working as books quietly change their feeds. SportsGameOdds removes that layer. You query one feed, every book is already aligned, and you spend your time on ranking and presentation instead of plumbing.

Fetch every book's price with byBookmaker

Request an event (or a league's full slate) and read each market under event.odds. Every market exposes a byBookmaker object keyed by bookmaker ID, where each entry holds that book's odds, its line (spread or overUnder), and an available flag. One fetch gives you the entire price board for that market, with no fan-out, no per-book auth, and no rate-limit juggling.

Rank prices and benchmark against the consensus

To find the best number for a side, iterate byBookmaker, skip anything where available is false, and keep the highest payout. In American odds, the largest value wins, so +150 beats +120 and -105 beats -115. That winner is the line your user should take. Then compare it against the market's bookOdds and fairOdds to show how much edge the best book offers over consensus, which is the difference between a number that's available everywhere and one that's worth clicking.

Deeplink the user to the market

A comparison tool earns its keep at the moment of action. Where a book provides one, its entry includes a click-to-bet deeplink, so the "best price" cell becomes a button that links the bettor to that market at the sportsbook. You surface the number and we hand off the bet, so there's no copy-pasting odds or searching the book's own site by hand.

Example request

Pull one upcoming NBA event with odds attached:

curl "https://api.sportsgameodds.com/v2/events?leagueID=NBA&oddsAvailable=true&limit=1" \
  -H "x-api-key: YOUR_API_KEY"

A trimmed response shows a single moneyline market priced across several books, with a consensus bookOdds and a no-vig fairOdds sitting alongside the per-book prices:

{
  "eventID": "LAL_at_BOS_2026...",
  "odds": {
    "points-home-game-ml-home": {
      "oddID": "points-home-game-ml-home",
      "betTypeID": "ml",
      "sideID": "home",
      "periodID": "game",
      "bookOdds": "-145",
      "fairOdds": "-138",
      "byBookmaker": {
        "pinnacle":   { "odds": "-140", "available": true },
        "draftkings": { "odds": "-150", "available": true },
        "fanduel":    { "odds": "-142", "available": true },
        "betmgm":     { "odds": "-135", "available": true }
      }
    }
  }
}

Here BetMGM's -135 is the best price for backing the home side, better than the -145 consensus and every other book on the board. Walk the same byBookmaker map across every market and you have a full comparison grid. Official SDKs for JavaScript/TypeScript, Python, Ruby, Go, and Java (plus an MCP server) wrap the identical feed. For a complete UI, see the odds comparison dashboard example and the docs.

SportsGameOdds vs building odds comparison yourself

What you needSportsGameOddsIntegrate each sportsbook feed yourself
Books per callAll 85+ in one byBookmaker objectOne integration, auth, and rate limit per book
Normalized IDs/marketsShared oddID lines every book upMap and reconcile each book's market IDs yourself
Best-line detectionRank byBookmaker in a few linesNormalize formats before you can even compare
Consensus baselinebookOdds + fairOdds includedCompute and maintain your own
DeeplinksClick-to-bet on supported books (plus event-level links.bookmakers)Build and track deeplink formats per book
SettlementScores + per-bet grading at every tierStand up a separate results pipeline
MaintenanceOne feed; we absorb book-side changesRe-fix breakage every time a book changes its feed

Because SportsGameOdds bills per event object (one event is one object no matter how many books or markets you pull), fetching the entire price board for line shopping doesn't multiply your cost the way per-market or per-region billing does. You can start on the free Amateur plan (2,500 objects/month, no credit card) and pull every book on every market from day one.

Frequently asked questions

Related use cases

Ready to try SportsGameOdds?

Free plan available. Set up in 5 minutes. No credit card required.