Tennis Rankings Scraper — ATP & WTA Rankings avatar

Tennis Rankings Scraper — ATP & WTA Rankings

Pricing

from $1.00 / 1,000 ranking records

Go to Apify Store
Tennis Rankings Scraper — ATP & WTA Rankings

Tennis Rankings Scraper — ATP & WTA Rankings

Scrape current ATP (men's) and WTA (women's) world tennis rankings: rank, previous rank, rank change, points, player name, age and country. Pulls the full official top-150 per tour from ESPN's public JSON API. HTTP-only, MCP-ready.

Pricing

from $1.00 / 1,000 ranking records

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Categories

Share

Tennis Rankings Scraper pulls the current world rankings for both the ATP (men's) and WTA (women's) professional tennis tours, straight from ESPN's public JSON API. Each run returns one record per player with rank, previous rank, rank change, points, player name, age and country. It is HTTP-only, needs no API key or login, and is MCP-ready for structured JSON output.

Best fit and connected workflows

Use this Actor when your workflow needs an up-to-date, machine-readable view of the world's top tennis players.

Common routing patterns:

  • ATP + WTA in one run — the full official top-150 for both tours as a single dataset.
  • Single tour — just men's or just women's rankings.
  • Top-N only — cap maxResultsPerTour to keep just the top 10, 50, etc. to save on billing.
  • Rich player rowsincludeAthleteDetails adds age, birthplace, headshot and the ESPN player URL.

The output is a clean flat table that works well for dashboards, podcasts, sports-alert services, research pipelines, and AI agent workflows that need a dependable rankings tool call with a simple dataset readback.

Practical scenario

An analyst named Priya wants this week's ATP top 50 for a client briefing. She sets tours to ['atp'], maxResultsPerTour to 50, and maxResults to 50. The dataset returns rows like { rank: 1, playerName: 'Jannik Sinner', points: 13450, country: 'Italy', rankChange: 0 }, which she drops straight into a slide. Runs every Monday, she gets a fresh, citable rankings table with no API key or scraping setup.

Input

FieldTypePurpose
toursarrayTours to scrape: atp, wta, or both. Defaults to both.
maxResultsPerTourintegerCap on player records per tour, in rank order. Defaults to 150 (full list).
maxResultsintegerGlobal cap on billable player records for the run. Defaults to 300.
includeAthleteDetailsbooleanAdd extended fields (age, birthplace, headshot, player URL). Defaults to true.
proxyConfigurationobjectOptional proxy. Not needed by default; ESPN's rankings API is public.

Focused JSON example

{
"tours": ["atp", "wta"],
"maxResultsPerTour": 150,
"maxResults": 300,
"includeAthleteDetails": true
}

Output

Each dataset record is one player ranking row. Key fields:

FieldTypeMeaning
tourstringatp or wta
tourNamestringHuman tour name
rankintegerCurrent world ranking position (1 = No. 1)
previousRankintegerPrevious ranking position
rankChangeintegerMovement (+N up, -N down, 0 held)
trendstringup, down, or same
pointsnumberRanking points
playerIdstringStable ESPN player identifier
playerNamestringPlayer display name
firstName / lastNamestringSplit player name
country / countryCodestringFull country name and ISO alpha-3 code
age / birthPlaceinteger / stringPlayer age and birthplace (when includeAthleteDetails)
headshotUrl / playerUrlstringHeadshot image and ESPN player page (when includeAthleteDetails)
scrapedAtstringISO 8601 UTC scrape timestamp

Example record:

{
"tour": "atp",
"tourName": "ATP (men)",
"rank": 1,
"previousRank": 1,
"rankChange": 0,
"trend": "same",
"points": 13450,
"playerId": "3623",
"playerName": "Jannik Sinner",
"firstName": "Jannik",
"lastName": "Sinner",
"country": "Italy",
"countryCode": "ITA",
"age": 24,
"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-08-17T14:00:00.000Z"
}

Pricing

This Actor is pay-per-event (usage pass-through):

  • Actor start — a small fixed charge per run, scaled by allocated RAM.
  • Ranking record — charged once per player row delivered to the dataset.

Browse results for free on the dataset preview; you only pay per record you actually keep.

Limitations

  • Rankings reflect the latest snapshot ESPN publishes; there can be a short lag after ranking releases.
  • The published list is the top 150 per tour. maxResultsPerTour therefore caps at 150.