Sportsbook Review Scraper - NFL, NBA & MLB Odds, Betting Lines avatar

Sportsbook Review Scraper - NFL, NBA & MLB Odds, Betting Lines

Pricing

from $7.00 / 1,000 game rows

Go to Apify Store
Sportsbook Review Scraper - NFL, NBA & MLB Odds, Betting Lines

Sportsbook Review Scraper - NFL, NBA & MLB Odds, Betting Lines

Scrape NFL, NBA, MLB, NHL and college odds from SportsbookReview. Point spreads, moneylines and totals from 5 sportsbooks, with opening lines, line movement, betting splits and history back to 2008.

Pricing

from $7.00 / 1,000 game rows

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Share

ParseForge

Sportsbook Review Scraper - NFL, NBA & MLB Odds and Betting Lines

Scrape NFL odds, NBA odds, MLB odds and betting lines for 11 leagues, from five sportsbooks at once. Every game comes back with each book's opening and current number, the best price on the board, how far the line moved, what percentage of the public is on each side, and — for games already played — the final score with the ATS and over/under result already graded. No login, no API key, no proxy. Export to CSV, JSON, Excel, or XML.

Odds APIs charge a monthly subscription and quote one blended price per game. This reads the same public SportsbookReview pages your browser does, keeps every book's number separate so you can shop the line, and reaches back to 2008 for closed lines.

Who uses itWhat they scrape SportsbookReview for
Bettors and handicappersLine shopping across five books, and fading a public that is 70% on one side
Quant and model buildersYears of opening and closing lines to backtest against real results
Odds and media sitesA normalised feed of spreads, moneylines and totals for 11 leagues
Affiliate and content teamsLive numbers for comparison pages, with each book's affiliate link attached
Data scientistsLabelled market data: no-vig probabilities, hold, movement, and graded outcomes

What it does

This Actor collects the SportsbookReview betting board for a league and a date, and returns each game as one flat row. Every row carries:

  • 🧾 The game: teams, kickoff, venue, city, state, country, status, and — for MLB — both starting pitchers with their throwing hand.
  • 📊 Every book's line: BetMGM, FanDuel, DraftKings, bet365 and Fanatics, each with its opening number and its current number.
  • 🛒 Line shopping, solved: the best price and best number on the board for every side, with the book that has it named.
  • 📈 Movement: how far the consensus spread, total and price travelled from the opener, and which way.
  • 👥 Betting splits: the public betting percentage on each side of the moneyline, point spread and over/under.
  • 🧮 Market maths already done: implied probability, book hold, no-vig fair probability and fair price, and the edge line shopping buys you.
  • 🏁 Graded results on finished games: final score, margin, winner, ATS result, over/under result, and the period-by-period box score.
  • Live state where the sport publishes it: inning, half, outs, hits and errors for baseball.

Turn on the optional blocks and each row also carries the moneyline board, the totals board, half and quarter lines, the timestamped line-movement series for every book, and both teams' season form.

Results export to CSV, JSON, Excel, or XML, or stream from the API.

What you can do with SportsbookReview data

🛒 Shop every line before you bet.

One row already names the book with the best price on each side and the best number on each spread and total, so the comparison is a column, not a workflow.

🕰️ Backtest a model on real closing lines.

Point it at a league and a date range and pull years of openers, closers and final results in one schema. Nine of the eleven leagues go back to 2008.

👥 Fade the public.

Filter to the games where one side holds 70% or more of the tickets, and read what the line did while the crowd piled in.

🚂 Catch steam moves.

Ask for only the games whose consensus spread moved a point or more from the opener, then read the timestamped series to see which book moved first.

💰 Find the softest market.

Sort by hold percentage and no-vig fair price to see where the vig is thin and which book is out of line with the other four.

Why choose this scraper

What you get
No login, no key, no proxyIt reads public pages. There is no account to create, no session to keep alive, and no proxy line on your bill.
Five books kept separateOpening and current numbers per book, not one blended average. That is what makes line shopping possible.
17 years of closed linesVerified back to 2008 for the nine date-scheduled leagues. Most odds feeds start when you subscribe.
Results already gradedFinished games carry the final score plus the ATS and over/under result, so a backtest needs no join.
Movement, not just a snapshotOpener, current, direction, and an optional timestamped series per book.
Market maths in the rowImplied probability, hold, no-vig fair odds and line-shopping edge, computed per book and per game.
11 leagues, one schemaNFL, NCAAF, NBA, NCAAB, MLB, NHL, WNBA, CFL, EPL, Champions League and MLS return identical fields.
Opt-in extras, off by defaultMoneyline, totals, period lines, line history, matchup stats and futures are each a checkbox. Leave them off and you are never billed for them.
Filter without buyingA total or spread filter reads the board it needs and then drops those columns, so you can narrow a run without paying for data you do not keep.

