# TennisExplorer Match Results Scraper (`maximedupre/tennisexplorer-results`) Actor

Collect completed ATP and WTA singles match results from TennisExplorer for one date. Get players, winners, set scores, event details, match IDs, links, and available public match fields in a structured dataset.

- **URL**: https://apify.com/maximedupre/tennisexplorer-results.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Sports, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.10 / 1,000 completed matches

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🎾 Build a TennisExplorer results dataset

Tennis analysts, journalists, and developers can collect completed ATP and WTA singles results from TennisExplorer for one date. Each saved row brings players, winners, set scores, event details, links, and other source-visible match fields into a structured dataset for analysis and reporting.

- Collect completed matches for a chosen date with **[Tennis Results Today](https://apify.com/maximedupre/tennisexplorer-results/examples/tennis-results-today)**.
- Get ATP singles results for a chosen date with **[ATP Tennis Results](https://apify.com/maximedupre/tennisexplorer-results/examples/atp-tennis-results)**.
- Get WTA singles results for a chosen date with **[WTA Tennis Results](https://apify.com/maximedupre/tennisexplorer-results/examples/wta-tennis-results)**.
- Export completed match data for one date with **[Tennis Match Results](https://apify.com/maximedupre/tennisexplorer-results/examples/tennis-match-results)**.
- Review winners and set scores for one date with **[Tennis Match Scores](https://apify.com/maximedupre/tennisexplorer-results/examples/tennis-match-scores)**.

#### 📊 Completed TennisExplorer match data

Each dataset item is one completed ATP or WTA singles match for the requested date and tour. Values come from public TennisExplorer pages, and optional fields are present only when the source shows them.

#### 🗓️ Run results for one date

Enter one date, choose ATP singles, WTA singles, or both, start the run, and open the dataset. Run dates separately when you need results for more than one date.

**How to run**

1. Enter a date in `YYYY-MM-DD` format.
2. Choose `atp`, `wta`, or `both`.
3. Start the run and open the dataset link in the Output tab.

#### ⚙️ Input

Choose one calendar date and which singles tours to include.

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `date` | string | Required results date in `YYYY-MM-DD` format. One date is accepted per run. |
| `tour` | string | Selects `atp`, `wta`, or `both`. It defaults to `both`. |

**Example input**

This is the public input from a successful run using the default tour:

```json
{
  "date": "2025-12-26",
  "tour": "both"
}
```

#### 🧾 Output

The `results` output link opens the collected match results as dataset items. Every row uses the same shape, with optional fields omitted when the source does not show them.

**Match row**

| Field | Type | What it does |
|---|---|---|
| `date` | string | Calendar date of the completed match. |
| `tour` | string | Singles tour, either `atp` or `wta`. |
| `event` | object | Tournament or event context. |
| `event.name` | string | Source-displayed event name. |
| `event.country` | string | Source-displayed event country, when available. |
| `event.url` | string | Public event page link, when available. |
| `round` | string | Source-displayed match round, when available. |
| `players` | array of objects | The two players in source order. Set scores use this same order. |
| `players[].name` | string | Source-displayed player name. |
| `players[].url` | string | Public player page link, when available. |
| `players[].seed` | integer | Tournament seed, when shown by the source. |
| `players[].rank` | integer | Player rank, when shown by the source. |
| `players[].preMatchOdds` | number | Decimal pre-match odds, when shown by the source. |
| `winner` | string | Source-displayed winner name. |
| `sets` | array of objects | Ordered completed set scores. Tiebreak notation stays as source-displayed text. |
| `sets[].player1` | string | Score for the first player in that set. |
| `sets[].player2` | string | Score for the second player in that set. |
| `matchStatus` | string | Source-displayed match status, when available. |
| `matchTime` | string | Source-displayed match time, when available. |
| `matchId` | string | Stable match identifier used by the source. |
| `matchUrl` | string | Public result or match-detail link, when available. |
| `courtSurface` | string | Source-displayed court surface, when available. |

**Example match row**

This genuine row comes from a successful run using the example input above:

```json
{
  "date": "2025-12-26",
  "tour": "wta",
  "event": {
    "name": "Shenzhen - exhibition",
    "country": "CN",
    "url": "https://www.tennisexplorer.com/shenzhen-exhibition/2025/wta-women/"
  },
  "players": [
    {
      "name": "Swiatek I.",
      "url": "https://www.tennisexplorer.com/player/swiatek",
      "rank": 9,
      "preMatchOdds": 1.72
    },
    {
      "name": "Rybakina E.",
      "url": "https://www.tennisexplorer.com/player/rybakina",
      "rank": 1,
      "preMatchOdds": 2.05
    }
  ],
  "winner": "Swiatek I.",
  "sets": [
    {
      "player1": "6",
      "player2": "3"
    },
    {
      "player1": "6",
      "player2": "3"
    }
  ],
  "matchStatus": "completed",
  "matchTime": "12:45",
  "matchId": "3100766",
  "matchUrl": "https://www.tennisexplorer.com/match-detail/?id=3100766",
  "courtSurface": "hard"
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing for the **Completed match** event. The tiered event price applies to each completed ATP or WTA singles match saved to your dataset. See the Pricing tab for the current tier prices.

#### 🔌 Integrations

Read the structured dataset through the Apify API or use Apify's standard dataset exports after a run.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I collect both ATP and WTA singles results in one run?

Yes. Set `tour` to `both` for the requested date.

##### Can I request a past date, such as 2026-09-28?

Yes. Enter any requested calendar date in `YYYY-MM-DD` format. Each run accepts one date.

##### What if a date has no completed matches?

The run returns the completed matches listed by the source for that date and tour. If the source lists none, the dataset may have no rows.

##### Are set tiebreaks kept as shown?

Yes. Set scores stay as source-displayed text, including tiebreak notation.

##### Are player ranks, seeds, odds, and court surface always present?

No. These fields are included when TennisExplorer shows them for a match. Unavailable optional fields are not filled with guesses.

##### Can I request more than one date in a run?

No. Run the Actor once for each date you need.

##### Does this collect live scores, rankings, or player profiles?

No. It collects completed ATP and WTA singles match results for the requested date and tour.

### 📝 Changelog

**v0.0** (28-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~tennisexplorer-results/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Sofascore Live Events Scraper](https://apify.com/maximedupre/sofascore-live-events-scraper) for live, scheduled, and finished sports events across more sports.
- [TennisExplorer Match Results Scraper](https://apify.com/parseforge/tennisexplorer-scraper) for a flat TennisExplorer match export with set scores, odds, and player details.
- [TennisExplorer Match Results Scraper](https://apify.com/fetch_cat/tennisexplorer-match-results-scraper) for public TennisExplorer results with tournament context, odds, and source links.
- [TennisExplorer Match Results Scraper](https://apify.com/automation-lab/tennisexplorer-match-results-scraper) for ATP and WTA results with status, available odds, and source URLs.
- [TennisExplorer Scraper - Results, Odds, Fixtures & Rankings](https://apify.com/scrapesage/tennisexplorer-scraper) for broader TennisExplorer coverage that also includes fixtures and rankings.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `date` (type: `string`):

Enter one calendar date for completed results. Use YYYY-MM-DD in API, CLI, or JSON input.

## `tour` (type: `string`):

Choose ATP singles, WTA singles, or both for the selected date.

## Actor input object example

```json
{
  "date": "2025-12-26",
  "tour": "both"
}
```

# Actor output Schema

## `results` (type: `string`):

Open the collected match results as dataset items.

# 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 = {
    "date": "2025-12-26"
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/tennisexplorer-results").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 = { "date": "2025-12-26" }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/tennisexplorer-results").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "date": "2025-12-26"
}' |
apify call maximedupre/tennisexplorer-results --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/tennisexplorer-results"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0EH7xLFv7okM6hHlt/builds/7RhmDBc5dtbwDio0r/openapi.json
