Transfermarkt Global Football Player Scraper avatar

Transfermarkt Global Football Player Scraper

Pricing

Pay per event

Go to Apify Store
Transfermarkt Global Football Player Scraper

Transfermarkt Global Football Player Scraper

Scrape global football player profiles from Transfermarkt — career, market value history, transfers, agency, caps, injuries. Discover by player ID, club, competition (Premier League, La Liga, MLS, etc.) or search query.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Transfermarkt Football Player Scraper

Scrape global football player data from Transfermarkt — full identities, market value history, transfers, agency, national team caps, injuries, and suspensions for 1M+ profiles. Powered by the public Transfermarkt JSON API for clean, structured records and the website itself for discovery.


Transfermarkt Football Player Scraper Features

  • Returns 40+ fields per player profile, all flattened into Apify-friendly JSON.
  • Discovers players four different ways — direct player IDs, club rosters, competition codes, or free-text search. Pick one.
  • Pulls full market value history. That's every quarterly valuation Transfermarkt has ever published for a player, including the all-time peak.
  • Captures career arcs from youth clubs through senior transfers, with fees and dates where Transfermarkt has them.
  • Splits absences into injuries and suspensions. Yellow cards, red cards, sports-court verdicts — they all land in the right bucket.
  • Uses the public Transfermarkt JSON API for enrichment, so the per-player payload is rich and consistent rather than scraped from inconsistent HTML.
  • Default datacenter proxies handle the CloudFront WAF on listing pages. Switch to residential if you see HTTP 403s.

Who Uses Transfermarkt Player Data?

  • Sports betting and trading firms — Build market value baselines, surface mispricings around transfers and injuries.
  • Fantasy football platforms — Power player cards with current clubs, market values, and form context.
  • Football agents and scouts — Track career arcs, contract expiries, and agency relationships at scale.
  • Sports journalists and analysts — Pull standardised career histories without copy-pasting from individual profile pages.
  • Academic researchers — Long-tail labour-economics studies of football transfers, salary trajectories, and migration patterns.
  • Club analytics departments — Benchmark squad valuations, monitor competing rosters, scout free agents.

How Transfermarkt Football Player Scraper Works

  1. Pick a discovery source. Pass player IDs directly, hand it club IDs (e.g. 31 for Liverpool, 69261 for Inter Miami), feed it competition codes (GB1 for Premier League, ES1 for La Liga, MLS1 for MLS), or just type a search query. The scraper picks the highest-priority source you've provided.
  2. Discovery resolves to player IDs. Club rosters and competition pages get parsed for /spieler/<id> links. Search queries hit the Transfermarkt schnellsuche endpoint. Direct IDs skip this stage entirely.
  3. Each player gets enriched in parallel — five Transfermarkt API endpoints fan out per player to pull identity, market value history, transfers, national team caps, and absences.
  4. Records flatten into the dataset. All array fields are primitive strings (Apify schema requirement), club IDs resolve to names via a cached lookup, nationality IDs resolve to country names.

Input

{
"playerIds": ["28003", "8198"],
"maxItems": 10,
"proxyConfiguration": {
"useApifyProxy": true
}
}
FieldTypeDefaultDescription
searchQuerystring""Free-text search on transfermarkt.com (e.g. "messi", "haaland", "bellingham"). Returns top matches up to maxItems.
playerIdsarray["28003", "8198"]Transfermarkt player IDs (the numeric tail of /spieler/<id> URLs). Highest priority — when set, HTML discovery is skipped.
clubIdsarray[]Transfermarkt club IDs (e.g. "69261" for Inter Miami, "31" for Liverpool). Pulls every player from each club's current roster.
competitionCodesarray[]Transfermarkt competition codes — GB1 (Premier League), ES1 (La Liga), IT1 (Serie A), L1 (Bundesliga), FR1 (Ligue 1), MLS1 (MLS), and so on. Pulls every club, then every player.
maxItemsinteger10Maximum number of player profiles to scrape. Keep low for test runs.
proxyConfigurationobjectdatacenterApify datacenter proxies are the default. Switch to RESIDENTIAL only if you see HTTP 403 errors on the HTML pages.

Discovery priority

