Tennis Rankings Scraper — ATP & WTA Rankings
Pricing
from $1.00 / 1,000 ranking records
Tennis Rankings Scraper — ATP & WTA Rankings
Scrape current ATP (men's) and WTA (women's) tennis rankings: rank, previous rank, rank change, points, player name, age and country. Covers the top 150 per tour from ESPN's public JSON data, with no browser.
Pricing
from $1.00 / 1,000 ranking records
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
4
Monthly active users
19 days ago
Last modified
Categories
Share
What is Tennis Rankings Scraper?
Tennis Rankings Scraper returns the current ATP and WTA singles rankings as one row per player: rank, previous rank, rank change, trend, ranking points, player name, country, and optionally age, birthplace, headshot and player page. Sports apps, fantasy and betting analysts, journalists, data teams and AI agents use it to keep tennis rankings up to date in their own tools, with no API key.
Why sports data teams use it
- Both tours in one run. ATP (men) and WTA (women) rankings together, or one at a time.
- Movement built in.
previousRank,rankChangeandtrendshow who is rising and falling. - Player details. Age, birthplace, headshot and player page with
includeAthleteDetails. - As deep as you need. From the top 10 to the top 150 per tour.
- Pay per player row. One small charge per ranking row.
How to use it
Top 50 on both tours:
{"tours": ["atp", "wta"],"maxResultsPerTour": 50}
WTA top 150 with player details:
{"tours": ["wta"],"maxResultsPerTour": 150,"includeAthleteDetails": true}
| Input | What it controls |
|---|---|
tours | atp, wta or both (default both) |
maxResultsPerTour | Players per tour, in rank order (default 150) |
maxResults | Total players across tours (default 300) |
includeAthleteDetails | Add age, birthplace, headshot and player page (default on) |
Output: tennis ranking data you receive
A real ATP row:
{"tour": "atp","tourName": "ATP (men)","rank": 1,"previousRank": 1,"rankChange": 0,"trend": "same","points": 11000,"playerId": "3623","playerName": "Jannik Sinner","country": "Italy","countryCode": "ITA","age": 25,"birthPlace": "San Candido, Italy","headshotUrl": "https://a.espncdn.com/i/headshots/tennis/players/full/3623.png","playerUrl": "https://www.espn.com/tennis/player/_/id/3623/jannik-sinner","scrapedAt": "2026-10-01T19:02:59.963Z"}
| Field | What it contains |
|---|---|
tour, tourName | ATP or WTA |
rank, previousRank, rankChange, trend | Current rank and movement since the last ranking |
points | Ranking points |
playerId, playerName, firstName, lastName | The player |
country, countryCode | Nationality |
age, birthPlace, headshotUrl, playerUrl | Player details, with includeAthleteDetails |
OUTPUT in the default key-value store reports the run outcome and rows saved per tour.
Example workflow: a weekly rankings widget
A tennis blog shows a live top-20 table on its homepage. A task runs every Monday after the ranking update with maxResultsPerTour at 20, and an integration pushes rank, rankChange and headshotUrl into the site's widget. Big movers (rankChange of 5 or more) get a short write-up. For deeper sports data such as fixtures and results, they pair it with Flashscore Scraper.
Pricing
This Actor uses Pay per event. Apify platform usage is included in the event price. You pay one event per player row, plus a start event per run. The live Pricing tab on this page shows the current price.
- Top 50 on both tours = 100 result events.
maxResultscaps each run, so it doubles as a cost ceiling.
Sports data with AI agents (MCP)
Connect this Actor to an AI agent through Apify MCP and ask in plain language:
Who are the top 10 in the WTA rankings this week, and who moved up the most?
Agent checklist:
- Set
toursandmaxResultsPerTourfrom the question. - Read rows with
get-dataset-items; sort byrankChangefor movers. - Quote
pointsandranktogether.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~tennis-rankings-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"tours": ["atp"], "maxResultsPerTour": 20}'
Related sports tools from the same developer
| Your next step | Use | Why |
|---|---|---|
| When you then want matches and results | Flashscore Scraper | Fixtures, scores and results across sports |
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| A homepage table | Use a small maxResultsPerTour | Just the top players |
| Weekly updates | Schedule a task after the ranking release | A fresh ranking each week |
| Lighter rows | Turn off includeAthleteDetails | Rank, points and country only |
Builder's note
I found that most people want to know who moved, not only who leads, so every row carries the previous rank and the change. I learned that apps need images and links for each player, so headshots and player pages come in the same row.
FAQ
Do I need an API key?
No. The Actor reads public ranking data.
How often do rankings change?
The ATP and WTA publish new rankings weekly, usually on Mondays, with extra updates during big events.
Does it include doubles?
It returns singles rankings.
How deep can I go?
Up to 150 players per tour.
Responsible use
This Actor collects public tennis ranking data. Use it with attribution where your publication requires it and follow the source's terms. Read Apify's guide on whether web scraping is legal for more context. ATP and WTA are trademarks of their owners. This independent Actor is not affiliated with, associated with, or endorsed by the ATP, the WTA or ESPN. For questions or bugs, open a ticket in the Issues tab.