ATP & WTA Tennis Rankings - Current & Weekly History avatar

ATP & WTA Tennis Rankings - Current & Weekly History

Pricing

from $0.70 / 1,000 ranking rows

Go to Apify Store
ATP & WTA Tennis Rankings - Current & Weekly History

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

CrawlPlant

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

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.

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.

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: 100 keeps the top 100 of each list and you pay only for those rows.
  • Same columns as the open dataset. With rankingFormat: "sackmann" the rows carry ranking_date, rank, player, points, plus the player's name, official_id and list: 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_players columns, 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

  1. Click Try for free with the default input (the current ATP and WTA top 100, 200 rows).
  2. Pick Ranking lists, a Ranking date (and Ranking date to for a range), and set Max results above the rows you expect.
  3. 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

OptionDefaultDescription
moderankingsrankings or playerList
rankingListsatp, wtaatp, wta, atp-race, wta-race, atp-doubles, wta-doubles (player list: atp, wta)
rankingDatelatestA date (YYYY-MM-DD): the list of that week
rankingDateTononeWith a date: every weekly list up to this date
maxRank100Only players ranked this high or better; set 5000 for every ranked player, and raise maxItems above the row count too
rankingFormatstandardstandard or sackmann
maxItems200Maximum rows in total

Output fields

FieldDescription
list, rankingDateatp, wta, atp-race...; the date of the list
rank, previousRank, rankChangeRank, rank on the previous list, movement
name, playerId, officialId, country, birthDateThe player and the id on the official ATP / WTA site
points, tournamentsPlayedRanking points and tournaments counted, where the list has them
ranking_date, player, official_idSackmann 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, tourPlayer 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.

EventNo 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 planRowsCost
Default run: current ATP + WTA top 100200~$0.20
One past week, ATP top 100100~$0.10
Every weekly ATP top-100 list of 20244,400~$4.40
Every weekly WTA top-50 list of 2025~2,600~$2.60
500 players of the ATP list500~$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 ApifyClient
client = 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

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.

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.