Transfermarkt Scraper — API, Market Values & Transfers | $1/1k avatar

Transfermarkt Scraper — API, Market Values & Transfers | $1/1k

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Transfermarkt Scraper — API, Market Values & Transfers | $1/1k

Transfermarkt Scraper — API, Market Values & Transfers | $1/1k

Scrape Transfermarkt player profiles with market value, value history and transfer history, plus club squads, league club lists, search and latest transfers. Players by id, URL or name; any season. No API key, no browser. Export JSON, CSV or Excel.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Raffy

Raffy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Get Transfermarkt football data as clean rows: player profiles with current market value, highest value, the full dated market-value history and the complete transfer history, plus club squads, league club lists, search results and the latest transfers. Paste player, club or league links (or just ids, codes or names), press start, and download JSON, CSV or Excel — or call it as a Transfermarkt API from your own code, a spreadsheet or an AI agent.

HTTP only, no browser. Runs are fast and cheap: the default run returns 5 full player profiles (with both histories) in well under a minute.

What does this Transfermarkt scraper do?

Each row is one player, one club or one transfer; the type column says which, so one dataset can mix them.

  • Full player profiles. Name, full name, position and secondary positions, date and place of birth, citizenships, height, preferred foot, shirt number, current club and league, joined date, contract expiry and last extension, loan details, agency (companies only), national team with caps and goals, and the portrait.
  • Market values. Current value in EUR with its date, the highest value ever with its date, and the market-value history: every dated valuation with the club and age at the time.
  • Transfer history. Every move with season, date, from/to club (names and ids), fee as a number and as shown ("loan transfer", "free transfer"), and the market value at the time.
  • Club squads. One club row (squad size, average age, foreigners, internationals, stadium and capacity, total market value, transfer balance) plus one row per player with age, citizenship, height, foot, joined date, signed-from club and fee, contract end and market value. Any season back to the club's first on Transfermarkt.
  • Leagues and competitions. Every club of a league (GB1, ES1, L1, IT1, FR1, CL ...) with squad size, average age, foreigners, average and total market value — optionally every club's full squad.
  • Search and latest transfers. Search players and clubs by name, and read Transfermarkt's latest-transfers list with both clubs, leagues and fees.
  • Every Transfermarkt country site. Links from transfermarkt.de, .co.uk, .us, .es, .it, .fr and the others work; everything is read from transfermarkt.com in English, so every column has one format.

Result status (tri-state output)

statusMeaningBilled
okThe player, club or transfer was extracted.Yes
not_foundTransfermarkt answered, but there is no such player id, club id or competition code, or the search found nothing.No
errorThe page could not be read after retries; error says why.No

Use cases for Transfermarkt data

  • Scouting and recruitment. Pull every squad of a league with full profiles, then filter by age, position, contract expiry and market value to build a shortlist.
  • Market-value analytics. Chart marketValueHistory for a set of players, compare value against age, or track which players gained the most since the last window.
  • Transfer research. Join transferHistory fees across players and clubs to study spending, resale value and loan patterns; follow the latest-transfers list during a window.
  • Fantasy football, betting models and apps. Keep a player database with clubs, positions, contracts and values in sync on a schedule.
  • Journalism and academic research. Reproducible datasets of squads and values per season, with stable Transfermarkt ids for joining.

What data you get

Every row

FieldDescription
typeplayer, club or transfer
sourceprofile (full player profile), squad, search, competition or latestTransfers
namePlayer or club name
urlTransfermarkt page of the player or club
status, errorTri-state status and the reason for non-ok rows
scrapedAtTime of extraction (ISO 8601)

Player rows (type: player)

