ATP & WTA Tennis Rankings - Current & Weekly History
Pricing
from $0.70 / 1,000 ranking rows
ATP & WTA Tennis Rankings - Current & Weekly History
ATP and WTA rankings as data: today's top 100, any past week (ATP from 1973, WTA from 2001) or every weekly list of a season, with rank, points and movement. Optional Jeff Sackmann layout, plus every ATP and WTA player. Works as an MCP tool for AI agents.
Pricing
from $0.70 / 1,000 ranking rows
Rating
0.0
(0)
Developer
CrawlPlant
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Share
Independent tool, not affiliated with, endorsed by or connected to Jeff Sackmann, Tennis Abstract, Flashscore, the ATP, the WTA or the ITF. It reads the official ATP and WTA ranking lists and player profiles.
The ATP and WTA rankings as data: today's top 100, the list of any past week, or every weekly list of a whole season.
One row per player with rank, points, movement since the previous list, country and age; ATP lists go back to 1973, WTA
lists to 2001. Ask for the layout of Jeff Sackmann's atp_rankings / wta_rankings CSV files and code that reads
his files keeps working. A second mode returns every ATP and WTA player in the columns of his atp_players /
wta_players files.
Related runnable examples
Explore the same tennis research workflows in our example repository. These recipes currently call the broader Flashscore Tennis Scraper or Match Dataset Actor; they are companion examples, not direct calls to this specialized Actor.
- Export a bounded ATP/WTA ranking snapshot
- Retrieve a dated ranking list
- Retrieve grass-court Elo ratings
Follow the Python setup and .env guide with your own APIFY_TOKEN, or browse the complete catalog and AI assistant instructions. Actor runs follow Apify pricing; the quickstart explains per-run spending limits.
Why this one
- Any week since 1973 (ATP) and 2001 (WTA). Set a date and get that week's list; set a second date and get every weekly list in between, in one run.
- A whole season in one run. Every weekly top-100 list of 2024 is 4,400 rows per tour and costs about $4.40.
- Top N only.
maxRank: 100keeps the top 100 of each list and you pay only for those rows. - Same columns as the open dataset. With
rankingFormat: "sackmann"the rows carryranking_date,rank,player,points, plus the player'sname,official_idandlist: drop-in for notebooks written against his files. - Every list. Singles, season race and doubles rankings for both tours.
- Player lists. Every official ATP and WTA player with ids and names, plus playing hand, birth date, height and
country where known, in his
atp_players/wta_playerscolumns, to join ids to names. - Current. The latest list is read the week it is published.
- See it live. The ranking weeks stored for each tour, from the same database your runs read: crawlplant.com/tennis-rankings.
What can you use it for?
- Prediction models: the rank and points a player had in the week of a match.
- Journalism and research: rank histories, how long a player stayed in the top 10, ranking movement by season.
- Apps and fantasy sites: a current top-100 table without maintaining your own scraper.
- AI agents: "who was number 1 on 1 January 2000?" answered from the list itself.
Quick start
- Click Try for free with the default input (the current ATP and WTA top 100, 200 rows).
- Pick Ranking lists, a Ranking date (and Ranking date to for a range), and set Max results above the rows you expect.
- Download the table as CSV, Excel or JSON, or save the input as a task and schedule it weekly to keep a dataset current.
Copy to your AI assistant
Paste this into ChatGPT, Claude or any agent so it knows how to use the Actor:
crawlplant/tennis-rankings on Apify: ATP / WTA rankings. Input: mode (rankings | playerList), rankingLists (atp, wta,atp-race, wta-race, atp-doubles, wta-doubles; default atp + wta), rankingDate (YYYY-MM-DD; ATP from 1973, WTA from 2001;empty = latest), rankingDateTo (every weekly list from rankingDate to it), maxRank (top N only, default 100),rankingFormat (standard | sackmann = his atp_rankings columns), maxItems (default 200).Row (standard): list, rankingDate, rank, previousRank, rankChange, name, playerId, country, points, officialId, birthDate.Row (sackmann): ranking_date, rank, player, points, name, official_id, list. playerList row: player_id, name_first,name_last, hand, dob, ioc, height, official_id, tour.Price: $1.00 per 1,000 ranking rows, $3.00 per 1,000 players on the Free plan.
Ready-to-use examples
1. The current ATP and WTA top 100 (200 rows, $0.20)
{ "maxRank": 100 }
2. The ATP top 100 of one past week (100 rows, $0.10)
{ "rankingLists": ["atp"], "rankingDate": "2000-01-01", "maxRank": 100, "maxItems": 100 }
3. Every weekly ATP top-100 list of 2024 in Jeff Sackmann's atp_rankings columns (4,400 rows, ~$4.40)
{ "rankingLists": ["atp"], "rankingDate": "2024-01-01", "rankingDateTo": "2024-12-31", "maxRank": 100, "rankingFormat": "sackmann", "maxItems": 6000 }
4. The ATP player list in Jeff Sackmann's atp_players columns (500 players, $1.50)
{ "mode": "playerList", "rankingLists": ["atp"], "maxItems": 500 }
5. Every weekly WTA top-50 list of 2025 in Jeff Sackmann's wta_rankings columns (~2,600 rows, ~$2.60)
{ "rankingLists": ["wta"], "rankingDate": "2025-01-01", "rankingDateTo": "2025-12-31", "maxRank": 50, "rankingFormat": "sackmann", "maxItems": 3000 }
6. The race rankings (season points), top 50 of each (100 rows, $0.10)
{ "rankingLists": ["atp-race", "wta-race"], "maxRank": 50 }
How to…
Get the current ATP and WTA rankings
Run the default input: the top 100 of both singles lists. Use rankingLists for one tour, the race or the doubles lists.
Get the ranking of a past date
Set rankingDate to any day (example 2): you get the list of the week containing it. ATP lists start in 1973, WTA lists
in 2001.
Download every weekly ranking list of a season
Set rankingDate and rankingDateTo (example 3). Each weekly list is a set of rows with its own ranking_date; raise
maxItems above the total (52 lists x the top N you keep).
Get the list of all ATP or WTA players
Use mode: "playerList" (example 4): ids and names, plus hand, birth date, country and height where known, in his
player-file columns.
Input options
| Option | Default | Description |
|---|---|---|
mode | rankings | rankings or playerList |
rankingLists | atp, wta | atp, wta, atp-race, wta-race, atp-doubles, wta-doubles (player list: atp, wta) |
rankingDate | latest | A date (YYYY-MM-DD): the list of that week |
rankingDateTo | none | With a date: every weekly list up to this date |
maxRank | 100 | Only players ranked this high or better; set 5000 for every ranked player, and raise maxItems above the row count too |
rankingFormat | standard | standard or sackmann |
maxItems | 200 | Maximum rows in total |
Output fields
| Field | Description |
|---|---|
list, rankingDate | atp, wta, atp-race...; the date of the list |
rank, previousRank, rankChange | Rank, rank on the previous list, movement |
name, playerId, officialId, country, birthDate | The player and the id on the official ATP / WTA site |
points, tournamentsPlayed | Ranking points and tournaments counted, where the list has them |
ranking_date, player, official_id | Sackmann layout: the date as YYYYMMDD, the player's id and the id on the official site |
player_id, name_first, name_last, hand, dob, ioc, height, tour | Player list, in his player-file columns |
How much do tennis rankings data cost?
Pay per result: platform usage is included. One price per ranking row, one per player.
| Event | No discount (Free plan) | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|
| Ranking row (per 1,000) | $1.00 | $0.90 | $0.80 | $0.70 |
| Player (per 1,000) | $3.00 | $2.70 | $2.40 | $2.10 |
| Actor start (per run) | $0.00005 | $0.00005 | $0.00005 | $0.00005 |
| Example on the Free plan | Rows | Cost |
|---|---|---|
| Default run: current ATP + WTA top 100 | 200 | ~$0.20 |
| One past week, ATP top 100 | 100 | ~$0.10 |
| Every weekly ATP top-100 list of 2024 | 4,400 | ~$4.40 |
| Every weekly WTA top-50 list of 2025 | ~2,600 | ~$2.60 |
| 500 players of the ATP list | 500 | ~$1.50 |
Set a maximum cost per run in the run options to stop a large run at your budget.
Run it through the API
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('crawlplant/tennis-rankings').call({ rankingLists: ['atp'], rankingDate: '2000-01-01', maxRank: 10 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, items[0]);
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("crawlplant/tennis-rankings").call(run_input={"rankingLists": ["wta"], "maxRank": 10})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["rank"], row["name"], row["points"])
Use with AI agents
The Actor works as a tool in the Apify MCP server for Claude, ChatGPT, Cursor and others:
https://mcp.apify.com?tools=crawlplant/tennis-rankings
Try "who was ranked number 1 on the ATP list on 1 January 2000?".
Use it when you need rankings by week or season, or the list of all players with ids.
Not for match results, odds or Elo (use the Flashscore Tennis Scraper).
More tennis data
- Flashscore Tennis Scraper: every match of any day with odds from about 20 bookmakers, head-to-head, form, rankings, player statistics and Elo lists.
- Tennis Live Scores: matches in play now and any day's scores, ATP, WTA, Challenger and ITF.
- Tennis Match History: a player's whole career, match by match, with Elo and serve statistics.
- Tennis Odds Dataset: closing odds with results and Elo, in tennis-data.co.uk's columns.
- ATP & WTA Tennis Match Dataset: whole seasons in Jeff Sackmann's CSV columns.
FAQ
How far back does it go?
ATP lists from 1973, WTA lists from 2001.
Which date do I give for a weekly list?
Any day: you get the list of the week containing it. For every list in a period, give rankingDate and rankingDateTo.
Does maxRank apply to the player list?
No: the player list returns players, not ranks. Use maxItems to cap it.
Is it legal?
The data is public sporting results read without logging in, at a polite pace. How you use and publish them is your responsibility, so check the source's terms for your use case.
Questions, a missing field or a source you need? Open an issue on this Actor: we reply within a day. If it saved you time, a short review helps others find it.
Privacy
The data is about professional players' public sporting results and ranking lists. Each run sends the developer anonymous feature-usage statistics (the options used, never the players you asked for); your Apify account id is replaced by a one-way hash.