Transfermarkt Scraper - Player Market Values & Transfers
Pricing
from $3.00 / 1,000 player records
Transfermarkt Scraper - Player Market Values & Transfers
Scrape Transfermarkt (transfermarkt.com) football player data: market values, squads, transfers, and rankings. Returns 25+ fields per player — name, club, position, age, nationality, market value (current + peak), contract, agent, and transfer history. No login or API key. Pay per player record.
Pricing
from $3.00 / 1,000 player records
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape football player data from Transfermarkt — the world's reference for market values, squads, and transfers. This Transfermarkt Scraper returns 27+ fields per player: name, current club, league, position, age, nationality, current and peak market value, full market-value history, contract expiry, agent, shirt number, profile image, and full transfer history. Scrape a single player, a whole club squad, or an entire league in one run. No login, no API key, no proxy required for standard volumes. Pay per player record at €3.00 per 1,000 results — and no charge for the actor start, unlike most competitors.
Why this Transfermarkt Scraper
- Whole-league scraping — paste a competition code (
GB1,ES1,IT1,L1,FR1,MLS1) and get every club's full squad in one call. Most scrapers stop at single players or single clubs. - Self-healing market value (dual-source) — every current market value is taken from the page header and cross-checked against Transfermarkt's own
ceapivaluation endpoint. If the website's HTML layout changes, the scraper automatically falls back to the JSON source and keeps working — the fieldmarket_value_source(html/ceapi/html+ceapi) tells you exactly where each value came from. - Quality score on every record —
parse_confidence(0–1.0) plus machine-readablewarningsmean you (and your monitoring) instantly see if a page structure drifted, instead of silently getting blanks. - No start fee — you pay only for player records actually returned. Runs that hit zero results cost you nothing.
- Peak value + full history + full transfers — current value, all-time peak (with date), the complete dated valuation history (opt-in), and the complete transfer history (clubs, fees, dates) — all in one record.
What the Transfermarkt Scraper returns
25+ fields per player record:
| Field | Description |
|---|---|
player_id | Transfermarkt numeric player ID |
name | Player display name |
full_name | Name in home country (full legal name) |
shirt_number | Squad shirt number |
current_club | Current club name |
league | League / competition (club mode) |
position | Playing position (e.g. "Attack - Right Winger") |
age | Age in years |
date_of_birth | Date of birth (DD/MM/YYYY) |
place_of_birth | City of birth |
nationality | List of citizenships |
height | Height (e.g. "1,70 m") |
foot | Preferred foot |
market_value | Current market value, integer EUR |
market_value_str | Current market value, display (e.g. "€15.00m") |
market_value_currency | Currency symbol (€, £, $, US$) |
market_value_source | Where the value came from: html, ceapi, or html+ceapi (both agree) |
market_value_peak | All-time peak market value, integer EUR |
market_value_peak_str | Peak value, display |
market_value_peak_date | Date of the peak value |
market_value_history | Full dated valuation history (opt-in: includeMarketValueHistory) |
contract_until | Contract expiry date |
agent | Player agent |
outfitter | Boot/kit outfitter |
profile_url | Canonical Transfermarkt profile URL |
image_url | Player portrait image URL |
transfers | Transfer history (from/to club, fee, fee_type, date) |
parse_confidence | Data quality score (0–1.0) |
warnings | List of quality warning codes |
scraped_at | ISO-8601 scrape timestamp |
Each transfers[] entry includes season, date, from_club, to_club, fee (int EUR), fee_str, fee_type (fee / free / loan / end_of_loan / unknown), and market_value_str. Each market_value_history[] point includes date, value (int EUR), value_str, and club.
How to scrape Transfermarkt market values
The actor has five input modes — combine any of them in one run:
playerUrls— paste profile URLs or bare IDs (e.g.28003). Each player gets a full profile scrape with peak market value and complete transfer history.clubUrls— paste squad URLs or club IDs (e.g.131). Every squad player becomes one record: name, position, market value, age, nationality.leagueCodes— paste a competition code or URL (e.g.GB1for the Premier League,ES1for LaLiga). The scraper walks every member club and returns their full squads, capped by Max Results across the league. Scrape a whole division in one run.search— free-text player search (e.g.Haaland). The top matches are looked up and their profiles scraped.rankings— scrape Transfermarkt's most-valuable-players ranking, paginated, up to Max Results.
Common competition codes: GB1 Premier League · ES1 LaLiga · IT1 Serie A · L1 Bundesliga · FR1 Ligue 1 · MLS1 Major League Soccer · PO1 Liga Portugal · NL1 Eredivisie.
Use cases for Transfermarkt football player data
- Market value tracking — monitor current and peak market values for any player or squad over time
- Squad analysis — pull a full club roster with positions, ages, and valuations in one call
- Transfer research — extract complete transfer history (fees, clubs, dates) for scouting and journalism
- Fantasy football & analytics — feed player valuations and positions into models and dashboards
- Talent scouting — rank the most valuable footballers and surface rising young players
- Betting & media — build datasets of player values, contracts, and nationalities for content and models
Input example
{"playerUrls": ["28003"],"clubUrls": ["131"],"leagueCodes": ["GB1"],"rankings": true,"maxResults": 100,"includeMarketValueHistory": false}
Pricing
Pay Per Event: €0.003 per player record (€3.00 per 1,000 results). You only pay for player records actually pushed to the dataset.
Technical notes
- Transport: server-rendered HTML via
curl_cffichrome impersonation (no Cloudflare challenge), plus two clean TransfermarktceapiJSON endpoints for market-value peak/history and transfer history. - Resilient parsing: structural selectors (
data-header__,info-table__contentlabel/value alternation,table.items) — not brittle class names.parse_confidenceflags silent structure drift. - Self-healing dual-source market value (fallback plan): the current market value is read from the HTML header and cross-checked against the
ceapivaluation JSON. If the HTML layout drifts, the scraper falls back to the JSON value automatically (market_value_source: "ceapi") so your data pipeline keeps flowing. Disagreements are flagged inwarnings, never silently merged. - Anti-bot wall detection: every HTML response is checked for consent/Cloudflare interstitials and truncated bodies. A blocked page is retried (with proxy rotation when enabled) and, if it can't be recovered, the record is dropped — you are never charged for an empty or garbage record.
- Rate limit: ~1.5s inter-request pacing + automatic backoff on 429/403/503 (3 retries: 10/20/40s).
- Proxy: optional Apify RESIDENTIAL proxy via
proxyConfigurationfor high-volume runs, billed to the run owner. No external proxy account needed.
Frequently asked questions
Do I need a Transfermarkt account or API key? No. The actor reads the same public pages and JSON endpoints the Transfermarkt website itself uses. No authentication is required.
Can I scrape a whole squad at once? Yes — pass a club URL or ID in clubUrls; every squad player becomes one record.
Can I scrape a whole league at once? Yes — pass a competition code (e.g. GB1) or league URL in leagueCodes. The scraper walks every club in the league and returns their full squads, capped by Max Results.
Am I charged if a run returns nothing? No. Pricing is per player record pushed, with no actor-start fee. Blocked or empty pages are dropped without billing.
What is market_value_source? It tells you whether each current market value came from the page HTML (html), Transfermarkt's valuation JSON (ceapi), or both in agreement (html+ceapi). It's how the scraper stays reliable when the website's HTML changes.
Does it return peak market value? Yes. Profile mode pulls the all-time peak value and its date from Transfermarkt's market-value development data.
What about transfer history? Profile mode returns the full transfer history list (from club, to club, fee, date) for each player.
Does it work without a proxy? Yes for standard volumes. For large runs, enable Apify RESIDENTIAL proxy to avoid 429 rate limits.
What does parse_confidence mean? 1.0 = all critical fields present. Below 0.5 means the page structure likely changed; check warnings for affected fields.
Disclaimer
Transfermarkt is a public website. This Transfermarkt scraper accesses publicly available player, club, and market-value pages. No authentication is required and no private data is collected.