Tennis Live Scores API 🎾 (ATP, WTA, ITF, set stats) avatar

Tennis Live Scores API 🎾 (ATP, WTA, ITF, set stats)

Pricing

from $2.80 / 1,000 matches

Go to Apify Store
Tennis Live Scores API 🎾 (ATP, WTA, ITF, set stats)

Tennis Live Scores API 🎾 (ATP, WTA, ITF, set stats)

Live, finished and upcoming tennis matches in one dataset: set-by-set scores with tiebreaks, who is serving, the current game score, surface and winner. ATP, WTA, Challenger, ITF, qualifying, singles and doubles, 7 days back and 2 ahead. Optional per-set serve and break-point statistics. No API key.

Pricing

from $2.80 / 1,000 matches

Rating

0.0

(0)

Developer

Tagada Data

Tagada Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

2 days ago

Last modified

Share

Every tennis match of the day in one table: who is playing, what the score is right now, who is serving, who won, on what surface. ATP, WTA, Challenger, ITF and qualifying, singles and doubles, from seven days back to two days ahead.

No API key, no account, no browser. A full day of tennis comes back in a couple of seconds, and you can run it once for the results or every minute for a live scoreboard.

What it costs next to the alternatives

Tennis data is normally something you rent by the month. api-tennis.com starts at $40 a month, Sportradar's tennis feed is enterprise pricing you have to ask for, and both of them want you to sign a plan before you know whether the data fits. Here you pay per match and stop whenever you like.

Prices below were read off each actor's own Store page on 17 August 2026.

ActorPriceWhat its own listing covers
This actorone flat price per match, statistics optional, platform usage includedLive, finished and scheduled matches, set-by-set with tiebreaks, server and current game point, surface, and a full match plus per-set statistics sheet
crawlstone/tennis-scraper$8.00 per 1,000 resultsSofaScore and Tennis Abstract: live matches, tournaments, point-by-point, player statistics
parseforge/tennisexplorer-scraper$7.50 per 1,000 resultsTennisExplorer results by date and tour, with odds
extractify-labs/flashscore-tennis-matches$1.00 per 1,000 resultsFlashscore match listings, set-by-set scores, player rankings
sian.agency/tennis-point-by-point-scraper$75.00 per 1,000 matchesPoint-by-point rallies plus match and set statistics

The set-by-set statistics sheet is the part none of the $1 to $8 listings advertise: aces, double faults, first and second serve percentages, break points saved and break points converted, for the match and for each set separately, on finished matches and on live ones. The other thing to know is matchId: it is stable, so the row you polled while a match was live is the same row after it finishes.

What you get

One row per match.

FieldWhat it is
matchIdStable id, the same across every run. Use it as a primary key.
statuslive, finished or scheduled
statusDetailSet 2, Finished, Finished / retired, Scheduled
currentSetWhich set is being played, on live matches
startTime, endTimeISO 8601 UTC
dateThe UTC day the match belongs to
durationMinutesHow long a finished match took
tournament, tour, tournamentCategoryCincinnati, ATP, ATP - Singles
tournamentCountry, surfaceUSA, hard
isDoubles, isQualificationFlags, so you can filter the noise out
homePlayer, awayPlayerAlcaraz C., Sinner J.
homePlayerSlug, awayPlayerSlugalcaraz-carlos, url-safe, stable
homeCountry, awayCountryCountry the player represents
homeSets, awaySetsSets won
setsPer set: games each, plus tiebreak points when there was a breaker
score6-3, 7-6(4), exactly how a scoreboard writes it
winnerhome, away, or empty while the match is still open
servingWho is serving, on live matches
homeGamePoints, awayGamePointsThe current game: 0, 15, 30, 40, A
url, tournamentUrlLinks back to the match and the event

Tick "Add match statistics" and every played match also carries a full statistics sheet, for the match and broken down set by set:

aces, double faults, first and second serve percentage, first and second serve points won, break points saved, break points converted, first and second return points won, winners, net points won, service points won, return points won, total points won, service games won, return games won, total games won.

Statistics work on live matches too, so you can watch a serve percentage move while the match is still going.

What it is for

Betting models and quant research. Set-by-set scores with tiebreaks, plus serve and break-point statistics per set, is the shape you need to fit anything. Pull last7days once a week and you have a rolling history with the surface, the tour and the qualifying flag attached.

