Tennis Match & Player Data Scraper - ATP & WTA Results avatar

Tennis Match & Player Data Scraper - ATP & WTA Results

Pricing

from $0.60 / 1,000 match scrapeds

Go to Apify Store
Tennis Match & Player Data Scraper - ATP & WTA Results

Tennis Match & Player Data Scraper - ATP & WTA Results

Recent tour-level match results for any ATP or WTA player: opponent, score, surface, round, ranking at the time, and per-match serve/return stats (dominance ratio, ace %, double fault %, first/second serve won %). No login, no API key, no proxy.

Pricing

from $0.60 / 1,000 match scrapeds

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

3 days ago

Last modified

Share

Tennis Match & Player Data Scraper

🏆 Part of The Mine Works' 149-actor portfolio · 40,000+ runs · 200,000+ results delivered across our full distribution stack · 99.9%+ success rate

💰 From $0.60 / 1,000 results.

⚡ Recent tour-level ATP and WTA match results with per-match serve and return stats: dominance ratio, ace %, double fault %, first and second serve won %. No login, no API key, no proxy.

💸 A player name that does not match an existing profile is never billed.

Recent tour-level match results for any ATP or WTA player, sourced from Tennis Abstract: opponent, score, surface, round, both players' rankings at the time, and per-match serve/return stats (dominance ratio, ace %, double fault %, first/second serve won %). No login, no API key, no proxy.

Why this exists

Official tennis data feeds (Sportradar, etc.) are enterprise contracts, not something a developer or small research team can buy per-call. This actor reads Tennis Abstract's own public per-player data directly.

Input

  • players (required), PascalCase names with no space, e.g. ["NovakDjokovic", "CarlosAlcaraz", "IgaSwiatek"].

Output

One row per recent match: player, date, tournament, surface, round, player_rank, opponent_rank, opponent_and_result, won, score, plus per-match serve stats (dominance_ratio, ace_pct, double_fault_pct, first_serve_in_pct, first_serve_won_pct, second_serve_won_pct).

Typically returns each player's most recent ~20 tour-level matches.

What this does NOT cover (yet)

Tennis Abstract's per-player data actually includes 19 distinct tables (career surface splits, head-to-head records, year-end ranking history, serve-speed breakdowns, point-by-point stats, and more). This version parses only the single highest-value one, recent match results. The rest are present in the same source and are a documented, real expansion opportunity, not a limitation of the site.

A note on seasonality

Tour-level tennis has an off-season (roughly November-December). A player with no recent tournament will simply return their last matches before the break, not an error.

Pricing

💎 On the GOLD tier and above: $0.60 per 1,000 results ($0.0006 each, 40% below the FREE-tier price of $1.00). Your tier is shown on your Apify billing page.

EventPrice (Free plan)You pay when
Match$0.001A match row is normalised and pushed to your dataset

Tiered by Apify plan: Free $0.001, Bronze $0.0009, Silver $0.00075, Gold, Platinum and Diamond $0.0006. Your plan is shown on your Apify billing page.

Pay per delivered match row. You are never charged for a player name that doesn't match an existing profile, check spelling (PascalCase, no space) if you get 0 results.

Run it on a schedule

Useful for tracking a player list through the season. Weekly is enough, matches do not accumulate fast enough for most players to justify daily runs, and you can diff each export against the last to see new results and how the dominance ratio is trending.

  1. Run it once with the input you want repeated, then click Save as a task so that exact input is attached to every future run.
  2. In the Apify Console go to Schedules and create a new one, either a preset (hourly / daily / weekly) or a cron expression.
  3. Save. It then runs unattended, billed the same pay-per-result way. Nothing is charged for the schedule existing.

Use from Claude, ChatGPT & any MCP agent

Hosted MCP endpoint, no install, OAuth on first connect:

https://mcp.apify.com/?tools=themineworks/tennis-match-data

Claude Desktop / Cursor config (token auth):

{
"mcpServers": {
"tennis-match-data": {
"url": "https://mcp.apify.com/?tools=themineworks/tennis-match-data",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Ask your agent: "Pull [player]'s recent matches and tell me whether their first serve percentage is trending up or down."

FAQ

How far back does "recent matches" go? Typically the last ~20 tour-level matches per player, not a full career history. The rest of Tennis Abstract's per-player tables are a documented expansion, not something this version returns.

How do I write a player's name? PascalCase with no space: NovakDjokovic, CarlosAlcaraz, IgaSwiatek.

What if I misspell a name? It resolves to no profile, returns no rows, and is never billed. You only pay for match rows that actually land.

Are rankings at the time of the match included? Yes. Both the player's and the opponent's rank as of that match, not just current rank.

Why does a player show no new matches? Tour-level tennis has an off-season, roughly November and December. A player with no recent tournament returns their last matches before the break rather than an error.

Keywords: ATP match data scraper, WTA match data scraper, tennis stats API, tennis serve return stats, Tennis Abstract scraper, tennis player performance data, tennis analytics tool