BetExplorer Odds Scraper avatar

BetExplorer Odds Scraper

Pricing

from $3.62 / 1,000 results

Go to Apify Store
BetExplorer Odds Scraper

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

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

ParseForge Banner

πŸ“‰ 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 buildersBacktest a strategy against real closing prices instead of a bookmaker's current screen
Sports data analystsMeasure line movement from open to close as a market-efficiency signal
Trading and risk teamsCompare a book's own closing price against the market average and the best price available
Researchers and studentsBuild 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/A instead of blank cells when a value does not apply.

🎬 Full Demo (🚧 Coming soon)

A short walkthrough video is in production.

πŸ“Š Output

FieldTypeDescription
πŸ–Ό imageUrlstringHome team crest, or the player photo in tennis
πŸ”— matchUrlstringThe match page on BetExplorer
πŸ†” matchIdstringBetExplorer's own event id, stable across pages
πŸ† sportstringFootball, Hockey, Basketball, Tennis, Baseball, Handball, Volleyball
🌍 countrystringCountry or region the competition belongs to
🏟 leaguestringCompetition name without the season
πŸ“… seasonstringSeason label, for example 2023/2024
πŸ”’ roundstringRound number, or the stage name in a knockout
🏠 homeTeamstringHome team or first player
πŸ›« awayTeamstringAway team or second player
⏱ kickoffIsostringKickoff in ISO 8601 with time zone
πŸ“Œ statusstringFinished, Scheduled, Live, Postponed or Cancelled
πŸ₯‡ resultstringHome, Draw, Away, or N/A when unplayed
πŸ”  scorestringFinal score as 2:1
πŸ”΅ homeScoreintegerGoals, points or sets for the home side
πŸ”΄ awayScoreintegerGoals, points or sets for the away side
⏳ partialScorestringPeriod, set or half scores
πŸ“ˆ openingOddsHomenumberAverage opening price on the home win
πŸ“ˆ openingOddsDrawnumberAverage opening price on the draw, N/A in Home/Away markets
πŸ“ˆ openingOddsAwaynumberAverage opening price on the away win
πŸ“‰ closingOddsHomenumberAverage closing price on the home win
πŸ“‰ closingOddsDrawnumberAverage closing price on the draw, N/A in Home/Away markets
πŸ“‰ closingOddsAwaynumberAverage closing price on the away win
⭐ highestClosingHomenumberBest closing price any tracked bookmaker offered on the home win
⭐ highestClosingDrawnumberBest closing price on the draw
⭐ highestClosingAwaynumberBest closing price on the away win
🏦 bookmakerCountintegerBookmakers behind the averages for this match
🎯 oddsMarketstring1X2 or Home/Away
πŸ“ venuestringStadium or arena, Not Disclosed when BetExplorer has none
πŸ–Ό awayTeamImageUrlstringAway team crest or player photo
πŸ“š bookmakersarrayEvery bookmaker with its own opening price, closing price and timestamp
πŸ•’ scrapedAtstringISO timestamp of the run
❌ errorstringPopulated 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 marketOpening 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 screenshotEach average is computed from the bookmakers BetExplorer actually tracked, and bookmakerCount tells you how many stood behind it.
The archive, swept for youExtra 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 shapeEvery row has the same keys in the same order, so CSV imports, joins and Excel filters behave across sports.
No blanks, no nullsA value the market does not carry is N/A, a value BetExplorer withholds is Not Disclosed, never an empty cell.
Honest ceilingsThe Actor states where odds coverage starts and which competitions BetExplorer truncates, instead of letting you discover it after the run.
Fast and cheapHTTP only, 1 GB of memory, no browser to warm up and no proxy needed.

πŸ“ˆ How it compares to alternatives

FeatureThis ActorTypical BetExplorer and odds scrapersBy hand
Fields per match338 to 15Whatever you copy
Opening price per outcomeYes, averaged across the bookNoOne bookmaker at a time, on hover
Closing price per outcomeYes, averaged across the bookUsually the table average onlyYes
Best available closing priceYesRarelyManual scan
Bookmaker count behind the averageYesNoCount them yourself
Full odds book per matchYes, with per-bookmaker timestampsSometimesBehind a click each
Multi-season archive sweepYes, from the site's own season pickerBuild every URL yourselfSeason by season
Sports covered7Usually football onlyAny, slowly
Period and half scoresYesRarelyBehind a click
Memory and speed1 GB, HTTP onlyOften a browser at 4 GBHours

πŸš€ How to use

  1. Create a free Apify account with $5 in credit.
  2. Open the BetExplorer Odds Scraper.
  3. Paste one or more BetExplorer URLs, set Max Items, choose how many extra seasons to sweep, and click Start.
  4. 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.


πŸ’‘ 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.