BetExplorer Odds Scraper
Pricing
from $3.62 / 1,000 results
BetExplorer Odds Scraper
Scrape BetExplorer matches with opening and closing odds, bookmaker counts, scores and decades of season archives. Export to CSV, Excel, JSON or XML.
Pricing
from $3.62 / 1,000 results
Rating
0.0
(0)
Developer
ParseForge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Share

π BetExplorer Odds Scraper
π Export decades of settled betting odds in seconds. Paste any BetExplorer league or season URL and get every match as a flat 33-field row: teams, kickoff, score, period scores, the average opening price and the average closing price of each outcome, the best price any bookmaker offered, and the full odds book. Premier League odds run back to 1999/2000 and the season picker holds 116 seasons.
BetExplorer is the odds-comparison arm of the Flashscore group. Its league pages are server rendered, and the odds you see in a results table are the average closing price across every bookmaker it tracked for that match. This Actor reads that table, then opens each match's own odds book and each bookmaker's price-movement log, so a row carries both ends of the market: where the price opened and where it closed. No browser, no API key, no login.
Coverage is the point. A Premier League season page returns all 380 matches in one request, the Championship all 552, and the season picker on every league page reaches back 116 seasons for England, 35 for the NBA and 31 for the Moldovan top flight. Odds thin out before roughly 1999/2000, results keep going. Seven sports are supported: football, hockey, basketball, tennis, baseball, handball and volleyball.
| π― Target Audience | π‘ Primary Use Cases |
|---|---|
| Quantitative bettors and model builders | Backtest a strategy against real closing prices instead of a bookmaker's current screen |
| Sports data analysts | Measure line movement from open to close as a market-efficiency signal |
| Trading and risk teams | Compare a book's own closing price against the market average and the best price available |
| Researchers and students | Build multi-decade odds datasets for football economics and forecasting papers |
π What the BetExplorer Odds Scraper does
π‘ Why it matters: Most odds datasets give you one number per outcome, usually whatever the price is right now. A model trained on that cannot tell a favourite that drifted from a favourite that was steamed. This Actor ships the opening price beside the closing price for every outcome, with the number of bookmakers behind each average, so drift is a column and not a guess.
- π Any BetExplorer URL: a league page such as
https://www.betexplorer.com/football/england/premier-league/, a dated season such as.../premier-league-2012-2013/results/, a fixtures page, or a single match URL. Paste as many as you like. - ποΈ Season archive in one run: set Extra seasons to crawl and the Actor reads that league's own season picker and sweeps the earlier seasons behind it, without you building a single URL by hand.
- π Opening and closing prices: the average opening price and the average closing price of every outcome, taken from each bookmaker's own movement log rather than from a single snapshot.
- β Best price and depth: the highest closing price any tracked bookmaker offered on each outcome, plus the bookmaker count behind the averages. BetExplorer shows the books licensed where the request comes from, so a residential proxy country widens the odds book: 12 bookmakers from Malta against 2 from the United States on the same match.
- π The full odds book: every bookmaker by name with its own opening price, closing price and the timestamp the price was last written.
- β½ Match context: exact kickoff in ISO 8601 with time zone, venue, round, status, final score, period or half scores, and the result of the match.
- π Seven sports, two market shapes: 1X2 where a draw exists (football, hockey, handball) and Home/Away where it does not (basketball, tennis, baseball, volleyball). The Actor picks the right one from the league page itself.
- π Clean data: one row per match, deduplicated on BetExplorer's own event id, the same 33 columns on every row, and
N/Ainstead of blank cells when a value does not apply.
π¬ Full Demo (π§ Coming soon)
A short walkthrough video is in production.
π Output
| Field | Type | Description |
|---|---|---|
πΌ imageUrl | string | Home team crest, or the player photo in tennis |
π matchUrl | string | The match page on BetExplorer |
π matchId | string | BetExplorer's own event id, stable across pages |
π sport | string | Football, Hockey, Basketball, Tennis, Baseball, Handball, Volleyball |
π country | string | Country or region the competition belongs to |
π league | string | Competition name without the season |
π
season | string | Season label, for example 2023/2024 |
π’ round | string | Round number, or the stage name in a knockout |
π homeTeam | string | Home team or first player |
π« awayTeam | string | Away team or second player |
β± kickoffIso | string | Kickoff in ISO 8601 with time zone |
π status | string | Finished, Scheduled, Live, Postponed or Cancelled |
π₯ result | string | Home, Draw, Away, or N/A when unplayed |
π score | string | Final score as 2:1 |
π΅ homeScore | integer | Goals, points or sets for the home side |
π΄ awayScore | integer | Goals, points or sets for the away side |
β³ partialScore | string | Period, set or half scores |
π openingOddsHome | number | Average opening price on the home win |
π openingOddsDraw | number | Average opening price on the draw, N/A in Home/Away markets |
π openingOddsAway | number | Average opening price on the away win |
π closingOddsHome | number | Average closing price on the home win |
π closingOddsDraw | number | Average closing price on the draw, N/A in Home/Away markets |
π closingOddsAway | number | Average closing price on the away win |
β highestClosingHome | number | Best closing price any tracked bookmaker offered on the home win |
β highestClosingDraw | number | Best closing price on the draw |
β highestClosingAway | number | Best closing price on the away win |
π¦ bookmakerCount | integer | Bookmakers behind the averages for this match |
π― oddsMarket | string | 1X2 or Home/Away |
π venue | string | Stadium or arena, Not Disclosed when BetExplorer has none |
πΌ awayTeamImageUrl | string | Away team crest or player photo |
π bookmakers | array | Every bookmaker with its own opening price, closing price and timestamp |
π scrapedAt | string | ISO timestamp of the run |
β error | string | Populated only on a row the Actor could not collect |
For a scheduled match the closing columns carry the latest price on the board rather than a settled close. The status column tells you which you are looking at.
Three real records from a verification run on https://www.betexplorer.com/football/england/premier-league-2023-2024/results/ (the bookmakers array is shown trimmed to three books; a real row carries all of them, and how many that is depends on the country you request from):
[{"imageUrl": "https://www.betexplorer.com/res/images/team-logo/fwtiqyQt-vcNAdtF9.png","matchUrl": "https://www.betexplorer.com/football/england/premier-league-2023-2024/arsenal-everton/jXP8f29S/","matchId": "jXP8f29S","sport": "Football","country": "England","league": "Premier League","season": "2023/2024","round": "38","homeTeam": "Arsenal","awayTeam": "Everton","kickoffIso": "2024-05-19T17:00:00+02:00","status": "Finished","result": "Home","score": "2:1","homeScore": 2,"awayScore": 1,"partialScore": "1:1, 1:0","openingOddsHome": 1.16,"openingOddsDraw": 7.32,"openingOddsAway": 14.78,"closingOddsHome": 1.21,"closingOddsDraw": 7.35,"closingOddsAway": 12.59,"highestClosingHome": 1.24,"highestClosingDraw": 8.22,"highestClosingAway": 15,"bookmakerCount": 12,"oddsMarket": "1X2","venue": "Emirates Stadium","awayTeamImageUrl": "https://www.betexplorer.com/res/images/team-logo/Cp7kPg6n-bRmKmISE.png","bookmakers": [{ "bookmaker": "1xBet", "closingHome": 1.24, "closingDraw": 7.7, "closingAway": 10.6, "openingHome": 1.15, "openingDraw": 10, "openingAway": 20, "closedAt": "2024-05-19T15:49" },{ "bookmaker": "888sport", "closingHome": 1.18, "closingDraw": 7, "closingAway": 15, "openingHome": 1.17, "openingDraw": 7.5, "openingAway": 15, "closedAt": "2024-05-19T14:33" },{ "bookmaker": "bet365", "closingHome": 1.22, "closingDraw": 7.5, "closingAway": 10, "openingHome": 1.2, "openingDraw": 6.5, "openingAway": 13, "closedAt": "2024-05-19T14:41" }],"scrapedAt": "2026-09-09T19:44:41.872Z","error": null},{"imageUrl": "https://www.betexplorer.com/res/images/team-logo/riC9AeRc-r9Mudk7j.png","matchUrl": "https://www.betexplorer.com/football/england/premier-league-2023-2024/brentford-newcastle-utd/htCzjMHq/","matchId": "htCzjMHq","sport": "Football","country": "England","league": "Premier League","season": "2023/2024","round": "38","homeTeam": "Brentford","awayTeam": "Newcastle","kickoffIso": "2024-05-19T17:00:00+02:00","status": "Finished","result": "Away","score": "2:4","homeScore": 2,"awayScore": 4,"partialScore": "0:3, 2:1","openingOddsHome": 2.87,"openingOddsDraw": 3.61,"openingOddsAway": 2.1,"closingOddsHome": 2.96,"closingOddsDraw": 3.99,"closingOddsAway": 2.19,"highestClosingHome": 3.2,"highestClosingDraw": 4.1,"highestClosingAway": 2.25,"bookmakerCount": 12,"oddsMarket": "1X2","venue": "Brentford Community Stadium","awayTeamImageUrl": "https://www.betexplorer.com/res/images/team-logo/KWip625n-2Vnc5VQf.png","bookmakers": [{ "bookmaker": "1xBet", "closingHome": 3.11, "closingDraw": 4.03, "closingAway": 2.17, "openingHome": 3.03, "openingDraw": 3.95, "openingAway": 2.32, "closedAt": "2024-05-19T15:54" },{ "bookmaker": "888sport", "closingHome": 2.88, "closingDraw": 4, "closingAway": 2.2, "openingHome": 2.88, "openingDraw": 3.75, "openingAway": 2.25, "closedAt": "2024-05-19T15:33" },{ "bookmaker": "bet365", "closingHome": 2.9, "closingDraw": 3.9, "closingAway": 2.15, "openingHome": 3.25, "openingDraw": 3.6, "openingAway": 2.1, "closedAt": "2024-05-19T15:21" }],"scrapedAt": "2026-09-09T19:44:41.872Z","error": null},{"imageUrl": "https://www.betexplorer.com/res/images/team-logo/MmmU7K6n-b92lfEJC.png","matchUrl": "https://www.betexplorer.com/football/england/premier-league-2023-2024/brighton-manchester-united/z51uktXk/","matchId": "z51uktXk","sport": "Football","country": "England","league": "Premier League","season": "2023/2024","round": "38","homeTeam": "Brighton","awayTeam": "Manchester Utd","kickoffIso": "2024-05-19T17:00:00+02:00","status": "Finished","result": "Away","score": "0:2","homeScore": 0,"awayScore": 2,"partialScore": "0:0, 0:2","openingOddsHome": 2.02,"openingOddsDraw": 3.78,"openingOddsAway": 2.93,"closingOddsHome": 2.62,"closingOddsDraw": 4,"closingOddsAway": 2.41,"highestClosingHome": 2.76,"highestClosingDraw": 4.2,"highestClosingAway": 2.5,"bookmakerCount": 12,"oddsMarket": "1X2","venue": "Amex Stadium","awayTeamImageUrl": "https://www.betexplorer.com/res/images/team-logo/Wh0Sh09K-h2pPXz3k.png","bookmakers": [{ "bookmaker": "1xBet", "closingHome": 2.76, "closingDraw": 4.1, "closingAway": 2.36, "openingHome": 2.11, "openingDraw": 4.23, "openingAway": 3.28, "closedAt": "2024-05-19T15:55" },{ "bookmaker": "888sport", "closingHome": 2.5, "closingDraw": 3.8, "closingAway": 2.5, "openingHome": 2.05, "openingDraw": 4, "openingAway": 3.2, "closedAt": "2024-05-19T15:33" },{ "bookmaker": "bet365", "closingHome": 2.6, "closingDraw": 4, "closingAway": 2.38, "openingHome": 2.2, "openingDraw": 4, "openingAway": 2.8, "closedAt": "2024-05-19T15:43" }],"scrapedAt": "2026-09-09T19:44:41.872Z","error": null}]
β¨ Why choose this Actor
| What you get | |
|---|---|
| Both ends of the market | Opening and closing prices on the same row. Line movement becomes a column you can regress on instead of a number you have to reconstruct. |
| Real depth, not a screenshot | Each average is computed from the bookmakers BetExplorer actually tracked, and bookmakerCount tells you how many stood behind it. |
| The archive, swept for you | Extra seasons come from the league's own season picker, so one URL plus a number reaches 1999/2000 without hand-built links. |
| 33 columns, one shape | Every row has the same keys in the same order, so CSV imports, joins and Excel filters behave across sports. |
| No blanks, no nulls | A value the market does not carry is N/A, a value BetExplorer withholds is Not Disclosed, never an empty cell. |
| Honest ceilings | The Actor states where odds coverage starts and which competitions BetExplorer truncates, instead of letting you discover it after the run. |
| Fast and cheap | HTTP only, 1 GB of memory, no browser to warm up and no proxy needed. |
π How it compares to alternatives
| Feature | This Actor | Typical BetExplorer and odds scrapers | By hand |
|---|---|---|---|
| Fields per match | 33 | 8 to 15 | Whatever you copy |
| Opening price per outcome | Yes, averaged across the book | No | One bookmaker at a time, on hover |
| Closing price per outcome | Yes, averaged across the book | Usually the table average only | Yes |
| Best available closing price | Yes | Rarely | Manual scan |
| Bookmaker count behind the average | Yes | No | Count them yourself |
| Full odds book per match | Yes, with per-bookmaker timestamps | Sometimes | Behind a click each |
| Multi-season archive sweep | Yes, from the site's own season picker | Build every URL yourself | Season by season |
| Sports covered | 7 | Usually football only | Any, slowly |
| Period and half scores | Yes | Rarely | Behind a click |
| Memory and speed | 1 GB, HTTP only | Often a browser at 4 GB | Hours |
π How to use
- Create a free Apify account with $5 in credit.
- Open the BetExplorer Odds Scraper.
- Paste one or more BetExplorer URLs, set Max Items, choose how many extra seasons to sweep, and click Start.
- Download the dataset as CSV, Excel, JSON or XML from the Storage tab, or read it through the API.
A first run:
{"startUrls": [{ "url": "https://www.betexplorer.com/football/england/premier-league-2023-2024/results/" }],"maxItems": 10,"seasonsBack": 0,"matchStatus": "played","includeOpeningOdds": true}
To sweep an archive, point at the newest season and raise Extra seasons to crawl: https://www.betexplorer.com/football/spain/laliga/results/ with seasonsBack: 20 walks LaLiga back two decades from the site's own picker.
Free-plan runs return up to 10 matches as a preview. Upgrade your Apify plan to collect up to 1,000,000 matches per run.
πΌ Business use cases
π Closing-line-value backtests. A betting syndicate pulls ten seasons of a league, joins its own historical picks on matchId, and scores every bet against closingOddsHome, closingOddsDraw and closingOddsAway to measure whether its model really beats the close.
π Steam and drift detection. An analyst computes closingOddsHome / openingOddsHome across a season, ranks the matches where the price collapsed, and checks how often the market was right.
π¦ Book benchmarking. A trading desk expands the bookmakers array, compares one book's closing price against the market average and highestClosingHome, and finds the fixtures where it was consistently the worst price on the board.
π¬ Market efficiency research. A quantitative research team builds a twenty-season panel of opening and closing prices across seven sports and tests whether favourite-longshot bias shrank as the number of tracked bookmakers grew.
π Automating BetExplorer Odds Scraper
- Make and Zapier: run the Actor after each matchday and append the settled rows to Google Sheets or Airtable.
- Slack: post a message when a match closes more than 20 percent away from where it opened.
- Airbyte: sync the dataset into BigQuery, Snowflake or Postgres and keep a rolling odds warehouse.
- GitHub Actions: refresh a league's season file every night and commit the CSV.
- Google Drive: save each season sweep as an Excel file in a shared folder.
Every integration starts from the Apify API or the ApifyClient for JavaScript and Python.
π Beyond business use cases
- Research: study how closing prices in the same league moved across two decades of rule changes and bookmaker consolidation.
- Personal: keep a private record of how the market priced your team every week of the season.
- Non-profit: a responsible-gambling charity measures how far recreational prices sit from the best available price.
- Experimentation: feed opening and closing prices into a simple model and see whether the drift alone predicts anything.
π€ Ask an AI assistant about this scraper
Give an AI agent live access to BetExplorer odds through the Model Context Protocol:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/betexplorer-odds-scraper"
Then ask in plain language, for example "Pull the 2023/2024 Premier League season and list the ten matches where the home price moved furthest between opening and closing".
β Frequently Asked Questions
π Which BetExplorer URLs can I paste?
League pages, dated season pages, /results/ and /fixtures/ pages, and single match URLs. A plain league URL collects both results and fixtures; add /results/ or /fixtures/ to pick one.
π How far back do the odds go?
Premier League odds are complete back to 1999/2000. The 1995/1996 season has results and no odds. Results themselves reach much further, and the English season picker holds 116 seasons. Smaller leagues start later, so check the season you need before planning a large sweep.
ποΈ How does the season sweep work?
Set Extra seasons to crawl to N and the Actor reads the season picker on each league page you passed, then queues the N seasons immediately before it. It expands only the URLs you supplied, so the sweep cannot run away from you.
π Where do the opening odds come from?
From each bookmaker's own price-movement log on BetExplorer, the same data the site shows when you hover an odds cell. The first entry in that log is the opening price. A price that never moved has no log, and its opening price equals its closing price.
β‘ Can I make the run faster?
Turn Include opening odds off. Reading the movement logs costs about one request per bookmaker per outcome, roughly 30 requests for a football match. Without them the Actor needs two requests per match, and the opening columns come back as N/A.
π¦ What is bookmakerCount for?
It is the sample size behind every average on the row. A match with 20 bookmakers gives a far more reliable closing price than one with 2, and a scheduled match whose market has not opened yet returns 0.
π Are the closing odds an average or a single bookmaker?
An average across every bookmaker BetExplorer tracked for that match. highestClosingHome, highestClosingDraw and highestClosingAway give the best price on the board, and the bookmakers array gives every individual price.
π Which sports work?
Football, hockey, basketball, tennis, baseball, handball and volleyball. Football, hockey and handball use the 1X2 market; the rest use Home/Away, and the draw columns come back as N/A.
π¦ How many matches can I collect from one URL?
A football league season returns in full: 380 for a Premier League season, 552 for a Championship season. NBA and NHL regular seasons are the exception, and BetExplorer serves a window of roughly 50 to 260 games per stage rather than the full schedule. Play-offs, pre-season and All-Star stages come back complete.
π‘οΈ Do I need a proxy?
Not to get the data. BetExplorer serves every page to plain HTTP clients and the proxy input ships switched off. A proxy changes something else: how deep the odds book is.
π Why does my bookmakerCount look low?
BetExplorer shows the bookmakers licensed where the request comes from, and Apify's default egress is the United States. On one Premier League match the same request returned 12 bookmakers from Malta, 9 from the United Kingdom, 4 from Germany and 2 from the United States. Switch the proxy on and pick a residential country to widen the book; the Actor also prints a hint when it notices a thin book and no proxy. Match coverage, scores and season depth are the same either way.
β οΈ What do N/A and Not Disclosed mean?
N/A marks a field that does not apply, such as the draw price in a Home/Away market or a score for a match that has not been played. Not Disclosed marks a value BetExplorer itself does not carry, such as the venue of an older fixture.
π Can the same match appear twice?
No. Rows are deduplicated on BetExplorer's own event id, so a match that shows up on both a stage page and a season page is billed once.
β° Can I run this on a schedule?
Yes. Schedule the Actor in the Apify Console to run after each matchday and it will collect the newly settled matches with their closing prices.
π What output formats are supported?
CSV, JSON, Excel and XML, plus the Apify API and every integration on the Actor page.
β What happens when a page fails?
The Actor retries three times, then writes a row carrying only an error message so you can see exactly which URL failed. Error rows are never billed.
π Integrate with any app
The dataset is available through the Apify API the moment the run finishes. Use the run-sync-get-dataset-items endpoint for one-shot calls, webhooks to trigger downstream jobs, or the Make, Zapier, Airbyte and LangChain integrations listed on the Actor page.
π Recommended Actors
- Flashscore Match Results Scraper
- Football-Data.co.uk Scraper
- Pinnacle Sportsbook Odds Scraper
- SportyTrader Scraper
- Action Network Scraper
π‘ Pro Tip: browse the complete ParseForge collection.
π Need Help? Open our contact form with your run ID, your input and what you expected.
β οΈ Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by BetExplorer or the Flashscore group. It collects only publicly available data. You are responsible for using the data in compliance with BetExplorer's terms of use and applicable laws, including the gambling regulations in your jurisdiction.