ATP and WTA Tennis Rankings Scraper
CleanScrape · @cleanscrape
Current ATP and WTA rankings from Flashscore: singles, doubles and the races, with points, movement and country, by player or country.

About
Download the current ATP and WTA tennis rankings from Flashscore as CSV, Excel or JSON. Every entry has the rank, ranking points, last week's rank and the movement, the country, and a link to the player.
Eight lists are available:
| List | What it ranks | Size (Oct 2026) |
|---|---|---|
| ATP singles rankings | Men, 52-week ranking | 2,296 players |
| WTA singles rankings | Women, 52-week ranking | 1,547 players |
| ATP singles race | Men, this season (race to the ATP Finals) | 2,255 players |
| WTA singles race | Women, this season (race to the WTA Finals) | 373 players |
| ATP doubles rankings | Men's doubles, one entry per player | 2,801 players |
| WTA doubles rankings | Women's doubles, one entry per player | 1,800 players |
| ATP doubles team race | Men's doubles teams this season | 500 pairs |
| WTA doubles team race | Women's doubles teams this season | 159 pairs |
Take the top 100, a whole list, or only the players or countries you follow. A list takes a few seconds; all eight in full take under a minute.
It is built for fantasy and betting models, tennis media and federations, coaches tracking their players, and anyone who needs ranking data in a spreadsheet or an app. No Flashscore account, cookies, proxy or API key is needed. This is an independent tool, maintained by CleanScrape, and not affiliated with Flashscore, the ATP or the WTA.
Start with a small run
The form opens with the ATP and WTA singles rankings, top 100 each. Start it as it is to see the output, then change the lists.
- In Ranking lists, choose one or more lists.
- Set Entries per list: 10 for the top 10, 100 for the top 100, 5000 for the whole list.
- Optional: fill in Only these players or Only these countries.
The entries are in the run's dataset; download it as CSV, Excel or JSON.
Examples
The top 100 of both singles rankings:
{ "rankings": ["atp", "wta"], "maxEntries": 100 }
Every list in full, for a weekly snapshot:
{
"rankings": [
"atp",
"wta",
"atp-race",
"wta-race",
"atp-doubles",
"wta-doubles",
"atp-doubles-race",
"wta-doubles-race"
],
"maxEntries": 5000
}
Where some players stand in the ranking and in this season's race:
{
"rankings": ["atp", "atp-race", "wta", "wta-race"],
"players": ["Jannik Sinner", "Carlos Alcaraz", "Coco Gauff", "Iga Swiatek"]
}
Every Spanish and American player in the singles rankings:
{ "rankings": ["atp", "wta"], "countries": ["ESP", "USA"], "maxEntries": 5000 }
Players and countries
Players: type a name or paste a Flashscore player link, one per line.
- Names match in any order, without accents and regardless of case:
Jannik Sinner,sinnerandSinner Jannikall find the same player, andSwiatekfinds Świątek. - A single surname finds everyone with that surname. Type the full name or paste the link to be exact.
- Links from any Flashscore site work, with or without
https://.
Countries: country names or the three-letter codes used by the ATP and WTA, one per line. ESP, Spain, USA, United States, GBR, UK, Czechia and CZE all work.
- Flashscore lists Russian and Belarusian players under the country World (they play without a national flag). Type
Worldto get them. A search for Russia finds nothing, and the run says so.
An entry is kept when it matches any of your players or any of your countries. A doubles pair is kept when either partner matches. With players or countries, the whole list is searched, and Entries per list caps how many matches are saved from each list.
If a player or country is not in any of the chosen lists, the run message names it, for example Not found in the chosen lists: Roger Federer. The other entries are still saved.
What each entry contains
| Column | Meaning |
|---|---|
| Rank | Position in the list. Tied entries share a rank |
| Name | Player name as Flashscore writes it, usually surname first. Doubles teams: both partners, separated by / |
| Country | The player's country. Doubles teams: both countries. World means no national flag |
| Points | Ranking points |
| Previous rank | Rank in the previous edition. Empty for a new entry |
| Rank change | Places gained since the previous edition: positive moved up, negative moved down |
| Ranking list, Ranking name, Tour, Discipline, Race | Which list the entry comes from |
| Ranking date | Date of the ranking edition (YYYY-MM-DD) |
| Player ID, Player link | Flashscore player ID and page. Empty for doubles teams; see Players |
| Players | Each player of the entry with name, ID, country and link: one for players, two for teams. In CSV these are the players/0/… and players/1/… columns |
| Collected at | When the list was read (UTC) |
One entry in JSON:
{
"rankingList": "atp-race",
"rankingName": "ATP singles race",
"tour": "atp",
"discipline": "singles",
"race": true,
"rankingDate": "2026-10-19",
"rank": 2,
"previousRank": 2,
"rankChange": 0,
"points": 7950,
"name": "Sinner Jannik",
"country": "Italy",
"playerId": "6HdC3z4H",
"playerUrl": "https://www.flashscore.com/player/sinner-jannik/6HdC3z4H/",
"players": [
{
"name": "Sinner Jannik",
"playerId": "6HdC3z4H",
"country": "Italy",
"playerUrl": "https://www.flashscore.com/player/sinner-jannik/6HdC3z4H/"
}
],
"sourceUrl": "https://www.flashscore.com/tennis/rankings/atp-race/",
"collectedAt": "2026-10-23T08:08:10.011Z"
}
A doubles team entry has "name": "Dabrowski Gabriela / Luisa Stefani", "country": "Canada / Brazil" and both partners under players.
Every run also saves a SUMMARY record (JSON) in its key-value store with each list's edition date, how many entries it has, how many matched your filters, how many were saved, and why the run stopped.
Pricing
$12 a month to rent it, after a 7-day free trial, long enough to see one weekly ranking update. Cancel at any time; access runs to the end of the month you paid for.
Runs use compute, paid from your Bytewells credit at Bytewells' rates, separately from the rental. No proxy is used. In tests on Bytewells, the top 100 of both singles rankings (200 entries) used $0.0004 of credit, all eight lists in full (9,834 entries) $0.0009, and four players across four lists $0.0005.
There is no charge per list or per entry, so weekly snapshots of every list in full cost the same rental.
Schedule it
The ATP and WTA publish new rankings every week, usually on Monday. Add a Bytewells schedule with your lists and players (for example every Monday at 12:00 UTC) to collect each new edition. Each entry has the Ranking date, so weekly runs build a history you can chart.
Use it from the API
The Actor runs through the Bytewells API, which works with Apify's API clients: point the client's base URL at Bytewells (see Bytewells docs) and call cleanscrape/tennis-rankings-scraper with an input from the examples above. The entries are in the run's default dataset.
Match results and statistics
For match results, statistics, point-by-point, form and head-to-head, use the Flashscore Tennis Scraper for Tennis Matches and Stats. Both use the same Flashscore player IDs, so rankings and matches can be joined on playerId.
Common questions
How current are the rankings?
They are the edition Flashscore shows when the run starts, usually Monday's official ranking. The Ranking date column says which edition you have.
Can I get past rankings?
No. Flashscore shows the current edition only. A weekly schedule builds your own history from now on.
Are live or projected rankings included?
No. The lists are the published editions.
Why does a doubles team race have pairs while doubles rankings have players?
That is how the tours rank them. The doubles rankings rank each player on their own results with any partner. The team races rank fixed pairs for the season finals.
Is there an official ATP or WTA rankings API?
Not a free public one that we know of. The ATP and WTA show the rankings on their own websites. This Actor reads the same rankings from Flashscore's public pages and gives them to you as a table, CSV or JSON.
What does a run cost on top of the rental?
Only the compute it uses, from your Bytewells credit. Test runs used $0.0004 to $0.0009 each.
Is it legal to scrape tennis rankings?
The Actor reads public pages that anyone can open without an account, at a gentle pace, and it does not get around bot checks. Rankings are facts about public sporting results. Check the rules that apply to how you use and publish the data. This is not legal advice.
Good to know
- Times are UTC.
- The ATP doubles team race lists up to 500 pairs, as Flashscore publishes it.
- If Flashscore changes its data feed or refuses requests, the run stops with a clear message instead of saving empty or wrong rows.
Support
CleanScrape maintains this Actor and fixes it when Flashscore changes. If something looks wrong, email [email protected] with the run ID and the list affected. Never include API tokens or private data.
Disclaimer
This Actor is an independent tool developed by CleanScrape. It is not affiliated with, endorsed by, or sponsored by Flashscore, the ATP or the WTA. Trademarks belong to their owners and are used only to identify the source.
More tools from CleanScrape
- Google Trends Scraper API for Interest Over Time: search interest over time, by region, related queries and trending searches
- Economic Calendar API for Official Release Dates: release dates and times for CPI, jobs, GDP and central bank decisions in five economies
- Career Page Jobs Scraper for Workday, Greenhouse and Lever: open jobs from company career pages, with salaries and new or closed jobs
- Whatnot Scraper for Listings and Live Shows: Whatnot listings with prices and sellers, live shows, and alerts for new listings
- Whatnot Seller Tracker for Top Sellers and Sales: top Whatnot sellers per category, items sold, sales per day and followers over time
- Google Flights Scraper and Fare Tracker: flight prices, airlines, stops and times for your routes and dates, with only new or cheaper flights
- App Store and Google Play Reviews Scraper: reviews from both app stores in one table, with daily alerts for new low ratings
- Shopify Product Reviews Scraper for Judge.me and Okendo: Judge.me and Okendo reviews from Shopify product, collection or store links
- Flashscore Tennis Scraper for Tennis Matches and Stats: tennis results, statistics, point-by-point, form and head-to-head
- Google News Scraper and RSS Feed Reader: Google News searches, sections and publisher feeds, with only new articles on a schedule
- Google Hotels Scraper for Google Travel Hotel Prices: hotel prices and every booking offer for your dates, adults and currency
- Telegram Channel Messages Scraper with Comments: public Telegram channel posts with views, reactions and comments, and only new posts on a schedule
FAQ
- How current are the rankings?
- They are the edition Flashscore shows when the run starts, usually Monday's official ranking. The Ranking date column says which edition you have.
- Can I get past rankings?
- No. Flashscore shows the current edition only. A weekly schedule builds your own history from now on.
- Can I follow only some players or countries?
- Yes. Type names or paste Flashscore player links under Only these players, or country names or codes under Only these countries.
- Why a 7-day trial?
- The rankings change once a week, so the trial covers one new edition.
- What does a run cost on top of the rental?
- Only the compute it uses, from your Bytewells credit. Test runs used $0.0004 to $0.0009 each.
Input
Preview of the input form. Rent the Actor to fill it in and start runs from the console.
Fields
rankingsThe doubles team races rank pairs, so one entry there is one pair.
maxEntriesThe top N of each list, for example 10 or 100. 5000 takes the whole list (ATP singles has about 2,300 ranked players). With players or countries, the whole list is searched and this caps the matches saved per list.
playersPlayer names or Flashscore player links, one per line, for example Jannik Sinner, Swiatek or https://www.flashscore.com/player/sinner-jannik/6HdC3z4H/. Names match in any order, without accents. A surname alone finds everyone with that surname. Leave empty for the top of each list.
countriesCountry names or three-letter codes, one per line, for example Finland, ESP, USA, United Kingdom, CZE. Flashscore lists Russian and Belarusian players under World. An entry is kept when it matches any player or any country above.
API
Bytewells speaks the Apify API. Existing integrations keep working: point apify-client at https://bytewells.com/api and use your Bytewells API token (Console → Settings → API access). The Actor ID is cleanscrape/tennis-rankings-scraper (or cleanscrape~tennis-rankings-scraper in URLs).
JavaScript · apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.BYTEWELLS_TOKEN,
baseUrl: 'https://bytewells.com/api',
});
const input = {
"rankings": [
"atp",
"wta"
],
"maxEntries": 100,
"players": [],
"countries": []
};
const run = await client.actor('cleanscrape/tennis-rankings-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Python · apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["BYTEWELLS_TOKEN"], api_url="https://bytewells.com/api")
run_input = {
"rankings": [
"atp",
"wta"
],
"maxEntries": 100,
"players": [],
"countries": []
}
run = client.actor("cleanscrape/tennis-rankings-scraper").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)HTTP · curl
curl -X POST "https://bytewells.com/api/v2/acts/cleanscrape~tennis-rankings-scraper/runs" \
-H "Authorization: Bearer $BYTEWELLS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"rankings":["atp","wta"],"maxEntries":100,"players":[],"countries":[]}'Runs are billed as compute from your credit balance. Paid Actors need an active rental or trial; otherwise the API answers 402 rental-required.
Related
More Actors from the same publisher.

