Tennis Scraper: Results, Odds, Rankings, Players avatar

Tennis Scraper: Results, Odds, Rankings, Players

Pricing

from $2.80 / 1,000 results

Go to Apify Store
Tennis Scraper: Results, Odds, Rankings, Players

Tennis Scraper: Results, Odds, Rankings, Players

Tennis results, fixtures, tournaments, player history, head-to-head and rankings from public TennisExplorer pages. ATP, WTA, Challenger and ITF matches with set scores and average pre-match odds. No proxy, no login.

Pricing

from $2.80 / 1,000 results

Rating

0.0

(0)

Developer

ZeroLag Data

ZeroLag Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Tennis scraper for ATP, WTA, Challenger and ITF matches. It reads public TennisExplorer pages and gives you results by date, upcoming matches, whole tournaments, player history, head-to-head records, rankings and the tournament calendar as clean rows.

  • Price: $4.00 per 1,000 results on the Free plan, $2.80 on Business. Platform usage is included.
  • Input: days, a tournament, a player, two players or a ranking date.
  • Output: players, winner, set scores, average bookmaker odds, round, surface and start time.
  • Measured: 1,143 French Open matches from nine seasons in 10 seconds on Apify.

Found a bug, need a field, or want a new Actor? Open an issue on the Issues tab. If it works well for you, a short review helps others find it.

How to use it

  1. Pick a job in What to get.
  2. Fill in the section for that job. Everything else can stay empty.
  3. Set Maximum results and click Start.
  4. Export the results as JSON, CSV or Excel.
What to getYou enterYou get
Match results by dateDays, or nothing for the latest day with matchesFinished matches with score, odds, round and surface
Upcoming matches by dateDays, or nothing for today and tomorrowScheduled matches with odds and earlier wins against each other
All matches of a tournamentA name or link, and yearsThe draw as matches, with qualifying if you ask
Match history of a playerA name or linkCareer matches with surface, round, score and odds
Head-to-head of two playersTwo names, such as Carlos Alcaraz vs Jannik SinnerEvery match between them
RankingsATP or WTA, a type and a dateRank, points, move and country
Tournament calendarYearsStart date, surface, prize money, draw size and singles winner

Use Tours, Formats and Surfaces to narrow the rows. Singles is the default format. In the tournament mode Tours picks the men's or women's draw.

Example input:

{
"mode": "tournament",
"tournaments": ["Wimbledon"],
"yearFrom": 2023,
"yearTo": 2024,
"includeQualifying": true,
"maxItems": 1000
}

On 5 November 2026 this input saved 956 Wimbledon matches in 10 seconds.

What data you get

Match rows have the same fields in every mode. A value the source does not show is null.

FieldWhat it holds
matchId, matchUrlMatch ID and link
status, resultTypefinished, in progress or scheduled, then completed, retired or walkover
date, startTime, startTimeUtcDate and time in Central European time, and the start in UTC
tour, gender, formatATP, WTA, Challenger, ITF or UTR, then men, women or mixed, then singles, doubles or mixed
tournament, tournamentUrl, tournamentCountry, tournamentPrizeMoneyTournament details
surface, roundhard, clay, grass or indoors, then a code such as R16, QF or Q-1R
player1, player2 and their Id, Url, Seed fieldsPlayers or doubles teams
winner, winnerSide, score, setsResult, with each set and tie-break
player1SetsWon, player2SetsWonFinished sets won
oddsPlayer1, oddsPlayer2Average decimal odds across bookmakers
h2hPlayer1, h2hPlayer2Earlier wins against each other, for upcoming matches
queriedPlayerWonWhether the player you asked for won
query, sourceUrl, retrievedAtWhere the row came from

Rankings give rankingDate, rank, rankMove, player, country and points. The calendar gives startDate, level, prizeMoney, singlesDraw, doublesDraw and singlesWinner.

One real row:

