BetMGM Scraper - Live Sports Odds, Markets & Player Props avatar

BetMGM Scraper - Live Sports Odds, Markets & Player Props

Pricing

from $1.50 / 1,000 results

Go to Apify Store
BetMGM Scraper - Live Sports Odds, Markets & Player Props

BetMGM Scraper - Live Sports Odds, Markets & Player Props

Scrape BetMGM (betmgm.com) live and upcoming sports betting odds. Extract events, moneylines, spreads, totals, player props, scores and start times. Get decimal and American odds for sportsbook monitoring, market comparison and odds analysis.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Features

Limited permissions

Share

Collect live and upcoming sportsbook odds from BetMGM (betmgm.com) as clean rows: one row per market with decimal and American odds, every selection, scores and start times.

Why This Scraper?

  • One row per market. Each row carries the headline selection plus a full quote object listing every selection with decimal odds, American odds, implied probability and line.
  • Live and upcoming events. Filter to events in play now or upcoming only, with current score, period scores and clock for live games.
  • Every market on demand. Moneylines, spreads, totals and player props for each event when you turn on all markets.
  • Two ways in. Search by sport, region, competition or text, or paste event links.
  • State boards. Pick the US state whose odds board you want to read.
  • Final scores of past games. Turn on Final scores of past games to also get one row per finished game with the final score, winner and venue, linked to the odds event id where the game matches one.
  • Recurring updates. Incremental mode labels rows NEW, UPDATED or REAPPEARED and skips unchanged rows, so scheduled runs only deliver what moved.

Use Cases

  • Odds comparison: line up BetMGM prices against other books in a spreadsheet or model.
  • Line movement tracking: schedule runs and keep only the rows whose odds changed.
  • Betting research: build datasets of spreads, totals and player props across sports.
  • Live dashboards: feed in-play scores and prices into alerts.
  • Results and model back-testing: pair past final scores with the odds you collected.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
recordKeybetmgm:00000000:0000000000
eventId00000000
eventTeam A at Team B
homeTeam / awayTeamTeam B / Team A
homeScore / awayScore0 / 0
sportBasketball
competitionNBA
competitionFullUSA - NBA
startTime2026-01-01T00:00:00.000Z
eventStatusscheduled
marketMoneyline
canonicalmoneyline
line-3.5
isMainLinetrue
outcomeTeam A
odds1.91
americanOdds-110
lastOdds1.91
quote.selections[]name, role, decimal, american, impliedProbability, line
periodsper-period scores
statsevent statistics
urlevent page

Odds rows carry recordType = odds; final-score rows (opt in) carry recordType = result, recordKey = result:<game id>, homeTeam / awayTeam, homeScore / awayScore, score, winner (home, away or draw), venue, sport, competition, startTime, status = final, source = espn.com and eventId (the linked odds event id, or null when no odds event matches).

How to Use

  1. Pick Search events or Event URLs.
  2. Choose sports and filters, or paste event links.
  3. Set Max items (default 20) and optionally turn on Fetch all markets.
  4. Run the actor and open the dataset.

Basketball odds, headline markets:

{ "mode": "search", "sports": ["basketball"], "maxItems": 20 }

Every market of live soccer events:

{ "mode": "search", "sports": ["soccer"], "stage": "live", "fetchDetails": true, "maxItems": 100 }

One event by link:

