Flashscore Tennis Matches avatar

Flashscore Tennis Matches

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Flashscore Tennis Matches

Flashscore Tennis Matches

Extract ATP, WTA, ITF & Challenger tennis match listings, set-by-set scores, player rankings, and live data from Flashscore. Singles & doubles. No proxy needed.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Extractify Labs

Extractify Labs

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

4 days ago

Last modified

Share

🎾 The first dedicated Flashscore tennis actor on the Apify Store. Extract tennis match data from Flashscore covering ATP, WTA, ITF, and Challenger — live scores, set-by-set results, fixtures, player rankings, nationality, and surface type, all in clean JSON. No proxy required. Works across both singles and doubles. A typical run fetching all ATP singles matches for one day costs under $0.01 on the Apify Free tier.

What data does this actor extract?

Every match record returns 24 structured fields covering match identity, scores, players, and tournament context.

FieldTypeExample
match_idstring"Ei7ESFfL"
match_urlstring"https://www.flashscore.com/match/Ei7ESFfL/"
match_datestring (ISO 8601)"2026-04-15T14:00:00"
match_end_timestampstring | null"2026-04-15T16:12:00"
match_statusenum"FINISHED" / "LIVE" / "SCHEDULED" / "POSTPONED" / "CANCELLED"
match_typeenum"singles" / "doubles"
result_typeenum | null"NORMAL" / "RETIREMENT" / "WALKOVER" / "DEFAULTED"
winnerenum | null"home" / "away"
walkover_notestring | null"Alcaraz Carlos - withdrawn."
sets_won_homeinteger | null2
sets_won_awayinteger | null0
total_match_durationstring | null"1:52"
setsarray | nullset-by-set game scores + duration
home_playersarraylength 1 (singles) or 2 (doubles)
away_playersarraylength 1 (singles) or 2 (doubles)
tournament_namestring"Barcelona (Spain)"
tournament_idstring"rZvXbpeD"
tournament_urlstring"https://www.flashscore.com/tennis/atp-singles/barcelona/"
category_namestring"ATP - Singles"
surfacestring | null"clay" / "hard" / "grass" / "indoor hard"
round_namestring | null"Quarter-finals" / "Semi-finals" / "Final"
current_serverinteger | null1 (live only — 1=home serving, 2=away serving)
current_game_score_homestring | null"40" (live only)
current_game_score_awaystring | null"15" (live only)

Each home_players / away_players entry contains: name, short_name, id, id2, slug, nationality, ranking, photo_url.

Each sets entry contains: home (games won), away (games won), duration (minutes, sets 1–2 only), tiebreak_home (reserved for v2), tiebreak_away (reserved for v2).

Why use this actor?

This is the only dedicated tennis Flashscore actor on the Apify Store. Every other Flashscore actor either lists tennis as "coming soon" or buries it inside a generic multi-sport input. This actor is built exclusively for tennis, with a schema designed around sets, players, rankings, and surfaces — not goals or quarters.

Set-by-set scores. No other actor in this category explicitly supports per-set game scores. Get the full score breakdown (e.g. 6-3, 6-4) for every completed match, along with set duration for sets 1 and 2.

All four professional tours. ATP, WTA, ITF, and ATP Challenger are all covered. Filter to one tour or run across all of them in a single request.

Singles and doubles. Both match types are supported. Doubles records include full names, IDs, and photos for both players on each side.

No proxy required. Data is fetched directly from Flashscore's internal binary feed — the same infrastructure used by the sibling flashscore-extractor actor. You are charged only for Apify compute, not proxy bandwidth.