{
"recordType": "match",
"matchId": "3362391",
"matchUrl": "https://www.tennisexplorer.com/match-detail/?id=3362391",
"status": "finished",
"resultType": "completed",
"date": "2026-10-29",
"startTime": "09:05",
"startTimeUtc": "2026-10-29T08:05:00.000Z",
"tour": "WTA",
"gender": "women",
"format": "singles",
"tournament": "Tokyo",
"tournamentUrl": "https://www.tennisexplorer.com/tokyo/2026/wta-women/",
"tournamentCountry": "Japan",
"tournamentPrizeMoney": "1,206,446 $",
"surface": "hard",
"round": "R16",
"player1": "Rybakina E.",
"player1Id": "rybakina",
"player1Url": "https://www.tennisexplorer.com/player/rybakina/",
"player1Seed": "1",
"player2": "Putintseva Y.",
"player2Id": "putintseva",
"player2Url": "https://www.tennisexplorer.com/player/putintseva/",
"player2Seed": null,
"winner": "Rybakina E.",
"winnerSide": 1,
"score": "6-2, 6-3",
"player1SetsWon": 2,
"player2SetsWon": 0,
"sets": [
{
"player1": 6,
"player2": 2,
"tiebreak": null
},
{
"player1": 6,
"player2": 3,
"tiebreak": null
}
],
"oddsPlayer1": 1.13,
"oddsPlayer2": 5.75,
"h2hPlayer1": null,
"h2hPlayer2": null,
"queriedPlayerWon": null,
"query": "2026-10-29",
"sourceUrl": "https://www.tennisexplorer.com/results/?type=all&year=2026&month=10&day=29",
"retrievedAt": "2026-11-05T22:50:29.953Z"
}

How much does it cost?

You pay for each saved row. Rows that only explain an empty result are free. Each run also has a start charge of $0.00005.

PlanPrice per 1,000 results
Free$4.00
Starter$3.60
Scale$3.20
Business$2.80

Example: a daily run that saves 50 matches is 1,500 results a month. That costs $6.00 on the Free plan and $4.20 on Business.

How to get yesterday's results every morning

Set First day and Last day to 1 day, which counts back from today, then add an Apify Schedule.

{
"mode": "results",
"dateFrom": "1 day",
"dateTo": "1 day",
"tours": ["atp", "wta"],
"maxItems": 300
}

How to check a player on one surface

{
"mode": "player",
"players": ["Iga Swiatek"],
"surfaces": ["clay"],
"yearFrom": 2022,
"maxItems": 300
}

Count the rows where queriedPlayerWon is true for the win record. oddsPlayer1 and oddsPlayer2 show how the market saw each match.

Limits

  • No live scores. The source leaves most matches blank until they end, so a match in play usually reads as scheduled.
  • retired and walkover are worked out from the score. The source lists no label. A partial score on a match that started in the last 6 hours reads as in progress.
  • Round and surface need extra pages. Day pages do not show them, so the run reads each tournament page once. Turn off Add round, surface and prize money for a faster run.
  • Men's ITF matches have no round or surface. The source lists them under one heading, such as Futures 2026, with no tournament page. In date modes UTR events have no round or surface either.
  • Names differ between pages: Djokovic on tournament pages, Djokovic N. elsewhere. Join rows on player1Id and player2Id.
  • Player and head-to-head rows have no start time. The source shows only the date there.
  • Odds are averages, not the odds of one bookmaker. In a sample of French Open draws, odds appear by 2008.
  • Pace: about one page per second, on purpose. A long date range takes minutes.
  • Player bios and injuries are left out.

API and integrations

Start runs and read results through the Apify API or the JavaScript and Python clients. Use Schedules for repeat runs and webhooks to send the data on when a run ends.

FAQ

Do I need a proxy or a TennisExplorer account? No. The Actor reads public pages with a plain request, and the test runs on Apify used no proxy.

Why is there a row with recordType set to notice? It explains why part of your input gave nothing, for example a player name that was not found. These rows are free.

How far back does the data go? Calendars go back to 1995 and ranking lists to 1998. In a sample of French Open draws, the 1995 draw has every match with round and score. Start times appear by 2005 and odds by 2008.

Which time zone are the dates in? date and startTime are Central European time, as the source shows them. startTimeUtc is the same moment in UTC.

Why did a run stop before the end of my date range? It reached Maximum results or your spending limit. The status message says which.

Can I use this data in a commercial product? Check first. The terms of use of TennisExplorer limit commercial use, scraping and copying large parts of its database. You are responsible for how you use the data.

This Actor is an independent tool with no connection to TennisExplorer or Livesport. All trademarks belong to their owners.