Flashscore Tennis Scraper for Tennis Matches and Stats
CleanScrape · @cleanscrape
Tennis results and match statistics from Flashscore by tournament, player or day, with point-by-point, form and head-to-head.
AutomationDeveloper toolsAI$19/mo3-day free trial
App Store and Google Play Reviews Scraper
CleanScrape · @cleanscrape
App Store and Google Play reviews in one table, with ratings, text, dates and app versions, plus daily alerts for new low ratings.
Developer toolsMarketingAutomation$12/mo7-day free trial
Economic Calendar API for Official Release Dates
CleanScrape · @cleanscrape
Official release dates and times for CPI, jobs, GDP, retail sales and rate decisions in the US, euro area, UK, Canada and Australia, with watches.
AIAutomationDeveloper tools$19/mo3-day free trial
Google Flights Scraper and Fare Tracker
CleanScrape · @cleanscrape
Scrape Google Flights fares by route and date: prices, airlines, stops, layovers, local times and price level. Track only new or cheaper flights.
AIAutomationDeveloper tools$29/mo3-day free trial
Career Page Jobs Scraper for Workday, Greenhouse and Lever
CleanScrape · @cleanscrape
Scrape jobs from company career pages on Workday, Greenhouse, Lever, Ashby and four more systems, with salaries and new or closed jobs.
AIAutomationJobs$29/mo3-day free trial
Google Hotels Scraper for Google Travel Hotel Prices
CleanScrape · @cleanscrape
Hotel prices from Google Hotels for your dates, adults and currency, with every organic booking-site offer for each hotel.
TravelAutomationDeveloper tools$15/mo7-day free trial