Tennis Scraper: Results, Odds, Rankings, Players
Pricing
from $2.80 / 1,000 results
Tennis Scraper: Results, Odds, Rankings, Players
Tennis results, fixtures, tournaments, player history, head-to-head and rankings from public TennisExplorer pages. ATP, WTA, Challenger and ITF matches with set scores and average pre-match odds. No proxy, no login.
Pricing
from $2.80 / 1,000 results
Rating
0.0
(0)
Developer
ZeroLag Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Tennis scraper for ATP, WTA, Challenger and ITF matches. It reads public TennisExplorer pages and gives you results by date, upcoming matches, whole tournaments, player history, head-to-head records, rankings and the tournament calendar as clean rows.
- Price: $4.00 per 1,000 results on the Free plan, $2.80 on Business. Platform usage is included.
- Input: days, a tournament, a player, two players or a ranking date.
- Output: players, winner, set scores, average bookmaker odds, round, surface and start time.
- Measured: 1,143 French Open matches from nine seasons in 10 seconds on Apify.
Found a bug, need a field, or want a new Actor? Open an issue on the Issues tab. If it works well for you, a short review helps others find it.
How to use it
- Pick a job in What to get.
- Fill in the section for that job. Everything else can stay empty.
- Set Maximum results and click Start.
- Export the results as JSON, CSV or Excel.
| What to get | You enter | You get |
|---|---|---|
| Match results by date | Days, or nothing for the latest day with matches | Finished matches with score, odds, round and surface |
| Upcoming matches by date | Days, or nothing for today and tomorrow | Scheduled matches with odds and earlier wins against each other |
| All matches of a tournament | A name or link, and years | The draw as matches, with qualifying if you ask |
| Match history of a player | A name or link | Career matches with surface, round, score and odds |
| Head-to-head of two players | Two names, such as Carlos Alcaraz vs Jannik Sinner | Every match between them |
| Rankings | ATP or WTA, a type and a date | Rank, points, move and country |
| Tournament calendar | Years | Start date, surface, prize money, draw size and singles winner |
Use Tours, Formats and Surfaces to narrow the rows. Singles is the default format. In the tournament mode Tours picks the men's or women's draw.
Example input:
{"mode": "tournament","tournaments": ["Wimbledon"],"yearFrom": 2023,"yearTo": 2024,"includeQualifying": true,"maxItems": 1000}
On 5 November 2026 this input saved 956 Wimbledon matches in 10 seconds.
What data you get
Match rows have the same fields in every mode. A value the source does not show is null.
| Field | What it holds |
|---|---|
matchId, matchUrl | Match ID and link |
status, resultType | finished, in progress or scheduled, then completed, retired or walkover |
date, startTime, startTimeUtc | Date and time in Central European time, and the start in UTC |
tour, gender, format | ATP, WTA, Challenger, ITF or UTR, then men, women or mixed, then singles, doubles or mixed |
tournament, tournamentUrl, tournamentCountry, tournamentPrizeMoney | Tournament details |
surface, round | hard, clay, grass or indoors, then a code such as R16, QF or Q-1R |
player1, player2 and their Id, Url, Seed fields | Players or doubles teams |
winner, winnerSide, score, sets | Result, with each set and tie-break |
player1SetsWon, player2SetsWon | Finished sets won |
oddsPlayer1, oddsPlayer2 | Average decimal odds across bookmakers |
h2hPlayer1, h2hPlayer2 | Earlier wins against each other, for upcoming matches |
queriedPlayerWon | Whether the player you asked for won |
query, sourceUrl, retrievedAt | Where the row came from |
Rankings give rankingDate, rank, rankMove, player, country and points. The calendar gives startDate, level, prizeMoney, singlesDraw, doublesDraw and singlesWinner.
One real row:
{"recordType": "match","matchId": "3362391","matchUrl": "https://www.tennisexplorer.com/match-detail/?id=3362391","status": "finished","resultType": "completed","date": "2026-10-29","startTime": "09:05","startTimeUtc": "2026-10-29T08:05:00.000Z","tour": "WTA","gender": "women","format": "singles","tournament": "Tokyo","tournamentUrl": "https://www.tennisexplorer.com/tokyo/2026/wta-women/","tournamentCountry": "Japan","tournamentPrizeMoney": "1,206,446 $","surface": "hard","round": "R16","player1": "Rybakina E.","player1Id": "rybakina","player1Url": "https://www.tennisexplorer.com/player/rybakina/","player1Seed": "1","player2": "Putintseva Y.","player2Id": "putintseva","player2Url": "https://www.tennisexplorer.com/player/putintseva/","player2Seed": null,"winner": "Rybakina E.","winnerSide": 1,"score": "6-2, 6-3","player1SetsWon": 2,"player2SetsWon": 0,"sets": [{"player1": 6,"player2": 2,"tiebreak": null},{"player1": 6,"player2": 3,"tiebreak": null}],"oddsPlayer1": 1.13,"oddsPlayer2": 5.75,"h2hPlayer1": null,"h2hPlayer2": null,"queriedPlayerWon": null,"query": "2026-10-29","sourceUrl": "https://www.tennisexplorer.com/results/?type=all&year=2026&month=10&day=29","retrievedAt": "2026-11-05T22:50:29.953Z"}
How much does it cost?
You pay for each saved row. Rows that only explain an empty result are free. Each run also has a start charge of $0.00005.
| Plan | Price per 1,000 results |
|---|---|
| Free | $4.00 |
| Starter | $3.60 |
| Scale | $3.20 |
| Business | $2.80 |
Example: a daily run that saves 50 matches is 1,500 results a month. That costs $6.00 on the Free plan and $4.20 on Business.
How to get yesterday's results every morning
Set First day and Last day to 1 day, which counts back from today, then add an Apify Schedule.
{"mode": "results","dateFrom": "1 day","dateTo": "1 day","tours": ["atp", "wta"],"maxItems": 300}
How to check a player on one surface
{"mode": "player","players": ["Iga Swiatek"],"surfaces": ["clay"],"yearFrom": 2022,"maxItems": 300}
Count the rows where queriedPlayerWon is true for the win record. oddsPlayer1 and oddsPlayer2 show how the market saw each match.
Limits
- No live scores. The source leaves most matches blank until they end, so a match in play usually reads as
scheduled. retiredandwalkoverare worked out from the score. The source lists no label. A partial score on a match that started in the last 6 hours reads asin progress.- Round and surface need extra pages. Day pages do not show them, so the run reads each tournament page once. Turn off Add round, surface and prize money for a faster run.
- Men's ITF matches have no round or surface. The source lists them under one heading, such as
Futures 2026, with no tournament page. In date modes UTR events have no round or surface either. - Names differ between pages:
Djokovicon tournament pages,Djokovic N.elsewhere. Join rows onplayer1Idandplayer2Id. - Player and head-to-head rows have no start time. The source shows only the date there.
- Odds are averages, not the odds of one bookmaker. In a sample of French Open draws, odds appear by 2008.
- Pace: about one page per second, on purpose. A long date range takes minutes.
- Player bios and injuries are left out.
API and integrations
Start runs and read results through the Apify API or the JavaScript and Python clients. Use Schedules for repeat runs and webhooks to send the data on when a run ends.
FAQ
Do I need a proxy or a TennisExplorer account? No. The Actor reads public pages with a plain request, and the test runs on Apify used no proxy.
Why is there a row with recordType set to notice?
It explains why part of your input gave nothing, for example a player name that was not found. These rows are free.
How far back does the data go? Calendars go back to 1995 and ranking lists to 1998. In a sample of French Open draws, the 1995 draw has every match with round and score. Start times appear by 2005 and odds by 2008.
Which time zone are the dates in?
date and startTime are Central European time, as the source shows them. startTimeUtc is the same moment in UTC.
Why did a run stop before the end of my date range? It reached Maximum results or your spending limit. The status message says which.
Can I use this data in a commercial product? Check first. The terms of use of TennisExplorer limit commercial use, scraping and copying large parts of its database. You are responsible for how you use the data.
This Actor is an independent tool with no connection to TennisExplorer or Livesport. All trademarks belong to their owners.