Tennis Scraper avatar

Tennis Scraper

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Tennis Scraper

Tennis Scraper

ATP and WTA match results from ESPN, one row per singles or doubles match with the round, games per set, tiebreak points and ESPN's result line. One date returns the full draws of every tournament running that day, qualifying rounds included.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

deriverge s.r.o.

deriverge s.r.o.

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Tennis Scraper reads ESPN's ATP and WTA scoreboards and returns one row per match: tournament, draw, round, both players or doubles pairs with their countries, games per set with tiebreak points, and ESPN's result line, such as (2) Andrey Rublev (RUS) bt Kyrian Jacquet (FRA) 7-6 (7-0) 6-1. Pick a date, raise Maximum rows above the prefilled 100 and click Start: every tournament running that day comes back with its whole draw, qualifying included. Rankings, point-by-point data and player statistics are not included. It costs $1.00 per 1,000 results on the Free plan ($0.50 on Business), and the $5 of monthly credit in Apify's Free plan covers about 5,000 results.

What does a match row contain?

FieldDescription
league, nameTour (atp or wta) and tournament name, e.g. AITO Hangzhou Open.
drawThe event within the tournament: Men's Singles, Men's Doubles, Women's Singles or Women's Doubles.
roundRound as ESPN names it, from Qualifying 1st Round and Qualifying Final through Round 1, Round 2, Quarterfinal and Semifinal to Final.
status, statusDetail, completedpre, in or post. After a match statusDetail reads Final, Retired, Walkover or Canceled, during one 2nd Set, and before one the start time in US Eastern time.
periodSets played so far.
home, awayThe two sides in the order ESPN lists them, since tennis has no home player. Each has kind (athlete in singles, pair in doubles), name, location (the country) and winner.
home.periodScores, home.tiebreaksGames won in each set, and the tiebreak points of each set, null where a set had no tiebreak.
resultESPN's score line with seeds in brackets, ret after a retirement and w/o for a walkover. null before the match starts.
startsAtScheduled start in UTC.
venue.nameCity and country of the tournament, e.g. Hangzhou, China PR.
urlThe tournament's scoreboard on espn.com.

A doubles pair is one side. Its name joins both players (Francisca Jorge / Matilde Jorge), location joins their countries when they differ (Great Britain / Poland), and a deciding match tiebreak shows up as a third set won 1 to 0, as in 6-3 3-6 1-0 (10-3). Tennis news rows carry ESPN's tennis stories with title, summary, publishedAt and url.

How to scrape ATP and WTA results

  1. In Leagues, keep atp and wta or remove one. Each tour includes singles and doubles.
  2. Leave What to return on Matches and results, or pick Tennis news for ESPN's latest tennis stories.
  3. Enter the same date in From date and To date. ESPN answers with the draws of every tournament running that day, so one date covers a tournament week, and a longer range adds the following weeks with each match once.
  4. Set Game status to Finished for results only, or to Not started yet for upcoming matches.
  5. Click Start. The Output tab shows the matches as a table; download it as CSV, Excel or JSON, or call the actor through the API:
{
"leagues": ["atp", "wta"],
"mode": "scoreboard",
"dateFrom": "2026-09-28",
"dateTo": "2026-09-28",
"statusFilter": "final",
"maxItems": 1000
}

Example output

A men's singles semifinal from a run on 28 September 2026. Jacquet is home only because ESPN lists him first.

{
"key": "espn:atp:183374",
"type": "game",
"sport": "tennis",
"league": "atp",
"leagueName": "ATP Tour",
"gameId": "183374",
"name": "AITO Hangzhou Open",
"shortName": "AITO Hangzhou Open",
"round": "Semifinal",
"startsAt": "2026-09-28T09:40:00.000Z",
"status": "post",
"statusDetail": "Final",
"completed": true,
"period": 2,
"clock": null,
"seasonYear": 2026,
"seasonType": null,
"home": {
"id": "7509",
"kind": "athlete",
"name": "Kyrian Jacquet",
"shortName": "K. Jacquet",
"location": "France",
"score": null,
"winner": false,
"record": null,
"position": 1,
"homeAway": "home",
"periodScores": [
6,
1
],
"tiebreaks": [
0,
null
],
"logo": "https://a.espncdn.com/i/teamlogos/countries/500/fra.png"
},
"away": {
"id": "2642",
"kind": "athlete",
"name": "Andrey Rublev",
"shortName": "A. Rublev",
"location": "Russia",
"score": null,
"winner": true,
"record": null,
"position": 2,
"homeAway": "away",
"periodScores": [
7,
6
],
"tiebreaks": [
7,
null
],
"logo": "https://a.espncdn.com/i/teamlogos/countries/500/rus.png"
},
"venue": {
"name": "Hangzhou, China PR",
"city": null,
"state": null,
"country": null,
"indoor": null
},
"attendance": null,
"neutralSite": null,
"broadcasts": [],
"odds": null,
"url": "https://www.espn.com/tennis/scoreboard/tournament/_/eventId/1001-2026/competitionType/1",
"draw": "Men's Singles",
"result": "(2) Andrey Rublev (RUS) bt Kyrian Jacquet (FRA) 7-6 (7-0) 6-1"
}

How ESPN lists a tournament week

A request for one day returns every match ESPN has for each tournament running on it: finished rounds, matches in play and scheduled ones. On 27 September 2026 a run without dates returned 505 matches from 9 tournaments, the Chengdu Open and the AITO Hangzhou Open on the ATP side and seven WTA events, among them the Korea Open and the Singapore Tennis Open. Later rounds are listed before their players are known, with TBD as the name and the unfilled text M/d - 'TBD' in statusDetail, and they fill in as the draw moves on.

For a live feed, turn on Return only what changed since the last run, give the run a Watch name and schedule it. Each run returns new matches and matches whose status text, games per set, tiebreak points or winner changed since the run before. A match in play therefore comes back as its games move, and a later-round match comes back when ESPN puts a player in its TBD slot.

How much does it cost to scrape tennis results?

Free planStarterScaleBusiness
1,000 results$1.00$0.80$0.65$0.50

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

The 505 matches of that run cost $0.505 on the Free plan and $0.2525 on Business.

Limits

  • There are no rankings, player statistics such as aces or break points, point-by-point data, court surface or prize money. Seeds appear only inside result.
  • ESPN listed no betting lines for ATP or WTA matches in September 2026, so odds stays null.
  • Canceled matches come back as post with completed set to false and no result. Finished leaves them out.
  • One date can hold several hundred matches. Tours are read in the order given, so once atp alone fills Maximum rows, wta is not read at all: runs for 25 September 2026 with the prefilled 100 returned ATP matches only. A run without the field stops at 2,000.
  • A run covers at most 120 days.
  • venue gives the city and country only, without the court.

FAQ

Results, draws and schedules are public sports facts that ESPN shows to anyone, and the actor reads them from ESPN's public JSON feeds without an account. Player names appear because they are part of the result; nothing else about the players is collected. You are responsible for how you use and republish the data.

How are retirements and walkovers shown?

statusDetail says Retired or Walkover, completed is true and the winner flag is set. A retirement keeps the games played so far, e.g. 6-2 1-0 ret; a walkover has empty set scores and w/o at the end of result.

Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the Issues tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the API tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.