# ATP Live Rankings Scraper (`crawlerbros/atp-live-tennis-scraper`) Actor

Scrape ATP men's professional tennis live rankings from live-tennis.eu. Get singles, doubles, race to ATP Finals, Next Gen race, and prize money standings with player names, countries, ages, and points.

- **URL**: https://apify.com/crawlerbros/atp-live-tennis-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Agents, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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

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

## ATP Live Rankings Scraper

Extract ATP men's professional tennis live rankings from [live-tennis.eu](https://live-tennis.eu) — a comprehensive tennis statistics site with real-time ATP standings. Get singles, doubles, Race to ATP Finals, Next Gen race, and year-to-date prize money rankings with player names, countries, ages, and points. No login or API key required.

### Data Source

This actor scrapes data from **live-tennis.eu**, which provides real-time ATP live rankings updated as match results come in — often more current than the official ATP weekly release.

### Features

- **5 Ranking Types** — Singles, doubles, Race to ATP Finals, Next Gen race, and YTD prize money
- **Complete Player Data** — Rank, player name, country, age, and points for every player
- **Country Filtering** — Filter results to show only players from a specific country
- **No Login Required** — All data is publicly available

### Use Cases

- Tennis analytics and betting research
- Sports media and editorial applications
- Fantasy tennis tools and player comparison dashboards
- Academic sports science research
- Tracking ATP player ranking changes in real time

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `rankType` | Select | No | `singles` | Ranking type: `singles`, `doubles`, `race`, `race-next-gen`, `prize-money` |
| `countryCode` | String | No | — | 3-letter country code filter (e.g., `ITA`, `ESP`, `USA`) |
| `maxItems` | Integer | No | `100` | Maximum records to return (1–2000) |

#### Example Input — Top 50 Singles Rankings

```json
{
  "rankType": "singles",
  "maxItems": 50
}
````

#### Example Input — Spanish Players Only

```json
{
  "rankType": "singles",
  "countryCode": "ESP",
  "maxItems": 100
}
```

#### Example Input — Race to ATP Finals

```json
{
  "rankType": "race",
  "maxItems": 20
}
```

### Output

| Field | Type | Description |
|-------|------|-------------|
| `rank` | Integer | Current ATP ranking position |
| `playerName` | String | Full player name |
| `country` | String | 3-letter country code (e.g., `ITA`) |
| `age` | Integer | Player age |
| `points` | Integer | ATP ranking points (or prize money in USD for `prize-money` type) |
| `rankType` | String | Ranking table type scraped |
| `profileUrl` | String | Player profile URL on live-tennis.eu |
| `recordType` | String | Always `ranking` |
| `scrapedAt` | String | ISO 8601 timestamp |
| `sourceUrl` | String | Source page URL |

#### Example Output

```json
{
  "rank": 1,
  "playerName": "Jannik Sinner",
  "country": "ITA",
  "age": 24,
  "points": 13500,
  "rankType": "singles",
  "recordType": "ranking",
  "scrapedAt": "2025-01-15T10:23:45+00:00",
  "sourceUrl": "https://live-tennis.eu/en/atp-live-ranking"
}
```

### FAQ

**Does this require an API key or login?**
No. All data is scraped from publicly available live-tennis.eu pages.

**What are "live" rankings vs official ATP rankings?**
Live rankings are updated in real time as match results come in during tournaments, while official ATP rankings are released weekly on Mondays. Live rankings may differ during active tournaments.

**Can I filter by country?**
Yes — set `countryCode` to a 3-letter country code (e.g., `ITA` for Italy, `ESP` for Spain, `USA` for United States).

**What is the Race to ATP Finals?**
Set `rankType` to `race` to get year-to-date performance standings used to qualify for the ATP Finals (formerly held in Turin/Nitto ATP Finals).

**What does the `prize-money` ranking type return?**
Year-to-date earnings for all ATP players, with `points` representing total USD prize money earned.

**How many players are in the full ATP rankings?**
The full ATP singles rankings contain over 1,000 active players. Set `maxItems` to 2000 to retrieve all of them.

# Actor input Schema

## `rankType` (type: `string`):

Which ATP ranking list to scrape.

## `countryCode` (type: `string`):

Filter by nationality, e.g. ITA, ESP, USA, SRB. Leave blank for all countries.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "rankType": "singles",
  "maxItems": 100
}
```

# Actor output Schema

## `rankings` (type: `string`):

Dataset containing ATP Tour player rankings and profiles.

# 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 = {
    "rankType": "singles",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/atp-live-tennis-scraper").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 = {
    "rankType": "singles",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/atp-live-tennis-scraper").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 '{
  "rankType": "singles",
  "maxItems": 100
}' |
apify call crawlerbros/atp-live-tennis-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/atp-live-tennis-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ATP Live Rankings Scraper",
        "description": "Scrape ATP men's professional tennis live rankings from live-tennis.eu. Get singles, doubles, race to ATP Finals, Next Gen race, and prize money standings with player names, countries, ages, and points.",
        "version": "1.0",
        "x-build-id": "EUZ5nGouCLQKTf303"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~atp-live-tennis-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-atp-live-tennis-scraper",
                "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/crawlerbros~atp-live-tennis-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-atp-live-tennis-scraper",
                "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/crawlerbros~atp-live-tennis-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-atp-live-tennis-scraper",
                "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": {
                    "rankType": {
                        "title": "Ranking type",
                        "enum": [
                            "singles",
                            "doubles",
                            "race",
                            "race-next-gen",
                            "prize-money"
                        ],
                        "type": "string",
                        "description": "Which ATP ranking list to scrape.",
                        "default": "singles"
                    },
                    "countryCode": {
                        "title": "Country filter (3-letter code)",
                        "type": "string",
                        "description": "Filter by nationality, e.g. ITA, ESP, USA, SRB. Leave blank for all countries."
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Hard cap on emitted records.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
