Tennis Scraper avatar

Tennis Scraper

Pricing

from $3.00 / 1,000 matches

Go to Apify Store
Tennis Scraper

Tennis Scraper

The Tennis Scraper extracts ATP, WTA, Challenger and ITF matches — results, live scores and fixtures — with players, tournaments, surfaces and set scores, plus optional match stats, point-by-point, durations, tiebreaks and head-to-head for betting and analytics.

Pricing

from $3.00 / 1,000 matches

Rating

0.0

(0)

Developer

FalconScrape

FalconScrape

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

🎾 Tennis Scraper

Get tennis match data for every tour as clean, structured JSON. The Tennis Scraper returns ATP, WTA, Challenger and ITF matches — finished results, live scores and upcoming fixtures — with players, tournaments, surfaces, set-by-set scores and winners, and optionally match statistics, point-by-point, set durations, tiebreak scores and head-to-head history. Built for betting models, sports analytics, fantasy tools and live-score apps.

✨ Features

  • 🌍 Every level of the game: ATP, WTA, Challenger, ITF, juniors and exhibitions, singles and doubles — typically 100–400 matches a day.
  • 📅 Results, live and upcoming: Up to 7 days back for finished results and 7 days ahead for the schedule, with live scores (current game points and who is serving) for matches in play.
  • 📊 Match statistics: Aces, double faults, first-serve %, points won on serve and return, break points saved and converted, games won — for the whole match and for every set.
  • 🎯 Point-by-point: Every game with its server, winner, breaks of serve and the full point sequence, with break points, set points and match points flagged.
  • ⏱️ Durations and tiebreaks: Match and set durations, tiebreak scores and the chair umpire.
  • 🤝 Head-to-head: Previous meetings of the two players with date, tournament, surface, winner and score.
  • 🔎 Simple filters: Tour, singles or doubles, match status and player names.
  • 💸 Fair billing: Pay per match saved. Runs with no matching matches are free.

🛠️ How It Works

  1. Pick the days – daysBack (results) and daysAhead (schedule), 0–7 each. 0 and 0 means today only.
  2. Filter – Choose tours (empty = all), matchType (singles by default), status (finished, live, scheduled or all) and, optionally, players (part of a name is enough).
  3. Add details (optional) – Turn on includeMatchDetails for statistics, point-by-point, durations, tiebreaks and head-to-head.
  4. Run it – Matches stream into the dataset; export as JSON, CSV or Excel, or schedule runs for a live feed.

💰 Pricing

EventPriceWhat you get
match$0.003One match: tournament, tour, surface, players, status, winner, set scores and live score
match-details$0.006Charged instead of match when details are on: adds statistics, point-by-point, durations, tiebreaks and head-to-head

Example: yesterday's ATP and WTA singles results (about 50 matches) cost $0.15, or $0.30 with full match details. A run that finds no matching matches is not charged.

⚠️ Good to know

  • The schedule covers 7 days back and 7 days ahead of today. Older results are not available.
  • Statistics and point-by-point exist for matches that have been played; for scheduled matches, details contain the head-to-head only. Lower-level ITF matches often have no statistics.
  • player1 / player2 follow the order the match is listed in; winner and every per-player value use the same sides.
  • country is World for players competing under a neutral flag.
  • Times are UTC.

📊 Sample Output Data

{
"matchId": "G2W1cGK6",
"url": "https://www.flashscore.com/match/G2W1cGK6/#/match-summary",
"startsAt": "2026-10-02T05:10:00.000Z",
"status": "finished",
"statusDetail": "finished",
"tour": "atp",
"category": "ATP - SINGLES",
"matchType": "singles",
"tournament": {
"id": "3473162",
"name": "Beijing (China)",
"surface": "hard",
"indoor": false,
"url": "https://www.flashscore.com/tennis/atp-singles/beijing/"
},
"player1": {
"id": "drgiRTl7",
"name": "Molcan A.",
"country": "Slovakia",
"slug": "molcan-alex",
"partner": null
},
"player2": {
"id": "4bNPtZT5",
"name": "Khachanov K.",
"country": "World",
"slug": "khachanov-karen",
"partner": null
},
"winner": "player2",
"setsWon": {
"player1": 0,
"player2": 2
},
"sets": [
{
"player1": 5,
"player2": 7,
"tiebreak": null,
"durationMinutes": 41
},
{
"player1": 3,
"player2": 6,
"tiebreak": null,
"durationMinutes": 34
}
],
"live": null,
"updatedAt": "2026-10-02T06:25:16.000Z",
"scrapedAt": "2026-10-03T13:03:16.781Z",
"durationMinutes": 75,
"umpire": "Lahyani M.",
"statistics": [
{
"period": "Match",
"group": "Service",
"name": "Aces",
"player1": "1",
"player2": "7"
},
{
"period": "Match",
"group": "Service",
"name": "Double Faults",
"player1": "1",
"player2": "0"
},
{
"period": "Match",
"group": "Service",
"name": "1st serve percentage",
"player1": "59%",
"player2": "77%"
},
{
"period": "Match",
"group": "Service",
"name": "1st serve points won",
"player1": "83% (25/30)",
"player2": "85% (34/40)"
}
],
"pointByPoint": [
{
"set": 1,
"gamesScore": {
"player1": 0,
"player2": 1
},
"server": "player2",
"winner": "player2",
"brokenServe": false,
"points": [
{
"score": "0:15",
"breakPoint": false,
"setPoint": false,
"matchPoint": false
},
{
"score": "0:30",
"breakPoint": false,
"setPoint": false,
"matchPoint": false
},
{
"score": "0:40",
"breakPoint": false,
"setPoint": false,
"matchPoint": false
}
]
}
],
"headToHead": [
{
"matchId": "j5TAU6tU",
"date": "2022-05-18",
"tournament": "Lyon 2",
"surface": "clay",
"winner": "player1",
"score": "0:2"
}
]
}

Start building your tennis dataset with the Tennis Scraper! 🎾