Dataspryva

Transfermarkt Player Market Value & Transfer Scraper

Look up football players, clubs, and competitions on Transfermarkt. Get player market value history, transfer records, injury logs, club squads, and competition club lists by name or ID.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredChoose a player, club, competition, transfer or auto-detect mode.
querystringoptionalPlayer, club or competition name. Used by the three search modes. At least 2 characters.
playerIdsarrayoptionalTransfermarkt player IDs or profile URLs, one per line. Used by player and player-transfer modes.
Show all input fields
FieldTypeRequiredDescription
modestringrequiredChoose a player, club, competition, transfer or auto-detect mode.
querystringoptionalPlayer, club or competition name. Used by the three search modes. At least 2 characters.
playerIdsarrayoptionalTransfermarkt player IDs or profile URLs, one per line. Used by player and player-transfer modes.
clubIdsarrayoptionalTransfermarkt club IDs or URLs, one per line. Used by club and club-transfer modes.
competitionIdsarrayoptionalTransfermarkt competition codes (e.g. GB1, ES1) or URLs, one per line.
urlsarrayoptionalPlayer, club or competition URLs for auto-detect mode. Mixing page types is allowed.
seasonintegeroptionalClub and competition modes only. Use 2025 for 2025/26. Leave empty for the current season.
minMarketValueEurintegeroptionalOnly keep players whose current market value is at least this many euros.
nationalitystringoptionalOnly keep players whose nationality contains this text, e.g. Argentina or Brazil.
positionstringoptionalOnly keep players in this position.
includeMarketValueHistorybooleanoptionalAdd every valuation Transfermarkt has recorded for each player.
includeTransferHistorybooleanoptionalAdd each player's career transfers, including fees and clubs.
includeAbsencesbooleanoptionalAdd injuries, suspensions and national-team call-ups for each player.
includeAchievementsbooleanoptionalAdd trophies and awards for each player. Adds one request per player.
includeSquadbooleanoptionalAdd the current or selected-season squad to club records. byClubId also emits one player record per squad member.
includeCompetitionClubsbooleanoptionalAdd the club list and table positions to competition records.
maxItemsintegeroptionalStop after this many top-level records.

Download the published input schema

