Tennis data. Every point counts.

Point-by-point data, player statistics and live match probabilities. Explore the data, then make your first API request for free.

Historical records from 2021, with live coverage by league. Find the tournaments and fields for your application.

1.6 million recorded points.

Archive inventory from 11 September 2026. Explore published coverage to find the tournaments and editions available for your project.

11,875matches with point records
1,669,201individual point records
1,041,575points with a serve-speed value

Archive snapshot · 2026-09-11

The score is only the result.

The point sequence shows how the match got there. Inspect individual events, then calculate your own statistics.

score_snapshot → point → correction

Build from records or start with the answer.

Raw PBP and derived analytics share identifiers, versions and coverage metadata, so you can move between them without rebuilding context.

01

Raw PBP

Retrieve the canonical point sequence behind every supported calculation.

  • Match, set, game and point state
  • Server, scorer, serve number and outcome
  • Available fields and explicit missing values
Review the data model
02

Ready-made statistics

Compare player and match performance using statistics with their eligible sample counts.

  • Serve and return performance by player
  • Tournament and edition comparisons
  • Match metrics with eligible counts
Inspect the data surface
Wimbledon final

A match is more than its final score.

Jannik Sinner4 6 6 6
Carlos Alcaraz6 4 4 4
52.5%

Points won by Jannik Sinner125 of 238 recorded points

Cumulative point difference · Sinner minus Alcaraz0+12
Point 238Won by Jannik Sinner

One court. Every grain of the game.

Connect individual points to match, player and tournament questions.

Product teams

Reconstruct a match

Follow the point order and score changes in a match replay.

Analysts

Answer performance questions

Serve, return and pressure metrics with eligible samples.

ML teams

Train on reproducible history

Versioned point sequences for repeatable experiments.

Quant traders

Research every state change

Compare match states in sequence. Check timestamp availability before time-based analysis.

Find your tournaments.

Explore six seasons of tennis data, from point records to match statistics. Filter by circuit and edition to find the data your project needs.

Open the coverage ledger
346
tournament editions
274
editions with point records
6
seasons represented

Updated 2026-09-11. Counts are per tournament edition.

One request. One real match.

Create a key and fetch a match without choosing a paid plan. The free sample does not spend your plan quota.

GET /onboarding/v1/match

Request
import json, os
from urllib.request import Request, urlopen

request = Request(
    "https://api.datafortennis.com/onboarding/v1/match",
    headers={"Authorization": "Bearer " + os.environ["DFT_API_KEY"]}
)
with urlopen(request, timeout=15) as response:
    match_response = json.load(response)
print(json.dumps(match_response, indent=2))

Uses standard HTTP and your DFT_API_KEY environment variable. The free route returns one match; run it in the playground with your own key.

Your first match is a request away.

Register, create an API key and run the free sample in the console. Choose a plan when you need more data.