# Changelog of Sofascore Season Stats Scraper (`incognito_mode/sofascore-season-stats-scraper`) Actor

- **URL**: https://apify.com/incognito_mode/sofascore-season-stats-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/incognito_mode/sofascore-season-stats-scraper.md

## Changelog

### Unreleased — 2026-09-27

- Fixes every run failing with `403 {"reason": "challenge"}` since
  2026-09-24. Sofascore now refuses a `User-Agent` claiming a Chrome older
  than a cutoff that trails the current stable release (148 when measured,
  with 154 stable), and the client had Chrome 136 hardcoded. No proxy tier
  could help, since the block was never about the IP.
- The Chrome version is now resolved at the start of each run from Google's
  Chrome release feed, falling back to an estimate from Chrome's four-week
  release cadence, so it can no longer go stale. `User-Agent`, `Sec-Ch-Ua`
  and the platform headers are generated together and always agree.

### 1.0.14 — 2026-08-31

- Datacenter proxy budget raised from 4 IPs to 12, and residential given its
  own separate budget of 3. Sofascore refuses Apify's datacenter egress on the
  first request of essentially every platform run, and a measured run needed 4
  IPs for two requests — the whole old budget. A run that hit one more block
  would have fallen through to a metered residential proxy that free-plan
  accounts do not have, and failed. The free tier now absorbs that.
- `max_escalations` raised 8 → 16 so the client's own ceiling can no longer
  shadow the tier budgets and strand the last tier.

### 1.0 — 2026-08-26

First release.

- Season leaderboards and team statistics for any competition Sofascore
  covers, in football, basketball and ice hockey.
- Three row types in one dataset, told apart by `recordType`:
- **`playerLeaderboard`** — one row per player per statistic, ranked, with the
  value, the appearances behind it, the player and their club. Football
  publishes 34 leaderboards, basketball 24 and ice hockey 21.
- **`teamStats`** — one row per team with every statistic the league
  publishes merged into one object. Not a top-N cut: every team is there.
- **`cupBracket`** — one row per tie, with the round, both teams, the
  aggregate result and who advanced.
- Season fallback, so a competition whose new season has not started yet
  returns the last one that has data instead of nothing.
