Tennis Live Scores - ATP, WTA, Challenger & ITF
Pricing
from $0.70 / 1,000 matches
Tennis Live Scores - ATP, WTA, Challenger & ITF
Every tennis match in play right now: set and game score, who serves, status, ATP and WTA rank and Elo, with optional in-play odds from your country's bookmakers. Or any day's matches: today's scores, results and fixtures. ATP, WTA, Challenger and ITF. Works as an MCP tool for AI agents.
Pricing
from $0.70 / 1,000 matches
Rating
0.0
(0)
Developer
CrawlPlant
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Share
Independent tool, not affiliated with, endorsed by or connected to Flashscore, Livesport, the ATP, the WTA, the ITF or any bookmaker. It reads the public match data that flashscore.com shows to every visitor.
Every tennis match in play right now, one row per match. ATP, WTA, Challenger and ITF singles and doubles with the set-by-set score, the live game score and who is serving, the status ("Set 2", "Set 3 - Tiebreak"), both players' ranking and Elo rating, and optional in-play odds from the bookmakers of your country. The default run lists today's matches, with the live score of every match in play; live mode keeps only the matches in play, and any other day gives its results or fixtures.
Related runnable examples
Explore the same tennis research workflows in our example repository. These recipes currently call the broader Flashscore Tennis Scraper or Match Dataset Actor; they are companion examples, not direct calls to this specialized Actor.
- Capture the current live scoreboard
- Export yesterday’s completed tennis matches
- Fetch the scheduled match list
Follow the Python setup and .env guide with your own APIFY_TOKEN, or browse the complete catalog and AI assistant instructions. Actor runs follow Apify pricing; the quickstart explains per-run spending limits.
Why this one
- Live in seconds. A live run returns every match in play with its current set score, game score and server: schedule it every few minutes for a scoreboard, an alert or a dataset of match flow.
- Scores for any day too. Today, yesterday, tomorrow or a past date; the whole day in one run.
- All tours. ATP, WTA, Challenger, WTA 125, ITF men and women, Davis Cup and Billie Jean King Cup ties.
- Context on every row. ATP / WTA rank and points, Elo rating and Elo win probability, and serve and return statistics once a match is under way.
- Odds when you want them. Switch on Bookmaker odds for in-play and pre-match prices, the best price per player with the bookmaker offering it, and the win probability without the margin. Off by default, so a plain run is cheapest.
- Filters. By tour, singles or doubles, player name or tournament name.
- Safe to schedule. Today's matches by default, finished and upcoming included, so a run always has something to show;
in
livemode a moment with no match in play returns 0 rows and a note in the log, never a failed run. - See it live. Today's matches with each favourite by Elo and the Elo leaders of both tours, from the same database your runs read: crawlplant.com/tennis-live-scores.
What can you use it for?
- Live score widgets and alerts: current set and game score, who serves, a notification when a match goes to a tiebreak.
- Betting and trading tools: in-play odds next to the score, from the bookmakers of one country.
- Fantasy and media sites: today's results and tomorrow's order of play without maintaining your own scraper.
- AI agents: ask "who is playing right now?" and get JSON.
Quick start
- Click Try for free with the default input (today's matches with live scores for those in play, up to 50).
- Narrow it with Tours, Player name contains or Tournament name contains, or switch Mode to live now for only the matches in play.
- Download the table as CSV, Excel or JSON, or save the input as a task and schedule it every few minutes.
Copy to your AI assistant
Paste this into ChatGPT, Claude or any agent so it knows how to use the Actor:
crawlplant/tennis-live-scores on Apify: live tennis scores (ATP, WTA, Challenger, ITF). Input: mode (matches = a day'smatches, the default | live = matches in play now), dateFrom / dateTo (matches mode: today, yesterday, tomorrow, 2026-09-28, -3),tours (atp, wta, challenger-men, challenger-women, itf-men, itf-women, teams, other), matchType (singles | doubles | all),status (all | scheduled | live | finished), players / tournaments (name contains), includeStatistics, includeRankings,includeOdds (default false) with oddsCountry (GB, DE, PL, US...), sortBy (tour | time), maxItems (default 50).Row: matchId, url, date, startTime, tour, tournament, round, surface, status, statusText, isLive, player1Name, player2Name,player1Rank, player2Rank, player1Elo, player2Elo, player1EloWinProbability, score, sets, currentGame {player1, player2,serving}, winnerName, statistics, odds {player1Best, player2Best, player1Average, player2Average, ...}.Price: $1.00 per 1,000 matches on the Free plan, plus $1.50 per 1,000 matches that carry odds.
Ready-to-use examples
1. Live tennis scores right now (up to 50 matches, $0.05)
{ "mode": "live" }
2. Today's ATP and WTA singles scores (up to 300 matches, $0.30)
{ "mode": "matches", "tours": ["atp", "wta"], "maxItems": 300 }
3. One tournament's matches of the last three days (up to 200 matches, $0.20)
{ "mode": "matches", "dateFrom": "-3", "dateTo": "today", "tournaments": ["Paris Masters"], "maxItems": 200 }
4. Live ATP and WTA matches with in-play odds from UK bookmakers (up to 50 matches, $0.13)
{ "mode": "live", "tours": ["atp", "wta"], "includeOdds": true, "oddsCountry": "GB" }
5. Live matches of one player, ordered by start time (a few matches, under $0.01)
{ "mode": "live", "players": ["Sinner"], "sortBy": "time" }
How to…
Get live tennis scores
mode: "live" (example 1) returns every match in play: score (sets), currentGame (points and who serves),
statusText and isLive. Schedule the task every few minutes to keep a scoreboard or a dataset current. The default
mode: "matches" returns all of today's matches, with the same live fields on those in play.
Get today's tennis results
mode: "matches" returns the matches of the days you pick. Add "status": "finished" for results only or
"status": "scheduled" for the order of play (example 2).
Follow one tournament or one player
tournaments keeps matches whose tournament name contains any of the words (example 3); players keeps matches of a
player by name (example 5).
Input options
| Option | Default | Description |
|---|---|---|
mode | matches | matches (a day's matches) or live (in play now) |
dateFrom, dateTo | today | Scores by day: first and last day (UTC), e.g. yesterday, 2026-09-28, -3 |
tours | all | atp, wta, challenger-men, challenger-women, itf-men, itf-women, teams, other |
matchType | singles | singles, doubles, all |
status | all | all, scheduled, live, finished (scores by day) |
players | [] | Player name contains, e.g. Sinner |
tournaments | [] | Tournament name contains, e.g. US Open, Challenger |
includeStatistics | true | Serve and return statistics (included in the price) |
includeRankings | true | ATP / WTA rank and points of each player (included in the price) |
includeOdds | false | Bookmaker odds, charged per match that has them |
oddsCountry | GB | Bookmakers licensed in this country |
sortBy | tour | tour (ATP first, then WTA...) or time |
maxItems | 50 | Maximum matches in total |
Output fields
| Field | Description |
|---|---|
matchId, url | Flashscore's match id and page |
date, startTime | Day (UTC) and start time (ISO) |
tour, tournament, round, surface | atp, wta, challenger-men...; "Final", "Semi-finals", "Q1"; hard / clay / grass / carpet |
status, statusText, isLive | scheduled, live, finished, retired, walkover...; "Set 2", "Set 3 - Tiebreak" |
player1Name, player2Name, player1Rank, player2Rank | Both sides and their ATP / WTA singles rank |
score, sets, currentGame | Set-by-set score, each set with tiebreak points, the game in progress and who serves |
player1Elo, player2Elo, player1EloWinProbability | Elo before the match and the win probability it gives |
statistics | Serve and return statistics of the match so far |
odds | With Bookmaker odds: best and average prices, the bookmaker offering each, win probability without the margin |
scrapedAt, source | When the run read it; live = read from Flashscore in the run |
How much does tennis live score data cost?
Pay per result: platform usage is included. One price per match, statistics and rankings included; odds are charged only on matches that have them, and only when you switch them on.
| Event | No discount (Free plan) | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|
| Match (per 1,000) | $1.00 | $0.90 | $0.80 | $0.70 |
| Bookmaker odds (per 1,000) | $1.50 | $1.35 | $1.20 | $1.05 |
| Actor start (per run) | $0.00005 | $0.00005 | $0.00005 | $0.00005 |
| Example on the Free plan | Rows | Cost |
|---|---|---|
| Default run: today's matches | up to 50 | ~$0.05 |
| Live ATP and WTA with odds | up to 50 + 50 with odds | up to ~$0.13 |
| A busy day, every tour | 300-450 | ~$0.30-0.45 |
Set a maximum cost per run in the run options to stop a large run at your budget.
Run it through the API
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('crawlplant/tennis-live-scores').call({ mode: 'live', tours: ['atp', 'wta'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, items[0]);
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("crawlplant/tennis-live-scores").call(run_input={"mode": "matches", "tours": ["wta"], "status": "finished"})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["tournament"], row["player1Name"], row["player2Name"], row["score"])
Use with AI agents
The Actor works as a tool in the Apify MCP server for Claude, ChatGPT, Cursor and others:
https://mcp.apify.com?tools=crawlplant/tennis-live-scores
Try "who is playing on Centre Court right now, and what is the score?".
Use it when you need the scores of matches in play or of one day.
Not for a player's career or a long range of past results (use Tennis Match History).
More tennis data
- Flashscore Tennis Scraper: every match of any day with odds from about 20 bookmakers, head-to-head, form, rankings, player statistics and Elo lists.
- Tennis Match History: a player's whole career, match by match, with Elo and serve statistics.
- ATP & WTA Tennis Rankings: the current lists, every weekly list back to 1973 (ATP) and 2001 (WTA), and the player lists.
- Tennis Odds Dataset: closing odds with results and Elo, in tennis-data.co.uk's columns.
- ATP & WTA Tennis Match Dataset: whole seasons in Jeff Sackmann's CSV columns.
FAQ
How fresh is a live run?
It reads the live feed when it starts: the scores are as current as a Flashscore page opened at that second.
What if nothing is in play?
A live run gives 0 rows and a note in the log; the run still succeeds, so a schedule keeps going.
Does it include doubles?
Yes, matchType: "doubles" or "all"; both players of each pair are in the row.
Is it legal?
The data is public sporting results read without logging in, at a polite pace. How you use and publish them is your responsibility, so check the source's terms for your use case.
Questions, a missing field or a source you need? Open an issue on this Actor: we reply within a day. If it saved you time, a short review helps others find it.
Privacy
The data is about professional players' public sporting results. Each run sends the developer anonymous feature-usage statistics (the options used, never the players you asked for); your Apify account id is replaced by a one-way hash.