# Changelog of Tennis Point-by-Point Scraper — Rally & Match Stats (`sian.agency/tennis-point-by-point-scraper`) Actor

- **URL**: https://apify.com/sian.agency/tennis-point-by-point-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/sian.agency/tennis-point-by-point-scraper.md

## Changelog

All notable changes to Tennis Point-by-Point Scraper will be documented in this file.

### \[1.0] - 2026-08-29

#### 🏆 Tournament Scraping — Take a Whole Draw in One Job

- **Tournament Directory Search** — find any ATP, WTA, Challenger or ITF event by name or host city and get a stable tournament ID
- **Whole-Draw Match Lists** — collect every match ID across one or more tournaments, deduplicated, then scrape them in bounded batches. Building the list is not billed.
- **Event Traceability** — match records now carry `requestedTournamentIds`, so every row traces back to the tournament you asked for
- **New Inputs** — `tournamentIds`, `maxTournaments`, `maxMatchesPerTournament`

#### 🔧 More Reliable Statistics & Point Parsing

- **Whole-Page Reassembly** — match pages arrive in streamed chunks. A match whose statistics or points straddled a chunk boundary could return partial data; the page is now reassembled before parsing, so results no longer depend on where that boundary lands.
- **Loud Conflicts** — duplicate statistic rows that disagree now fail the match instead of silently keeping whichever was seen first

#### ✨ New Field

- **`completedAtUtc`** — the exact match completion time as a UTC timestamp, alongside the human-readable `completedAt`

#### 💲 Pricing

- **Existing prices do not change.** A new **Tournament record** event covers the directory rows returned by tournament search, priced the same as a Player record. Match and player prices are untouched. It takes effect on **12 September 2026**; until then tournament directory rows are not billed at all.

#### 🛡️ Fair-Use Guards

- **Console and MCP stay free** — the Apify Console and MCP clients work on the free plan exactly as before. Direct REST API calls now need a paid plan, which keeps the shared proxy pool fast for everyone.
- **Free daily allowance** — 30 free runs a day per account. A run that hits the allowance finishes cleanly with an explanation rather than failing.
- **Billing stops delivery** — if the platform declines a charge, or a run reaches your own `maxTotalChargeUsd`, the Actor stops returning rows instead of serving data nobody is billed for.

#### 💎 User Benefits

- Study an entire event without knowing a single player ID first
- Deduplication means a match shared by two tournaments is fetched, and billed, once
- Statistics tables come back complete on long matches, so serve and return models train on full data
- Precise UTC timestamps make it straightforward to join tennis rows against odds or market data

#### 🎯 Use Cases

- Quantitative traders backtesting a full Challenger draw to measure surface effects on serve hold rates
- Analysts building win-probability models that need every point of every match in an event, not a sample
- Coaches pulling an opponent's whole tournament run to prepare for a rematch
- Data teams archiving a season of events on a schedule, resuming from a stable deduplicated match plan

### \[1.0] - 2026-07-22

#### 🌐 Proxies included

- All requests now route through our own residential proxy network — no proxy setup, no extra proxy cost
- Removed the `proxyConfiguration` input field: there is nothing left for you to configure

#### 🎛️ Friendlier input & a cheap first run

- Rebuilt the input form into collapsible sections, one per operation, with plain-English labels and examples
- Prefilled a player name so you can hit Start and see real data immediately
- Lowered the starting limits to 5 matches per player and 20 per run — a first run now costs pennies instead of dollars; raise them whenever you are ready to scale

#### 🎉 Tennis Point-by-Point Scraper - Launch!

- **Point-by-Point Data** - every serve, rally, and break point of a match, in play order, nested sets → games → points
- **Match & Set Statistics** - serve, return, break-point, performance, and shot-quality stats at both match and set level
- **Player Directory Search** - find any tennis player by name and get a stable player ID
- **Singles-Only Mode** - classify match format from metadata and skip doubles before point/stat parsing
- **Two-Stage Bulk Retrieval** - `discover-matches` builds a globally deduplicated match plan, `scrape-match-ids` scrapes it in bounded batches
- **Multi-Player Runs** - scrape many players at once; a match shared by two players is fetched only once
- **Resilient Retrieval** - per-listing and per-match failure isolation, challenge detection, proxy session rotation on retry, and global request pacing
- **Flexible Exports** - download tennis data as JSON, JSONL, CSV, or Excel, or pull it from the API

#### 💎 User Benefits

- Rally-level tennis data no other scraper sells - not just scores and rankings
- No API key or login required - add input and run
- Toggle points and statistics per run to get exactly the tennis data you need
- Pay per record received; filtered-out doubles and match-plan rows are never charged

#### 🎯 Use Cases

- Data scientists building serve/return and momentum models from point-by-point tennis data
- Traders backtesting tennis betting markets with detailed in-match statistics
- Coaches and scouts building opponent reports from full match histories
- Developers powering tennis apps, dashboards, and fantasy tools with a clean data feed