Live scoreboards and bots. Set the status filter to live on its own and schedule the actor: you get a small, cheap payload with the current set, the game score and the server, and nothing else. That is the whole feed for a Discord bot, a Telegram alert or a widget on a site.

Fantasy tennis and pick'em games. tomorrow and next2days give you the order of play before it happens, with both players, the tournament and the surface, so you can build a card and lock it.

Media and content sites. Results for the day, in one call, with the tour and the country already parsed out. No scraping of results tables, no timezone guessing: everything is UTC.

Player and tournament tracking. Put a surname in "Only these players" and you get just that player's matches. Put Challenger in "Only these tournaments" and you get the whole Challenger circuit and nothing else.

Input examples

Today's tennis, everything:

{
"dates": ["today"]
}

A live scoreboard, the cheapest way to run this on a schedule:

{
"dates": ["today"],
"matchStatus": ["live"]
}

The last week of ATP and WTA results with full statistics:

{
"dates": ["last7days"],
"matchStatus": ["finished"],
"tournaments": ["ATP", "WTA"],
"includeStatistics": true,
"maxResults": 2000
}

Tomorrow's order of play for one tournament:

{
"dates": ["tomorrow"],
"matchStatus": ["scheduled"],
"tournaments": ["US Open"]
}

One player, everything available:

{
"dates": ["all"],
"players": ["Swiatek"],
"includeStatistics": true
}

An exact date:

{
"dates": ["2026-08-31", "2026-09-01"],
"matchStatus": ["finished"]
}

How far back and forward can it go?

Seven days back and two days ahead of today, UTC. That is the window the source publishes, and asking for a date outside it is reported in the log rather than failing the run. If you need a longer history, run the actor on a schedule and append to the same dataset: matchId is stable, so de-duplicating is trivial.

FAQ

Do I need an API key or a login? No. Nothing to sign up for, nothing to connect, nothing to rotate.

How fast is it? A whole day of tennis, roughly 120 to 250 matches across every tour, takes about a second. Ten days, close to 2,000 matches, takes about three.

Does it cover Challenger and ITF, or only the main tour? Everything the source lists: ATP, WTA, Challenger, ITF Men, ITF Women, plus qualifying draws, singles and doubles. Use tournaments and the isQualification and isDoubles fields to narrow it down.

Are doubles matches included? Yes, with both players in each pair in the homePlayer and awayPlayer fields as the source writes them, and isDoubles set to true.

Can I get live scores, point by point? You get the live set score, the current game score and who is serving, refreshed every time you run. Point-by-point history is not published for most matches, so it is not offered rather than being offered and empty half the time.

Are betting odds included? No. The scores feed does not carry odds, and this actor does not pretend to supply them.

What is the round of the match? The source does not publish a round in its day-by-day scores feed, so this actor does not invent one. Everything it does ship comes straight from the source.

Why are some matches missing a statusDetail? Because the source used a status code whose meaning is not documented and not provable from the score. Rather than guess between "walkover" and "cancelled", the row carries an empty statusDetail and the raw statusCode, so you can decide for yourself.

Which timezone are the dates in? UTC, everywhere, on purpose. 2026-08-31 means the same day whoever runs it and wherever they run it from. Convert to local time from startTime if you need to.

Can I run this on a schedule? Yes, and it is designed for it. Set the status filter to live and schedule it every minute or two for a scoreboard, or run it once a night with ["yesterday"] to archive results.

What happens if I ask for a player who is not playing? Nothing is charged beyond the run start, the run finishes successfully, and the status message tells you no match matched.

Notes on data

Player names come through as the source writes them, Alcaraz C. rather than Carlos Alcaraz. The homePlayerSlug field carries the url-safe long form (alcaraz-carlos), which is the better join key if you are merging with another dataset. Scores, sets and tiebreaks are numbers, not strings, so they load straight into a dataframe. Anything the source did not publish comes back empty rather than as a zero or a guess.


Keywords: tennis scraper, tennis live scores, tennis results API, ATP scraper, WTA scraper, tennis scores API, live tennis data, tennis match results, tennis statistics scraper, ATP results, WTA results, Challenger tennis results, ITF results, tennis fixtures, order of play, tennis odds data alternative, tennis betting data, tennis dataset, live score API, tennis match statistics, aces and double faults data, tennis scores JSON, tennis CSV export.