ATP, WTA, ITF and Challenger tennis: per-set statistics, point-by-point sequences, head-to-head, live scores down to the point in play and odds from up to 20 bookmakers per country. Current rankings, tournament level and seeds. Season archives decades deep. No login, no browser.
Pricing
from $0.78 / 1,000 match with score and competitions
New fields and options; nothing is removed, and the one renamed input field still accepts its old name.
Dates outside the daily window: with dateFrom, dateTo and a tournament in tours, the run reads that tournament's season archives (see Date ranges in the README).
startTimeKnown next to startTime: false for archive records the source keeps without a start time. Those have startTime null and startDate set to the day of the match, and dateFrom and dateTo compare that day.
TV listings come from the source's channel list by country: channelId, bookmakerId and countryHint on each item, url null for the source's partner links. match-broadcasts is charged only when at least one TV channel is listed.
In-play prices: each bookmaker's first in-play price and whether the price is now above or below it (openingHome, homeDirection and the rest), and how many bookmakers hold each price above or below their first one (homeUpBookmakers and the rest).
In monitor mode the three odds events are billed by their own part of odds, and the free parts (bookmaker streams) no longer make a match changed.
With includeLive or the Live now filter, status, period and clock follow the live feed: a match that ended after the daily list was read comes as finished.
onlyWithOdds checks up to twice as many candidates as maxMatches (was four times): in a run over the whole window 93% of tennis matches had prices.
A run close to its timeout stops starting new work, finishes the records on their way and ends on its own, so notOutputMatchIds in RUN_SUMMARY holds only matches that were not charged.
The input field monitorKey is renamed monitorName. The old name is still accepted wherever it was (runs, saved tasks, schedules, Standby queries): the same value keeps the same monitor memory, and when both are set monitorName is used.
Monitor mode after the update: a match the monitor remembers from 1.0 is output once more, and billed for the base event, when its record changed shape: TV listings from the new source (with includeBroadcasts, also match-broadcasts). It happens once per match; matches whose records did not change are not output again.
1.0 — first public version
The record and every view are described in the README (Output fields, Getting a spreadsheet) and in the dataset schema. Changes of the output since the 0.1 test builds:
Flat columns at the start of every record: startDate, startTime and timezone (the run's time zone), homeTeam, awayTeam, homeScore, awayScore; scrapedAt is the moment the record was output.
seedNumber and entryType next to seed; fields of team sports (countryId, overtimeScore, penaltyShootout, setsWon, lineups) are no longer output.
Odds: impliedHome, impliedDraw, impliedAway instead of the impliedProbability object; best price per outcome with its bookmaker, average opening prices and bookmakersCount; bookmaker rows homePrice, drawPrice, awayPrice instead of home, draw, away; price list rows price instead of odds; movement.homeDirection instead of movement.direction; numeric handicap lines; American prices with oddsFormat.
Statistics rows homeText and awayText instead of home and away, with isHeadline; head-to-head rows homeName and awayName instead of home and away.
Events with minuteNumber, addedTime and shootoutOrder; lineups with confirmed, numeric rating and numberInt; live.clockStale.
Monitor mode: monitorChangedFieldsText, and odds.previous with odds.changePct.
unavailableParts can name odds (also when one of several oddsCountries did not answer) and the box score, with unavailablePartsText next to it; RUN_SUMMARY can have status: "timing-out" and, with onlyWithOdds, scanned.
Head-to-head rows: meetingId, meetingTournament, meetingHomeScore, meetingAwayScore, meetingWinner and meetingStatus instead of matchId, tournament, homeScore, awayScore, winner and status, which the Head-to-head view mixed up with the match itself.
Numbers next to text: live.minuteNumber and live.addedTime, substitutedAtMinuteNumber and cameOnAtMinuteNumber in lineups, numberInt in box-score lines; American prices also on the in-play averages.
From here on a field that is removed, or renamed without its old name still working, or a default that changes, comes with a new major version. To stay on one build, pass its build number (such as 1.0.3, shown in the run's details) as build when you start a run through the API.