If you set multiple sources, the scraper picks one in this order:

  1. playerIds
  2. clubIds
  3. competitionCodes
  4. searchQuery

So if you pass both playerIds and clubIds, the IDs win.

Discovery examples

Scrape an entire Premier League team:

{
"clubIds": ["31"],
"maxItems": 30
}

Scrape the top of the Bundesliga and get the first 100 players the page yields:

{
"competitionCodes": ["L1"],
"maxItems": 100
}

Scrape direct player IDs (fastest, no HTML traffic):

{
"playerIds": ["28003", "8198", "418560", "342229"],
"maxItems": 4
}

Transfermarkt Football Player Scraper Output Fields

{
"player_id": "28003",
"profile_url": "https://www.transfermarkt.com/lionel-messi/profil/spieler/28003",
"full_name": "Lionel Andrés Messi Cuccitini",
"display_name": "Lionel Messi",
"date_of_birth": "1987-06-24",
"age": 38,
"place_of_birth": "Rosario",
"country_of_birth": "Argentina",
"nationality": ["Argentina", "Spain"],
"gender": "male",
"position": "Right Winger",
"position_category": "Striker",
"foot": "left",
"height_cm": 170,
"current_club": "Inter Miami CF",
"current_club_id": "69261",
"current_competition": "Major League Soccer",
"current_competition_code": "MLS1",
"shirt_number": 10,
"is_captain": true,
"contract_until": "2028-12-31",
"last_contract_renewal": "2025-10-23",
"market_value_eur": 15000000,
"market_value_currency": "EUR",
"market_value_determined": "2025-12-11",
"previous_market_value_eur": 18000000,
"highest_market_value_eur": 180000000,
"highest_market_value_determined": "2018-05-30",
"market_value_history": [
"2017 | FC Barcelona | EUR 180.00M",
"2023 | Inter Miami CF | EUR 30.00M",
"2024 | Inter Miami CF | EUR 15.00M"
],
"agent": "Relatives",
"agency": "",
"agency_id": "1207",
"youth_clubs": ["Grandoli FC (1992-1995)", "Newell's Old Boys (1995-2000)"],
"career_history": [
"FC Barcelona -> Paris Saint-Germain | 2021-08-10 | Free Transfer | 21/22",
"Paris Saint-Germain -> Inter Miami CF | 2023-07-15 | Free Transfer | 23/24"
],
"total_transfer_fees_eur": 0,
"international_team": "Argentina",
"international_caps": 198,
"international_goals": 116,
"national_team_history": [
"Argentina | 198 apps | 116 goals | CURRENT_NATIONAL_PLAYER",
"Argentina U20 | 18 apps | 14 goals | FORMER_NATIONAL_PLAYER"
],
"injuries": [],
"suspensions": [
"2025-07-25 to 2025-07-28 | Suspension through sports court | 1 game"
],
"photo_url": "https://img.a.transfermarkt.technology/portrait/big/28003-1771694720.jpg",
"scraped_at": "2026-05-02T15:53:00.000Z"
}
FieldTypeDescription
player_idstringTransfermarkt numeric player ID.
profile_urlstringCanonical player profile URL on transfermarkt.com.
full_namestringFull legal name (passport name from Transfermarkt).
display_namestringCommon display name.
short_namestringInitial-and-surname short form.
nicknamestringArtist or nickname. Often empty for non-Brazilian players.
date_of_birthstringYYYY-MM-DD.
agenumberCurrent age in years.
place_of_birthstringBirthplace city.
country_of_birthstringBirthplace country name.
nationalityarray of stringsNationality country names. Most players have one; dual nationals get both.
genderstringmale or female.
positionstringPrimary position (e.g. Right Winger, Centre-Forward, Goalkeeper).
position_categorystringBroad group — Goalkeeper, Defender, Midfielder, Striker.
footstringPreferred foot — left, right, or both.
height_cmnumberHeight in centimetres.
current_clubstringCurrent club name. Empty if retired or without contract.
current_club_idstringCurrent club's Transfermarkt ID.
current_competitionstringCurrent league or competition name.
current_competition_codestringCurrent competition's Transfermarkt code (GB1, ES1, MLS1, etc.).
shirt_numbernumberCurrent shirt number at club.
is_captainbooleanWhether the player is the current club captain.
contract_untilstringCurrent contract expiry date (YYYY-MM-DD).
last_contract_renewalstringDate of last contract renewal.
market_value_eurnumberCurrent market value in EUR.
market_value_currencystringAlways EUR.
market_value_determinedstringDate the current market value was last set.
previous_market_value_eurnumberPrevious published market value before the most recent update.
highest_market_value_eurnumberAll-time peak market value in EUR.
highest_market_value_determinedstringDate the all-time peak was set.
market_value_historyarray of strings`"YYYY
agentstringPlayer's individual agent or consultant.
agencystringPlayer's agency name (e.g. CAA Stellar, Wasserman).
agency_idstringTransfermarkt agency ID.
youth_clubsarray of strings"Club Name (start-end)" entries.
career_historyarray of stringsSenior club moves: `"from -> to
total_transfer_fees_eurnumberSum of disclosed transfer fees across senior career.
international_teamstringCurrent senior national team name (or empty if uncapped).
international_capsnumberTotal senior international appearances.
international_goalsnumberTotal senior international goals.
national_team_historyarray of stringsAll national-team levels with apps, goals, and current/former status.
injuriesarray of strings`"YYYY-MM-DD to YYYY-MM-DD
suspensionsarray of stringsSame format. Includes red/yellow card suspensions, sports-court rulings, and call-ups.
photo_urlstringPlayer portrait URL.
scraped_atstringISO timestamp the record was scraped.

FAQ

How do I scrape Transfermarkt player data?

Transfermarkt Football Player Scraper accepts four discovery modes — direct player IDs, club IDs, competition codes, or a free-text search query. Pass any one of them in the input, set maxItems, and the scraper handles the rest. Player IDs are the numeric tail of any /spieler/<id> URL; club IDs come from /verein/<id> URLs; competition codes are the short codes Transfermarkt uses internally (GB1, ES1, IT1, L1, FR1, MLS1, etc.).

How much does Transfermarkt Football Player Scraper cost to run?

Transfermarkt Football Player Scraper uses Pay-Per-Event pricing — $0.10 per actor start plus $0.001 per player record returned. A 100-player run costs 20 cents. A 10,000-player crawl costs about $10.

What data can I get from Transfermarkt?

Transfermarkt Football Player Scraper returns 40+ fields per player — full identity (name, date of birth, place of birth, nationalities, gender), physical attributes (height, foot, position), current contract (club, competition, shirt number, captaincy, contract dates), market value (current, previous, all-time peak, plus full history), career arc (youth clubs, senior transfers with fees and dates), national team record (caps, goals per team), and an absence log split into injuries and suspensions.

Does Transfermarkt Football Player Scraper need proxies?

Transfermarkt Football Player Scraper defaults to Apify datacenter proxies, which clear Transfermarkt's CloudFront WAF on the listing pages without trouble. The Transfermarkt JSON API itself has no anti-bot layer. If you see HTTP 403 errors during a large search-query or club-roster crawl, switch to residential.

Can I scrape an entire league or just specific clubs?

Transfermarkt Football Player Scraper handles both. Pass a competition code (e.g. GB1 for Premier League) to walk every club in that league and pull their players. Pass specific club IDs to scope to those clubs only. maxItems caps the total players returned regardless of how many clubs are in scope.

How fresh is Transfermarkt market value data?

Transfermarkt updates market values quarterly (with major refreshes in December and June) and logs transfers in real time during the windows. Each record includes a market_value_determined date so you can see exactly when each valuation was set.


Need More Features?

Open an issue at the OrbTop actor support inbox and we'll consider it for the next release.

Why Use Transfermarkt Football Player Scraper?

  • 40+ fields per player — Identity, contract, market value history, full career arc, national caps, agency, injuries, and suspensions all in one record.
  • Four discovery modes — Direct IDs, club rosters, league walks, or free-text search. Use whichever fits your workflow.
  • Public JSON API enrichment — The hard data (career history, market values, transfers) comes from Transfermarkt's own structured API, not flaky HTML parsing.
  • Pay-Per-Event pricing$0.001 per player record. Run 100 or 100,000, you pay only for what you get.