Tennis Match Data avatar

Tennis Match Data

Pricing

from $1.53 / 1,000 match rows

Go to Apify Store
Tennis Match Data

Tennis Match Data

ATP and WTA match results, schedules, live status, and rankings by date, with set scores, seeds, round, and court as flat rows. Tested on dates back to 2007, with no login. Filter by player, tournament, draw, and status. Refused reads are free.

Pricing

from $1.53 / 1,000 match rows

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Security

Limited permissions

Share

Give a date or a date range and get ATP and WTA matches as flat rows: players, seeds, round, status, set scores, winner, and court. Set mode to rankings for the current ATP and WTA lists. You pay per row returned, and refused reads and summary rows are free.

Features

  • Results, schedules, and live status. A date in the past returns results, today returns what is live and scheduled, and a date ahead returns what is scheduled so far.
  • Singles and doubles. Men's, women's, and mixed draws, including qualifying rounds. Doubles rows carry both names.
  • Scores you can read. score is winner first, a tiebreak reads 7-6(7-3), ret marks a retirement, and W/O marks a walkover. set_scores holds one entry per set.
  • Filters. Player, tournament, draw, status, and tour. A filter never charges for the rows it removes.
  • A whole tournament at once. Set whole_tournament to yes to get every match of each tournament running on your dates.
  • One charge per match. A match that appears under both tours is one row.
  • Restart aware. If Apify moves the run to another host, it resumes from its saved position and does not charge a match twice.

How the data is read

The actor reads the public ESPN tennis scoreboard and rankings JSON, the same calls those ESPN pages make, on the Apify default proxy pool. It uses no login, no key, no residential proxy, and no other developer's actor. A refused read is one free row with no retry on another address.

source_url on each row shows the address that was read. The data belongs to ESPN and its sources. ESPN's terms restrict scraping and compiling data sets, and you are responsible for how you use the rows.

Input

FieldTypeDefaultWhat it does
modestringmatchesmatches (default) reads results and schedules by date. rankings returns the current ATP and WTA lists.
date_fromstringFirst UTC date as YYYY-MM-DD, or today, yesterday, or tomorrow. Needed in matches mode.
date_tostringLast UTC date. Empty means the same as date from. A run reads at most 366 days.
toursarrayatp, wta, or both (default both). Mixed doubles appears under either.
drawsarraymens-singles, womens-singles, mens-doubles, womens-doubles, mixed-doubles, or the shortcuts singles and doubles. Empty means all.
statusesarrayfinal, retired, walkover, in_progress, scheduled, other, or the shortcuts finished, live, and upcoming. Empty means all.
tournamentsarrayKeep tournaments whose name holds one of these words, such as wimbledon.
playersarrayKeep matches with a player whose name holds one of these words, such as sinner.
include_qualifyingstringyesyes (default) or no.
whole_tournamentstringnono (default) keeps matches played on the dates asked for. yes returns every match of each tournament running on those dates.
max_matchesstring500The most match rows in a run. Default 500.
top_nstring100Rankings mode: rows per tour, up to 150. Default 100.
max_charge_usdstringOptional. The run stops before a charge that would pass this amount. Summary rows are always returned.

Output

FieldTypeWhat it holds
row_typestringOne of: match, ranking, empty_read, source_report, run_summary. run_summary is the one free row written when the input is refused.
match_idstringESPN match ID. Stable, and unique in a run.
match_date_utcstringScheduled or actual start in UTC.
match_day_utcstringThe UTC date. date_from and date_to filter on this.
start_time_confirmedstringtrue when ESPN marks the time as valid, as text.
tournamentstringTournament name.
tournament_idstringESPN tournament and year.
grand_slamstringtrue for a major, as text.
seasonintegerSeason year.
drawstringDraw name.
draw_slugstringmens-singles, womens-singles, mens-doubles, womens-doubles, or mixed-doubles.
roundstringRound name.
qualifyingstringtrue for a qualifying round, as text.
statusstringfinal, retired, walkover, in_progress, scheduled, or other.
status_detailstringESPN status text.
player_1stringFirst listed player, or both names for doubles. On ranking rows, the ranked player.
player_1_idstringESPN player ID, or the pair ID for doubles.
player_1_countrystringCountry as ESPN lists it.
player_1_seedintegerTournament seed, when seeded.
player_2stringSecond listed player, or both names for doubles.
player_2_idstringESPN player ID, or the pair ID for doubles.
player_2_countrystringCountry as ESPN lists it.
player_2_seedintegerTournament seed, when seeded.
winnerstringWinner, when the match has one.
scorestringSets, winner first. A tiebreak reads 7-6(7-3). ret marks a retirement and W/O a walkover. In a live match, first listed side first.
set_scoresarrayOne entry per set, same order as score.
result_textstringESPN result line.
courtstringCourt name.
locationstringTournament city and country.
rankintegerCurrent rank, on ranking rows.
previous_rankintegerRank in the previous list, on ranking rows.
pointsintegerRanking points, on ranking rows.
rank_trendstringChange, on ranking rows.
tour_readstringThe ESPN tour endpoint that returned this row: atp or wta.
source_urlstringThe ESPN address that was read.
reads_totalintegerReads planned, on the summary row.
reads_refusedintegerReads the source refused, on the summary row.
rows_returnedintegerCharged rows in this run, on the summary row.
empty_readsintegerReads that held no fitting match, on the summary row.
matches_without_playersintegerListed matches with no named player, skipped, on the summary row.
row_statusstringok, or why this row carries no data: no_results, no_change, partial, blocked, or error.
error_reasonstringWhy the row is not ok. A refused input reads input_invalid: followed by what to fix.
billable_events_jsonstringWhat this row was billed as, for example {"match-row":1}. {} means free.
scraped_atstringWhen the row was written, UTC.