FieldDescription
playerIdTransfermarkt player id
fullNameFull name / name in home country as published
position, positionGroup, otherPositionsMain position (e.g. Centre-Forward), group (Attack), secondary positions
dateOfBirth, ageYYYY-MM-DD and age
placeOfBirth, countryOfBirthBirth city and country as listed
citizenshipCitizenships (array)
heightCm, foot, shirtNumberHeight in cm, preferred foot, shirt number
currentClub, clubId, league, leagueCodeCurrent club and league
joinedOn, contractExpires, lastContractExtension, contractOptionContract dates
onLoanFrom, onLoanFromClubId, loanContractExpiresLoan details
agencyPlayer agency, only when it is a company
marketValue, marketValueCurrency, marketValueDateCurrent market value (EUR) and its date
highestMarketValue, highestMarketValueDateHighest value ever and its date
marketValueHistory[{date, value, currency, club, age}]
transferHistory[{season, date, fromClub, fromClubId, toClub, toClubId, fee, feeText, marketValue, upcoming}]
totalTransferFeesSum of all fees paid for the player (EUR)
nationalTeam, nationalTeamStatus, nationalTeamCaps, nationalTeamGoalsNational team (current or former), caps and goals
signedFrom, signedFromClubId, signingFeeSquad rows: previous club and fee
squadClub, squadClubId, seasonIdSquad rows: the squad (club and season) that listed the player; for past seasons currentClub is the player's club today
imageUrlPortrait

Full profiles (source: profile) carry every field Transfermarkt shows; squad and search rows carry what their tables show.

Club rows (type: club)

clubId, name, league, leagueCode, season, seasonId, squadSize, averageAge, foreigners, foreignersShare, nationalTeamPlayers, stadium, stadiumSeats, transferBalance, totalMarketValue, averageMarketValue (league tables), country (search), imageUrl.

Transfer rows (type: transfer)

playerId, name, position, age, citizenship, fromClub, fromClubId, fromLeague, fromLeagueCode, fromCountry, toClub, toClubId, toLeague, toLeagueCode, toCountry, fee, feeText, transferId.

How to scrape Transfermarkt

  1. Click Try for free and open the Input tab.
  2. Fill one or more of: Transfermarkt URLs, Players (ids, URLs or names), Clubs (ids or URLs), Leagues / competitions (codes such as GB1), Search, Latest transfers.
  3. Optional: pick a Season, switch Full profiles for squad and search players or Include club squads on, and set Maximum results.
  4. Click Start, then open the Output tab or export the dataset as JSON, CSV, Excel, XML or HTML.

To automate it, use the API tab (Node.js, Python, curl), add a Schedule, or connect Google Sheets, Slack, Zapier, Make or a webhook.

Transfermarkt API alternative

Transfermarkt has no public API. This Actor gives you one: send the input below to the Apify API and read the dataset. Player ids, club ids and competition codes are the same as in Transfermarkt's own links, so results join cleanly with other Transfermarkt-based data.

Input

FieldTypeDefaultDescription
startUrlsarray of strings5 player profilesAny Transfermarkt URLs: players, clubs, squads, competitions, search, latest transfers
playersarray of strings-Player ids (418560), profile URLs or names ("Lamine Yamal"; best match)
clubsarray of strings-Club ids (281) or URLs
competitionsarray of strings-Competition codes (GB1, ES1, L1, IT1, FR1, CL ...) or URLs
querystring-Search players and clubs by name
latestTransfersbooleanfalseRead the latest-transfers list
seasonintegercurrentSeason start year for clubs and competitions (2025 = 2025/26)
includeMarketValueHistorybooleantrueAdd the dated market-value history to full profiles
includeTransferHistorybooleantrueAdd the transfer history to full profiles
includePlayerProfilesbooleanfalseTurn squad and search players into full profiles
includeSquadsbooleanfalseFor competitions, also scrape every club's squad
maxItemsinteger20Stop after this many rows
proxyConfigurationobjectoffLeave off: the run's own IP is served reliably, while shared proxy IPs get firewall challenges. No residential proxy needed

Examples:

{ "players": ["Erling Haaland", "342229", "https://www.transfermarkt.de/lamine-yamal/profil/spieler/937958"] }
{ "clubs": ["281", "418"], "season": 2025, "maxItems": 60 }
{ "competitions": ["GB1", "ES1"], "includeSquads": true, "includePlayerProfiles": true, "maxItems": 1000 }

