# Changelog of Transfermarkt Scraper (`data_xplorer/transfermarkt-api-scraper`) Actor

- **URL**: https://apify.com/data\_xplorer/transfermarkt-api-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/data\_xplorer/transfermarkt-api-scraper.md

## Changelog

### 2026-09-20 / v2.9

- 🐛 **Fixed crash on object items**: `items` sent as objects (e.g. `{"url": "…"}`) instead of strings raised a `TypeError` and killed the run. All item shapes are now normalized, unusable ones are skipped with a warning.
- 🛡️ **Item level error isolation**: a failing item no longer stops the run. The final summary reports processed, failed and skipped counts.
- ↪️ **Automatic scrapeType routing**: a URL belonging to another entity is routed to the matching mode instead of falling back to a text search.
- 🔗 **More tolerant URL matching**: profile URLs with a trailing slash, a query string or a fragment are now recognized.

### 2026-08-17 / v2.8

- 🐛 **Fixed club squad fetching for MLS and other non-European clubs**: the squad page with `saison_id` returns an empty page for some clubs. The scraper now automatically retries without `saison_id` when no squad table is found.
- 🔁 **Broader squad table detection**: added fallback selectors (`responsive-table` wrapper, `posrela` cell scan) to handle clubs whose squad page uses a non-standard table layout.
- 🔒 **Improved squad & staff request reliability**: both pages now pass the club profile URL as `Referer` and explicitly use the proxy pool.

### 2026-08-16 / v2.7

- 🌍 **Multi-domain support**:the scraper now accepts Transfermarkt URLs from any country domain.
- 🔎 **Smart player search fallback**: when a search returns no results (e.g. user input includes a country or club name after the player name), the scraper automatically retries with just the first two words before giving up.

### 2026-08-13 / v2.6

- 🔄 **Re-enabled the Transfermarkt `performance-season` API** as the primary source for player statistics.
- 🏆 **Complete competition coverage via API**: player statistics now include leagues, domestic cups, European competitions, international tournaments, World Cup competitions, friendlies, and super cups.

### 2026-08-12 / v2.5

- 🚀 **Increased batch limit**: the scraper now accepts and processes up to **100 items per run** instead of 20.

### 2026-08-11 / v2.4

- 📊 **Market value history**: added the optional `playerMarketValueHistory` input. When enabled, the scraper returns the complete historical market value timeline for each player.
- 📅 **Historical valuation details**: each market value entry includes the valuation date, season, player age, numeric value, currency, and formatted value.

### 2026-08-10 / v2.3

- 🤝 **Player agent**: new `playerAgent` field, automatically fetches the agent's Transfermarkt page and returns contact info (phone, email, website, address, country) plus portfolio stats (players represented, first-tier count, total market value)

### 2026-08-10 / v2.2

- 🐛 **Fixed stats column parsing**
- 🏆 **Full competition coverage**: player stats now include **all competition categories** per season

### 2026-08-03 / v2.1

- 🎛️ **Multi-season selection**: `playerStatsSelection` is now a multi-select: pick one or several seasons (e.g. `2025/2026` + `2024/2025`)
- 🔄 Renamed "Last 4 seasons" to **"Last 6 seasons"**, now fetches 6 seasons by default
- ⚠️ Added log warning when a selected season has no data yet (e.g. season not started)
- 🔁 Full backward compatibility: existing API calls with a string value still work unchanged

### 2026-08-01 / v2.0

- 🔄 **Migrated player stats to new Transfermarkt API**
- ➕ Added new stat fields: `substituted_on/off`, `penalty_goals`, `own_goals`, `second_yellow_cards`
- 🗓️ Updated current season to 2026/2027
- 📋 Added 2026/2027 to player statistics season selector
- 🗑️ Removed 2020/2021 from season selector (rolling 6-season window)

### 2026-06-10 / v1.8

- 🐛 Fixed `UnicodeEncodeError` on players with non-ASCII names
- ⚡ Fixed false-positive anti-bot detection on empty API responses
- 🔄 Added Apify residential proxy auto-detection with session-based rotation
- ♻️ Proactive session cycling after 12 requests to avoid detection

### 2026-05-01 / v1.7

- 📈 Fixed player statistics that were returning empty results
- 🔒 Fixed request headers that were causing transfer history failures
- 🍪 Improved session management for better success rates across all requests
- 📝 Updated README with detailed stats fields documentation

### 2026-04-06 / v1.6

- 🛑 Fixed actor zombie process

### 2026-04-05 / v1.5.17

- 🛑 Fixed actor hanging after completion
- 🧹 Added `shutdown_executor()` cleanup step before forced exit

### 2026-03-01 / v1.4.2

- 🧹 Complete logs overhaul for synthetic and readable output
- 🛑 Added force exit via `sys.exit(0)` to prevent the actor from staying stuck in "Running"
- 🔇 Request layer is now silent and only logs retries and failures

### 2026-03-01 / v1.3.2

- 🔄 **3 new transfer scrape types**: Player Transfers, Club Transfers, Competition Transfers

### 2026-02-15 / v1.2.36

- 🚀 Upgraded to Python 3.13 and Apify SDK 4.x for improved performance and stability
- ⚡ Multi-layer request strategy with automatic fallback (fast → anti-bot → direct)
- 🔄 Proxy pool rotation
- 🔒 Fixed proxy authentication issues in LIMITED\_PERMISSIONS mode
- 📦 Updated dependencies

### 2026-02-14 / v1.1.8

- 🔒 Improved proxy management: Now supports fallback to manual proxy configuration for runs with limited permissions.
- 📦 Added `output_schema.json`

### 2026-01-03 / v1.0.18

- 🚀 Optimized HTTP requests with latest User-Agents pool
- 🔒 Enhanced anti-bot bypass with Sec-CH-UA headers for modern Chrome fingerprinting
- 🌐 Updated curl-cffi for better HTTP/2 support and anti-detection
- 🏠 Set residential proxies as default for better success rate against Cloudflare
- 📦 Code optimization for faster scraping speed

### 2025-11-07 / v0.9.13

- ✨ Players options to fetch profile only or pick a specific season
- 📈 Default remains last 4 seasons

### 2025-07-04 / v0.6.50

- 🗓️ Updated current season to 2025/2026

### 2025-03-29 / v0.6.44

- ✨ Added extraction for clubs

### 2025-03-28 / v0.5.12

- ✨ Added player statistics extraction for current and 3 previous seasons
- 🚀 Increased maximum player limit from 10 to 20

### 2025-03-26 / v0.4.11

- 🚀 First stable release of Transfermarkt Scraper with comprehensive ad data extraction
- 🏗️ Structured data format with standardized fields for easy analysis
