# Flashscore Tennis Matches (`extractify-labs/flashscore-tennis-matches`) Actor

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

- **URL**: https://apify.com/extractify-labs/flashscore-tennis-matches.md
- **Developed by:** [Extractify Labs](https://apify.com/extractify-labs) (community)
- **Categories:** Automation, Other, News
- **Stats:** 5 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

🎾 The first dedicated Flashscore tennis actor on the Apify Store. Extract tennis match data from [Flashscore](https://www.flashscore.com) 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.

| Field | Type | Example |
|-------|------|---------|
| `match_id` | string | `"Ei7ESFfL"` |
| `match_url` | string | `"https://www.flashscore.com/match/Ei7ESFfL/"` |
| `match_date` | string (ISO 8601) | `"2026-04-15T14:00:00"` |
| `match_end_timestamp` | string \| null | `"2026-04-15T16:12:00"` |
| `match_status` | enum | `"FINISHED"` / `"LIVE"` / `"SCHEDULED"` / `"POSTPONED"` / `"CANCELLED"` |
| `match_type` | enum | `"singles"` / `"doubles"` |
| `result_type` | enum \| null | `"NORMAL"` / `"RETIREMENT"` / `"WALKOVER"` / `"DEFAULTED"` |
| `winner` | enum \| null | `"home"` / `"away"` |
| `walkover_note` | string \| null | `"Alcaraz Carlos - withdrawn."` |
| `sets_won_home` | integer \| null | `2` |
| `sets_won_away` | integer \| null | `0` |
| `total_match_duration` | string \| null | `"1:52"` |
| `sets` | array \| null | set-by-set game scores + duration |
| `home_players` | array | length 1 (singles) or 2 (doubles) |
| `away_players` | array | length 1 (singles) or 2 (doubles) |
| `tournament_name` | string | `"Barcelona (Spain)"` |
| `tournament_id` | string | `"rZvXbpeD"` |
| `tournament_url` | string | `"https://www.flashscore.com/tennis/atp-singles/barcelona/"` |
| `category_name` | string | `"ATP - Singles"` |
| `surface` | string \| null | `"clay"` / `"hard"` / `"grass"` / `"indoor hard"` |
| `round_name` | string \| null | `"Quarter-finals"` / `"Semi-finals"` / `"Final"` |
| `current_server` | integer \| null | `1` (live only — 1=home serving, 2=away serving) |
| `current_game_score_home` | string \| null | `"40"` (live only) |
| `current_game_score_away` | string \| 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](https://apify.com/extractify-labs/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](https://apify.com/extractify-labs/flashscore-tennis-matches).
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):**

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

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `dayOffsets` | array of strings | `["0"]` | Which days to fetch, relative to today. `"0"` = today, `"-1"` = yesterday, `"1"` = tomorrow. Any combination from `"-7"` to `"7"` is valid. |
| `matchStatuses` | array 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. |
| `tours` | array of strings | `[]` (all tours) | Restrict results to specific tennis tours: `atp`, `wta`, `itf`, `challenger`. Leave empty to return all tours. |
| `tournaments` | array of strings | `[]` (all) | Case-insensitive partial match on tournament name. For example, `["Wimbledon"]` or `["Roland Garros", "Australian Open"]`. Ignored when `startUrls` is provided. |
| `startUrls` | array | `[]` | 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`. |
| `maxItems` | integer | unlimited | Optional 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):

```json
{
  "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:**

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

**Get yesterday's and today's WTA matches:**

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

**Get all scheduled matches for the next 3 days:**

```json
{ "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.

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

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

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

**Live scores during a tournament:**

```json
{ "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

| Tour | Filter value | Includes | Examples |
|------|-------------|----------|---------|
| ATP Tour | `atp` | ATP singles and doubles | Australian Open, Roland Garros, Wimbledon, US Open, Masters 1000, ATP 500/250 |
| WTA Tour | `wta` | WTA singles and doubles | Grand Slams (WTA draw), WTA 1000, WTA 500/250 |
| ITF | `itf` | ITF Men's and Women's circuits | ITF World Tennis Tour events |
| ATP Challenger | `challenger` | Challenger Tour singles and doubles | ATP 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](https://docs.apify.com/platform/schedules).

#### 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](https://apify.com/extractify-labs/flashscore-extractor) 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](https://docs.apify.com/api/v2#/reference/datasets) 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.

### Related actors

- [Flashscore: Match Listings, Scores & Fixtures](https://apify.com/extractify-labs/flashscore-extractor) — Extract football (soccer) and basketball match listings from Flashscore using the same feed infrastructure.
- [Google News Scraper](https://apify.com/apify/google-news-scraper) — Pair with this actor to pull tennis news articles and match reports alongside your results data.

# Actor input Schema

## `dayOffsets` (type: `array`):

Select which days to fetch relative to today. '0' = today, '-1' = yesterday, '1' = tomorrow. Range: -7 to +7. Leave as default to fetch today only.

## `matchStatuses` (type: `array`):

Filter results by match status. 'All' returns every match regardless of state. Note: 'Live' reflects status at the moment the actor runs — it is not a real-time stream.

## `tours` (type: `array`):

Filter by tennis tour. Leave empty to return all tours (ATP, WTA, ITF, Challenger, etc.).

## `tournaments` (type: `array`):

Filter by tournament name. Case-insensitive partial match (e.g. 'Wimbledon', 'Roland Garros'). Leave empty to return all tournaments. Ignored when 'Start URLs' is provided.

## `startUrls` (type: `array`):

Flashscore tournament or results page URLs to restrict the run to specific events (e.g. https://www.flashscore.com/tennis/atp-singles/wimbledon/). When provided, the 'Tournament Name Filter' is ignored. Non-Flashscore URLs are skipped.

## `maxItems` (type: `integer`):

Cap on the total number of matches returned across all days and tournaments. Leave blank for no limit.

## Actor input object example

```json
{
  "dayOffsets": [
    "0"
  ],
  "matchStatuses": [
    "all"
  ],
  "tours": [],
  "tournaments": [
    "Wimbledon",
    "Roland Garros"
  ],
  "startUrls": []
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "dayOffsets": [
        "0"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("extractify-labs/flashscore-tennis-matches").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "dayOffsets": ["0"] }

# Run the Actor and wait for it to finish
run = client.actor("extractify-labs/flashscore-tennis-matches").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "dayOffsets": [
    "0"
  ]
}' |
apify call extractify-labs/flashscore-tennis-matches --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=extractify-labs/flashscore-tennis-matches",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Flashscore Tennis Matches",
        "description": "Extract ATP, WTA, ITF & Challenger tennis match listings, set-by-set scores, player rankings, and live data from Flashscore. Singles & doubles. No proxy needed.",
        "version": "1.0",
        "x-build-id": "TGNcf7YNggWckxrVi"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/extractify-labs~flashscore-tennis-matches/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-extractify-labs-flashscore-tennis-matches",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/extractify-labs~flashscore-tennis-matches/runs": {
            "post": {
                "operationId": "runs-sync-extractify-labs-flashscore-tennis-matches",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/extractify-labs~flashscore-tennis-matches/run-sync": {
            "post": {
                "operationId": "run-sync-extractify-labs-flashscore-tennis-matches",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "dayOffsets": {
                        "title": "Days to fetch",
                        "type": "array",
                        "description": "Select which days to fetch relative to today. '0' = today, '-1' = yesterday, '1' = tomorrow. Range: -7 to +7. Leave as default to fetch today only.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "-7",
                                "-6",
                                "-5",
                                "-4",
                                "-3",
                                "-2",
                                "-1",
                                "0",
                                "1",
                                "2",
                                "3",
                                "4",
                                "5",
                                "6",
                                "7"
                            ],
                            "enumTitles": [
                                "7 Days Ago (-7)",
                                "6 Days Ago (-6)",
                                "5 Days Ago (-5)",
                                "4 Days Ago (-4)",
                                "3 Days Ago (-3)",
                                "2 Days Ago (-2)",
                                "Yesterday (-1)",
                                "Today (0)",
                                "Tomorrow (+1)",
                                "In 2 Days (+2)",
                                "In 3 Days (+3)",
                                "In 4 Days (+4)",
                                "In 5 Days (+5)",
                                "In 6 Days (+6)",
                                "In 7 Days (+7)"
                            ]
                        },
                        "default": [
                            "0"
                        ]
                    },
                    "matchStatuses": {
                        "title": "Match Status",
                        "type": "array",
                        "description": "Filter results by match status. 'All' returns every match regardless of state. Note: 'Live' reflects status at the moment the actor runs — it is not a real-time stream.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "all",
                                "finished",
                                "live",
                                "scheduled"
                            ],
                            "enumTitles": [
                                "All",
                                "Finished",
                                "Live",
                                "Scheduled"
                            ]
                        },
                        "default": [
                            "all"
                        ]
                    },
                    "tours": {
                        "title": "Tennis Tour",
                        "type": "array",
                        "description": "Filter by tennis tour. Leave empty to return all tours (ATP, WTA, ITF, Challenger, etc.).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "atp",
                                "wta",
                                "itf",
                                "challenger"
                            ],
                            "enumTitles": [
                                "ATP Tour",
                                "WTA Tour",
                                "ITF",
                                "ATP Challenger"
                            ]
                        },
                        "default": []
                    },
                    "tournaments": {
                        "title": "Tournament Name Filter",
                        "type": "array",
                        "description": "Filter by tournament name. Case-insensitive partial match (e.g. 'Wimbledon', 'Roland Garros'). Leave empty to return all tournaments. Ignored when 'Start URLs' is provided.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Flashscore tournament or results page URLs to restrict the run to specific events (e.g. https://www.flashscore.com/tennis/atp-singles/wimbledon/). When provided, the 'Tournament Name Filter' is ignored. Non-Flashscore URLs are skipped.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Maximum Items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap on the total number of matches returned across all days and tournaments. Leave blank for no limit."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