{ "mode": "url", "urls": ["https://www.betmgm.com/en/sports/events/team-a-at-team-b-00000000"] }

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("<ACTOR_ID>").call(run_input={"mode": "search", "sports": ["basketball"], "maxItems": 20})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["event"], row["market"], row["americanOdds"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('<ACTOR_ID>').call({ mode: 'search', sports: ['basketball'], maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length);

Final scores of past games

Turn on Final scores of past games and set Results: days back (1 to 14, default 2) to add one row per finished game to the dataset. Notes:

  • Source and coverage. The sportsbook publishes no list of finished games, so final scores are read from the public scoreboard of espn.com, one request per league per day. Covered: NFL, NBA, WNBA, MLB, NHL, college football, men's and women's college basketball, MLS, NWSL and the main soccer leagues and cups (Premier League, Championship, FA Cup, League Cup, La Liga, Bundesliga, Serie A, Ligue 1, Eredivisie, Primeira Liga, Liga MX, Brasileirao, Argentine league, Champions League, Europa League, Conference League, Nations League, World Cup qualifying, friendlies, Concacaf and Copa Libertadores). Tennis, golf, boxing, cricket, Formula 1 and other sports return no final scores.
  • Finished games only. Live games, upcoming games, and postponed or canceled games are never returned.
  • Search mode only. The Sports and Text filter inputs narrow the results; region, competition, stage and state filters do not apply to final scores. URL mode ignores this option.
  • Linking to odds. eventId is filled when a current or just-ended odds event (seen in this run or remembered by incremental mode) matches by team names and a start time within a few hours; otherwise it is null.
  • Max items. About half of Max items is held for final scores while the odds are collected, so a small cap returns both kinds of rows. Every result row is a normal dataset item.
  • Incremental mode. A result row is NEW the first time, UPDATED only if its status or final score changes, and never reported as EXPIRED. The results settings are not part of the remembered scope, so changing the days back does not restart the baseline.
  • If the scores cannot be read. When every score read is refused and nothing else was collected, the run ends FAILED with a clear message instead of an empty success. When odds rows were collected, the run succeeds and the status message says the scores could not be read.

Basketball odds plus final scores of the last three days:

{ "mode": "search", "sports": ["basketball"], "includeResults": true, "resultsDaysBack": 3, "maxItems": 40 }

Tips

  • Search mode returns each event's headline markets. Turn on Fetch all markets for spreads, totals and player props.
  • Use Main lines only to keep just the moneyline row of each event.
  • Use the same State key on every scheduled run when you use incremental mode.

Send results into your apps (MCP connectors)

Select one or more MCP connectors authorized under your Apify settings to receive a readable summary of the rows. Notion gets a page per row when you add a parent page. Your dataset is never changed by the export.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchSearch events or read event links.
sportsarray[]Sport names or ids. Empty = all sports.
regionIdsarray[]Optional region ids.
competitionIdsarray[]Optional competition ids.
searchTermstringemptyKeep events whose name, league or region contains this text.
stagestringallAll, live only or upcoming only.
statestringNYUS state odds board.
mainLinesOnlybooleanfalseKeep only each event's main line.
urlsarray[]Event page links, links carrying fixtureIds=, or ids (20101854, 2:7913596) for URL mode; non-event links are skipped with a warning.
fetchDetailsbooleanfalseLoad every market for each event.
includeResultsbooleanfalseAlso return final scores of finished games (search mode).
resultsDaysBackinteger2Days back for final scores, 1 to 14.
maxPagesintegeremptyPage limit for search mode. Does not cap results; Max items does.
maxItemsinteger20Stop after this many rows. 0 = no limit.
resumeFromRunIdstringemptySkip rows an earlier run already collected.
incrementalModebooleanfalseLabel rows NEW, UPDATED or REAPPEARED and skip unchanged rows.
emitUnchangedbooleanfalseAlso output unchanged rows.
emitExpiredbooleantrueReport markets no longer offered as EXPIRED in URL mode.
stateKeystringemptyName of the remembered baseline.
ignoreFieldsForChangesarray[]Fields that never count as a change.
proxyobjectDatacenter proxyConnection settings. Residential is recommended for the most reliable results.
mcpConnectorsarray[]Connectors to send a summary to.
notionParentPageUrlstringemptyNotion parent page for the export.
maxNotifyListingsinteger50Cap on rows sent to each connector.

Connection and proxy

The datacenter proxy is the default and works on every Apify plan. Residential is recommended for the most reliable results, especially for large or frequent runs: choose it in the Proxy configuration field. Leave the field empty and the actor still uses the datacenter proxy.

If a connection is refused or keeps failing, the actor switches to a more robust one on its own. Residential traffic used by that automatic switch is billed to your Apify plan. Apify free plans do not include residential proxies: on a free plan the run logs a warning and continues on a backup connection, and the run fails with a clear message if that connection cannot load the pages either. To use your own proxies, enter their URLs in the Proxy configuration field.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"recordKey": "betmgm:00000000:0000000000",
"eventId": "00000000",
"event": "Team A at Team B",
"homeTeam": "Team B",
"awayTeam": "Team A",
"sport": "Basketball",
"competition": "NBA",
"startTime": "2026-01-01T00:00:00.000Z",
"eventStatus": "scheduled",
"market": "Moneyline",
"canonical": "moneyline",
"isMainLine": true,
"outcome": "Team A",
"odds": 1.91,
"americanOdds": -110,
"quote": {
"selections": [
{
"name": "Team A",
"role": "away",
"decimal": 1.91,
"american": -110,
"impliedProbability": 0.5236,
"line": null
},
{
"name": "Team B",
"role": "home",
"decimal": 1.91,
"american": -110,
"impliedProbability": 0.5236,
"line": null
}
]
}
}

Plan Requirement

The default connection is Apify Proxy, and it needs a plan that includes proxy access. If your Apify plan does not include proxy access, the run fails with a clear message instead of returning an empty result; a paid plan with proxy access is required. The actor switches connection automatically when one is refused and tells you in the run log what it used.

FAQ

How much does a run cost?

You pay per row written to the dataset (odds rows and final-score rows alike) plus a small start fee. Set Max items to bound the spend.

The actor reads publicly listed odds. Check the site's terms and the rules that apply to you before using the data.

Can I schedule it?

Yes. Use incremental mode with a fixed State key so each run delivers only changed rows.

Why did my run return nothing?

The filters may match no events right now, for example Live only when no game is in play.

Can I use it with AI tools?

Yes. Connect the dataset through the Apify MCP server or send rows to your apps with the connectors above.

πŸ”— Want more sports data?

Pair this actor with these related scrapers from the same team:

⚽ FanDuel Odds Scraper
Scrape FanDuel sportsbook odds, including moneylines, spreads, totals, player props and...
⚽ DraftKings Scraper
Scrape DraftKings Sportsbook odds, game lines, team totals, player and game props...
⚽ bet365 Odds Scraper
Scrape bet365 live in-play and pre-match odds across 20+ sports. Extract fixture...
⚽ Sportsbook Odds Scraper (1xBet, Melbet, Linebet, Paripulse)
Collect live and prematch betting odds from 1xBet, Melbet, Linebet and Paripulse. Give it...
⚽ SofaScore Scraper ⚽ Live Scores, Stats, Players & Odds
Pull structured sports data from SofaScore across football, basketball, tennis, and 20+...
⚽ Sportsbet AU Scraper πŸ… Sports Odds & Racing Prices
Scrape sportsbet.com.au odds: events, markets, selections and prices for AFL, NRL...

πŸ‘‰ Browse all abotapi scrapers

πŸ’¬ Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • πŸ› οΈ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.