{
  "data": {
    "id": "h4HGY7uTguKzaddA5",
    "actId": "uDm2vSfKpT4iHtZSa",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-27T06:48:57.559Z",
    "finishedAt": "2026-10-27T06:49:01.244Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 3582,
      "runTimeSecs": 3.582,
      "computeUnits": 0.00398,
      "imageSizeBytes": 320043520
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Transfermarkt Scraper Input\",\n  \"description\": \"Fetch Transfermarkt player profiles, market-value timelines, transfer records, clubs and competitions by name, ID or URL.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"What to scrape\",\n      \"type\": \"string\",\n      \"description\": \"Choose a player, club, competition, transfer or auto-detect mode.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"searchPlayers\",\n        \"byPlayerId\",\n        \"transfersPlayer\",\n        \"searchClubs\",\n        \"byClubId\",\n        \"transfersClub\",\n        \"searchCompetitions\",\n        \"byCompetitionId\",\n        \"transfersCompetition\",\n        \"byUrl\"\n      ],\n      \"enumTitles\": [\n        \"Search players by name\",\n        \"Player profiles by ID or URL\",\n        \"Transfer records for players\",\n        \"Search clubs by name\",\n        \"Club profile and squad by ID or URL\",\n        \"Transfer window for clubs\",\n        \"Search competitions by name\",\n        \"Clubs in a competition by ID or URL\",\n        \"Transfer window for competitions\",\n        \"Auto-detect from pasted URLs\"\n      ],\n      \"default\": \"searchPlayers\",\n      \"prefill\": \"searchPlayers\"\n    },\n    \"query\": {\n      \"title\": \"Search query\",\n      \"type\": \"string\",\n      \"description\": \"Player, club or competition name. Used by the three search modes. At least 2 characters.\",\n      \"editor\": \"textfield\",\n      \"default\": \"Messi\",\n      \"prefill\": \"Messi\"\n    },\n    \"playerIds\": {\n      \"title\": \"Player IDs or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Transfermarkt player IDs or profile URLs, one per line. Used by player and player-transfer modes.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"clubIds\": {\n      \"title\": \"Club IDs or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Transfermarkt club IDs or URLs, one per line. Used by club and club-transfer modes.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"competitionIds\": {\n      \"title\": \"Competition codes or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Transfermarkt competition codes (e.g. GB1, ES1) or URLs, one per line.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"urls\": {\n      \"title\": \"Transfermarkt URLs\",\n      \"type\": \"array\",\n      \"description\": \"Player, club or competition URLs for auto-detect mode. Mixing page types is allowed.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"season\": {\n      \"title\": \"Season start year\",\n      \"type\": \"integer\",\n      \"description\": \"Club and competition modes only. Use 2025 for 2025/26. Leave empty for the current season.\",\n      \"minimum\": 1990,\n      \"maximum\": 2100\n    },\n    \"minMarketValueEur\": {\n      \"title\": \"Minimum market value (EUR)\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep players whose current market value is at least this many euros.\",\n      \"minimum\": 0,\n      \"maximum\": 500000000\n    },\n    \"nationality\": {\n      \"title\": \"Nationality filter\",\n      \"type\": \"string\",\n      \"description\": \"Only keep players whose nationality contains this text, e.g. Argentina or Brazil.\",\n      \"editor\": \"textfield\"\n    },\n    \"position\": {\n      \"title\": \"Position filter\",\n      \"type\": \"string\",\n      \"description\": \"Only keep players in this position.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"Goalkeeper\",\n        \"Sweeper\",\n        \"Centre-Back\",\n        \"Left-Back\",\n        \"Right-Back\",\n        \"Defensive Midfield\",\n        \"Central Midfield\",\n        \"Right Midfield\",\n        \"Left Midfield\",\n        \"Attacking Midfield\",\n        \"Left Winger\",\n        \"Right Winger\",\n        \"Second Striker\",\n        \"Centre-Forward\"\n      ],\n      \"enumTitles\": [\n        \"Any position\",\n        \"Goalkeeper\",\n        \"Sweeper\",\n        \"Centre-Back\",\n        \"Left-Back\",\n        \"Right-Back\",\n        \"Defensive Midfield\",\n        \"Central Midfield\",\n        \"Right Midfield\",\n        \"Left Midfield\",\n        \"Attacking Midfield\",\n        \"Left Winger\",\n        \"Right Winger\",\n        \"Second Striker\",\n        \"Centre-Forward\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"includeMarketValueHistory\": {\n      \"title\": \"Include market-value history\",\n      \"type\": \"boolean\",\n      \"description\": \"Add every valuation Transfermarkt has recorded for each player.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeTransferHistory\": {\n      \"title\": \"Include transfer history\",\n      \"type\": \"boolean\",\n      \"description\": \"Add each player's career transfers, including fees and clubs.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeAbsences\": {\n      \"title\": \"Include absences\",\n      \"type\": \"boolean\",\n      \"description\": \"Add injuries, suspensions and national-team call-ups for each player.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeAchievements\": {\n      \"title\": \"Include achievements\",\n      \"type\": \"boolean\",\n      \"description\": \"Add trophies and awards for each player. Adds one request per player.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeSquad\": {\n      \"title\": \"Include club squads\",\n      \"type\": \"boolean\",\n      \"description\": \"Add the current or selected-season squad to club records. byClubId also emits one player record per squad member.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeCompetitionClubs\": {\n      \"title\": \"Include competition clubs\",\n      \"type\": \"boolean\",\n      \"description\": \"Add the club list and table positions to competition records.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum records\",\n      \"type\": \"integer\",\n      \"description\": \"Stop after this many top-level records.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 50,\n      \"prefill\": 3\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Transfermarkt Player Market Value & Transfer Scraper\n\nTransfermarkt 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.\n\nNo login, API key or proxy is required.\n\n## What you can scrape\n\n| Mode | What it returns | Input |\n|---|---|---|\n| `searchPlayers` | Player records for a name search | `query` |\n| `byPlayerId` | One full player record per player | `playerIds` |\n| `transfersPlayer` | One transfer row per career move | `playerIds` |\n| `searchClubs` | Club records for a name search | `query` |\n| `byClubId` | Club record plus its squad | `clubIds` |\n| `transfersClub` | Arrivals, departures and pending moves | `clubIds`, optional `season` |\n| `searchCompetitions` | Competition records for a name search | `query` |\n| `byCompetitionId` | Club records for every team in a competition | `competitionIds`, optional `season` |\n| `transfersCompetition` | Every transfer in a competition | `competitionIds`, optional `season` |\n| `byUrl` | Auto-detects player, club and competition URLs | `urls` |\n\n`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.\n\n## Player records\n\nEach player record includes:\n\n- `playerId`, `name`, `fullName`, `shortName`\n- `dateOfBirth`, `age`, `placeOfBirth`, `countryOfBirth`\n- `nationality` (array), `nationalityIds`\n- `position`, `subPosition`, `positionGroup`\n- `height`, `heightMeters`, `foot`\n- `currentClub`, `currentClubId`, `currentClubUrl`, `currentClubCrestUrl`\n- `joinedCurrentClub`, `contractExpires`, `contractOption`\n- `shirtNumber`, `isCaptain`, `status`\n- `agentName`, `agentId`, `agentVerified`, `outfitter`\n- `marketValue`, `marketValueNumeric`, `marketValueCurrency`, `marketValueDate`\n- `previousMarketValue`, `previousMarketValueNumeric`\n- `highestMarketValue`, `highestMarketValueNumeric`, `highestMarketValueDate`\n- `marketValueHistory` - array of `{date, seasonId, season, club, clubId, clubUrl, age, value, valueNumeric, currency, formattedValue}`\n- `transfers` - array of `{date, season, fromClub, fromClubId, toClub, toClubId, fee, feeNumeric, feeCurrency, transferType, feeDescription, marketValue, marketValueNumeric, age, isPending, transferUrl}`\n- `transferFeeSum`, `transferFeeSumNumeric`\n- `absences` - injuries, suspensions and national-team call-ups\n- `injuries` - the injury/illness subset, in the legacy `{date, injury, absence}` shape\n- `achievements` - trophies and awards\n- `profileUrl`, `imageUrl`, `siteName`, `recordType`, `scrapedAt`\n\n## Club, competition and transfer records\n\nClub records include identity, country, league, squad size, average age, foreigners, squad market value, stadium, address, squad and table position where available.\n\nCompetition records include country, confederation, current season, total market value and the club list with rank, points and goal difference.\n\nTransfer 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.\n\n## Input\n\n| Field | Type | Default | Notes |\n|---|---|---|---|\n| `mode` | select | `searchPlayers` | One of the 10 modes above |\n| `query` | string | `Messi` | Search modes; at least 2 characters |\n| `playerIds` | string array | - | Player IDs or URLs |\n| `clubIds` | string array | - | Club IDs or URLs |\n| `competitionIds` | string array | - | Competition codes or URLs |\n| `urls` | string array | - | Mixed player/club/competition URLs for `byUrl` |\n| `season` | integer | — | Season start year, e.g. `2025` for 2025/26; club/competition modes. Leave empty for the current season |\n| `minMarketValueEur` | integer | - | Keep players at or above this current value |\n| `nationality` | string | - | Case-insensitive substring filter |\n| `position` | select | Any | Exact position filter |\n| `includeMarketValueHistory` | boolean | `true` | Add the valuation timeline |\n| `includeTransferHistory` | boolean | `true` | Add career transfers |\n| `includeAbsences` | boolean | `true` | Add injuries/suspensions/call-ups |\n| `includeAchievements` | boolean | `false` | Add trophies and awards |\n| `includeSquad` | boolean | `true` | Add squads to club records; `byClubId` also emits player records |\n| `includeCompetitionClubs` | boolean | `true` | Add clubs and table rows to competition records |\n| `maxItems` | integer | `50` | 1-1,000 top-level records |\n\n### Example: three players by name\n\n```json\n{\n  \"mode\": \"searchPlayers\",\n  \"query\": \"Messi\",\n  \"maxItems\": 3\n}\n```\n\n### Example: one player with everything\n\n```json\n{\n  \"mode\": \"byPlayerId\",\n  \"playerIds\": [\"28003\"],\n  \"includeAbsences\": true,\n  \"includeAchievements\": true\n}\n```\n\n### Example: a club transfer window\n\n```json\n{\n  \"mode\": \"transfersClub\",\n  \"clubIds\": [\"https://www.transfermarkt.com/manchester-city/startseite/verein/281\"],\n  \"season\": 2025,\n  \"maxItems\": 100\n}\n```\n\n### Example: auto-detect mixed URLs\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"urls\": [\n    \"https://www.transfermarkt.com/erling-haaland/profil/spieler/418560\",\n    \"https://www.transfermarkt.com/premier-league/startseite/wettbewerb/GB1\"\n  ],\n  \"maxItems\": 5\n}\n```\n\n## Output example (trimmed)\n\n```json\n{\n  \"recordType\": \"player\",\n  \"playerId\": \"28003\",\n  \"name\": \"Lionel Messi\",\n  \"fullName\": \"Lionel Andrés Messi Cuccitini\",\n  \"age\": 39,\n  \"nationality\": [\"Argentina\", \"Spain\"],\n  \"position\": \"Right Winger\",\n  \"currentClub\": \"Inter Miami CF\",\n  \"currentClubId\": \"69261\",\n  \"marketValue\": \"€15.00m\",\n  \"marketValueNumeric\": 15000000,\n  \"highestMarketValue\": \"€180.00m\",\n  \"highestMarketValueNumeric\": 180000000,\n  \"marketValueHistory\": [\n    {\n      \"date\": \"2026-06-02\",\n      \"seasonId\": 2025,\n      \"club\": \"Inter Miami CF\",\n      \"age\": 38,\n      \"value\": 15000000,\n      \"formattedValue\": \"€15.00m\"\n    }\n  ],\n  \"transfers\": [\n    {\n      \"date\": \"2023-07-15\",\n      \"season\": \"23/24\",\n      \"fromClub\": \"Paris Saint-Germain\",\n      \"toClub\": \"Inter Miami CF\",\n      \"fee\": \"Free Transfer\"\n    }\n  ],\n  \"profileUrl\": \"https://www.transfermarkt.com/lionel-messi/profil/spieler/28003\",\n  \"siteName\": \"Transfermarkt\",\n  \"scrapedAt\": \"2026-10-27T00:00:00+00:00\"\n}\n```\n\n## FAQ\n\n**Do I need a Transfermarkt account, API key or proxy?**\nNo. The actor uses Transfermarkt's public football data without credentials and chooses its own transport automatically.\n\n**Where do I find a player, club or competition ID?**\nThe 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.\n\n**Why is a transfer fee missing?**\nTransfermarkt 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.\n\n**What does `season` mean?**\nIt 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.\n\n**Why are some market values or club names missing?**\nA 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.\n\n**Does `byClubId` return more than one record?**\nYes. It returns the club record first, then one player record per squad member, matching the previous behavior. Set `maxItems` to cap the total.\n\n**Can I scrape several players, clubs or competitions at once?**\nYes. Use the ID/URL arrays, or `byUrl` with a mixed list.\n\n**Are achievements and absences included by default?**\nAbsences are on by default. Achievements are off because they add one request per player. Both can be toggled.\n\n**How fresh is the data?**\nEvery run asks Transfermarkt live, so market values, squads and transfer records reflect the site at run time.\n\n## Limitations\n\n- Transfermarkt does not publish a fee for every transfer; the actor never invents one.\n- Pending transfers may have no fee or market value yet.\n- Absence records mix injuries, suspensions and national-team call-ups; use `isInjury`, `isSuspension` and `isCallUp` to separate them.\n- Output is English. Regional Transfermarkt mirrors are accepted as input URLs, but labels are not localized.\n- Profile, club and competition URLs are canonical Transfermarkt pages; the site may challenge direct browserless requests, while image URLs load publicly.\n- Player season statistics and global ranking/transfer-record lists are not part of this actor.\n- Search needs at least two characters.\n\nThis actor is not affiliated with Transfermarkt. Use the data responsibly and respect the source's terms.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "transfermarkt-player-market-value-and-transfer",
      "title": "Transfermarkt Player Market Value & Transfer Scraper",
      "description": "Scrape Transfermarkt player profiles, full market-value timelines, career transfers, club squads and club/competition transfer windows by name, ID or URL. No proxy or API key.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Transfermarkt Player Market Value & Transfer Scraper\n\nTransfermarkt 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.\n\nNo login, API key or proxy is required.\n\n## What you can scrape\n\n| Mode | What it returns | Input |\n|---|---|---|\n| `searchPlayers` | Player records for a name search | `query` |\n| `byPlayerId` | One full player record per player | `playerIds` |\n| `transfersPlayer` | One transfer row per career move | `playerIds` |\n| `searchClubs` | Club records for a name search | `query` |\n| `byClubId` | Club record plus its squad | `clubIds` |\n| `transfersClub` | Arrivals, departures and pending moves | `clubIds`, optional `season` |\n| `searchCompetitions` | Competition records for a name search | `query` |\n| `byCompetitionId` | Club records for every team in a competition | `competitionIds`, optional `season` |\n| `transfersCompetition` | Every transfer in a competition | `competitionIds`, optional `season` |\n| `byUrl` | Auto-detects player, club and competition URLs | `urls` |\n\n`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.\n\n## Player records\n\nEach player record includes:\n\n- `playerId`, `name`, `fullName`, `shortName`\n- `dateOfBirth`, `age`, `placeOfBirth`, `countryOfBirth`\n- `nationality` (array), `nationalityIds`\n- `position`, `subPosition`, `positionGroup`\n- `height`, `heightMeters`, `foot`\n- `currentClub`, `currentClubId`, `currentClubUrl`, `currentClubCrestUrl`\n- `joinedCurrentClub`, `contractExpires`, `contractOption`\n- `shirtNumber`, `isCaptain`, `status`\n- `agentName`, `agentId`, `agentVerified`, `outfitter`\n- `marketValue`, `marketValueNumeric`, `marketValueCurrency`, `marketValueDate`\n- `previousMarketValue`, `previousMarketValueNumeric`\n- `highestMarketValue`, `highestMarketValueNumeric`, `highestMarketValueDate`\n- `marketValueHistory` - array of `{date, seasonId, season, club, clubId, clubUrl, age, value, valueNumeric, currency, formattedValue}`\n- `transfers` - array of `{date, season, fromClub, fromClubId, toClub, toClubId, fee, feeNumeric, feeCurrency, transferType, feeDescription, marketValue, marketValueNumeric, age, isPending, transferUrl}`\n- `transferFeeSum`, `transferFeeSumNumeric`\n- `absences` - injuries, suspensions and national-team call-ups\n- `injuries` - the injury/illness subset, in the legacy `{date, injury, absence}` shape\n- `achievements` - trophies and awards\n- `profileUrl`, `imageUrl`, `siteName`, `recordType`, `scrapedAt`\n\n## Club, competition and transfer records\n\nClub records include identity, country, league, squad size, average age, foreigners, squad market value, stadium, address, squad and table position where available.\n\nCompetition records include country, confederation, current season, total market value and the club list with rank, points and goal difference.\n\nTransfer 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.\n\n## Input\n\n| Field | Type | Default | Notes |\n|---|---|---|---|\n| `mode` | select | `searchPlayers` | One of the 10 modes above |\n| `query` | string | `Messi` | Search modes; at least 2 characters |\n| `playerIds` | string array | - | Player IDs or URLs |\n| `clubIds` | string array | - | Club IDs or URLs |\n| `competitionIds` | string array | - | Competition codes or URLs |\n| `urls` | string array | - | Mixed player/club/competition URLs for `byUrl` |\n| `season` | integer | — | Season start year, e.g. `2025` for 2025/26; club/competition modes. Leave empty for the current season |\n| `minMarketValueEur` | integer | - | Keep players at or above this current value |\n| `nationality` | string | - | Case-insensitive substring filter |\n| `position` | select | Any | Exact position filter |\n| `includeMarketValueHistory` | boolean | `true` | Add the valuation timeline |\n| `includeTransferHistory` | boolean | `true` | Add career transfers |\n| `includeAbsences` | boolean | `true` | Add injuries/suspensions/call-ups |\n| `includeAchievements` | boolean | `false` | Add trophies and awards |\n| `includeSquad` | boolean | `true` | Add squads to club records; `byClubId` also emits player records |\n| `includeCompetitionClubs` | boolean | `true` | Add clubs and table rows to competition records |\n| `maxItems` | integer | `50` | 1-1,000 top-level records |\n\n### Example: three players by name\n\n```json\n{\n  \"mode\": \"searchPlayers\",\n  \"query\": \"Messi\",\n  \"maxItems\": 3\n}\n```\n\n### Example: one player with everything\n\n```json\n{\n  \"mode\": \"byPlayerId\",\n  \"playerIds\": [\"28003\"],\n  \"includeAbsences\": true,\n  \"includeAchievements\": true\n}\n```\n\n### Example: a club transfer window\n\n```json\n{\n  \"mode\": \"transfersClub\",\n  \"clubIds\": [\"https://www.transfermarkt.com/manchester-city/startseite/verein/281\"],\n  \"season\": 2025,\n  \"maxItems\": 100\n}\n```\n\n### Example: auto-detect mixed URLs\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"urls\": [\n    \"https://www.transfermarkt.com/erling-haaland/profil/spieler/418560\",\n    \"https://www.transfermarkt.com/premier-league/startseite/wettbewerb/GB1\"\n  ],\n  \"maxItems\": 5\n}\n```\n\n## Output example (trimmed)\n\n```json\n{\n  \"recordType\": \"player\",\n  \"playerId\": \"28003\",\n  \"name\": \"Lionel Messi\",\n  \"fullName\": \"Lionel Andrés Messi Cuccitini\",\n  \"age\": 39,\n  \"nationality\": [\"Argentina\", \"Spain\"],\n  \"position\": \"Right Winger\",\n  \"currentClub\": \"Inter Miami CF\",\n  \"currentClubId\": \"69261\",\n  \"marketValue\": \"€15.00m\",\n  \"marketValueNumeric\": 15000000,\n  \"highestMarketValue\": \"€180.00m\",\n  \"highestMarketValueNumeric\": 180000000,\n  \"marketValueHistory\": [\n    {\n      \"date\": \"2026-06-02\",\n      \"seasonId\": 2025,\n      \"club\": \"Inter Miami CF\",\n      \"age\": 38,\n      \"value\": 15000000,\n      \"formattedValue\": \"€15.00m\"\n    }\n  ],\n  \"transfers\": [\n    {\n      \"date\": \"2023-07-15\",\n      \"season\": \"23/24\",\n      \"fromClub\": \"Paris Saint-Germain\",\n      \"toClub\": \"Inter Miami CF\",\n      \"fee\": \"Free Transfer\"\n    }\n  ],\n  \"profileUrl\": \"https://www.transfermarkt.com/lionel-messi/profil/spieler/28003\",\n  \"siteName\": \"Transfermarkt\",\n  \"scrapedAt\": \"2026-10-27T00:00:00+00:00\"\n}\n```\n\n## FAQ\n\n**Do I need a Transfermarkt account, API key or proxy?**\nNo. The actor uses Transfermarkt's public football data without credentials and chooses its own transport automatically.\n\n**Where do I find a player, club or competition ID?**\nThe 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.\n\n**Why is a transfer fee missing?**\nTransfermarkt 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.\n\n**What does `season` mean?**\nIt 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.\n\n**Why are some market values or club names missing?**\nA 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.\n\n**Does `byClubId` return more than one record?**\nYes. It returns the club record first, then one player record per squad member, matching the previous behavior. Set `maxItems` to cap the total.\n\n**Can I scrape several players, clubs or competitions at once?**\nYes. Use the ID/URL arrays, or `byUrl` with a mixed list.\n\n**Are achievements and absences included by default?**\nAbsences are on by default. Achievements are off because they add one request per player. Both can be toggled.\n\n**How fresh is the data?**\nEvery run asks Transfermarkt live, so market values, squads and transfer records reflect the site at run time.\n\n## Limitations\n\n- Transfermarkt does not publish a fee for every transfer; the actor never invents one.\n- Pending transfers may have no fee or market value yet.\n- Absence records mix injuries, suspensions and national-team call-ups; use `isInjury`, `isSuspension` and `isCallUp` to separate them.\n- Output is English. Regional Transfermarkt mirrors are accepted as input URLs, but labels are not localized.\n- Profile, club and competition URLs are canonical Transfermarkt pages; the site may challenge direct browserless requests, while image URLs load publicly.\n- Player season statistics and global ranking/transfer-record lists are not part of this actor.\n- Search needs at least two characters.\n\nThis actor is not affiliated with Transfermarkt. Use the data responsibly and respect the source's terms.\n",
      "input": {
        "title": "Transfermarkt Scraper Input",
        "description": "Fetch Transfermarkt player profiles, market-value timelines, transfer records, clubs and competitions by name, ID or URL.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "What to scrape",
            "type": "string",
            "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"
            ],
            "default": "searchPlayers",
            "prefill": "searchPlayers"
          },
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "Player, club or competition name. Used by the three search modes. At least 2 characters.",
            "editor": "textfield",
            "default": "Messi",
            "prefill": "Messi"
          },
          "playerIds": {
            "title": "Player IDs or URLs",
            "type": "array",
            "description": "Transfermarkt player IDs or profile URLs, one per line. Used by player and player-transfer modes.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "clubIds": {
            "title": "Club IDs or URLs",
            "type": "array",
            "description": "Transfermarkt club IDs or URLs, one per line. Used by club and club-transfer modes.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "competitionIds": {
            "title": "Competition codes or URLs",
            "type": "array",
            "description": "Transfermarkt competition codes (e.g. GB1, ES1) or URLs, one per line.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "Transfermarkt URLs",
            "type": "array",
            "description": "Player, club or competition URLs for auto-detect mode. Mixing page types is allowed.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "season": {
            "title": "Season start year",
            "type": "integer",
            "description": "Club and competition modes only. Use 2025 for 2025/26. Leave empty for the current season.",
            "minimum": 1990,
            "maximum": 2100
          },
          "minMarketValueEur": {
            "title": "Minimum market value (EUR)",
            "type": "integer",
            "description": "Only keep players whose current market value is at least this many euros.",
            "minimum": 0,
            "maximum": 500000000
          },
          "nationality": {
            "title": "Nationality filter",
            "type": "string",
            "description": "Only keep players whose nationality contains this text, e.g. Argentina or Brazil.",
            "editor": "textfield"
          },
          "position": {
            "title": "Position filter",
            "type": "string",
            "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"
            ],
            "default": "",
            "prefill": ""
          },
          "includeMarketValueHistory": {
            "title": "Include market-value history",
            "type": "boolean",
            "description": "Add every valuation Transfermarkt has recorded for each player.",
            "default": true,
            "prefill": true
          },
          "includeTransferHistory": {
            "title": "Include transfer history",
            "type": "boolean",
            "description": "Add each player's career transfers, including fees and clubs.",
            "default": true,
            "prefill": true
          },
          "includeAbsences": {
            "title": "Include absences",
            "type": "boolean",
            "description": "Add injuries, suspensions and national-team call-ups for each player.",
            "default": true,
            "prefill": false
          },
          "includeAchievements": {
            "title": "Include achievements",
            "type": "boolean",
            "description": "Add trophies and awards for each player. Adds one request per player.",
            "default": false,
            "prefill": false
          },
          "includeSquad": {
            "title": "Include club squads",
            "type": "boolean",
            "description": "Add the current or selected-season squad to club records. byClubId also emits one player record per squad member.",
            "default": true,
            "prefill": true
          },
          "includeCompetitionClubs": {
            "title": "Include competition clubs",
            "type": "boolean",
            "description": "Add the club list and table positions to competition records.",
            "default": true,
            "prefill": true
          },
          "maxItems": {
            "title": "Maximum records",
            "type": "integer",
            "description": "Stop after this many top-level records.",
            "minimum": 1,
            "maximum": 1000,
            "default": 50,
            "prefill": 3
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Transfermarkt Player Market Value & Transfer Scraper Output",
        "description": "Transfermarkt player, club, competition and transfer records with market-value history, career transfers, squads and competition tables.",
        "properties": {
          "records": {
            "type": "string",
            "title": "Transfermarkt records",
            "description": "Dataset containing all scraped Transfermarkt records.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Records",
              "transformation": {
                "fields": [
                  "recordType",
                  "name",
                  "currentClub",
                  "position",
                  "marketValue",
                  "nationality",
                  "profileUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            },
            "players": {
              "title": "Players",
              "transformation": {
                "fields": [
                  "name",
                  "currentClub",
                  "position",
                  "age",
                  "marketValue",
                  "highestMarketValue",
                  "profileUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            },
            "clubs": {
              "title": "Clubs",
              "transformation": {
                "fields": [
                  "name",
                  "country",
                  "league",
                  "squadSize",
                  "totalMarketValue",
                  "stadiumName",
                  "profileUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            },
            "competitions": {
              "title": "Competitions",
              "transformation": {
                "fields": [
                  "name",
                  "country",
                  "currentSeasonId",
                  "totalMarketValue",
                  "competitionUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            },
            "transfers": {
              "title": "Transfers",
              "transformation": {
                "fields": [
                  "date",
                  "playerName",
                  "fromClub",
                  "toClub",
                  "fee",
                  "transferType",
                  "season"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultMemoryMbytes": 1024
    },
    "buildNumber": "1.0.2",
    "imageDigest": "ab277290d00423cbfb1104f777a56c09c2c48eae150b4b8a9fc66c12974afa85",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.00398
    }
  }
}