Minimal requests. A default run (today's matches) makes exactly 3 HTTP requests: one for the homepage, one for the authentication token, one for the day's feed. Fetching 7 days uses 9 requests total.

Live data fields. When a match is in progress, the record includes current_game_score_home, current_game_score_away, and current_server — the active point score and which side is serving. These fields are null for scheduled and finished matches.

Use cases

Betting analysts: Combine yesterday's ATP and WTA results with today's scheduled matches in a single run. Use set scores and match durations to feed your serve/return or fatigue models. Filter to specific surfaces (clay, grass, hard) to segment your dataset by tournament conditions.

Sports journalists and media teams: Automate your daily results digest. Schedule the actor to run each morning and pull all finished matches from the previous day, complete with player names, nationalities, rankings, round, and tournament URL for deep links.

Fantasy sports platforms: Fetch today's and tomorrow's scheduled fixtures to populate your draft lobby. Use tours to limit results to ATP and WTA only. Use startUrls to target a specific Grand Slam or Masters event during tournament weeks.

Data scientists and ML researchers: Build a historical tennis dataset across multiple tours and surfaces by running the actor with dayOffsets spanning up to 7 days back per run. Fields include ranking at time of match, set durations, result type (retirement, walkover, normal), and match end timestamp — all useful features for predictive modelling.

Betting platforms and odds providers: Use matchStatuses: ["live"] during a tournament to extract the in-progress matches feed. The actor returns current game score (e.g. 40-15) and serving indicator, giving your platform a low-cost alternative to premium tennis data APIs for structural match state.

App developers building live scoreboards: Schedule the actor to run on a short Apify interval (e.g. every 2 minutes) during play days. The output JSON is structured for direct ingestion — no HTML parsing, no proxy overhead, no authentication to manage yourself.

How to use it

  1. Open the actor on the Apify Store.
  2. Leave dayOffsets at the default ["0"] for today, or set it to ["-1", "0", "1"] for yesterday, today, and tomorrow.
  3. (Optional) Use tours to restrict to atp, wta, itf, or challenger.
  4. (Optional) Use matchStatuses to filter to finished, live, or scheduled matches only.
  5. (Optional) Paste a Flashscore tournament URL into startUrls to extract a single event.
  6. Click Start. When the run finishes, download results as JSON, CSV, or XLSX from the dataset tab.

Sample input (fetch all ATP finished matches from yesterday):

{
"dayOffsets": ["-1"],
"matchStatuses": ["finished"],
"tours": ["atp"]
}

Input parameters

ParameterTypeDefaultDescription
dayOffsetsarray of strings["0"]Which days to fetch, relative to today. "0" = today, "-1" = yesterday, "1" = tomorrow. Any combination from "-7" to "7" is valid.
matchStatusesarray of strings["all"]Filter by match state: all, finished, live, scheduled. If all is present, other values are ignored. Note: live reflects match status at the moment the actor runs — not a continuous stream.
toursarray of strings[] (all tours)Restrict results to specific tennis tours: atp, wta, itf, challenger. Leave empty to return all tours.
tournamentsarray of strings[] (all)Case-insensitive partial match on tournament name. For example, ["Wimbledon"] or ["Roland Garros", "Australian Open"]. Ignored when startUrls is provided.
startUrlsarray[]Flashscore tournament or results page URLs. Restricts the run to those specific events. When provided, the tournaments filter is ignored. URLs must be on www.flashscore.com.
maxItemsintegerunlimitedOptional cap on total results across all days and tours. Leave blank for no limit.

Output JSON example

The following is one real match record from a live run (ATP clay season, finished singles match):

{
"match_id": "Ei7ESFfL",
"match_url": "https://www.flashscore.com/match/Ei7ESFfL/",
"match_date": "2026-04-15T14:00:00",
"match_end_timestamp": "2026-04-15T16:12:00",
"match_status": "FINISHED",
"match_type": "singles",
"result_type": "NORMAL",
"winner": "away",
"walkover_note": null,
"sets_won_home": 0,
"sets_won_away": 2,
"total_match_duration": "1:32",
"sets": [
{ "home": 3, "away": 6, "duration": "41", "tiebreak_home": null, "tiebreak_away": null },
{ "home": 4, "away": 6, "duration": "51", "tiebreak_home": null, "tiebreak_away": null }
],
"home_players": [
{
"name": "Medjedovic H.",
"short_name": "MED",
"id": "xBqKpEmT",
"id2": "vLmPqEjX",
"slug": "medjedovic-hamad",
"nationality": "Serbia",
"ranking": 112,
"photo_url": "https://static.flashscore.com/res/image/data/Ol1A9QQq-xYdWWVqk.png"
}
],
"away_players": [
{
"name": "Borges N.",
"short_name": "BOR",
"id": "cKmPvRtU",
"id2": "nFqLrBmY",
"slug": "borges-nuno",
"nationality": "Portugal",
"ranking": 34,
"photo_url": "https://static.flashscore.com/res/image/data/Tj3B8WXk-mNpQrLvE.png"
}
],
"tournament_name": "Barcelona (Spain)",
"tournament_id": "rZvXbpeD",
"tournament_url": "https://www.flashscore.com/tennis/atp-singles/barcelona/",
"category_name": "ATP - Singles",
"surface": "clay",
"round_name": "Round of 16",
"current_server": null,
"current_game_score_home": null,
"current_game_score_away": null
}

Filtering guide

Get today's ATP results only:

{ "tours": ["atp"], "matchStatuses": ["finished"] }

Get yesterday's and today's WTA matches:

{ "dayOffsets": ["-1", "0"], "tours": ["wta"] }

Get all scheduled matches for the next 3 days:

{ "dayOffsets": ["1", "2", "3"], "matchStatuses": ["scheduled"] }

Get all matches at Wimbledon (singles and doubles): Use startUrls with the tournament page URL. The tournaments filter is ignored when startUrls is set.

{ "startUrls": [{ "url": "https://www.flashscore.com/tennis/atp-singles/wimbledon/" }] }

Get all ITF and Challenger matches across a 7-day window:

{ "dayOffsets": ["-3", "-2", "-1", "0", "1", "2", "3"], "tours": ["itf", "challenger"] }

Live scores during a tournament:

{ "matchStatuses": ["live"], "tours": ["atp", "wta"] }

Note: live is a point-in-time snapshot. Schedule the actor at short intervals for near-real-time monitoring.

Tours and coverage

TourFilter valueIncludesExamples
ATP TouratpATP singles and doublesAustralian Open, Roland Garros, Wimbledon, US Open, Masters 1000, ATP 500/250
WTA TourwtaWTA singles and doublesGrand Slams (WTA draw), WTA 1000, WTA 500/250
ITFitfITF Men's and Women's circuitsITF World Tennis Tour events
ATP ChallengerchallengerChallenger Tour singles and doublesATP Challenger 125/100/75 events

Leave tours empty to return all four tours in a single run. The category_name field in the output identifies the exact tour and match type (e.g. "ATP - Singles", "WTA - Doubles", "ITF Men - Singles").

FAQ

Does this actor support live tennis matches?

Yes. Set matchStatuses to ["live"] to filter to in-progress matches only. Each live match record includes current_game_score_home, current_game_score_away (the current point score, e.g. "40", "15", "AD"), and current_server (1 = home side serving, 2 = away side serving). These fields are null for scheduled and finished matches.

Important: this is a point-in-time snapshot, not a continuous feed. The actor runs once and returns the state of all live matches at that moment. To build a near-real-time live scores feed, schedule the actor to run at short intervals (every 1–5 minutes) using Apify Scheduler.

Can I scrape a specific tournament like Wimbledon or Roland Garros?

Yes. Use the startUrls parameter with the tournament's Flashscore URL, for example: https://www.flashscore.com/tennis/atp-singles/wimbledon/

When startUrls is set, the tournaments text filter is ignored — only matches from the specified tournament pages are returned. You can also use the tournaments parameter for a simpler partial-name match: ["Wimbledon"] will match any tournament whose name contains "Wimbledon".

What tennis tours are covered?

All four professional tour levels are covered: ATP Tour, WTA Tour, ITF, and ATP Challenger. Use the tours parameter to restrict results to one or more specific tours. Leave it empty (the default) to return all tours in a single run. The category_name output field tells you the exact tour and match type for every record.

What surface types are included?

Surface data is included for all matches where Flashscore provides it. Known values are: clay, hard, grass, and indoor hard. The surface field is null for events where Flashscore does not expose surface type (typically some ITF and Challenger events). Surface is an output-only field — there is no input filter for surface. Filter by surface in your downstream pipeline using the surface field value.

How is this actor different from the Flashscore football/basketball actor?

This actor is tennis-specific and has a completely different output schema designed for the sport. The sibling Flashscore: Match Listings, Scores & Fixtures actor covers football (soccer) and basketball, returning team names, goal/point scores, and stage descriptions. It does not extract tennis data.

This actor returns tennis-specific fields: per-set game scores, set duration, player rankings, nationalities, match type (singles/doubles), result type (retirement, walkover), surface, round name, and live in-play game scores. Both actors share the same Flashscore feed infrastructure and dayOffsets/matchStatuses input pattern.

Does this actor require proxies or special credentials?

No. The actor authenticates directly with Flashscore's internal feed using a token extracted from the site's public JavaScript bundle. No proxy subscription is needed and no API key or account is required. You pay only for Apify compute — a typical run costs under $0.01 on the Apify Free tier.

How do I export the data to CSV or Excel?

When the actor run completes, open the Dataset tab in the Apify Console and click Export. Apify supports JSON, CSV, XLSX, XML, and HTML exports natively. For automated pipelines, use the Apify Dataset API to pull the results programmatically after each run.

Limitations

  • Set 3+ duration not available. Set duration (duration field inside the sets array) is populated for sets 1 and 2 only. For sets 3, 4, and 5, the duration field is null. This is a limitation of the main Flashscore listings feed, which does not include extended set duration data.
  • Tiebreak mini-scores not available in v1. The tiebreak_home and tiebreak_away fields are reserved and always null in this version. Tiebreak scores require a secondary per-match API call and will be added in v2.
  • Match statistics not included. Aces, winners, double faults, break points, and other in-match statistics are available from a separate Flashscore endpoint and are out of scope for this actor.
  • No continuous live feed. The actor is a point-in-time extractor. It does not push updates as scores change. Use Apify Scheduler for polling-based near-real-time data.
  • 14-day window only. The dayOffsets range is -7 to +7 (14 days total). Historical data beyond 7 days back is not accessible from this feed.
  • Doubles sub-fields partially populated. For doubles matches, short_name, ranking, nationality, and photo_url are assigned to the first player of each pair only; the second player receives null for these fields, as Flashscore's listings feed provides a single value per side for these sub-fields.