Where BetMGM earns its place is European soccer. It is the second-deepest book we carry in the Premier League, La Liga and the Champions League, behind only DraftKings, and it prices more markets in those competitions than Bet365 does — which matters because Bet365 is Pro-only while BetMGM is on the free Amateur tier.
So for a soccer product being built on the free plan, this is the book to test against. It is not the broadest book overall: DraftKings and FanDuel both carry more markets, and both are also on the free tier. BetMGM's advantage is where that coverage sits, not how much of it there is.
Where BetMGM shows up
It is listed in every NBA market category we publish, and in all but a couple of the rows across the other four leagues. In practice that means the deep stuff as well as the obvious stuff: quarter and half splits, individual innings in baseball, defensive and shooting props, corner markets, card props.
Its soccer coverage also runs into the second tiers, and that is where it leads outright. BetMGM prices La Liga 2 at 92 markets and Serie B at 69 — deeper on both than any other book we have counted, with DraftKings at 81 and 57. If your product covers second-tier European soccer, that is the reason to carry it. The full league list shows everything we cover.
Coverage changes, and our tables are a snapshot. The /markets endpoint returns the supported set by league from live data, which is the version to build against.
Which plan includes BetMGM
BetMGM is on the free Amateur tier, alongside FanDuel, DraftKings, Caesars, ESPN BET, Bovada, Unibet, PointsBet and William Hill. It's free for good, with no trial clock.
The free tier is limited in other ways — a smaller league list, a lower request rate and a longer refresh interval — so it is a way to build and test against real data rather than a way to run a product. Pricing has the detail on each tier.
Requesting BetMGM prices
Filter to BetMGM alone with bookmakerID=betmgm:
curl "https://api.sportsgameodds.com/v2/events?leagueID=NBA&bookmakerID=betmgm&oddsAvailable=true" \
-H "x-api-key: YOUR_API_KEY"
More usefully, request it next to the books you are comparing it against:
curl "https://api.sportsgameodds.com/v2/events?leagueID=NBA&bookmakerID=betmgm,draftkings,fanduel,caesars&oddsAvailable=true" \
-H "x-api-key: YOUR_API_KEY"
All four of those books are on the free tier, so that second request runs on a free key.
What a BetMGM price looks like
{
"eventID": "...",
"leagueID": "NBA",
"odds": {
"points-home-game-ml-home": {
"oddID": "points-home-game-ml-home",
"opposingOddID": "points-away-game-ml-away",
"marketName": "Moneyline",
"statID": "points",
"statEntityID": "home",
"periodID": "game",
"betTypeID": "ml",
"sideID": "home",
"fairOdds": "-128",
"bookOdds": "-135",
"byBookmaker": {
"betmgm": { "odds": "-132", "available": true },
"draftkings": { "odds": "-138", "available": true },
"fanduel": { "odds": "-135", "available": true }
}
}
}
}
Odds arrive as strings, which preserves the leading + on plus-money prices and stops -132 becoming a number you have to reformat. fairOdds is the vig-free consensus across every book pricing that market, so you have a neutral benchmark rather than having to nominate one book as the reference.
Swap the periodID segment of any oddID to move between full game, halves and quarters — the rest of the key stays the same.
Coverage, honestly
Broad is not complete. BetMGM does not price every market in every league, and no single book does. Read byBookmaker on each odd rather than assuming it is there, and treat its absence as normal rather than as an error.
Anything you hardcode from a coverage table, including ours, is a bug waiting for a quiet week. Query /markets if you would rather check up front than handle it at runtime. Every book we carry, and the plan each one is on, is listed on the bookmakers index.
Use cases for BetMGM data
Odds comparison is the direct one — BetMGM rounds out the major US book set alongside DraftKings, FanDuel, Caesars and ESPN BET, and it fills rows the others leave empty.
For arbitrage and positive EV work, the secondary leagues matter more than the headline ones. Fewer books price a Serie B match than a Serie A match, and thinner fields are where prices diverge.
For sportsbook and fantasy apps, BetMGM is useful precisely when your league list runs past the big four US sports.
BetMGM API technical specifications
BetMGM comes through the standard /v2/events endpoint, with no separate call, credential or schema for any individual book.
Billing is per event object rather than per market or per book, so a ten-game slate is ten objects whether you ask for BetMGM alone or BetMGM alongside eighty others. Adding books to a request you were already making costs response size and nothing else.
Odds refresh sub-minute on Pro, with a longer interval on Rookie and the free Amateur tier. Scores and settlement data ship alongside the odds, so there is no separate results integration — see bet tracking and settlement. The API documentation covers authentication, pagination and the full parameter list, handling odds covers reading byBookmaker in code, and there are SDKs for TypeScript, Python, Ruby, Go and Java.
Frequently asked questions
What is the bookmakerID for BetMGM?
Which plans include BetMGM?
Which book has the widest coverage on the free plan?
Which leagues does BetMGM cover?
Does BetMGM have a public odds API?
Are scores and results included?
Does adding BetMGM to a request cost more?
Test BetMGM on the free plan
BetMGM and every other book we carry on the same oddID, in one request.