Pricing

Pay per event. Mamba Labs pays the platform costs of the run. Summary rows, refused reads, and a refused input are free.

Each date is read once per tour. A read with no match that fits your filters is free for the first 2 in a run, then charged as empty-read, because a long filtered range costs money to read. Narrow date_from and date_to to pay less, and set max_charge_usd to cap a run.

EventFree planBronzeSilverGold
match-row, one match$0.0018$0.00171$0.00162$0.00153
ranking-row, one ranked player$0.001$0.00095$0.0009$0.00085
empty-read, one date and tour with no fitting match, after the first 2 free$0.002$0.0019$0.0018$0.0017
apify-actor-start, once per run (one per GB of memory; the default 256 MB is one)$0.006$0.006$0.006$0.006

Per 1,000 rows of match-row: $1.80 on the free plan, $1.53 on Gold.

Free plan cap: 1.50 USD of evaluation a month, about 833 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.

Mamba Labs pays the platform costs of your run, Apify proxy traffic included.

Usage examples

Finals day at Wimbledon 2025.

{
"date_from": "2025-07-13",
"tournaments": ["wimbledon"],
"draws": ["singles"]
}

Every Sinner match in July 2025.

{
"date_from": "2025-07-01",
"date_to": "2025-07-31",
"players": ["sinner"],
"statuses": ["finished"]
}

Today's schedule and live matches.

{
"date_from": "today",
"statuses": ["live", "upcoming"]
}

Top 50 WTA.

{
"mode": "rankings",
"tours": ["wta"],
"top_n": "50"
}

Clay. Number and on or off inputs are text fields, which is what Clay sends. A list input takes a JSON list, so wrap a column in a one item list.

MCP. The Mamba Labs MCP server @mambalabsdev/mcp-tennis-match-data exposes this actor to Claude and other MCP clients.

Error handling

CaseWhat you get
Missing or unreadable inputOne free row, row_type run_summary, error_reason starting input_invalid:
ESPN refuses a readOne free source_report row with row_status blocked, and the run goes on. After 4 refusals in a row the run stops
No match fits your inputOne free summary row with row_status no_results
max_matches or max_charge_usd is reachedThe rows so far, and a free summary row with row_status partial
The run is close to its timeoutThe actor stops starting new work 90 seconds before the timeout and delivers what it has, with a partial summary row

Limitations

  • This reads ESPN, an unofficial source with no published contract for these addresses. ESPN can change or close them without notice, and then reads return free source_report rows until the actor is updated.
  • No point by point data, match statistics, odds, or player profile pages.
  • ATP and WTA tours as ESPN lists them, with their qualifying rounds. ITF and most Challenger events are not covered.
  • match_day_utc is the UTC date of the start time. A late night match can fall on the next UTC date, and a time ESPN has not confirmed shows start_time_confirmed false.
  • A date in a period ESPN holds no record for returns no rows. In testing, Wimbledon final weekends returned matches from 2007 to 2025 and none from 2003 to 2006. Coverage of smaller events in older years was not checked.
  • Rankings are the current list only, up to 150 per tour.
  • A scheduled match with no named player yet has no row and is counted on the summary row.
  • Reading many dates takes time: about 6 seconds a date in testing.

Mamba Labs actor suite