View complete JSON
{
  "description": "Fetch Transfermarkt player profiles, market-value timelines, transfer records, clubs and competitions by name, ID or URL.",
  "properties": {
    "clubIds": {
      "description": "Transfermarkt club IDs or URLs, one per line. Used by club and club-transfer modes.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "title": "Club IDs or URLs",
      "type": "array"
    },
    "competitionIds": {
      "description": "Transfermarkt competition codes (e.g. GB1, ES1) or URLs, one per line.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "title": "Competition codes or URLs",
      "type": "array"
    },
    "includeAbsences": {
      "default": true,
      "description": "Add injuries, suspensions and national-team call-ups for each player.",
      "prefill": false,
      "title": "Include absences",
      "type": "boolean"
    },
    "includeAchievements": {
      "default": false,
      "description": "Add trophies and awards for each player. Adds one request per player.",
      "prefill": false,
      "title": "Include achievements",
      "type": "boolean"
    },
    "includeCompetitionClubs": {
      "default": true,
      "description": "Add the club list and table positions to competition records.",
      "prefill": true,
      "title": "Include competition clubs",
      "type": "boolean"
    },
    "includeMarketValueHistory": {
      "default": true,
      "description": "Add every valuation Transfermarkt has recorded for each player.",
      "prefill": true,
      "title": "Include market-value history",
      "type": "boolean"
    },
    "includeSquad": {
      "default": true,
      "description": "Add the current or selected-season squad to club records. byClubId also emits one player record per squad member.",
      "prefill": true,
      "title": "Include club squads",
      "type": "boolean"
    },
    "includeTransferHistory": {
      "default": true,
      "description": "Add each player's career transfers, including fees and clubs.",
      "prefill": true,
      "title": "Include transfer history",
      "type": "boolean"
    },
    "maxItems": {
      "default": 50,
      "description": "Stop after this many top-level records.",
      "maximum": 1000,
      "minimum": 1,
      "prefill": 3,
      "title": "Maximum records",
      "type": "integer"
    },
    "minMarketValueEur": {
      "description": "Only keep players whose current market value is at least this many euros.",
      "maximum": 500000000,
      "minimum": 0,
      "title": "Minimum market value (EUR)",
      "type": "integer"
    },
    "mode": {
      "default": "searchPlayers",
      "description": "Choose a player, club, competition, transfer or auto-detect mode.",
      "editor": "select",
      "enum": [
        "searchPlayers",
        "byPlayerId",
        "transfersPlayer",
        "searchClubs",
        "byClubId",
        "transfersClub",
        "searchCompetitions",
        "byCompetitionId",
        "transfersCompetition",
        "byUrl"
      ],
      "enumTitles": [
        "Search players by name",
        "Player profiles by ID or URL",
        "Transfer records for players",
        "Search clubs by name",
        "Club profile and squad by ID or URL",
        "Transfer window for clubs",
        "Search competitions by name",
        "Clubs in a competition by ID or URL",
        "Transfer window for competitions",
        "Auto-detect from pasted URLs"
      ],
      "prefill": "searchPlayers",
      "title": "What to scrape",
      "type": "string"
    },
    "nationality": {
      "description": "Only keep players whose nationality contains this text, e.g. Argentina or Brazil.",
      "editor": "textfield",
      "title": "Nationality filter",
      "type": "string"
    },
    "playerIds": {
      "description": "Transfermarkt player IDs or profile URLs, one per line. Used by player and player-transfer modes.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "title": "Player IDs or URLs",
      "type": "array"
    },
    "position": {
      "default": "",
      "description": "Only keep players in this position.",
      "editor": "select",
      "enum": [
        "",
        "Goalkeeper",
        "Sweeper",
        "Centre-Back",
        "Left-Back",
        "Right-Back",
        "Defensive Midfield",
        "Central Midfield",
        "Right Midfield",
        "Left Midfield",
        "Attacking Midfield",
        "Left Winger",
        "Right Winger",
        "Second Striker",
        "Centre-Forward"
      ],
      "enumTitles": [
        "Any position",
        "Goalkeeper",
        "Sweeper",
        "Centre-Back",
        "Left-Back",
        "Right-Back",
        "Defensive Midfield",
        "Central Midfield",
        "Right Midfield",
        "Left Midfield",
        "Attacking Midfield",
        "Left Winger",
        "Right Winger",
        "Second Striker",
        "Centre-Forward"
      ],
      "prefill": "",
      "title": "Position filter",
      "type": "string"
    },
    "query": {
      "default": "Messi",
      "description": "Player, club or competition name. Used by the three search modes. At least 2 characters.",
      "editor": "textfield",
      "prefill": "Messi",
      "title": "Search query",
      "type": "string"
    },
    "season": {
      "description": "Club and competition modes only. Use 2025 for 2025/26. Leave empty for the current season.",
      "maximum": 2100,
      "minimum": 1990,
      "title": "Season start year",
      "type": "integer"
    },
    "urls": {
      "description": "Player, club or competition URLs for auto-detect mode. Mixing page types is allowed.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "title": "Transfermarkt URLs",
      "type": "array"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Transfermarkt Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
recordsstringoptionalDataset containing all scraped Transfermarkt records.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Transfermarkt player, club, competition and transfer records with market-value history, career transfers, squads and competition tables.",
  "properties": {
    "records": {
      "description": "Dataset containing all scraped Transfermarkt records.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Transfermarkt records",
      "type": "string"
    }
  },
  "title": "Transfermarkt Player Market Value & Transfer Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "clubs": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Clubs",
      "transformation": {
        "fields": [
          "name",
          "country",
          "league",
          "squadSize",
          "totalMarketValue",
          "stadiumName",
          "profileUrl"
        ]
      }
    },
    "competitions": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Competitions",
      "transformation": {
        "fields": [
          "name",
          "country",
          "currentSeasonId",
          "totalMarketValue",
          "competitionUrl"
        ]
      }
    },
    "overview": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Records",
      "transformation": {
        "fields": [
          "recordType",
          "name",
          "currentClub",
          "position",
          "marketValue",
          "nationality",
          "profileUrl"
        ]
      }
    },
    "players": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Players",
      "transformation": {
        "fields": [
          "name",
          "currentClub",
          "position",
          "age",
          "marketValue",
          "highestMarketValue",
          "profileUrl"
        ]
      }
    },
    "transfers": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Transfers",
      "transformation": {
        "fields": [
          "date",
          "playerName",
          "fromClub",
          "toClub",
          "fee",
          "transferType",
          "season"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Transfermarkt Player Market Value & Transfer Scraper

Transfermarkt is the reference source for football player valuations and transfer fees. This actor turns its public player, club and competition data into clean JSON records: current and peak market values, the full valuation timeline, career transfers, squad lists and club/competition transfer windows. Start from a name, a Transfermarkt ID or a pasted URL.

No login, API key or proxy is required.

What you can scrape

Mode What it returns Input
searchPlayers Player records for a name search query
byPlayerId One full player record per player playerIds
transfersPlayer One transfer row per career move playerIds
searchClubs Club records for a name search query
byClubId Club record plus its squad clubIds
transfersClub Arrivals, departures and pending moves clubIds, optional season
searchCompetitions Competition records for a name search query
byCompetitionId Club records for every team in a competition competitionIds, optional season
transfersCompetition Every transfer in a competition competitionIds, optional season
byUrl Auto-detects player, club and competition URLs urls

playerIds, clubIds and competitionIds accept either bare IDs/codes or full Transfermarkt URLs (including regional domains and profile, squad or transfers pages). byUrl accepts a mixed list of page types.

Player records

Each player record includes:

  • playerId, name, fullName, shortName
  • dateOfBirth, age, placeOfBirth, countryOfBirth
  • nationality (array), nationalityIds
  • position, subPosition, positionGroup
  • height, heightMeters, foot
  • currentClub, currentClubId, currentClubUrl, currentClubCrestUrl
  • joinedCurrentClub, contractExpires, contractOption
  • shirtNumber, isCaptain, status
  • agentName, agentId, agentVerified, outfitter
  • marketValue, marketValueNumeric, marketValueCurrency, marketValueDate
  • previousMarketValue, previousMarketValueNumeric
  • highestMarketValue, highestMarketValueNumeric, highestMarketValueDate
  • marketValueHistory - array of {date, seasonId, season, club, clubId, clubUrl, age, value, valueNumeric, currency, formattedValue}
  • transfers - array of {date, season, fromClub, fromClubId, toClub, toClubId, fee, feeNumeric, feeCurrency, transferType, feeDescription, marketValue, marketValueNumeric, age, isPending, transferUrl}
  • transferFeeSum, transferFeeSumNumeric
  • absences - injuries, suspensions and national-team call-ups
  • injuries - the injury/illness subset, in the legacy {date, injury, absence} shape
  • achievements - trophies and awards
  • profileUrl, imageUrl, siteName, recordType, scrapedAt

Club, competition and transfer records

Club records include identity, country, league, squad size, average age, foreigners, squad market value, stadium, address, squad and table position where available.

Competition records include country, confederation, current season, total market value and the club list with rank, points and goal difference.

Transfer records include the player, date, season, from/to club and competition IDs, fee text and EUR integer, transfer type, fee description, market value at the time, pending flag and direction (arrival/departure) for club windows.

Input

Field Type Default Notes
mode select searchPlayers One of the 10 modes above
query string Messi Search modes; at least 2 characters
playerIds string array - Player IDs or URLs
clubIds string array - Club IDs or URLs
competitionIds string array - Competition codes or URLs
urls string array - Mixed player/club/competition URLs for byUrl
season integer — Season start year, e.g. 2025 for 2025/26; club/competition modes. Leave empty for the current season
minMarketValueEur integer - Keep players at or above this current value
nationality string - Case-insensitive substring filter
position select Any Exact position filter
includeMarketValueHistory boolean true Add the valuation timeline
includeTransferHistory boolean true Add career transfers
includeAbsences boolean true Add injuries/suspensions/call-ups
includeAchievements boolean false Add trophies and awards
includeSquad boolean true Add squads to club records; byClubId also emits player records
includeCompetitionClubs boolean true Add clubs and table rows to competition records
maxItems integer 50 1-1,000 top-level records

Example: three players by name

{
  "mode": "searchPlayers",
  "query": "Messi",
  "maxItems": 3
}

Example: one player with everything

{
  "mode": "byPlayerId",
  "playerIds": ["28003"],
  "includeAbsences": true,
  "includeAchievements": true
}

Example: a club transfer window

{
  "mode": "transfersClub",
  "clubIds": ["https://www.transfermarkt.com/manchester-city/startseite/verein/281"],
  "season": 2025,
  "maxItems": 100
}

Example: auto-detect mixed URLs

{
  "mode": "byUrl",
  "urls": [
    "https://www.transfermarkt.com/erling-haaland/profil/spieler/418560",
    "https://www.transfermarkt.com/premier-league/startseite/wettbewerb/GB1"
  ],
  "maxItems": 5
}

Output example (trimmed)

{
  "recordType": "player",
  "playerId": "28003",
  "name": "Lionel Messi",
  "fullName": "Lionel Andrés Messi Cuccitini",
  "age": 39,
  "nationality": ["Argentina", "Spain"],
  "position": "Right Winger",
  "currentClub": "Inter Miami CF",
  "currentClubId": "69261",
  "marketValue": "€15.00m",
  "marketValueNumeric": 15000000,
  "highestMarketValue": "€180.00m",
  "highestMarketValueNumeric": 180000000,
  "marketValueHistory": [
    {
      "date": "2026-06-02",
      "seasonId": 2025,
      "club": "Inter Miami CF",
      "age": 38,
      "value": 15000000,
      "formattedValue": "€15.00m"
    }
  ],
  "transfers": [
    {
      "date": "2023-07-15",
      "season": "23/24",
      "fromClub": "Paris Saint-Germain",
      "toClub": "Inter Miami CF",
      "fee": "Free Transfer"
    }
  ],
  "profileUrl": "https://www.transfermarkt.com/lionel-messi/profil/spieler/28003",
  "siteName": "Transfermarkt",
  "scrapedAt": "2026-10-27T00:00:00+00:00"
}

FAQ

Do I need a Transfermarkt account, API key or proxy? No. The actor uses Transfermarkt's public football data without credentials and chooses its own transport automatically.

Where do I find a player, club or competition ID? The ID is the number in a Transfermarkt URL (/profil/spieler/28003, /verein/281) or the code in a competition URL (/wettbewerb/GB1). You can paste the whole URL instead.

Why is a transfer fee missing? Transfermarkt only publishes a fee for some moves. Free transfers, loans and undisclosed deals keep their text label, while feeNumeric is omitted. Pending moves can have no fee yet.

What does season mean? It is the season start year: 2025 means 2025/26. It applies to club squads, club transfer windows, competition tables and competition transfer windows. Player career transfers always cover the full career.

Why are some market values or club names missing? A player may have no current club, a valuation may not have been published yet, or a historical club may be recorded as "without club". Empty fields are omitted rather than sent as null.

Does byClubId return more than one record? Yes. It returns the club record first, then one player record per squad member, matching the previous behavior. Set maxItems to cap the total.

Can I scrape several players, clubs or competitions at once? Yes. Use the ID/URL arrays, or byUrl with a mixed list.

Are achievements and absences included by default? Absences are on by default. Achievements are off because they add one request per player. Both can be toggled.

How fresh is the data? Every run asks Transfermarkt live, so market values, squads and transfer records reflect the site at run time.

Limitations

  • Transfermarkt does not publish a fee for every transfer; the actor never invents one.
  • Pending transfers may have no fee or market value yet.
  • Absence records mix injuries, suspensions and national-team call-ups; use isInjury, isSuspension and isCallUp to separate them.
  • Output is English. Regional Transfermarkt mirrors are accepted as input URLs, but labels are not localized.
  • Profile, club and competition URLs are canonical Transfermarkt pages; the site may challenge direct browserless requests, while image URLs load publicly.
  • Player season statistics and global ranking/transfer-record lists are not part of this actor.
  • Search needs at least two characters.

This actor is not affiliated with Transfermarkt. Use the data responsibly and respect the source's terms.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build h4HGY7uTguKzaddA5. Documentation is regenerated from the default published build; private drafts are not included.