How it compares

Be clear about the trade-offs before you pick this one.

Five sportsbooks, not twenty. SportsbookReview shows BetMGM, FanDuel, DraftKings, bet365 and Fanatics to anonymous visitors, and this Actor returns all five. If you need Pinnacle, Circa or a European book, you need a different source.

Football has no historical dates. SportsbookReview serves NFL and NCAA Football by week, for the current season only — a date on those two leagues is silently ignored by the site and returns the current board. The Actor warns you and uses weeks instead. The other nine leagues take any date back to 2008.

No player props. This is the game board: spreads, moneylines, totals, periods and futures. Props are not on these pages.

FeatureParseForgelulzasaurscrapemint
SourceSportsbookReviewSportsbookReviewAggregated feed
Opening and current line per bookYesCurrent onlyCurrent only
Best price and best number, book namedYesNoNo
Historical dates back to 2008Yes, 9 leaguesNoNo
Timestamped line-movement seriesOptionalNoNo
Public betting percentagesYesNoNo
Graded ATS / over-under resultsYesNoNo
No-vig fair odds and hold %Yes, per bookNoNo
Half, quarter and period linesOptionalNoNo
Futures marketsOptionalNoNo
Team season form on the rowOptionalNoNo
Price per 1,000 games$7.00$10.00$12.00

We are the cheapest of the three per row and the only one that returns openers, movement, public splits and graded results. The honest caveat is coverage of books: all three read the same five-book board.

What a game looks like

Every game returns as one flat JSON row. Here is a real record, book list trimmed to two:

{
"recordType": "game",
"gameId": 370242,
"league": "MLB",
"leagueSlug": "mlb-baseball",
"market": "pointspread",
"scope": "full-game",
"gameDate": "2026-08-24",
"startDate": "2026-08-24T22:40:00.000Z",
"status": "final",
"statusText": "Final",
"awayTeam": "Tampa Bay Rays",
"awayTeamShort": "TB",
"homeTeam": "Detroit Tigers",
"homeTeamShort": "DET",
"matchup": "TB @ DET",
"awayStarter": "Drew Rasmussen",
"awayStarterHand": "R",
"homeStarter": "Framber Valdez",
"homeStarterHand": "L",
"venueName": "Comerica Park",
"venueCity": "Detroit",
"venueState": "MI",
"venueCountry": "USA",
"awayScore": 4,
"homeScore": 1,
"totalPoints": 5,
"margin": -3,
"winner": "away",
"atsResult": "away",
"totalResult": "under",
"periodType": "Inning",
"awayScoreByPeriod": [2, 0, 0, 1, 0, 1, 0, 0, 0],
"homeScoreByPeriod": [0, 0, 0, 1, 0, 0, 0, 0, 0],
"publicBetPercentHome": 33.63,
"publicBetPercentAway": 66.37,
"publicOverPercent": 53.97,
"publicUnderPercent": 46.03,
"publicFadeSide": "away-ml",
"booksWithOdds": 5,
"odds": [
{
"sportsbook": "betmgm",
"sportsbookName": "BetMGM",
"openingSpreadHome": 1.5,
"openingSpreadAway": -1.5,
"openingPriceHome": -160,
"openingPriceAway": 135,
"spreadHome": 1.5,
"spreadAway": -1.5,
"priceHome": -145,
"priceAway": 120,
"impliedProbHome": 0.59184,
"impliedProbAway": 0.45455,
"holdPercent": 4.638,
"noVigProbHome": 0.5656,
"noVigProbAway": 0.4344,
"spreadMove": 0,
"priceMoveHome": 15,
"priceMoveAway": -15
},
{
"sportsbook": "fanduel",
"sportsbookName": "FanDuel",
"openingPriceHome": -164,
"openingPriceAway": 136,
"spreadHome": 1.5,
"priceHome": -152,
"priceAway": 126,
"holdPercent": 4.565,
"noVigProbHome": 0.57684,
"noVigProbAway": 0.42316,
"priceMoveHome": 12
}
],
"consensusSpreadHome": 1.5,
"consensusTotal": null,
"consensusPriceHome": -145,
"consensusPriceAway": 120,
"openingSpreadHome": 1.5,
"spreadMovement": 0,
"priceMovementHome": 15,
"lineDirection": "flat",
"bestPriceHome": -143,
"bestPriceHomeBook": "DraftKings",
"bestPriceAway": 130,
"bestPriceAwayBook": "bet365",
"bestSpreadHome": 1.5,
"bestSpreadHomeBook": "BetMGM",
"decimalPriceHome": 1.6993,
"fairProbHome": 0.5656,
"fairProbAway": 0.4344,
"fairPriceHome": -130,
"marketHoldPercent": 4.565,
"lineShoppingEdgeHome": 0.336,
"spreadDisagreement": 0,
"totalsConsensus": 7.5,
"totalsOpening": 7.5,
"totalsMovement": 0,
"totalsBestOver": -110,
"totalsBestOverBook": "BetMGM",
"totalsBestUnder": -102,
"totalsBestUnderBook": "FanDuel",
"totalsLowestNumber": 7.5,
"totalsHighestNumber": 7.5,
"url": "https://www.sportsbookreview.com/scores/mlb-baseball/matchup/370242/",
"sourceUrl": "https://www.sportsbookreview.com/betting-odds/mlb-baseball/pointspread/full-game/?date=2026-08-24",
"scrapedAt": "2026-08-25T16:56:04.190Z"
}

