TennisExplorer Scraper: Tennis Results & Betting Odds
Pricing
from $1.00 / 1,000 dataset items
TennisExplorer Scraper: Tennis Results & Betting Odds
Tennis results and betting odds from TennisExplorer: every ATP, WTA, Challenger, ITF and UTR match since 2005 with set scores, retired/walkover status and closing odds. Optional per-bookmaker odds with opening price and line movement, H2H, fixtures, player seasons, rankings.
Pricing
from $1.00 / 1,000 dataset items
Rating
0.0
(0)
Developer
axly
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Get every professional tennis match from TennisExplorer: ATP, WTA, Challenger, ITF and UTR, singles and doubles, back to 2005, with set and tiebreak scores, retired/walkover status, UTC start times and the average closing odds. Turn on match details to add odds from ~15 bookmakers for match winner, over/under, Asian handicap and correct score, each with its opening price and full line movement, plus head-to-head and player bios.
Built for tennis bettors and modellers who need historical results and odds for backtesting, tipster and odds-comparison sites, and sports-data analysts. One run covers a full date range; no proxy or login needed.
What you get
| Field | Description |
|---|---|
matchId, matchUrl | TennisExplorer match id and link |
date, startTimeLocal, startTimeUtc | Day (Central European calendar, as on the site), local time and UTC start |
matchType | atp-single, wta-single, atp-double, wta-double |
tournament | name, slug, url, year, countryCode, level (tour, challenger, itf, utr) |
player1, player2 | name, slug, url, seed (doubles: a list of two players) |
status | finished, retired, walkover, scheduled |
winner | 1 or 2 |
setsWon, sets, score | Sets won, games per set with tiebreak points, score text 7-6(5), 6-4 |
odds | Average odds for player 1 / player 2 over the listed bookmakers (closing odds for finished matches) |
h2h | Head-to-head record before the match (fixtures) |
With Include bookmaker odds history, H2H and player bios:
| Field | Description |
|---|---|
round, surface | e.g. quarterfinal, clay / hard / indoors / grass |
player1/2.rank, birthdate, heightCm, weightKg, plays, fullName | Player bio at match time |
h2hRecord | Wins each and the list of meetings with scores, surface and round (includes this match once it is played) |
bookmakerOdds.matchWinner[] | Per bookmaker: current odds, opening, openingTime, lastChangeTime, trend, best, history[] (every move with UTC time) |
bookmakerOdds.overUnder[] | Sets and games totals lines, over/under odds per bookmaker |
bookmakerOdds.asianHandicap[] | Set and game handicaps per bookmaker |
bookmakerOdds.correctScore[] | Correct score odds per bookmaker |
bookmakerOdds.summary | Number of bookmakers, average, best and average opening odds per player |
Players mode returns one row per match of a player's season (date, tournament, surface, round, opponent, result, score, odds for player and opponent) plus the player's profile (country, height, weight, birthdate, current and highest rank). Rankings mode returns rank, movement, player, country and points for ATP/WTA singles, doubles or race, for any published ranking date back to 1998.
Use cases
- Betting model backtests: years of results with closing odds in one dataset; compare opening vs closing prices to measure line movement and closing-line value.
- Odds monitoring: schedule fixtures every hour to track pre-match line moves per bookmaker.
- Tipster and media sites: daily results, upcoming matches with H2H and odds.
- Player and surface research: full season match lists per player with surface and round.
- Rankings history: weekly ATP/WTA ranking snapshots for trend analysis.
Input
| Field | Default | Notes |
|---|---|---|
mode | matches | matches (results by date range), fixtures (upcoming), players, rankings |
startDate, endDate | yesterday | YYYY-MM-DD or today, yesterday, tomorrow, -7, +1; up to 366 days per run |
matchTypes | ATP + WTA singles | add doubles if needed |
levels | all | tour, challenger, itf, utr |
statuses | all | finished, retired, walkover, scheduled |
onlyWithOdds | false | skip matches without odds |
tournaments | — | name filter, e.g. Wimbledon |
players | — | names, slugs or URLs: filter (results/fixtures) or source (players mode) |
seasons | current | players mode, e.g. ["2024", "2025"] |
includeMatchDetails | false | bookmaker odds history, H2H, bios (one extra page per match) |
oddsHistory | true | false keeps only current + opening odds per bookmaker |
rankingTours, rankingKind, rankingDate, maxRank | ATP+WTA, singles, latest, 100 | rankings mode |
maxItems | 500 | cap on rows |
Example: all tour-level matches of Wimbledon 2025 with bookmaker odds
{"mode": "matches","startDate": "2025-06-30","endDate": "2025-07-13","matchTypes": ["atp-single", "wta-single"],"tournaments": ["Wimbledon"],"includeMatchDetails": true,"maxItems": 300}
Example output
{"matchId": 3353241,"matchUrl": "https://www.tennisexplorer.com/match-detail/?id=3353241","matchType": "atp-single","date": "2026-10-20","startTimeUtc": "2026-10-20T14:40:00Z","tournament": {"name": "Almaty", "slug": "almaty", "year": 2026, "countryCode": "kz", "level": "tour"},"player1": {"name": "Khachanov K.", "slug": "khachanov", "seed": "5", "rank": 25, "birthdate": "1996-05-21", "heightCm": 198, "plays": "right"},"player2": {"name": "Sakamoto R.", "slug": "sakamoto-9c9d5", "seed": null, "rank": 124, "birthdate": "2006-06-24", "plays": "right"},"status": "finished","winner": 1,"setsWon": {"player1": 2, "player2": 0},"sets": [{"player1": 6, "player2": 2, "player1Tiebreak": null, "player2Tiebreak": null},{"player1": 6, "player2": 4, "player1Tiebreak": null, "player2Tiebreak": null}],"score": "6-2, 6-4","odds": {"player1": 1.36, "player2": 3.07},"round": "1. round","surface": "indoors","bookmakerOdds": {"matchWinner": [{"bookmaker": "10Bet","player1": {"odds": 1.35, "opening": 1.48, "openingTime": "2026-10-18T17:22:00Z", "trend": "down","history": [{"time": "2026-10-18T17:22:00Z", "odds": 1.48}, {"time": "2026-10-19T06:21:00Z", "odds": 1.45}]},"player2": {"odds": 3.0, "opening": 2.55, "openingTime": "2026-10-18T17:22:00Z", "trend": "up"}}],"summary": {"bookmakers": 15, "player1": {"average": 1.361, "max": 1.39, "openingAverage": 1.437},"player2": {"average": 3.069, "max": 3.33, "openingAverage": 2.67}}}}
Scheduling and integrations
Schedule the actor in Apify (e.g. mode: matches, startDate: yesterday every morning, or mode: fixtures hourly) and
send results to Google Sheets, Make, Zapier, n8n, a webhook or your database through the Apify API. Interrupted runs
resume where they stopped and never duplicate matches.
Use with AI assistants (MCP)
The actor works as a tool in Apify's MCP server, so Claude, ChatGPT or Cursor can call it ("get yesterday's ATP results with closing odds") and receive the dataset directly.
FAQ
How far back does the data go? Results to 2005. Spot checks found odds on every tour-level match back to 2008; lower-level events (ITF, early years) often have none. Rankings to 1998.
Which odds are in odds? The site's average over the bookmakers it lists. For finished matches this is the
closing price. bookmakerOdds gives each bookmaker separately with opening price and every move.
How are retired and walkover detected? The site doesn't label them. A result with no games played is a walkover; a
result whose final set isn't complete (e.g. 3-6, 6-4, 4-0) is a retirement.
Exhibitions with short sets? Formats with sets to 4 games (Next Gen Finals, Fast4) are marked finished when a
player wins 3 sets; a 2-set short-format match can show as retired.
Which time zone are dates in? date follows the site's calendar (Central European time). startTimeUtc and all odds
timestamps are UTC.
Do I need a proxy? No. The actor runs without proxy; you can still set one.
Is it legal? The actor reads public pages at a polite rate (about one page per second). Check TennisExplorer's terms and your local rules for your use case, especially for commercial redistribution.
Something broken or missing? Open an issue on the Issues tab.