# Transfermarkt API

> Transfermarkt returns football player values, transfers, and club squads as a workflow and API.

Transfermarkt (TM) returns player values and transfers; Get player value needs a player name, with club optional to distinguish players. Get club squad returns a club’s players and market values; it needs a club and can use a season.

- Page: https://fous.com/tools/transfermarkt
- Handle: `@transfermarkt`
- Category: [Sports](https://fous.com/tools/category/sports)
- Source website: https://transfermarkt.com
- Last verified: Sep 29, 2026

## Methods

### Get club squad

Operation `get_club_squad`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get a football club’s squad and player market values, sorted highest first. Past-season pages may omit contracts and show current values and league; past squad totals and average ages are calculated from listed players.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `club` | string | yes | `"Arsenal"` | Club name, Transfermarkt club link, or club ID; for example Arsenal. |
| `season` | string | no | `"2025/26"` | Season start year or full season; for example 2025 or 2025/26. Defaults to the current season. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "club"
  ],
  "properties": {
    "club": {
      "type": "string",
      "description": "Club name, Transfermarkt club link, or club ID; for example Arsenal.",
      "examples": [
        "Arsenal",
        "Liverpool"
      ]
    },
    "season": {
      "type": "string",
      "default": "",
      "description": "Season start year or full season; for example 2025 or 2025/26. Defaults to the current season.",
      "examples": [
        "2025/26"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "club": "Arsenal",
      "season": "2025/26"
    },
    {
      "club": "Arsenal"
    },
    {
      "club": "Liverpool"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `club` | string | `"Arsenal FC"` |  |
| `league` | string or null | `"Premier League"` |  |
| `season` | string | `"2025/26"` |  |
| `club_id` | string | `"11"` |  |
| `players` | array |  |  |
| `players[].age` | integer or null | `27` |  |
| `players[].name` | string | `"Declan Rice"` |  |
| `players[].position` | string or null | `"Central Midfield"` |  |
| `players[].player_id` | string | `"357662"` |  |
| `players[].nationality` | string or null | `"England, Ireland"` |  |
| `players[].player_link` | string | `"https://www.transfermarkt.com/declan-rice/profil/spieler/357662"` |  |
| `players[].market_value` | integer or null | `120000000` | Value in euros. |
| `players[].shirt_number` | integer or null | `41` |  |
| `players[].contract_end_date` | string or null | `"2028-06-30"` |  |
| `currency` | string | `"EUR"` |  |
| `club_link` | string | `"https://www.transfermarkt.com/fc-arsenal/startseite/verein/11"` |  |
| `total_squad_value` | integer or null | `1326125000` | Squad value in euros. |
| `average_player_age` | number or null | `23.4` |  |

**Example input**

```json
{
  "club": "Arsenal",
  "season": "2025/26"
}
```

**Example output**

```json
{
  "club": "Arsenal FC",
  "league": "Premier League",
  "season": "2025/26",
  "club_id": "11",
  "players": [
    {
      "age": 27,
      "name": "Declan Rice",
      "position": "Central Midfield",
      "player_id": "357662",
      "nationality": "England, Ireland",
      "player_link": "https://www.transfermarkt.com/declan-rice/profil/spieler/357662",
      "market_value": 120000000,
      "shirt_number": 41,
      "contract_end_date": null
    },
    {
      "age": 24,
      "name": "Bukayo Saka",
      "position": "Right Winger",
      "player_id": "433177",
      "nationality": "England, Nigeria",
      "player_link": "https://www.transfermarkt.com/bukayo-saka/profil/spieler/433177",
      "market_value": 110000000,
      "shirt_number": 7,
      "contract_end_date": null
    },
    {
      "age": 25,
      "name": "William Saliba",
      "position": "Centre-Back",
      "player_id": "495666",
      "nationality": "France, Cameroon",
      "player_link": "https://www.transfermarkt.com/william-saliba/profil/spieler/495666",
      "market_value": 100000000,
      "shirt_number": 2,
      "contract_end_date": null
    }
  ],
  "currency": "EUR",
  "club_link": "https://www.transfermarkt.com/fc-arsenal/startseite/verein/11",
  "total_squad_value": 1326125000,
  "average_player_age": 23.4
}
```

### Get player value

Operation `get_player_value`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get a football player’s market values, value history and transfers by name. Use a club to select among players with the same name. Amounts are in EUR; undisclosed fees have no numeric amount.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `club` | string | no | `"CF Montréal"` | Current club to distinguish players, for example Real Madrid. |
| `player` | string | yes | `"Alexis Sanchez"` | Football player name, for example Jude Bellingham. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "player"
  ],
  "properties": {
    "club": {
      "type": "string",
      "default": "",
      "description": "Current club to distinguish players, for example Real Madrid.",
      "examples": [
        "CF Montréal",
        "Real Madrid"
      ]
    },
    "player": {
      "type": "string",
      "description": "Football player name, for example Jude Bellingham.",
      "examples": [
        "Alexis Sanchez",
        "Jude Bellingham"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "club": "CF Montréal",
      "player": "Alexis Sanchez"
    },
    {
      "club": "Real Madrid",
      "player": "Jude Bellingham"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `age` | integer or null | `37` | Age in years. |
| `link` | string | `"https://www.transfermarkt.com/alexis-sanchez/profil/spieler/40433"` | Transfermarkt player page link. |
| `name` | string | `"Alexis Sánchez"` | Player name. |
| `currency` | string | `"EUR"` | Currency for all values and fees (EUR). |
| `position` | string or null | `"Second Striker"` | Playing position. |
| `photo_url` | string or null | `"https://img.a.transfermarkt.technology/portrait/big/40433-1759840737.jpg?lm=4711"` | Player photo image link. |
| `player_id` | string | `"40433"` | Transfermarkt player ID. |
| `transfers` | array |  | Transfers, newest first. |
| `transfers[].fee` | number or null | `127000000` | Fee in euros, if numeric. |
| `transfers[].date` | string or null | `"2026-08-11"` | Transfer date (YYYY-MM-DD). |
| `transfers[].link` | string or null | `"https://www.transfermarkt.com/alexis-sanchez/transfers/spieler/40433/transfer_id/6495807"` | Transfer page link. |
| `transfers[].season` | string or null | `"26/27"` | Season label. |
| `transfers[].to_club` | string or null | `"Montréal"` | Destination club. |
| `transfers[].from_club` | string or null | `"Sevilla FC"` | Previous club. |
| `transfers[].fee_as_shown` | string or null | `"free transfer"` | Displayed fee, including loan, free transfer or undisclosed labels. |
| `nationality` | string or null | `"Chile"` | Citizenship or nationalities. |
| `current_club` | string or null | `"CF Montréal"` | Current club. |
| `value_history` | array |  | Market values, oldest first. |
| `value_history[].club` | string or null | `"CSD Colo-Colo"` | Club at the value date. |
| `value_history[].date` | string or null | `"2006-12-29"` | Value date (YYYY-MM-DD). |
| `value_history[].value` | number or null | `50000` | Market value in euros. |
| `contract_end_date` | string or null | `"2027-06-30"` | Contract end date (YYYY-MM-DD). |
| `current_market_value` | number or null | `1000000` | Current market value in euros. |
| `highest_market_value` | number or null | `70000000` | Highest market value in euros. |
| `highest_market_value_date` | string or null | `"2018-01-02"` | Date of highest market value (YYYY-MM-DD). |

**Example input**

```json
{
  "club": "CF Montréal",
  "player": "Alexis Sanchez"
}
```

**Example output**

```json
{
  "age": 37,
  "link": "https://www.transfermarkt.com/alexis-sanchez/profil/spieler/40433",
  "name": "Alexis Sánchez",
  "currency": "EUR",
  "position": "Second Striker",
  "photo_url": "https://img.a.transfermarkt.technology/portrait/big/40433-1759840737.jpg?lm=4711",
  "player_id": "40433",
  "transfers": [
    {
      "fee": null,
      "date": "2026-08-11",
      "link": "https://www.transfermarkt.com/alexis-sanchez/transfers/spieler/40433/transfer_id/6495807",
      "season": "26/27",
      "to_club": "Montréal",
      "from_club": "Sevilla FC",
      "fee_as_shown": "free transfer"
    },
    {
      "fee": null,
      "date": "2025-09-01",
      "link": "https://www.transfermarkt.com/alexis-sanchez/transfers/spieler/40433/transfer_id/5912040",
      "season": "25/26",
      "to_club": "Sevilla FC",
      "from_club": "Udinese",
      "fee_as_shown": "free transfer"
    },
    {
      "fee": null,
      "date": "2024-08-10",
      "link": "https://www.transfermarkt.com/alexis-sanchez/transfers/spieler/40433/transfer_id/5186556",
      "season": "24/25",
      "to_club": "Udinese",
      "from_club": "Inter",
      "fee_as_shown": "free transfer"
    }
  ],
  "nationality": "Chile",
  "current_club": "CF Montréal",
  "value_history": [
    {
      "club": "CSD Colo-Colo",
      "date": "2006-12-29",
      "value": 50000
    },
    {
      "club": "CA River Plate",
      "date": "2007-09-24",
      "value": 2750000
    },
    {
      "club": "CA River Plate",
      "date": "2008-03-31",
      "value": 3400000
    }
  ],
  "contract_end_date": "2027-06-30",
  "current_market_value": 1000000,
  "highest_market_value": 70000000,
  "highest_market_value_date": "2018-01-02"
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@transfermarkt",
  "visibility": "public",
  "operation": "get_club_squad",
  "version": 1,
  "input": {
    "club": "Arsenal",
    "season": "2025/26"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@transfermarkt\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_club_squad\",\n  \"version\": 1,\n  \"input\": {\n    \"club\": \"Arsenal\",\n    \"season\": \"2025/26\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@transfermarkt",
  "visibility": "public",
  "operation": "get_club_squad",
  "version": 1,
  "input": {
    "club": "Arsenal",
    "season": "2025/26"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/transfermarkt`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_club_squad`: Get club squad. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `get_player_value`: Get player value. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-transfermarkt https://api.fous.com/mcp/tools/transfermarkt --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Compare football players’ current and highest market values
- Track a player’s market value history
- Review a player’s transfer history and fees
- Compare player values across club squads
- Summarize a club squad’s total value and average age

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this Transfermarkt tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a Transfermarkt account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from transfermarkt.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### What is a player’s current market value?

Get player value returns the player’s current market value in euros.

### Which clubs has a player transferred between?

Get player value returns transfers with previous and destination clubs.

### Who is in a club’s squad?

Get club squad returns the club’s players, positions, and market values.

## Related

- [Premier League API](https://fous.com/tools/premier-league.md): Premier League provides current/chosen-season tables and recent form, date-range fixtures/results (up to 380), player profiles and stats, and seasonal leaders; older-season stats may be limited.
- [SofaScore API](https://fous.com/tools/sofascore.md): SofaScore provides live sports scores and match statistics, plus football match details for the most recent played or live match and player season statistics.
- [ESPN API](https://fous.com/tools/espn.md): ESPN provides daily scores and schedules, team results, player statistics, matchup summaries, and latest topic-specific headlines; coverage and published details vary, especially for college and soccer.
- [UEFA API](https://fous.com/tools/uefa.md): UEFA provides football competitions, matches and results, including club competition fixtures and scores by date range and current league-phase or group-stage tables.
- [FIFA API](https://fous.com/tools/fifa.md): FIFA provides official men’s and women’s national-team rankings, excluding unranked teams, and year-specific tournament matches with scores, teams, stages and venues.
- [Yahoo Sports API](https://fous.com/tools/yahoo-sports.md): Yahoo Sports returns date-based scores and schedules, seasonal standings, and player regular-season and career stats when Yahoo provides them; unavailable data may be missing.
- [NFL API](https://fous.com/tools/nfl.md): NFL provides weekly scores and schedules, regular-season standings, current rosters, and player season and career stats; released players are excluded, and ages or stats may be unavailable.
- [NBA API](https://fous.com/tools/nba.md): NBA provides up-to-seven-day schedules and scores, seasonal standings, player bios and available regular-season averages, plus matchup box scores, with undated matchups showing the latest.
- [All Sports tools](https://fous.com/tools/category/sports)