ActorActor ID
Account Hiring WatchgRAZA5WBi1r6L0gy7
Agent Accessibility AuditoranxbRv0lKrpQ1pnua
Agent to Brokerage ResolverePRRGLxOGyaVHO4dI
AI Answer Visibility TrackerRJZvzKniYK4nswcMg
AI List Extractor for Any WebsiteD5hOdIez45M0NX5jD
AI Tooling DetectorEwkHhmqiuJgRoVEbE
Amazon Product, Price, and Stock TrackerMtJPZoyjJ3IeqTFyo
API Deprecation and Breaking Change MonitorpHsbS3xXUK8Jqutz5
App Store and Google Play Review MonitorMaCMEhGrbchxQZ92G
B2B Reddit Conversation MonitorSoDryzzsjmY3SsiyG
Bluesky Brand Presence MappereLpxzP4IuXznlFVND
Bluesky Posts ScraperKldSjS7wjoeZ7vQGm
Brand Sponsor FinderPPgK6xrgOmvL7Nrys
Bulk WHOIS and RDAP Domain Age LookupMTrkG5FLU6SjqLdJY
Career Change Signal EnginevX2Yga1a6wGaXaP14
Company Careers Page Jobs, 17 ATS BoardsizP0rfIgf5YaRZfIh
Company Change Event FeedoX44rS0fkEJ3rXLWe
Company Discovery List Builderjch0HdaZnpbMqlcGS
Company Firmographic EnricherYlUtLWjfPpqykmB8g
Company Funding RecordOFS4Mt1gyYNtGfUbE
Company Headcount EstimatoraHC4GROnNt6kfZe5r
Company Identity Resolverlr8fTRAmZCBZmuwwh
Company Role Email, Phone and Address Finder4mMncKaJykiq94grz
Company Social Presence Mapper4k6CCemkgBDz18m2h
Competitor Price, Stock, and Changelog MonitoryxdgCbUQ4PYQWwRNU
Contact Classifier0lGSeYJmniXhGANnO
Contractor License Search, CA, TX, WA, OR, LAWBYK3CPI2kdeq4bP1
CRM Contact Job Change CheckerL8UbEmMJC1XYPSZOb
Domain Deliverability Checker0tVgxI7A6o9jMlxmc
Domain to LinkedIn URL Resolver3HtnSaqPHOg1Qg5gx
Ecommerce Platform Profiler5G2NeYjBbQTjaTn9L
Ecommerce Store DiscoveryPeHu4sLyFvQHXUUrX
Email List Verifier, Bring Your Own KeyCzVJ4NlaCKk80xpgE
Event Presence IndexWLhMy8fMDgsxdYxv5
Expert Witness Finder, US and AustraliaLIpwlgfE3LaQBaXd4
Facebook Posts ScraperT6jxIeq4ua0SLXnqG
Funding and Press Signal ScannerFS13X6dhQVgX3XOM6
GDPR Cookie Banner and Consent CheckerTrKyOS0KBoGC35nbr
GitHub Followers and Following ExportSGNxDmFb9v3tRDaFI
GitHub Organization Signal ScannerahF8RRpv5mzPao5CN
Google Ads Transparency Center Scraper by Domain1eOwxhBVxzvOXAm4s
Google Maps Places ScraperSuvHCNJ7pIuw6gn54
Google Trends ScraperOeDzaACKmBYJXzHZk
GTM Hiring Signal ScraperD7O1SA2EqwHGsGr1P
GTM Signals AggregatorxKdRfnfFNkdMpFuNs
Healthcare Provider NPI EnricherMrgbHzcpDq3mOv9Df
ICP Fit ScorerW161DT8W4kW55dMFh
Influencer Change Monitord2VVgahNL6UmcLkhg
Influencer Lead List BuilderKnmByszcv135yM30G
Influencer Profile ScraperEqEnklDVMIcB1V499
Influencer Search Across TikTok, Instagram and YouTubetpkedmloIIWtXx6sg
Influencer Talent Agency LookupzCuX4Mgyg6JvXgGzd
Instagram Facebook Brand Presence MapperHXh65I0JBjPsunbY8
Integration and Marketplace Presence MapperV0guNuvM85Q61f2gj
Job Board Keyword Signal Scanner4DvqpvhMR74NLcDDY
Job Posting MonitorQCfICD9kOPiOdj5iI
Journalist and Media List BuildermAfizsZC8qRoR0ecS
Launch Directory List BuildercRq3bmvEZxZtioQ7U
Lead File Import CheckerRwlGVXTf46LqZdUgt
Legal Entity ResolverKHFyPCDIx7CyqULYm
Link in Bio Scraper and Newsletter DetectorOorucdheTIgu7RFzK
LinkedIn Company Page MapperzOPm6A9JEhUGcIdFW
LinkedIn Jobs FeedSH6N0d8cz46BhCC8B
LinkedIn Post TrackeroiGLNPuaf5BRaz9K5
Local Business Lead BuilderqMN97aoHhsAS5bznV
Local Rank and Map Pack Trackergv0kyHGDIg8XscclB
Lookalike Companies from Seed Domainse2O426WBAbLLQL4Z2
Manufacturer and Supplier FinderQcsdmd0lUfPzVkonh
MCP Server Change and Health MonitorIeqjWF9U0BdDQFY08
Media URL TranscriberSyfr7Ya3EsHgWfrB6
Meta Ad Library Ads by Company, Graph APIJ1GWlSXfSGU3u8Wng
Mobile Phone Waterfall6OOgPktf7RIa5XCOP
New Hire FindercKuc38p4nYHNF3IW8
Newly Registered Companies, UK, Norway, Finland, Franceg2WfZhWvCtc57g2Jo
News and Media Mention Monitorgol1PPUKrsIk4QLBd
Newsletter Sponsor TrackerqSwpqxD1TiPZpLQHv
Open Tender and RFP FinderkPTGz6t6TFoUUyfaO
Outbound Stack Detectorv43UJC8r7qW7cBSTG
Page Finder and ExtractorTpurgcOZbVnknlaiC
Partner and Member Directory ExtractorZX0XJPPUvnFJxeC1a
People Finder & Email VerifierLEgloG7tWgQl4o6TD
Person LinkedIn URL ResolverssuyPV8LnEsL8qbnb
Person Social Footprint MapperjfQXa2zW9FHCJot9K
Personal Email to Company ResolverAefT5Ye6YNPFQwJBf
Pinterest Brand Presence Mapperd1HvjZfKhgvWsoEwn
Podcast Guest and Host Findero2MGSvgbSLeeXOsIo
Product Hunt Daily Launches with Maker DomainsO4VX63drWK9Y9x641
Prospect Engineq9rT6v64nUJdPexOQ
Public Feature Board and Roadmap MonitorrcHF5gj5r2Vqnry35
Publishing Frequency TrackerTbLwaUUATdYb6wp4N
Recent Funding Rounds FeedKueVp9MOz7iOoAgDp
Reddit Brand Presence MapperpKQZmDaT70SEb54bZ
Reddit Search and Thread Scraper4Gsth5cP2Xt9V2xDN
Reporting Window FinderuINxR7a1IW8qUTRUX
Research Topic Institutions and AuthorsOH8ANqt7bCKbo72Gk
Sequencer Event PollerS6s8Rjd61tGdrMRk4
Sequencer Lead Push0Jv27VeWM5tSZQs9x
Shopify App Store and Chrome Web Store ListingsgaY0BzkLyN77mD3wI
Site Crawler for Links and TableslLLJ6JxZ4XqN8ULz0
Substack Newsletter and Posts ScraperUEFsdwiPLmPNVy9xd
Team Page People Extractorj8a9zX0k4mNbvDbWK
Tech Stack Signal Detectorqyd7nNyqFPelQViBx
Tennis Match Datav3OX6zxXHZOf2yurO
Threads Posts by Keyword, Exact Match2OT8K8RiEEWtaj2MW
TikTok Brand Presence Mapperfco8FvoJcSafbeyd1
Trustpilot Reputation Enricher3lIqfCt61j4hqE1xz
US and UK Contract Award Winners by CompanyzhEtllASykOcx9hJ8
US Import Records Buyer FinderVIMafpKF5ggOw0COU
VC and Accelerator Portfolio List BuilderchH8hrfuoqqolW06m
Website Accessibility Checker, WCAG 2.2 AAP3jBj3FRghKEhX52z
Website Phrase and Business Model ClassifierCBuZ9k7sRwBeiKiCS
Website Traffic Rank EstimatorGnOFUzlNVIoXgeJjH
Work Email WaterfallOT6xqTFThC0Rjf7Zj
Workplace Program DetectorLi6pPDhqbdzFz3h7G
X Brand Presence MapperoLOgadhHUkNAyDA3w
YouTube Channel from Company Domain6hSpD3kd2s2IQ4VSs
Zillow Listing DetailsyG4zM0Enfsw2NefJ1

Built by Mamba Labs.