Transfermarkt Player Market Value & Transfers Scraper
Pricing
from $6.15 / 1,000 results
Transfermarkt Player Market Value & Transfers Scraper
Scrape football player profiles, market values, market value history, transfer history and club squads. Get player name, position, age, nationality, current club, contract expiry and fees. Export to JSON, CSV or Excel.
Pricing
from $6.15 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
Transfermarkt Player Market Value & Transfers Scraper
Here is one real result, with every field the actor returns (the marketValueHistory array is trimmed to 3 of 28 real entries for readability; all other values are exactly as returned, including the aiSummary from the paid AI add-on):
{"imageUrl": "https://img.a.transfermarkt.technology/portrait/big/418560-1709108116.png?lm=4711","name": "Erling Haaland","playerId": "418560","url": "https://www.transfermarkt.com/erling-haaland/profil/spieler/418560","shirtNumber": "9","position": "Attack - Centre-Forward","dateOfBirth": "21/07/2000","age": 26,"placeOfBirth": "Leeds","height": "1,95 m","nationality": ["Norway"],"foot": "left","currentClub": "Manchester City","joined": "01/07/2022","contractExpires": "30/06/2034","lastContractExtension": "17/01/2025","outfitter": "Nike","agent": "Rafaela Pimenta","agentUrl": "https://www.transfermarkt.com/rafaela-pimenta/beraterfirma/berater/282","socialMedia": ["http://twitter.com/ErlingHaaland","http://www.facebook.com/profile.php?id=100052762394674","http://instagram.com/erling/"],"fullName": "Erling Braut Håland","marketValue": "€220.00m","marketValueEur": 220000000,"marketValueHistory": [{ "date": "18/12/2016", "timestamp": "2016-12-17", "value": "€200k", "valueEur": 200000, "club": "Bryne FK", "age": "16" },{ "date": "10/09/2018", "timestamp": "2018-09-09", "value": "€2.00m", "valueEur": 2000000, "club": "Molde FK", "age": "18" },{ "date": "11/02/2020", "timestamp": "2020-02-10", "value": "€60.00m", "valueEur": 60000000, "club": "Borussia Dortmund", "age": "19" }],"transfers": [{ "date": "2022-07-01", "season": "22/23", "fromClub": "Dortmund", "toClub": "Man City", "marketValue": "€150.00m", "marketValueEur": 150000000, "fee": "€60.00m", "upcoming": false },{ "date": "2020-01-01", "season": "19/20", "fromClub": "Salzburg", "toClub": "Dortmund", "marketValue": "€45.00m", "marketValueEur": 45000000, "fee": "€20.00m", "upcoming": false },{ "date": "2019-01-01", "season": "18/19", "fromClub": "Molde FK", "toClub": "Salzburg", "marketValue": "€5.00m", "marketValueEur": 5000000, "fee": "€8.00m", "upcoming": false },{ "date": "2017-02-01", "season": "16/17", "fromClub": "Bryne", "toClub": "Molde FK", "marketValue": "€200k", "marketValueEur": 200000, "fee": "€100k", "upcoming": false },{ "date": "2015-09-08", "season": "15/16", "fromClub": "Bryne FK Yth.", "toClub": "Bryne", "marketValue": "-", "marketValueEur": null, "fee": "-", "upcoming": false }],"aiSummary": "Erling Braut Håland is a 26-year-old centre-forward currently playing for Manchester City, where he joined on July 1, 2022, with a contract running until June 30, 2034. His market value is €220.00 million, and he has notable transfer history including a move to Manchester City for €60.00 million in 2022.","observedAt": "2026-08-14T06:35:41.000Z","error": null}
The most complete Transfermarkt player scraper available. It returns every profile field the site exposes for each player, plus the full market value history and complete transfer history, and gives you three modes (search by name, player URL, or club squad) to target exactly the players you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor collects football player data from Transfermarkt in one of three modes. In search mode it looks up players by name; in player mode it loads specific player profile URLs; in club mode it loads every player in a squad URL. With withDetails on (the default), each player is enriched into a full profile: shirt number, position, date and place of birth, height, nationality, foot, current club, contract dates, agent, outfitter, social media, full name, current market value, the complete market value history, and the complete transfer history with fees.
Missing source values are returned as null; nothing is invented. An optional paid AI add-on writes a short scouting/transfer note per player, built only from the scraped facts.
Quickstart
Open the actor, paste this into the input, and press Run. It loads the two named player profiles with full details.
{"mode": "player","playerUrls": ["https://www.transfermarkt.com/lionel-messi/profil/spieler/28003","https://www.transfermarkt.com/erling-haaland/profil/spieler/418560"],"maxPlayers": 2,"withDetails": true}
To search by name instead, set mode to search and pass a query such as Haaland. To load a squad, set mode to club and pass clubUrls.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
mode | enum | no | search | search (players by name), player (profiles by URL), or club (squad by URL). |
query | string | no | Messi | Search mode only. A player name to look up, for example Haaland, Vinicius. |
playerUrls | string[] | no | (Messi) | Player mode only. Transfermarkt player profile URLs (.../profil/spieler/ID). |
clubUrls | string[] | no | (FC Barcelona) | Club mode only. Transfermarkt club squad URLs (.../kader/verein/ID). |
withDetails | boolean | no | true | Enrich each player with the full profile, market value history and transfer history. Ignored in player mode, which is always detailed. |
maxPlayers | integer | no | 10 | Maximum players to collect. Free plans are capped at 10. |
withAiSummary | boolean | no | false | Paid add-on (paid plans only). Writes a 2-3 sentence scouting/transfer note per player from the scraped facts. Billed only when a summary is produced. |
Output reference
One dataset item per player. Types: string, integer, number, boolean, string[], object[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
imageUrl | string | Player portrait URL. |
name | string | Player display name. |
playerId | string | Transfermarkt player id. |
url | string | Player profile URL. |
shirtNumber | string | Current shirt number. |
position | string | Playing position, for example Attack - Centre-Forward. |
dateOfBirth | string | Date of birth (DD/MM/YYYY). |
age | integer | Age in years. |
placeOfBirth | string | Place of birth. |
height | string | Height as shown, for example 1,95 m. |
nationality | string[] | Nationalities. |
foot | string | Preferred foot. |
currentClub | string | Current club. |
joined | string | Date the player joined the current club. |
contractExpires | string | Contract expiry date. |
lastContractExtension | string | Date of last contract extension, or null. |
outfitter | string | Kit/boot outfitter, or null. |
agent | string | Player agent, or null. |
agentUrl | string | Agent profile URL, or null. |
socialMedia | string[] | Social media links. |
fullName | string | Full legal name. |
marketValue | string | Current market value as shown, for example €220.00m. |
marketValueEur | integer | Current market value in euros. |
marketValueHistory | object[] | Full value history: date, timestamp, value, valueEur, club, age. |
transfers | object[] | Full transfer history: date, season, fromClub, toClub, marketValue, marketValueEur, fee, upcoming. |
aiSummary | string | Paid AI add-on note, or null when the add-on is off. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed player fetch, an item with a populated error field is written and not charged. |
Example output record
Real record from a live run (input {"mode":"player","playerUrls":[...],"maxPlayers":2,"withDetails":true}). Summary shown with history arrays omitted for brevity:
{"name": "Erling Haaland","playerId": "418560","url": "https://www.transfermarkt.com/erling-haaland/profil/spieler/418560","position": "Attack - Centre-Forward","age": 26,"nationality": ["Norway"],"foot": "left","currentClub": "Manchester City","joined": "01/07/2022","contractExpires": "30/06/2034","agent": "Rafaela Pimenta","fullName": "Erling Braut Håland","marketValue": "€220.00m","marketValueEur": 220000000,"observedAt": "2026-08-14T06:35:41.000Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~transfermarkt-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"mode":"search","query":"Haaland","maxPlayers":10}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~transfermarkt-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"mode":"club","clubUrls":["https://www.transfermarkt.com/fc-barcelona/kader/verein/131"],"maxPlayers":30}'
Apify CLI:
apify call scrapers_lat/transfermarkt-scraper \--input '{"mode":"player","playerUrls":["https://www.transfermarkt.com/erling-haaland/profil/spieler/418560"]}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per player returned (
resultevent). See the pricing tab for the current per-result price. - Details add-on. When a full profile is fetched (search/club with
withDetails, or any player-mode row), an additivedetailscharge is applied on top of the base result. It is never charged if the profile fetch fails. - AI summary add-on.
withAiSummaryruns on paid plans only and is billed per player only when a summary is produced. - No charge on failure. If a player fetch errors, the actor writes an item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 players per run and cannot use the AI add-on. Upgrade for higher
maxPlayersand AI notes.
FAQ and troubleshooting
A run returned 0 records. Why?
The search name matched no players, or the URLs were invalid. Check the mode matches the field you filled (search uses query, player uses playerUrls, club uses clubUrls). Zero-result runs are not charged.
What is the difference between the three modes?
search finds players by name, player loads exact profile URLs, and club loads every player in a squad URL. Player mode is always fully detailed.
Do I get the full market value and transfer history?
Yes, when withDetails is on (and always in player mode). Both marketValueHistory and transfers are complete arrays.
Why are some fee or marketValue values a single hyphen?
Transfermarkt uses - for youth/free moves with no reported fee or value. The actor preserves the source value.
Is this an official Transfermarkt tool? No. This actor is independent and has no affiliation with Transfermarkt. It reads only data that is publicly visible on the site. All trademarks belong to their owners.
Related scrapers
- Trustpilot Scraper: company reviews and ratings.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Transfermarkt. Accesses only publicly available player and club data. All trademarks belong to their owners.
