Transfermarkt Scraper - Players, Market Values & Transfers avatar

Transfermarkt Scraper - Players, Market Values & Transfers

Pricing

from $1.19 / 1,000 player delivereds

Go to Apify Store
Transfermarkt Scraper - Players, Market Values & Transfers

Transfermarkt Scraper - Players, Market Values & Transfers

Scrape Transfermarkt players by name search, player links, club squads or whole leagues: market value (current, previous, highest), contract until, agency, position, foot, height, nationality, club, national team and full transfer history with fees. Error rows are free.

Pricing

from $1.19 / 1,000 player delivereds

Rating

0.0

(0)

Developer

Scrapewise Data

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Transfermarkt Scraper: players, market values, contracts, agencies and transfer history

Transfermarkt Scraper collects football player data from Transfermarkt without an account or cookies. Give it player names, player links, club links or whole competitions (Premier League, LaLiga, Serie A, Bundesliga, Ligue 1, MLS and any other league code) and each player comes back as one clean row: current, previous and highest market value with dates, contract until, last renewal, agency, position, preferred foot, height, nationalities, current club and league, shirt number, national team and the full transfer history with fees.

It is used by scouts and analysts to build player databases, by fantasy and betting tools to follow market values, by journalists to check transfer fees and contracts, and by data teams to feed dashboards and AI models with squad-level data for a whole league in one run.

At a glance

WhatPrice
Player deliveredUS$ 1.40 per 1,000 players (US$ 0.0014 each)
Run startUS$ 0.005 per run
  • A full Premier League (20 clubs, around 500 players) with transfer history = about US$ 0.71.
  • Error rows and duplicates are never charged. maxItems is a hard cap, and a spending limit set on the run stops it cleanly with everything delivered so far.
  • Transfer history and market value history are included in the same price per player.

Quick start

Search players by name:

{
"searchQueries": ["Wirtz", "Yamal"],
"maxItems": 20
}

Every player of a league, club by club:

{
"competitions": ["GB1", "ES1"],
"maxItems": 0
}

Specific players and squads from links:

{
"startUrls": [
"https://www.transfermarkt.com/florian-wirtz/profil/spieler/598577",
"https://www.transfermarkt.com/fc-barcelona/startseite/verein/131"
],
"includeMarketValueHistory": true
}

An empty input runs the example: the first 50 players of the Premier League.

Input

FieldTypeWhat it does
searchQuerieslist of textPlayer names (or club names with searchType: "clubs"), one search each
searchTypeplayers or clubsplayers delivers the matching players; clubs delivers the current squad of each matching club
competitionslist of codesTransfermarkt competition codes such as GB1, ES1, IT1, L1, FR1, NL1, PO1, BRA1, MLS1. Every club, then every player
startUrlslist of linksPlayer profile links, club links (/verein/<id>) or competition links (/wettbewerb/<code>), any Transfermarkt domain
includeTransferstrue/falseAdds the full transfer history of each player (default on)
includeMarketValueHistorytrue/falseAdds every market value update with date and club (default off)
maxItemsnumberHard cap of players for the whole run (default 50, 0 = no cap)
proxyConfigurationproxyApify datacenter proxy by default

The competition code is the last part of the competition link on Transfermarkt: for https://www.transfermarkt.com/premier-league/startseite/wettbewerb/GB1 the code is GB1.

Output

One row per player. Values are in EUR, as Transfermarkt publishes them.

FieldDescription
playerId, name, shortName, fullNameTransfermarkt id, display name, short name and full name
url, imageUrlProfile link and portrait image
age, dateOfBirth, placeOfBirth, countryOfBirthAge and birth details (left empty for players under 18)
isUnder18, dateOfDeathMinor flag and date of death for former players
nationalitiesOne or two nationalities
position, positionShort, positionGroupMain position (Centre-Forward, CF) and group
heightM, preferredFoot, outfitterHeight in metres, left/right/both, boot supplier
agency, agencyVerified, agencyUrlPlayer agency as published on Transfermarkt
clubId, clubName, clubCountry, clubLeagueId, clubUrlCurrent club and its league code
shirtNumber, isCaptain, joinedClub, clubDebutSquad details at the current club
contractUntil, lastContractRenewalContract end and last renewal date
formerClubsNoteYouth clubs noted by Transfermarkt
nationalTeam, nationalTeamDebutSenior or youth national team and debut
marketValue, marketValueCurrency, marketValueDateCurrent market value and when it was set
previousMarketValue, previousMarketValueDateThe value before the latest update
highestMarketValue, highestMarketValueDateCareer-high value
marketValueTrendincreased, decreased or unchanged at the last update
transfersList of moves: season, date, fromClub, toClub (with ids), fee, feeEur, transferType (transfer, loan, end of loan, free transfer), marketValueAtTransfer, upcoming, url
transferFeeTotalSum of the fees paid for the player, in EUR
marketValueHistoryWith includeMarketValueHistory: date, value, currency, clubId, club
sourceQuery, scrapedAtWhich input produced the row and when

