Transfermarkt APItransfermarkt.de ↗
Access Transfermarkt data via API: player profiles, market values, transfer histories, club squads, and competition penalty stats across top European leagues.
What is the Transfermarkt API?
This API exposes 6 endpoints covering Transfermarkt's football data, including player market values, full transfer histories, and club squad rosters. The get_player_profile endpoint returns fields like marketValueDetails, contractUntil, preferredFoot, and clubAssignments for any player by numeric ID. The get_competition_penalty_takers endpoint adds per-player penalty scoring rates across major European competitions including the Premier League, Bundesliga, Serie A, and La Liga.
curl -X GET 'https://api.parse.bot/scraper/f9c987bb-681c-471d-a7f7-342ac6c0016b/search?query=Messi' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace transfermarkt-de-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.transfermarkt_api import Transfermarkt, CompetitionId, Search, Player, Club
transfermarkt = Transfermarkt()
# Search for players and clubs
results = transfermarkt.searches.find(query="Haaland")
for player in results.players:
print(player.name, player.id)
for club in results.clubs:
print(club.name, club.id)
# Get detailed profile for a player found in search
first_player = results.players[0]
profile = first_player.details()
print(profile.name, profile.life_dates.age)
print(profile.attributes.position.name)
print(profile.market_value_details.current.value, profile.market_value_details.current.currency)
# Get transfer history for that player
history = profile.transfers()
for transfer in history.terminated:
print(transfer.id, transfer.details.date, transfer.transfer_source.club_id)
# Get trending players
for player in transfermarkt.players.most_viewed():
print(player.name, player.life_dates.date_of_birth, player.attributes.height)
# Get a club's squad using constructible Club
bayern = transfermarkt.club(id="27")
for squad_player in bayern.squad(season="2024"):
print(squad_player.name, squad_player.position, squad_player.market_value)
# Get penalty takers for Serie A using the enum
for taker in transfermarkt.penaltytakers.list(competition_id=CompetitionId.SERIE_A):
print(taker.player_name, taker.club_name, taker.scored, taker.success_rate)
Search for players and clubs by name on Transfermarkt. Returns matching players (with Transfermarkt IDs and names) and clubs (with IDs and names). Results are ranked by relevance. Use player IDs with get_player_profile or get_player_transfers; use club IDs with get_club_squad.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword — a player name or club name to search for. |
{
"type": "object",
"fields": {
"clubs": "array of club search result objects each with name (string) and id (string)",
"players": "array of player search result objects each with name (string) and id (string)"
},
"sample": {
"data": {
"clubs": [
{
"id": "1104",
"name": "ACR Messina"
}
],
"players": [
{
"id": "28003",
"name": "Lionel Messi"
}
]
},
"status": "success"
}
}About the Transfermarkt API
Player Profiles and Market Values
The get_player_profile endpoint accepts a player_id string (e.g. '28003' for Messi) and returns a single player object. Key fields include marketValueDetails (current, previous, and highest recorded market values), attributes (height, position, preferredFoot, contractUntil), lifeDates (age and ISO date of birth), and clubAssignments (an array of objects with clubId, assignment type, and shirt number). The search endpoint lets you resolve player and club names to their Transfermarkt numeric IDs before calling profile or squad endpoints.
Transfer Histories and Squad Data
The get_player_transfers endpoint returns a player's complete transfer record. The history object contains terminated (completed) and pending transfer arrays, each entry including source and destination club IDs, competition context, and fee data. A mostRecentTransfer field is surfaced separately for quick access. The get_club_squad endpoint takes a club_id and an optional season (start year, e.g. '2024' for 2024/25) and returns each squad member's id, name, shirt number, position, age, nationality array, and market_value.
Competition and Trending Data
The get_competition_penalty_takers endpoint accepts competition IDs such as 'GB1' (Premier League), 'L1' (Bundesliga), 'IT1' (Serie A), or 'ES1' (La Liga) and returns per-player penalty statistics grouped by club — including penalties, scored, missed, and success_rate. Note that field values are in German locale format. The get_most_viewed_players endpoint requires no parameters and returns a snapshot of the top 10 currently trending players on Transfermarkt with full profile detail.
The Transfermarkt API is a managed, monitored endpoint for transfermarkt.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when transfermarkt.de changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official transfermarkt.de API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track a player's market value history over time using
marketValueDetailsfromget_player_profile - Build a transfer rumor monitor by polling
get_player_transfersfor changes inmostRecentTransfer - Assemble full squad rosters with ages and market values for any club and season via
get_club_squad - Compare penalty conversion rates across clubs in the Bundesliga or Premier League using
get_competition_penalty_takers - Resolve club and player names to Transfermarkt IDs in bulk using the
searchendpoint - Surface trending players for a football news or fantasy sports feed with
get_most_viewed_players - Cross-reference contract expiry dates (
contractUntil) with transfer windows to flag players approaching free agency
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Transfermarkt have an official developer API?+
What does `get_player_transfers` return beyond basic transfer records?+
history object split into terminated (completed) and pending sub-arrays, each entry including club IDs on both sides, competition context, and the transfer fee. A mostRecentTransfer object is also returned separately, and clubIds provides a deduplicated array of all clubs involved across the player's career.Does the API cover youth, reserve, or women's football competitions?+
get_competition_penalty_takers endpoint currently supports a specific set of top-tier European leagues identified by IDs like 'GB1', 'L1', 'IT1', and 'ES1'. Youth, reserve, and women's competitions are not currently exposed. You can fork this API on Parse and revise it to add endpoints targeting other competition IDs available on Transfermarkt.Can I retrieve historical squad data for past seasons?+
get_club_squad endpoint accepts an optional season parameter as a 4-digit start year (e.g. '2021' for the 2021/22 season). Omitting it returns the current season's squad.