Tennis Scraper avatar

Tennis Scraper

Pricing

from $6.00 / 1,000 successful results

Go to Apify Store
Tennis Scraper

Tennis Scraper

Extract normalized tennis data from SofaScore and Tennis Abstract, including live matches, tournaments, point-by-point records, and player statistics.

Pricing

from $6.00 / 1,000 successful results

Rating

0.0

(0)

Developer

Crawl Stone

Crawl Stone

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

4 hours ago

Last modified

Share

Get live tennis scores, tournament information, match details, and player statistics in structured, ready-to-use datasets. Tennis Scraper collects public data from SofaScore and Tennis Abstract.

Unofficial Actor: Tennis Scraper is an independent tool and is not affiliated with or endorsed by SofaScore or Tennis Abstract.

What can this Actor do?

  • Get a current snapshot of live tennis matches and scores.
  • Find tournaments scheduled for a specific date.
  • List the available seasons for a tournament.
  • Get upcoming and historical matches from a tournament season.
  • Extract point-by-point match data and available statistics.
  • Look up supported players and their historical statistics.
  • Export results as JSON, CSV, Excel, and other Apify Dataset formats.
  • Manage the required proxy automatically at no additional setup cost.

Quick start

  1. Click Try for free on the Actor page.
  2. Choose what you want to collect.
  3. Enter the requested date or ID.
  4. Click Save & Start.
  5. Open the Output tab when the run finishes.

For your first run, choose Live matches. No additional input is required:

{
"mode": "liveMatches"
}

The Actor saves one result for each match that is live when the run starts. If no matches are live, the run still succeeds with an empty Dataset.

Choose a mode

ModeUse it forRequired inputResults
liveMatchesSee matches being played nowNoneLive matches, participants, scores, tournaments, and available odds
tournamentsFind tournaments on a datedateTournaments scheduled for that date
pointByPointInspect a match in detailmatchIdSets, games, points, and available match statistics
tournamentSeasonsFind seasons for a tournamenttournamentIdAvailable tournament seasons
tournamentDetailsBrowse matches from a tournament seasontournamentId; optional seasonIdTournament information with upcoming and historical matches
playerDetailsLook up a player's historyplayerIdPlayer profile and supported historical statistics

SofaScore provides live matches, tournaments, seasons, match details, and the player IDs used as input. Tennis Abstract provides the player history returned by playerDetails.

Input fields

FieldUsed byWhat to enter
modeEvery runliveMatches, tournaments, pointByPoint, tournamentSeasons, tournamentDetails, or playerDetails
maxMatchesliveMatchesOptional maximum number of matches; leave empty or use 0 for no limit
datetournamentsA date in YYYY-MM-DD format
matchIdpointByPointA positive match ID from a match result
tournamentIdtournamentSeasons, tournamentDetailsA positive tournament ID from a match or tournament result
seasonIdtournamentDetailsOptional season ID; leave empty to use the newest available season
playerIdplayerDetailsA positive SofaScore player ID from a match result

The Store form starts with liveMatches selected. Fill in only the fields needed for your chosen mode. The Actor checks dates and IDs when the run starts and displays an error if a required value is missing or invalid.

Results include IDs that you can use in other modes:

  • Live matches provide match, tournament, and player IDs.
  • Tournament searches provide tournament IDs.
  • Tournament season searches provide season IDs.
  • Tournament details provide match and player IDs.

For example, to explore a tournament:

  1. Use tournaments to find its tournament ID.
  2. Use tournamentSeasons to find a season ID.
  3. Use tournamentDetails to list matches from that season.
  4. Use pointByPoint to inspect one match.

For player history, use the SofaScore playerId from a match result. You do not need to find or enter a Tennis Abstract URL. If the player is not supported, the Actor returns an error result explaining what happened.

Input examples

Live matches

{
"mode": "liveMatches",
"maxMatches": 10
}

Tournaments on a date

{
"mode": "tournaments",
"date": "2026-07-10"
}

Point-by-point match data

{
"mode": "pointByPoint",
"matchId": 16385412
}

Tournament seasons

{
"mode": "tournamentSeasons",
"tournamentId": 2361
}

Tournament details

Use a specific season:

{
"mode": "tournamentDetails",
"tournamentId": 2361,
"seasonId": 63966
}

Or leave out seasonId to use the newest available season:

{
"mode": "tournamentDetails",
"tournamentId": 2361
}

Player details

