Export recent public Tennis Abstract match results for one player into structured JSON, CSV, Excel, or an API workflow. Get a clean match-level dataset with opponents, scores, tournament context, rankings, and the statistics displayed for each public result.
What you get
Every exported row is one recent player match. Use it to:
- Track a player’s latest opponents, scores, and results.
- Build a surface-aware tennis player match history dataset.
- Compare tournament, round, ranking, and tennis match statistics trends.
- Feed match history into spreadsheets, dashboards, or analytical agents.
Input recipes
Start with a small request:
{
"playerSlug": "NovakDjokovic",
"maxItems": 20
}
Use the player identifier from the public Tennis Abstract player URL. For example, the slug in a player URL ending in ?p=IgaSwiatek is IgaSwiatek.
Output example
{
"playerSlug": "NovakDjokovic",
"playerName": "Novak Djokovic",
"date": "2025-01-24",
"tournament": "Australian Open",
"surface": "Hard",
"round": "SF",
"opponent": "Alexander Zverev",
"result": "W",
"score": "7-6(5) 6-3",
"sourceUrl": "http://www.tennisabstract.com/cgi-bin/player-classic.cgi?p=NovakDjokovic"
}
Statistics and rankings are included when displayed by the source for that match; unavailable source values are null rather than guessed.
Input settings
| Input | Description |
|---|---|
playerSlug |
Required Tennis Abstract player identifier from the public player URL. |
maxItems |
Maximum recent match rows to export, from 1 to 200. Start with 20. |
Who is it for?
This Actor is useful for tennis analysts, sports researchers, journalists, fantasy and scouting workflows, and developers building player-history datasets. It is designed for public recent-match data for a specific player, not live scoring or private account data.
Tips
- Copy the exact player slug from the public player URL to avoid targeting a similarly named player.
- Begin with a small
maxItemsvalue when testing a new workflow. - Use
sourceUrlto retain a direct public reference alongside every exported row. - Export to CSV or Excel for spreadsheets, or consume the default dataset from your application.
API usage
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/tennis-abstract-scraper').call({
playerSlug: 'NovakDjokovic',
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("fetch_cat/tennis-abstract-scraper").call(
run_input={"playerSlug": "NovakDjokovic", "maxItems": 20}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
cURL
curl -X POST \
'https://api.apify.com/v2/acts/fetch_cat~tennis-abstract-scraper/runs?token=<APIFY_TOKEN>' \
-H 'content-type: application/json' \
-d '{"playerSlug":"NovakDjokovic","maxItems":20}'
MCP and AI agents
Use this Actor from Apify MCP by enabling https://mcp.apify.com?tools=fetch_cat/tennis-abstract-scraper.
For Claude Code, add the MCP server:
claude mcp add apify -- npx -y @apify/mcp-server --tools=fetch_cat/tennis-abstract-scraper
Or add this server configuration:
{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/mcp-server", "--tools=fetch_cat/tennis-abstract-scraper"],
"env": { "APIFY_TOKEN": "<APIFY_TOKEN>" }
}
}
}
Example prompts: “Export the latest 20 matches for NovakDjokovic” or “Return IgaSwiatek’s recent hard-court matches as a table.”
Support
Open an issue on the Actor page with the player slug and a non-sensitive example. Include the expected public player page so support can reproduce the request.