Transfermarkt Scraper — Player Market Values & Transfers avatar

Transfermarkt Scraper — Player Market Values & Transfers

Pricing

from $5.00 / 1,000 result scrapeds

Go to Apify Store
Transfermarkt Scraper — Player Market Values & Transfers

Transfermarkt Scraper — Player Market Values & Transfers

Scrape football player profiles, market values, transfer history, and career stats from Transfermarkt.de by player or club name. No login, uses the site's own public data endpoints.

Pricing

from $5.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Studio Amba

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Transfermarkt Scraper

Scrape football player profiles, current market values, full transfer history, and historical market value curves from Transfermarkt.de by searching a player name or passing direct profile URLs.

Why use this actor?

Transfermarkt is the reference database for football transfer values — agents, analysts, betting/fantasy tools, and sports media all pull from it manually today. This actor turns a player name (or a list of player URLs) into structured JSON: current club, market value, position, age, contract expiry, agent, and the player's entire transfer and market-value-over-time history in one call. No login, no scraping the page by hand.

How to scrape Transfermarkt data

  1. Set searchQuery to a player's name (e.g. "Erling Haaland"), or pass one or more player profile URLs in startUrls.
  2. Set maxResults to cap how many matching players get scraped.
  3. Run the actor. Each result is one player: current club and league, numeric market value in EUR, bio (age, nationality, height, foot, contract expiry, agent), full transfer history, and the full market value history curve.
  4. Export the dataset as JSON, CSV, or Excel from the Apify Console, or pull it via the API.

Search matches on player name in any language Transfermarkt indexes — partial names work too ("Bellingham" returns every Bellingham in the database, not just the famous one, so use a full name for a single exact match).

Input

FieldTypeRequiredDescription
searchQueryStringNoPlayer name to search for. Default: "Jude Bellingham" so {} input still returns data.
startUrlsArrayNoDirect Transfermarkt player profile URLs, used instead of or alongside a search query.
maxResultsIntegerNoMaximum number of players to return (default: 20, max: 500).
proxyConfigurationObjectNoApify proxy settings. Residential is the default; Transfermarkt has no bot-wall so datacenter proxies work fine too.

Output

Each result is one player:

FieldTypeExample
nameString"Jude Bellingham"
playerIdString"581678"
urlStringTransfermarkt profile URL
currentClubString"Real Madrid"
currentClubUrlStringClub page URL
leagueString"LaLiga"
marketValueNumber160000000 (EUR, numeric)
marketValueFormattedString"160,00 Mio. €"
marketValueLastUpdateString"22.07.2026"
positionString"Mittelfeld - Offensives Mittelfeld"
dateOfBirthString"2003-06-29" (ISO 8601)
ageNumber23
placeOfBirthString"Stourbridge"
nationalityArray["England", "Irland"]
heightNumber1.86 (metres)
footString"rechts"
joinedClubDateString"2023-07-01"
contractUntilString"2029-06-30"
agentString"Familienangehörige"
kitSupplierString"adidas"
transferHistoryArrayFull career transfer list (date, season, from/to club, fee, market value at transfer)
marketValueHistoryArrayFull market value curve (date, numeric EUR value, club, age at that point)
scrapedAtStringISO 8601 timestamp

Example output

Real output from a live run (searchQuery: "Jude Bellingham"):

{
"name": "Jude Bellingham",
"playerId": "581678",
"url": "https://www.transfermarkt.de/jude-bellingham/profil/spieler/581678",
"currentClub": "Real Madrid",
"currentClubUrl": "https://www.transfermarkt.de/real-madrid/startseite/verein/418",
"league": "LaLiga",
"marketValue": 160000000,
"marketValueCurrency": "EUR",
"marketValueFormatted": "160,00 Mio. €",
"marketValueLastUpdate": "22.07.2026",
"position": "Mittelfeld - Offensives Mittelfeld",
"dateOfBirth": "2003-06-29",
"age": 23,
"placeOfBirth": "Stourbridge",
"nationality": ["England", "Irland"],
"height": 1.86,
"foot": "rechts",
"joinedClubDate": "2023-07-01",
"contractUntil": "2029-06-30",
"agent": "Familienangehörige",
"kitSupplier": "adidas",
"transferHistory": [
{
"date": "2023-07-01",
"season": "23/24",
"fromClub": "Bor. Dortmund",
"toClub": "Real Madrid",
"fee": "127,00 Mio. €",
"marketValueAtTransfer": "120,00 Mio. €",
"upcoming": false
}
],
"marketValueHistory": [
{
"date": "2019-10-17",
"value": 2500000,
"club": "Birmingham City",
"age": "16"
}
],
"scrapedAt": "2026-07-31T09:12:27.470Z"
}

Cost estimate

This actor makes 1-3 lightweight HTTP requests per player (profile page + two small JSON API calls, run in parallel) — no browser rendering. At the PREMIUM pricing tier ($0.005 per result + $0.01 per run), scraping 1,000 players costs roughly $5.01 in platform fees plus your Apify compute usage, which is minimal since every request is plain HTTP/Cheerio.

Limitations

  • Data is scraped from the public Transfermarkt.de site and may change without notice if Transfermarkt changes its markup or its internal JSON API paths.
  • marketValue and transferHistory are empty for players who never had a market value assigned (common for amateur, youth, or semi-professional players who share a name with well-known pros — use a full name in searchQuery or a direct startUrls link for an exact match).
  • Squad/roster listing by club is not yet supported as a dedicated input mode in this version — club rosters are visible on Transfermarkt club pages and are a natural follow-up if there's demand; today the actor is player-search and player-URL driven.
  • Bio field labels are in German (Transfermarkt.de's native language) — values are copied as-is (e.g. foot: "rechts" means right-footed), since translating them risks losing precision on positions and roles.
  • Respect Transfermarkt's terms of service and use the data responsibly.

Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API — maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple sources into one feed.

See studioamba.dev/services or email hello@studioamba.dev for a free data sample. We maintain 300+ European web scrapers and answer within one business day.