GuideHistorical tennis data

The Sackmann tennis data, as a live API.

If you started with the tennis_atp and tennis_wta CSVs, you know the data. This is the same depth of history, kept current every day, with live matches, weekly rankings and one ID per player, behind a documented API you can ship.

  • Updated daily, live during play
  • Commercial use on every plan
  • Same Open Era depth
GET /tennis/rankings?tour=ATP&date=2024-01-01&page_size=2200 OK
$ curl "https://api.citoapi.com/api/v1/tennis/rankings?tour=ATP&date=2024-01-01&page_size=2" \ -H "x-api-key: $CITO_API_KEY"
{  "ranking_date": "2024-01-01",  "tour": "ATP",  "items": [    {      "rank": 1,      "player_id": "atp_104925",      "player_name": "Novak Djokovic",      "points": 11245,      "tournaments_played": 16    },    {      "rank": 2,      "player_id": "atp_207989",      "player_name": "Carlos Alcaraz",      "points": 8855,      "tournaments_played": 17    }  ]}

Seamless Integration with our MCP Server

Give Claude, Cursor, and ChatGPT the tennis archive. One command writes the MCP config, agents call match, ranking and head-to-head tools with real player IDs instead of guessing, and your key stays on your machine.

MCPInstall the Cito MCP server
Claude
Cursor
OpenAI
Python
Cito API
Next.js
Discord
Slack
GitHub

What you keep, and what you gain

The community CSVs made tennis analytics possible. An API makes it something you can run in production.

Familiar IDs

Player IDs follow the same atp_/wta_ numbering many analysts already use, so joins carry over.

Current every day

Results arrive as matches finish, not when the next file is published.

Live matches

Set, game, server and point-by-point for matches in progress, over REST or WebSocket.

Challengers and WTA 125

The level below the tour, with results back to 1978 (men) and 1972 (women).

Commercial use

Use it in a product you sell, under your plan, instead of a non-commercial licence.

No CSV parsing

Filtered JSON over REST, an MCP server for AI agents, and CSV files when you want them.

Tennis Abstract data vs Cito: what is the difference?

Jeff Sackmann's datasets on GitHub (tennis_atp, tennis_wta) and his Tennis Abstract site are the best-known free tennis data. They are research resources: CSV files under a non-commercial licence, updated periodically, with no API. Cito covers the same history as an API, updated daily and live, and licensed for commercial use.

We do not offer shot-level charting. If you need it, the Match Charting Project remains the source.
Sackmann CSVs / Tennis AbstractCito tennis API
FormatCSV files on GitHub, plus the Tennis Abstract websiteREST JSON, WebSocket, MCP server, CSV on request
LicenceCreative Commons BY-NC-SA 4.0 (non-commercial)Commercial use under your plan
FreshnessPeriodic file updatesResults as matches finish; live scores during play
HistoryOpen Era tour level, plus Challengers and FuturesResults since 1877; tour level since 1968; Challengers since 1978
RankingsWeekly filesWeekly lists since 1973 (ATP) and 1984 (WTA), any date or any player's history
Live dataNoneLive set, game, server and point-by-point
Shot-by-shot chartingMatch Charting Project (selected matches)Not available

How do I move from the CSVs to the API?

Replace each file read with a filtered request. A season file becomes /tennis/matches?tour=ATP&year=2023, a rankings file becomes /tennis/rankings?tour=ATP&date=..., and a player lookup becomes /tennis/players/search?q=.... Player IDs use the same atp_ and wta_ numbering, so existing joins keep working.

If you readCall instead
atp_matches_2023.csvGET /api/v1/tennis/matches?tour=ATP&year=2023&page_size=100
atp_rankings_current.csvGET /api/v1/tennis/rankings?tour=ATP
A ranking file for a past weekGET /api/v1/tennis/rankings?tour=ATP&date=2024-01-01
atp_players.csvGET /api/v1/tennis/players/search?q=sinner
Filtering one player's matchesGET /api/v1/tennis/matches?player_id=atp_206173

When should I keep using the free CSVs?

For personal research, a class project or a one-off analysis, the free CSVs are a great fit and cost nothing. Choose an API when the work becomes a product: you need it current every day, live during play, covered beyond the tour level, or used commercially.

Endpoints you can ship with

Start on rankings: any week's list since 1973, or one player's week-by-week history.

Rankings

Weekly ATP and WTA singles rankings with points and movement, back through the decades, and any player's ranking history.

View docs
  • GET/api/v1/tennis/rankings

    A full weekly ranking table for ATP or WTA.

  • GET/api/v1/tennis/rankings/top

    The top N players of the latest list.

  • GET/api/v1/tennis/rankings/movers

    Biggest risers and fallers between two lists.

  • GET/api/v1/tennis/rankings/history/{player_id}

    One player's ranking, week by week.

  • GET/api/v1/tennis/rankings/dates

    Every ranking date on file.

Figures on this page were checked against the live API on 2026-10-24.

FAQs

Licences, IDs, freshness and coverage

Can't find what you're looking for? Contact our customer support team

See plans

Ship tennis data for Elo models

Keep the history you know, add live data and daily updates, and use it in a product. Start on a free key.