Transfermarkt Scraper - Player Market Values & Transfers avatar

Transfermarkt Scraper - Player Market Values & Transfers

Pricing

from $3.00 / 1,000 player records

Go to Apify Store
Transfermarkt Scraper - Player Market Values & Transfers

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

Vitalii Bondarev

Maintained by Community

Actor 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 ceapi valuation endpoint. If the website's HTML layout changes, the scraper automatically falls back to the JSON source and keeps working — the field market_value_source (html / ceapi / html+ceapi) tells you exactly where each value came from.
  • Quality score on every recordparse_confidence (0–1.0) plus machine-readable warnings mean 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:

FieldDescription
player_idTransfermarkt numeric player ID
namePlayer display name
full_nameName in home country (full legal name)
shirt_numberSquad shirt number
current_clubCurrent club name
leagueLeague / competition (club mode)
positionPlaying position (e.g. "Attack - Right Winger")
ageAge in years
date_of_birthDate of birth (DD/MM/YYYY)
place_of_birthCity of birth
nationalityList of citizenships
heightHeight (e.g. "1,70 m")
footPreferred foot
market_valueCurrent market value, integer EUR
market_value_strCurrent market value, display (e.g. "€15.00m")
market_value_currencyCurrency symbol (€, £, $, US$)
market_value_sourceWhere the value came from: html, ceapi, or html+ceapi (both agree)
market_value_peakAll-time peak market value, integer EUR
market_value_peak_strPeak value, display
market_value_peak_dateDate of the peak value
market_value_historyFull dated valuation history (opt-in: includeMarketValueHistory)
contract_untilContract expiry date
agentPlayer agent
outfitterBoot/kit outfitter
profile_urlCanonical Transfermarkt profile URL
image_urlPlayer portrait image URL
transfersTransfer history (from/to club, fee, fee_type, date)
parse_confidenceData quality score (0–1.0)
warningsList of quality warning codes
scraped_atISO-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. GB1 for the Premier League, ES1 for 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_cffi chrome impersonation (no Cloudflare challenge), plus two clean Transfermarkt ceapi JSON endpoints for market-value peak/history and transfer history.
  • Resilient parsing: structural selectors (data-header__, info-table__content label/value alternation, table.items) — not brittle class names. parse_confidence flags 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 ceapi valuation 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 in warnings, 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 proxyConfiguration for 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.