A base row carries 104 fields, with 31 per sportsbook inside odds[]. Turn every optional block on and a row reaches 157 fields. A futures row is its own 23-field shape.

Configure the run

Pick leagues and a date, or paste SportsbookReview URLs directly. Filters run as each game is read, so only matches reach your dataset and only matches are billed. The Input tab lists every parameter.

Filters can read a block you did not buy. Set minTotal on a point-spread run and the Actor fetches the totals board, filters on it, and then drops the totals columns again — you pay for the page, not for columns you never receive. Tick Add totals odds if you want to keep them.

Today's board for one league:

{ "leagues": ["nfl-football"], "maxItems": 50 }

A month of MLB history with all three markets on every row:

{ "leagues": ["mlb-baseball"], "dateFrom": "2026-07-01", "dateTo": "2026-07-31", "includeMoneyline": true, "includeTotals": true, "maxItems": 500 }

Fade the public — only games where one side holds 70% of tickets, with the movement series attached:

{ "leagues": ["mlb-baseball"], "dates": ["2026-08-24"], "minPublicBetPercent": 70, "includeLineHistory": true, "maxItems": 100 }

Steam moves only — games whose spread moved half a point or more off the opener:

{ "leagues": ["nfl-football"], "minSpreadMovement": 0.5, "includeLineHistory": true, "maxItems": 100 }

Soccer three-way board with totals, two books only:

{ "leagues": ["english-premier-league", "major-league-soccer"], "includeTotals": true, "sportsbooks": ["fanduel", "draftkings"] }

Futures — every team's title, conference and division price:

{ "leagues": ["nfl-football"], "includeFutures": true, "maxItems": 300 }

Pricing

Pay-per-event. You are billed per row written, plus a small fee for each board page fetched and a $0.054 run-start fee. Filtered-out games cost nothing, and an optional block that returns no data is never charged.

EventPriceWhen it fires
Run start$0.054Once per run
Board page$0.005Each SportsbookReview page fetched, whatever it yields
Game row$0.007Each game written — the primary event
Moneyline block$0.004Only with Add moneyline odds on
Totals block$0.004Only with Add totals odds on
Period block$0.005Only with Add half / quarter / period odds on
Line-movement series$0.006Only with Add timestamped line movement on
Team matchup stats$0.008Only with Add team matchup stats on
Futures selection$0.005Only with Add futures markets on
Games collected, defaultsApproximate cost
100$0.79
1,000$7.43
10,000$73.80

The board-page fee depends on how many games a slate holds, so these are mid estimates. A college football week puts 200 games on one page and costs $0.005 for all of them; a ten-game MLB slate costs $0.005 for ten. Measured on the platform: a 144-game college football run with every optional block turned on billed $4.06 in total.

The six optional events are off by default. A run that leaves them off pays the run-start fee, $0.005 per board page, and $0.007 per game — nothing else. Verified on a production run: with defaults, the only events charged were apify-actor-start, odds-page and game-odds.

Why $7.00 per 1,000 and not $3.00. The other SportsbookReview scraper on the Store charges $10.00 per 1,000 and returns the current line only. The most-used generic odds Actor charges $12.00. We are the cheapest of the three, and each of our rows also carries the opener, the movement, the best price with its book, the public split, the no-vig maths and — on a finished game — the graded result. If all you need is one current number per game and nothing else, a $3.00 Actor will do it more cheaply.

Free users