{
"mode": "playerDetails",
"playerId": 206570
}

The dates and IDs above are examples. Use current IDs from your own Actor results.

Understanding the results

Results are saved in the run's default Dataset. The counts below describe successful operations; a failed scrape operation saves one error result instead.

ModeNumber of resultsWhat each result contains
liveMatchesZero or one per live matchMatch, participants, status, score, and available odds
tournamentsZero or one per tournamentRequested date and tournament information
pointByPointOneMatch ID, point-by-point data, and available statistics
tournamentSeasonsZero or one per seasonTournament ID and season information
tournamentDetailsOneTournament and season information with a list of matches
playerDetailsOnePlayer profile and available historical statistics

The Output tab includes a separate table view for each mode. Live matches opens by default. Select another view to see the most useful columns for that result type.

Detailed information remains grouped in lists and objects. For example:

  • match scores keep their set breakdown;
  • point-by-point results keep sets, games, and points together;
  • tournament details keep matches in a list;
  • player history keeps each statistical table in its own list.

This structure is preserved in JSON, CSV, Excel, and API exports.

Empty results and errors

An empty Dataset can be a valid result:

  • no matches were live when liveMatches ran;
  • no tournaments were scheduled for the selected date;
  • no seasons were returned for the selected tournament.

If a scrape operation cannot be completed, the Actor saves one error result and marks the run as failed. The failed operation is not charged.

Error results for point-by-point, tournament-season, tournament-detail, and player operations include the requested ID. Live-match and tournament-collection errors contain the error object without an ID because those operations do not target one source record. For example:

{
"matchId": 16385412,
"error": {
"message": "fetch point-by-point for match 16385412: get SofaScore /api/v1/event/16385412/point-by-point: GET from SofaScore failed: unexpected HTTP status 404: not found"
}
}

Read error.message for the source or parsing failure. Input, configuration, and Dataset-storage failures can stop the run without an error result because the Actor could not start the scrape or save the row.

Some information is optional. When live odds are unavailable, odds is an empty object. When point statistics are unavailable, statistics is an empty list. A player section that is not available is omitted from the result.

Use with Apify MCP

You can use Tennis Scraper from MCP-compatible AI clients through Apify's hosted MCP server:

https://mcp.apify.com?tools=crawlstone/tennis-scraper

Connect your Apify account using OAuth or an API token, then send the same inputs used in the Store form. For example:

{
"mode": "liveMatches",
"maxMatches": 1
}

The MCP response may return the run and Dataset information before returning all rows. Use the returned Dataset ID to retrieve the results when needed. See the Apify MCP documentation for setup instructions.

Managed proxy

You do not need to configure, supply, or pay for a separate proxy. The Actor automatically manages the residential proxy sessions needed for source requests. Proxy usage is included in the Actor price, and there are no proxy settings to configure.

Pricing

You pay for successful operations, not for the number of Dataset results. Every successful mode run charges one successful-result event, whether it returns zero, one, or many rows.

Failed scrape operations are not charged. When possible, the Actor saves one error result before marking the run as failed.

Platform and managed proxy usage are included in the Actor price. Check the Actor's Pricing tab for current rates and available plan pricing. Standard Apify storage costs may still apply if you access or retain data after the run.

Frequently asked questions

What should I do when there are no live matches?

Nothing is wrong. The run succeeds with an empty Dataset when no matches are live at that moment. Run it again later or use an Apify Schedule for regular snapshots.

Can I use Tennis Scraper from my application?

Yes. Open the API tab on the Actor page to copy a request for your preferred language. You can also use webhooks, schedules, integrations, or Apify MCP.

Can I enter a Tennis Abstract URL for player details?

No. Use a SofaScore player ID from a match result. The Actor finds the supported Tennis Abstract player internally.

Why did I receive an error result?

The selected scrape operation could not be completed. The source request may have failed, the requested record may not have been available, or the returned data could not be parsed. Read error.message for details and try again later when appropriate. The run is marked as failed and is not charged.

Privacy

The Actor uses your Apify run input and Dataset storage. Do not include API tokens, passwords, or other private information in the input.

You are responsible for your inputs, stored results, retention settings, and how the data is used.

Support

If you need help, contact support from this Actor's Apify Store page and include:

  • the Apify run ID;
  • the selected mode;
  • the requested date or ID;
  • the error message, if available;
  • what you expected and what happened.

Never send your Apify API token or other secrets.