Real row from a run on 21 Oct 2026 (transfer and value lists shortened):

{
"type": "player",
"playerId": "598577",
"name": "Florian Wirtz",
"url": "https://www.transfermarkt.com/florian-wirtz/profil/spieler/598577",
"age": 23,
"dateOfBirth": "2003-05-03",
"placeOfBirth": "Pulheim",
"countryOfBirth": "Germany",
"nationalities": ["Germany"],
"position": "Attacking Midfield",
"positionShort": "AM",
"heightM": 1.77,
"preferredFoot": "right",
"outfitter": "adidas",
"agency": "Relatives",
"agencyVerified": false,
"clubId": "31",
"clubName": "Liverpool FC",
"clubCountry": "England",
"clubLeagueId": "GB1",
"shirtNumber": 7,
"joinedClub": "2025-07-01",
"contractUntil": "2030-06-30",
"lastContractRenewal": null,
"nationalTeam": "Germany",
"nationalTeamDebut": "2021-09-02",
"marketValue": 85000000,
"marketValueCurrency": "EUR",
"marketValueDate": "2026-10-07",
"previousMarketValue": 100000000,
"highestMarketValue": 140000000,
"highestMarketValueDate": "2025-06-05",
"marketValueTrend": "decreased",
"transfers": [
{"season": "20/21", "date": "2020-07-01", "fromClub": "Leverkusen U19", "toClub": "Leverkusen", "fee": null,
"transferType": null, "upcoming": false}
],
"marketValueHistory": [
{"date": "2020-07-08", "value": 10000000, "currency": "EUR", "club": "Bayer 04 Leverkusen"}
],
"sourceQuery": "Florian Wirtz",
"scrapedAt": "2026-10-21T20:19:04Z"
}

A paid transfer looks like this (from the same row):

{"season": "25/26", "date": "2025-07-01", "fromClub": "Leverkusen", "toClub": "Liverpool", "fee": "€125.00m",
"feeEur": 125000000, "transferType": "transfer", "marketValueAtTransfer": 140000000}

Players under 18

Transfermarkt lists academy players too. For anyone under 18 the row keeps the football data (club, position, market value, transfers) but leaves age, dateOfBirth, fullName, placeOfBirth and countryOfBirth empty and sets isUnder18: true.

Errors you may see

Every error is a row with errorCode and is never charged:

errorCodeMeaning
INVALID_URLNot a Transfermarkt player, club or competition link
INVALID_INPUTA field has a wrong value (for example an unknown searchType)
NOT_FOUNDThe player, club or competition code does not exist on Transfermarkt
NO_RESULTSThe name search found nothing; check the spelling or try the last name only
BLOCKEDTransfermarkt refused every attempt for this input; run it again in a few minutes
UNEXPECTEDSomething else stopped the run; the message says what

Integrations, scheduling and AI agents

  • Schedule a league weekly in Apify schedules to follow market value updates, contract renewals and new transfers during the window.
  • Export as JSON, CSV, Excel or XML, or read the dataset from the Apify API.
  • Connect it to Make, n8n, Zapier or Google Sheets through Apify integrations.
  • AI agents: call it as a tool through the Apify MCP server in Claude, ChatGPT, Cursor or any MCP client, for example "list every LaLiga player whose contract ends in 2027 with a market value above 20 million".

FAQ

Do I need a Transfermarkt account? No. Everything comes from public pages.

How long does a full league take? A 20-club league with transfer history is around 500 players and takes a few minutes. Turn off includeTransfers for the fastest run.

Which competitions work? Any league or cup that has a /wettbewerb/<code> page on Transfermarkt. The squad is the club's current squad.

Can I get former players? Yes, by name search or profile link. Retired players show Retired as the club.

Why is agency empty for some players? Transfermarkt has no agency on file for them, or lists the player's relative instead of a company; the row only carries what the site publishes as the agency.

Is it legal? The Actor reads public pages only and returns no emails or phone numbers. You are responsible for how you use the data under the laws that apply to you.

Something broke or a field is missing? Open an issue on the Actor page; issues are answered within a day.

Limitations

  • Squads are the current ones; past seasons are not supported yet.
  • Match statistics (goals, minutes, cards) are not collected.
  • Market values are in EUR only, as Transfermarkt sets them.
  • Manager, referee and agent search results are not collected.

Changelog

  • 16 Oct 2026: first version: name search, player, club and competition links, competition codes, transfer history and market value history.