Free-plan runs return up to 10 rows as a preview. Upgrade your Apify plan to collect up to 1,000,000 rows per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Sportsbook Review Scraper.
  3. Pick your leagues, set a date or a week, tick any extras, and click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API or the ApifyClient for JavaScript and Python. Schedule it to capture the closing line every day.

Use with AI agents (MCP)

Give an AI agent live access to the betting board through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/sportsbook-review-scraper"

Then prompt it in plain language:

  • "Pull tonight's NBA board and tell me which games have the biggest price difference between books."
  • "Get every MLB game from July and list the ones where the public was over 70% on the loser."
  • "Show me the NFL Week 5 games whose total moved more than a point, and which book moved first."

Copy this into ChatGPT, Claude, or Cursor to start:

Use the Apify Actor "parseforge/sportsbook-review-scraper" to collect betting lines from SportsbookReview. Input: { "leagues": ["nfl-football"], "dateFrom": "YYYY-MM-DD", "dateTo": "YYYY-MM-DD", "includeMoneyline": true, "includeTotals": true, "maxItems": 200 }. It returns one row per game with each of five sportsbooks' opening and current line, the best price and the book holding it, line movement, public betting percentages, no-vig fair odds, and graded ATS / over-under results on finished games. NFL and NCAA Football use "weeks" (Week1…Week18) instead of dates. Call it with the ApifyClient and my APIFY_TOKEN.

Troubleshooting

Why did my NFL date get ignored?

SportsbookReview does not serve NFL or NCAA Football by date — it serves them by week, for the current season only. A date on those two leagues returns the current board on the site itself, so the Actor warns you and scrapes that board. Use weeks instead: Week1Week18, or PreSeasonWeek1PreSeasonWeek3.

Why am I getting no results?

Most often the league had no games that day. MLS and the CFL play a handful of fixtures a week, and the Champions League only on matchdays. Try a nearby date, or turn off Skip games with no posted line to see the bare schedule.

Why are there fewer rows than games on the page?

Games no book has priced yet are dropped by default and never billed. A football week that is still months away is the usual case: the schedule is published long before any book posts a number, so Week5 in August returns 115 games and zero lines. Ask for a week that is closer, or set onlyGamesWithOdds to false to keep the bare schedule.

Why is consensusTotal empty?

The base row carries the market you chose. On a point-spread run there is no total on it — tick Add totals odds and the row gains totalsConsensus, the per-book totals, and the graded over/under result.

Why is there no line history for my soccer game?

SportsbookReview has no line-history page for EPL, the Champions League or MLS; the URL returns a server error. The Actor detects this, skips the request, and does not charge for it.

Why is homeAtsRecord empty?

Season form is whatever the sport publishes. Baseball tracks win-loss and over/under records but no ATS record; football and basketball track ATS. Soccer matchups carry no stats block at all, and are never charged for one.

A field stopped filling.

SportsbookReview changed a page's shape. Email us with your run ID and we will fix the mapping.

FAQ

QuestionAnswer
Do I need a SportsbookReview account or an API key?No. It reads the same public pages an anonymous browser gets.
Do I need a proxy?No. The site serves these pages without one, so there is no proxy cost. A proxy field exists if your own network is blocked.
Which sportsbooks are covered?BetMGM, FanDuel, DraftKings, bet365 and Fanatics — the five SportsbookReview shows publicly.
How far back does the history go?Verified to 2008 for the nine date-scheduled leagues. NFL and NCAA Football are current-season only, by week.
Which leagues?NFL, NCAA Football, NBA, NCAA Basketball, MLB, NHL, WNBA, CFL, English Premier League, UEFA Champions League and MLS.
Does it return player props?No. It returns the game board: spreads, moneylines, totals, period lines and futures.
Can I get live in-play odds?It returns the board as SportsbookReview publishes it, including live scores and, for baseball, the current inning and count. It is not a low-latency in-play feed.
How do soccer odds work?Soccer has no handicap board, so the primary market is the real three-way home / draw / away price. Moneyline returns the two-way price with the draw removed.
Are the results graded?Yes. Finished games carry the final score, margin, winner, ATS result and over/under result.
Is this an official SportsbookReview product?No. It is unofficial and reads only publicly available data.

Browse the full ParseForge collection for more scrapers.

🆘 Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by SportsbookReview or any sportsbook named in its output. It collects only publicly available data. Betting odds are provided for informational purposes and are not betting advice. You are responsible for complying with SportsbookReview's terms, with the gambling laws of your jurisdiction, and with applicable data-protection law. 21+. If gambling is a problem for you, call 1-800-GAMBLER.