Tennis Scraper - Results, Schedule & Betting Odds (ATP, WTA)
Pricing
from $2.00 / 1,000 match scrapeds
Tennis Scraper - Results, Schedule & Betting Odds (ATP, WTA)
Tennis results and upcoming matches from TennisExplorer: ATP, WTA, Challenger, ITF, singles and doubles. Set-by-set scores, closing and pre-match betting odds, plus optional round, surface, rankings, head-to-head and opening vs. closing odds from ~15 bookmakers.
Pricing
from $2.00 / 1,000 match scrapeds
Rating
0.0
(0)
Developer
Poetsc Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
What does Tennis Scraper do?
Tennis Scraper collects professional tennis matches from TennisExplorer for any date or date range: ATP, WTA, Challenger, ITF/UTR events, singles and doubles. It works in two modes:
- Results: finished matches with set-by-set scores (including tiebreaks), winner, seeds, retirements, walkovers and closing betting odds.
- Schedule: upcoming matches (order of play) for today and future days with current pre-match odds.
Turn on Include match details & bookmaker odds to also get the round, surface (clay, grass, hard, indoors), player rankings, birth date, height, plays left/right, head-to-head record, and opening vs. current (closing) odds from around 15 bookmakers (10Bet, 1xBet, bet365, Betfair and more) with the number of price moves.
A full day of men's singles is typically 150–250 matches. A whole season is a few runs away.
What data do you get?
| Field | Example |
|---|---|
| date, time | 2026-11-04, 21:20 |
| tour, tournament, tournamentCountry, isChallenger | atp-single, Paris, FR, false |
| player1, player2 (+ seeds and profile URLs) | Fils A. (7), Machac T. |
| winner, score, sets[] | Fils A., 6-3 7-6(4) |
| player1Sets, player2Sets | 2, 0 |
| status, finished, retired, walkover | finished, true, false, false |
| oddsPlayer1, oddsPlayer2 | 1.55, 2.43 |
| h2hMatches | 2 |
| matchId, matchUrl | 3368391 |
With Include match details on, each match also has:
| Field | Example |
|---|---|
| round, surface, indoor | 2. round, indoors, true |
| player1Rank, player2Rank | 7, 69 |
| player1Info, player2Info | birthDate, heightCm, weightKg, plays, turnedPro |
| h2hPlayer1Wins, h2hPlayer2Wins | 2, 0 |
| openingOddsPlayer1Avg, openingOddsPlayer2Avg | 1.429, 2.74 |
| currentOddsPlayer1Avg, currentOddsPlayer2Avg | 1.553, 2.427 |
| bookmakerCount, bookmakerOdds[] | 15, per bookmaker: opening, current, openingTime, lastChangeTime, changes |
For finished matches, "current" odds are the closing odds. Odds timestamps are shown as on TennisExplorer (DD.MM. HH:MM).
Use cases
- Tennis betting models: closing odds and opening-to-closing line movement for backtesting, ELO and surface-adjusted ratings
- Daily betting pipelines: pull tomorrow's schedule with pre-match odds every evening, results every morning
- Tennis analytics and journalism: form, upsets, head-to-heads across Tour, Challenger and ITF levels
- Fantasy and prediction apps: feed results and fixtures into your app on a schedule
- Machine learning datasets: thousands of labelled matches with pre-match market prices, rankings and surface
How to use it
- Choose What to scrape: Results or Schedule.
- Set Start date (and optionally End date). Empty = yesterday (Results) or today (Schedule).
- Pick Tours: men's/women's singles and doubles.
- Optionally filter by tournament name, e.g.
challengerorWimbledon. - Optionally turn on Include match details & bookmaker odds.
- Run it, then export JSON, CSV or Excel, or call it via API. Use Apify Schedules to collect data every day automatically.
Input examples
Yesterday's results (default):
{ "tours": ["atp-single", "wta-single"] }
Tomorrow's ATP order of play with odds from every bookmaker:
{"mode": "schedule","startDate": "2026-11-07","tours": ["atp-single"],"includeMatchDetails": true}
Output example (with match details)
{"date": "2026-11-04","time": "21:20","tour": "atp-single","tournament": "Paris","tournamentCountry": "FR","player1": "Fils A.","player1Seed": "7","player2": "Machac T.","winner": "Fils A.","score": "6-3 7-6(4)","status": "finished","oddsPlayer1": 1.55,"oddsPlayer2": 2.43,"round": "2. round","surface": "indoors","player1Rank": 7,"player2Rank": 69,"h2hPlayer1Wins": 2,"h2hPlayer2Wins": 0,"openingOddsPlayer1Avg": 1.429,"currentOddsPlayer1Avg": 1.553,"bookmakerCount": 15,"bookmakerOdds": [{"bookmaker": "10Bet","player1": { "current": 1.53, "opening": 1.42, "openingTime": "02.11. 19:37", "lastChangeTime": "04.11. 15:23", "changes": 10 },"player2": { "current": 2.4, "opening": 2.7, "openingTime": "02.11. 19:37", "lastChangeTime": "04.11. 15:23", "changes": 10 }}],"matchUrl": "https://www.tennisexplorer.com/match-detail/?id=3368391"}
How much does it cost?
You pay per match saved (see the Pricing tab). A week of ATP + WTA singles results (around 2,500 matches) costs a few dollars, and the Actor runs on the smallest memory setting. Match details are an optional add-on charged per match on top of the match price (see the Pricing tab); they also add one page request per match, so detailed runs take longer.
Notes
- Results mode saves only finished matches unless Include unfinished matches is on. Schedule mode saves matches that have not finished yet.
- The Actor paces its requests politely and stops cleanly before the run timeout, keeping everything scraped so far. Split very long date ranges across runs.
Feedback
Missing a field or found a parsing issue? Open an issue on the Issues tab with the date and match.