Transfermarkt Player Values & Transfers avatar

Transfermarkt Player Values & Transfers

Pricing

from $1.81 / 1,000 results

Go to Apify Store
Transfermarkt Player Values & Transfers

Transfermarkt Player Values & Transfers

Football player market values, squads, club valuations and transfers from Transfermarkt. Modes for player, club squad, league clubs and transfer windows, with optional market value history.

Pricing

from $1.81 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Master

Scraper Master

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

Turn public Transfermarkt pages into clean, structured rows: player profiles with current and peak market value, full club squads, league club tables, and transfer lists with parsed fees.

The Actor only reads public pages (no login), runs with low concurrency, waits a small random time between requests, retries politely on 429 and 5xx responses, and stops at your maxItems.

Modes

Pick one with the mode input.

1. player

One row per player. Accepts profile URLs or bare numeric IDs. Set includeMarketValueHistory to add the full value timeline.

{
"mode": "player",
"playerUrls": ["https://www.transfermarkt.com/erling-haaland/profil/spieler/418560", "3333"],
"includeMarketValueHistory": true,
"maxItems": 10
}

2. club-squad

One row per squad member of each club for a season. season is the year the season starts (2025 = 2025/26).

{ "mode": "club-squad", "clubUrls": ["https://www.transfermarkt.com/manchester-city/startseite/verein/281", "11"], "season": 2025, "maxItems": 60 }

3. competition-clubs

One row per club in a league table of clubs: squad size, average age, total market value.

{ "mode": "competition-clubs", "competitionIds": ["GB1", "ES1", "L1", "IT1", "FR1"], "season": 2025, "maxItems": 100 }

4. transfers

One row per transfer. Use competitionIds (all clubs of a league, filtered by window) or clubUrls (one club, whole season).

{ "mode": "transfers", "competitionIds": ["GB1"], "season": 2025, "window": "summer", "includeLoans": true, "maxItems": 200 }

Output fields

FieldModesDescription
playerId, nameplayer, club-squadTransfermarkt ID and display name
shirtNumber, positionplayer, club-squadSquad number (when shown) and playing position
dateOfBirth, ageplayer, club-squadISO date and age at scrape time
placeOfBirth, countryOfBirthplayerBirthplace
citizenshipplayer, club-squadArray of countries
heightCm, footplayer, club-squadHeight in centimetres, preferred foot
currentClub, clubIdplayer, club-squadClub the player belongs to now
joinedDateplayer, club-squadISO date the player joined the club
contractExpires, agentplayerISO date and agent name, if listed
marketValueEur, marketValueTextplayer, club-squadCurrent value as a number and as displayed
highestMarketValueEur, highestMarketValueDateplayerCareer peak value and when it was set
marketValueHistoryplayer (optional)Array of {date, valueEur, club}
signedFrom, squadClub, squadClubId, seasonclub-squadPrevious club and the squad the row came from
competitionId, clubId, name, squadSize, avgAge, foreigners, avgMarketValueEur, totalMarketValueEurcompetition-clubsLeague club table
playerName, direction, fromClub(Id), toClub(Id), feeText, feeEur, loan, date, windowtransfersTransfer details; feeEur is 0 for free transfers and null when unknown
profileUrl, scrapedAtall player rowsSource link and ISO timestamp

Failed pages produce a row such as {"error": true, "mode": "...", "url": "...", "errorMessage": "..."} instead of stopping the run. Error rows are not counted against maxItems.

Notes and limitations

  • Values are what the site shows, in euros. Amounts like €1.39bn, €220.00m and €500k are converted to plain numbers.
  • Squad pages list each player's current club, so a past-season squad can contain players who have since moved on.
  • Transfer lists on the site carry no exact date for most moves; date is filled only when the page shows one (for example the end date of a loan).
  • Club-based transfers cannot be split by window and always cover the whole season (window is "all" in the output).
  • contractExpires and agent are only collected in player mode (they are not on squad pages).
  • Retired players or players without a club have empty club and value fields.
  • Page layouts can change; if a selector stops matching you get an error row rather than wrong data.
  • Respect the site's terms and applicable law when using the data.

Pay-per-event

Each result row is charged with the result-item event through the Apify SDK, and the run stops once your maximum charge is reached. Error rows are free.

Local run

npm install
mkdir -p storage/key_value_stores/default
echo '{"mode":"player","maxItems":1}' > storage/key_value_stores/default/INPUT.json
APIFY_LOCAL_STORAGE_DIR=./storage node src/main.js