Output

You can download the dataset as JSON, CSV, Excel, XML or HTML. The first three rows are real rows from platform runs (Haaland's marketValueHistory trimmed from 28 to 3 entries and transferHistory from 5 to 2); the last row shows what an unknown player id returns:

[
{
"url": "https://www.transfermarkt.com/erling-haaland/profil/spieler/418560",
"status": "ok",
"scrapedAt": "2026-09-28T02:05:54.953Z",
"type": "player",
"source": "profile",
"playerId": "418560",
"name": "Erling Haaland",
"fullName": "Erling Braut Håland",
"position": "Centre-Forward",
"positionGroup": "Attack",
"dateOfBirth": "2000-07-21",
"age": 26,
"placeOfBirth": "Leeds",
"countryOfBirth": "England",
"citizenship": [
"Norway"
],
"heightCm": 195,
"foot": "left",
"shirtNumber": 9,
"currentClub": "Manchester City",
"clubId": "281",
"league": "Premier League",
"leagueCode": "GB1",
"joinedOn": "2022-07-01",
"contractExpires": "2034-06-30",
"lastContractExtension": "2025-01-17",
"marketValue": 220000000,
"marketValueCurrency": "EUR",
"marketValueDate": "2026-07-22",
"highestMarketValue": 220000000,
"highestMarketValueDate": "2026-07-22",
"nationalTeam": "Norway",
"nationalTeamStatus": "current",
"nationalTeamCaps": 57,
"nationalTeamGoals": 65,
"imageUrl": "https://img.a.transfermarkt.technology/portrait/big/418560-1788115885.jpg",
"marketValueHistory": [
{
"date": "2016-12-18",
"value": 200000,
"currency": "EUR",
"club": "Bryne FK",
"age": 16
},
{
"date": "2026-06-03",
"value": 200000000,
"currency": "EUR",
"club": "Manchester City",
"age": 25
},
{
"date": "2026-07-22",
"value": 220000000,
"currency": "EUR",
"club": "Manchester City",
"age": 26
}
],
"transferHistory": [
{
"season": "22/23",
"date": "2022-07-01",
"fromClub": "Dortmund",
"fromClubId": "16",
"toClub": "Man City",
"toClubId": "281",
"fee": 60000000,
"feeText": "€60.00m",
"marketValue": 150000000,
"upcoming": false
},
{
"season": "19/20",
"date": "2020-01-01",
"fromClub": "Salzburg",
"fromClubId": "409",
"toClub": "Dortmund",
"toClubId": "16",
"fee": 20000000,
"feeText": "€20.00m",
"marketValue": 45000000,
"upcoming": false
}
],
"totalTransferFees": 88100000
},
{
"url": "https://www.transfermarkt.com/fc-bayern-munchen/kader/verein/27/saison_id/2023/plus/1",
"status": "ok",
"scrapedAt": "2026-09-28T02:06:45.166Z",
"type": "club",
"source": "squad",
"clubId": "27",
"name": "Bayern Munich",
"league": "Bundesliga",
"leagueCode": "L1",
"season": "23/24",
"seasonId": 2023,
"squadSize": 23,
"averageAge": 27.4,
"foreigners": 12,
"foreignersShare": 52.2,
"nationalTeamPlayers": 21,
"stadium": "Allianz Arena",
"stadiumSeats": 75000,
"transferBalance": -55200000,
"totalMarketValue": 1040000000,
"marketValueCurrency": "EUR",
"imageUrl": "https://img.a.transfermarkt.technology/wappen/head/27.png"
},
{
"url": "https://www.transfermarkt.com/manuel-neuer/profil/spieler/17259",
"status": "ok",
"scrapedAt": "2026-09-28T02:06:45.207Z",
"type": "player",
"source": "squad",
"playerId": "17259",
"name": "Manuel Neuer",
"position": "Goalkeeper",
"dateOfBirth": "1986-03-27",
"age": 38,
"citizenship": [
"Germany"
],
"heightCm": 193,
"foot": "right",
"shirtNumber": 1,
"currentClub": "Bayern Munich",
"clubId": "27",
"joinedOn": "2011-07-01",
"signedFrom": "FC Schalke 04",
"signedFromClubId": "33",
"signingFee": 30000000,
"marketValue": 4000000,
"marketValueCurrency": "EUR",
"imageUrl": "https://img.a.transfermarkt.technology/portrait/medium/17259-1762943283.jpg",
"squadClub": "Bayern Munich",
"squadClubId": "27",
"seasonId": 2023
},
{
"url": "https://www.transfermarkt.com/ceapi/marketValueDevelopment/graph/99999999",
"status": "not_found",
"error": "HTTP 404: page does not exist",
"scrapedAt": "2026-09-28T02:04:11.912Z"
}
]

How much does it cost to scrape Transfermarkt?

Pay per event — platform usage (compute) is included, so these are the only charges:

EventPrice
Actor start$0.005 per run
Result (status: ok row)$0.001 per row

A full player profile with market-value history and transfer history is one result. 1,000 player profiles cost about $1.00 (plus $0.005 for the run); a 25-player squad with its club row costs $0.026. Rows with status not_found or error are never billed. Cap spending with Maximum results and the run's Max total charge option.

Tips

  • Put many players, clubs or leagues into one run: you pay the start fee once.
  • A league with Include club squads and Full profiles on is the quickest way to a complete player database (about 3 requests per player).
  • Switch off Transfer history if you only need values: it saves one request per player.
  • Use ids or codes when you have them; names go through Transfermarkt's search and pick the best match.

Limitations

  • Market values are Transfermarkt's own estimates (in EUR); they are estimates, not transfer fees or valuations by the clubs.
  • A name in Players takes the best search match — with common names, prefer the id or the profile URL.
  • The latest-transfers list is Transfermarkt's own page of 10 x 25 transfers; older transfers are in each player's transferHistory.
  • Transfermarkt may occasionally slow down very large runs; the Actor paces its requests, backs off and retries, and writes an error row (never billed) if a page still cannot be read. Keep Apify Proxy off: Transfermarkt's firewall challenges shared proxy IPs far more often than the run's own IP.
  • Individual agents' names, social-media links and family information are never written. For players under 18 the date and place of birth and the full name are left out.
  • Results reflect the public site at the time of the run; if Transfermarkt changes its layout, rows come back as error and the Actor is updated (report it in the Issues tab).

FAQ

Does Transfermarkt have a public API?

No. Transfermarkt does not offer a public API. This Actor reads the public website (logged out) and returns structured rows you can use like an API.

Can I get historical market values and past seasons?

Yes. marketValueHistory holds every dated valuation of a player, and Season gives club squads and league tables for past seasons.

Can I use it from an AI agent or MCP client?

Yes. Inputs are plain strings, and every row says what it is (type) and whether it is real data (status, error), so an agent can tell "no such player" apart from "could not read".

Why did I get fewer rows than Maximum results?

The clubs, leagues or searches had fewer entries, or the run hit your Max total charge. The run log says "Stopping gracefully" when a limit was reached.

This Actor reads only publicly available pages, without logging in. Footballers' professional data (clubs, positions, market values, transfers) is public sports information, but you are responsible for how you use it: read the notice below and Transfermarkt's terms of service.

This Actor extracts only data that Transfermarkt publishes publicly about professional football: clubs, squads, positions, contracts, market values and transfers. It does not log in or get around access controls, and it does not extract private contact data, social-media accounts, family information or individual agents' names; for players under 18 it leaves out the date and place of birth and the full name. Your results still contain personal data about public sports figures, which is protected by the GDPR in the European Union and by other laws. Use it only for a legitimate purpose and consult your lawyers if you are unsure. You are responsible for complying with Transfermarkt's terms of service and applicable law.

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Transfermarkt GmbH & Co. KG. All trademarks belong to their respective owners.