Tennis Explorer Stats Scraper
Pricing
from $5.46 / 1,000 results
Tennis Explorer Stats Scraper
Get ATP and WTA match results, upcoming fixtures with odds, rankings, and player profiles by name, not an internal ID. No login needed. Built for fantasy tennis players, bettors, analysts, and journalists who need clean, accurate tennis data fast.
Pricing
from $5.46 / 1,000 results
Rating
0.0
(0)
Developer
Fabricio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Tennis Stats Scraper
Get ATP and WTA match results, upcoming fixtures, betting odds, rankings and full player profiles. Search by player name, not an internal ID. No login, no API key.
Who uses it?
| Who | Why |
|---|---|
| Fantasy tennis players | Fresh results and player form to set a lineup. |
| Bettors | Odds alongside results to backtest a model, plus pre-match odds on upcoming fixtures. |
| Analysts | Rankings, head to head records and match detail for building historical datasets. |
| Journalists | Daily results and player bios to write up quickly, without digging through a site by hand. |
What it does
- Match results, by date or date range, filtered by tour (ATP or WTA, singles or doubles). Every row has the score set by set, who won, and the odds that were listed for both players.
- Upcoming fixtures, the same way, for matches that have not been played yet, with pre-match odds where the market is already open.
- Rankings, ATP and WTA, current or from a past year.
- Player profiles, searched by name: country, height, weight, age, plays which hand, and current plus career-best rank in both singles and doubles.
- An optional match detail add-on for Match results and Upcoming fixtures: the court surface, the round, the head to head record between the two players, and average plus best odds across every bookmaker tracked. This is the one thing none of the other tennis scrapers on Apify pull together in a single run.
What data you get
| Mode | Row shape |
|---|---|
| Match results | Tournament, date, time, both players, score, winner, odds. With match detail: surface, round, head to head, aggregated odds. |
| Upcoming fixtures | Same shape as Match results, before the match is played: no score or winner yet. |
| Rankings | Rank, move since last update, player, country, points, tour, year. |
| Player profiles | Name, country, height, weight, age, plays, current and career-best rank in singles and doubles, photo. |
Use cases
A daily results feed.
{ "mode": "results", "date": "yesterday", "tour": "atp-single" }
Betting research with odds aggregated across every bookmaker tracked.
{ "mode": "results", "date": "2026-08-09", "tour": "atp-single", "includeMatchDetail": true }
Every row also carries best_odds_player1 / best_odds_player2 (the best price found across every bookmaker tracked) and avg_odds_player1 / avg_odds_player2 (the average across all of them), not just one bookmaker's number.
Tomorrow's card with pre-match odds.
{ "mode": "upcoming", "date": "today", "tour": "wta-single" }
A player's current form.
{ "mode": "players", "playerNames": ["Carlos Alcaraz", "Iga Swiatek"] }
Where a player stood at a specific point in history.
{ "mode": "rankings", "rankingTour": "atp-men", "rankingYear": 2020 }
How the input is organised
| Section | Applies to | Key fields |
|---|---|---|
| Mode | Every run | mode: results, upcoming, rankings, or players. |
| Match results and Upcoming fixtures | results and upcoming | date (or dateFrom/dateTo), tour, includeMatchDetail. |
| Rankings | rankings | rankingTour, rankingYear (optional, leave empty for the current table). |
| Player profiles | players | playerNames (searched by name) or playerIds (a known ID from a previous run). |
maxItems applies to every mode and caps how many rows the run writes.
Limits and responsible use
- Match statistics like aces or double faults are not tracked by this Actor. The source does not consistently publish them for every match, especially lower-tier events, so a field that is empty most of the time was left out rather than shipped half-working.
- Match detail's odds are a summary (best price and average across tracked bookmakers), not a full line-movement history for every bookmaker. That level of detail is a lot of nested data for a use case almost nobody needs; if you do need it, say so and it can be added.
- Odds are whatever was listed at scrape time. Pre-match odds move right up until a match starts, and this Actor does not guarantee it caught the final price.
- This Actor reads only public pages. It respects reasonable request rates and does not require or store any login.
Local development
bun installbun test # unit tests against saved sample pagesbun run src/main.ts # local run, reads storage/key_value_stores/default/INPUT.json