Tennis Scraper — Live Scores, Results, Stats & Odds avatar

Tennis Scraper — Live Scores, Results, Stats & Odds

Pricing

from $3.50 / 1,000 matches

Go to Apify Store
Tennis Scraper — Live Scores, Results, Stats & Odds

Tennis Scraper — Live Scores, Results, Stats & Odds

Tennis matches from SofaScore for any date range, player or match: scores with set and tiebreak detail, match statistics, betting odds and point-by-point, across ATP, WTA, Challenger and ITF. Pay per match.

Pricing

from $3.50 / 1,000 matches

Rating

0.0

(0)

Developer

astravalabs

astravalabs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Tennis match data for any date range, player or match: final and live scores with set and tiebreak detail, match statistics, betting odds and point-by-point. Covers ATP, WTA, Challenger, WTA 125, ITF and UTR. One clean row per match, ready for spreadsheets, models and dashboards.

Use it to build betting and prediction models, track players and tournaments, research serve and return patterns, or feed live scores into your own app.

Quick start

A week of main-tour results with everything:

{
"dateFrom": "2026-10-01",
"dateTo": "2026-10-07",
"matchStatus": "finished",
"includePointByPoint": true
}

Today's schedule across every tour:

{ "dateFrom": "today", "matchStatus": "upcoming", "tours": [] }

Matches in play right now:

{ "matchStatus": "live" }

A player's last 50 matches:

{
"players": ["https://www.sofascore.com/tennis/player/sinner-jannik/206570"],
"maxMatchesPerPlayer": 50
}

players and matches take SofaScore URLs or numeric IDs. Dates are calendar days in UTC, up to 31 per run.

What you get

One row per match (real data, abridged):

{
"matchId": 17257382,
"url": "https://www.sofascore.com/tennis/match/aleksandar-kovacevic-matteo-berrettini/IfVsicAb#id:17257382",
"startTime": "2026-10-07T04:00:00+00:00",
"status": "finished",
"statusDescription": "Ended",
"tour": "ATP",
"tournament": "Shanghai",
"tournamentPoints": 1000,
"round": "Round of 128",
"surface": "Hardcourt outdoor",
"matchType": "singles",
"city": "Shanghai",
"player1": {"name": "Aleksandar Kovačević", "id": 187608, "country": "USA", "ranking": 81, "seed": null},
"player2": {"name": "Matteo Berrettini", "id": 112783, "country": "ITA", "ranking": 46, "seed": null},
"winner": "player2",
"winnerName": "Matteo Berrettini",
"setsPlayer1": 1,
"setsPlayer2": 2,
"score": "7-6(3) 1-6 4-6",
"sets": [
{"set": 1, "player1": 7, "player2": 6, "tiebreakPlayer1": 7, "tiebreakPlayer2": 3, "durationSeconds": 3527}
],
"durationSeconds": 8124,
"oddsPlayer1": 2.63,
"oddsPlayer2": 1.5,
"odds": [
{"market": "Full time", "line": null, "isLive": false, "suspended": false,
"choices": [
{"name": "player1", "decimal": 2.63, "openingDecimal": 3.0, "winning": false},
{"name": "player2", "decimal": 1.5, "openingDecimal": 1.4, "winning": true}]}
],
"statistics": {
"aces": {"player1": 3, "player2": 23},
"firstServeAccuracy": {"player1": 64, "player2": 47, "player1Total": 111, "player2Total": 73},
"breakPointsScored": {"player1": 0, "player2": 3}
},
"pointByPoint": [
{"set": 1, "game": 1, "server": "player1", "winner": "player1", "tiebreak": false,
"break": false, "gamesAfter": "1-0", "points": ["15-0", "15-15", "30-15", "40-15"]}
],
"collectedAt": "2026-10-08T20:33:00+00:00"
}
  • Statistics: about 20 items per match, keyed by stable names: aces, double faults, first and second serve in and won, return points, break points, games won, tiebreaks and more. Ratios keep both counts (player1 made of player1Total).
  • Odds: match winner, first set winner and total games, as decimal odds with opening prices. Each choice is flagged winning once settled.
  • Point-by-point: every game in order with server, winner, breaks and the point sequence. Tiebreak games are marked and never counted as breaks.
  • Doubles: each side also lists its two players.

Options

FieldDefaultWhat it does
dateFrom / dateTotodayDays to collect (UTC). today, yesterday and tomorrow work too.
toursATP, WTA, Challenger, WTA 125Add ITF Men/Women or UTR Men/Women, or leave empty for every tour.
matchStatusallfinished, upcoming or live (live ignores the dates).
matchTypeallsingles or doubles.
players—Player URLs or IDs; returns their most recent matches.
maxMatchesPerPlayer30Matches per player.
matches—Specific match URLs or IDs.
includeStatisticstrueMatch statistics for played matches.
includeOddstrueBetting odds.
includePointByPointfalseEvery game and point. Larger rows.
maxMatches1000Whole-run limit on matches saved (and charged).

Pricing

$3.50 per 1,000 matches ($0.0035 each), with statistics, odds and point-by-point included at no extra cost, plus Apify's small Actor-start fee. You pay only for matches saved. Matches SofaScore doesn't have, and matches your filters exclude, are not charged.

Coverage and reliability

Measured on 688 matches over seven days of ATP, WTA, Challenger and WTA 125 (October 2026):

  • Every match collected (688 of 688), in about three minutes.
  • Statistics on 97%, point-by-point on 95%, odds on 93%. The rest are walkovers, retirements, cancellations and smaller events where the source has no such data. Those fields are null, never guessed.
  • Cross-checked: the winner agrees with sets won on every finished match.

ITF and UTR matches have results and usually statistics, but odds are patchier at those levels.

Run report

The RUN_REPORT record in the run's key-value store lists matches per day and tour, each match's outcome, and any detail that was unavailable for a match.

Notes

  • Data comes from SofaScore's public match pages. This Actor is independent and not affiliated with SofaScore, the ATP, the WTA or the ITF.
  • Player 1 is the first-listed player on SofaScore.
  • Rankings in a row are the players' rankings at the time of collection.