Tennis Match Data — Live, Fixtures, Results & Model-Ready Stats
Pricing
from $10.00 / 1,000 model-ready rows
Tennis Match Data — Live, Fixtures, Results & Model-Ready Stats
Tennis data for ATP, WTA, Challenger & ITF: live scores, fixtures, results, rankings and model-ready pre-match feature rows (form, H2H, surface splits).
Pricing
from $10.00 / 1,000 model-ready rows
Rating
0.0
(0)
Developer
Max
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Tennis Match Data — Live Scores, Fixtures, Results & Model-Ready Stats
Tennis data API for ATP, WTA, Challenger and ITF: live scores, fixtures, results, rankings — and the only tennis scraper on Apify that outputs model-ready pre-match feature rows: current form, head-to-head, surface record, fatigue indicators and market form, merged and computed for you. Built for betting models, fantasy tools, live scoreboards and tennis analytics.
Why this Actor?
Raw tennis scrapers give you match listings. Prediction models need features. Before you can model a match you normally have to collect each player's recent results, surface splits, head-to-head and schedule density yourself. This Actor does that work in one call:
{ "mode": "model-ready", "day": 0, "tours": ["ATP"] }
→ one row per upcoming singles match, with both players' form already computed:
| Feature | Example (real output) |
|---|---|
| Rank / career high | 226 / 214 |
| Last 10 matches | 7–3 |
| Surface record, last 12 months | 30–9 on hard |
| Days since last match | 14 |
| Matches / sets in last 14 days | 1 / 2 |
| Comeback after 30+ day break | false |
| Retired in last match | false |
| Avg. closing odds, last 5 | 1.50 |
| Head-to-head (overall / this surface) | 2–0 / 1–0 |
Every row carries a dataQuality block (complete flag + notes), so your pipeline knows exactly what it got.
Modes
| Mode | What you get | Typical use |
|---|---|---|
model-ready | One feature row per upcoming singles match | Prediction models, betting analytics |
fixtures | Upcoming matches: players, tournament, surface, start time | Schedules, draft lobbies |
results | Finished matches: set scores, duration, retirements/walkovers | Results digests, training datasets |
live | Matches in play: current sets/games, status | Live scoreboards |
rankings | Current ATP or WTA ranking list (rank, player, country, points) | Enrichment, seeding |
all | Every match of the day, any status | Bulk ingestion |
All modes cover singles and doubles (doubles opt-in via includeDoubles) across ATP, WTA, Challenger, ITF, UTR and exhibitions, filterable with tours.
Input
{"mode": "model-ready","day": 0,"tours": ["ATP", "WTA"],"includeDoubles": false,"maxItems": 100}
- mode — see table above.
- day — day offset:
0today,-1yesterday,1tomorrow. Results reach ~7 days back; fixtures ~1 day ahead. - tours — filter:
ATP,WTA,CHALLENGER,ITF,UTR,EXHIBITION. Empty = all. - includeDoubles — include doubles/mixed (default
false). - rankingTour —
atporwta(moderankingsonly). - maxItems — hard cap on output rows (cost control).
Example output (fixtures)
{"matchId": "fivcpwcn","source": "flashscore","tournament": {"tour": "ATP", "discipline": "SINGLES", "name": "Winston-Salem","location": "USA", "surface": "hard", "tourGroup": "ATP"},"home": { "name": "Altmaier D.", "slug": "altmaier-daniel", "country": "Germany" },"away": { "name": "Comesana F.", "slug": "comesana-francisco", "country": "Argentina" },"status": "scheduled","startTime": "2026-08-25T00:10:00.000Z","setsWon": { "home": null, "away": null },"setScores": []}
Export as JSON, CSV, Excel or XML, or read it straight from the API. Nested keys flatten to columns (playerA.rank, h2h.overallA, …) in tabular exports.
Use it from code or AI agents
Run via the Apify API from any language, schedule it daily in two clicks, or connect it to your AI agent — this Actor works as an MCP tool, so agents can query tennis data and pay per result automatically.
curl "https://api.apify.com/v2/acts/<ACTOR_ID>/run-sync-get-dataset-items?token=<TOKEN>" \-X POST -H 'Content-Type: application/json' \-d '{"mode":"model-ready","tours":["ATP"]}'
Honest notes on the data
- Day pages are rolling windows:
day: -1can include matches that started up to two days earlier (late finishes, suspended matches). Filter onstartTimeif you need strict dates. - The fixtures window is short (~1 day ahead). For longer horizons, run daily on a schedule.
model-readyresolves players across two sources by name; rare unresolvable players are reported indataQuality.notesinstead of being silently dropped. Rows where neither player resolves are skipped and never charged.- Rankings and player histories come from public tennis statistics pages; live scores and fixtures from a public scores feed. Sources can change without notice — a daily automated health check watches for this, and fixes ship fast (check the Issues tab response time).
Pricing
Pay per event: you are charged per delivered row (see the Pricing tab). model-ready rows cost more than raw rows because each one bundles 4–6 upstream lookups plus feature computation — typically still >10× cheaper than tennis data API subscriptions ($29–99/month) for moderate volumes, with no monthly commitment.
FAQ
Which tournaments are covered? Everything on the public scores feed: ATP, WTA, Challenger, ITF (men/women), UTR and exhibitions — singles and doubles.
Can I get historical data? results reaches ~7 days back per run. For deep history, run daily on a schedule and accumulate — or open an issue and tell us what you need.
How fresh is live? Each run is a snapshot. Poll every 30–60 s for near-real-time boards.
Point-by-point data? Not yet — it is on the roadmap. Tell us in the Issues tab if you need it; user requests set the priority.
Something broke? Open an issue — the daily health check usually catches source changes before users do, and fixes are typically same-day.