Transfermarkt API: Get a football club's squad and market values
Finds a football club on Transfermarkt by name, link or ID and returns its squad for a season with each player's position, age, nationality, market value and contract, highest value first.
Unofficial. Not affiliated with or endorsed by Transfermarkt.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Club, required
club Club name, Transfermarkt club link, or club ID; for example Arsenal.
Arsenal
- Season optional
season Season start year or full season; for example 2025 or 2025/26. Defaults to the current season.
2025/26
Default
.
Input as JSON
{ "club": "Arsenal", "season": "2025/26" }Output
{ "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}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"transfermarkt.com/get_club_squad","input":{"club":"Arsenal","season":"2025/26"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "transfermarkt.com/get_club_squad" , "input": { "club": "Arsenal", "season": "2025/26" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "transfermarkt.com/get_club_squad" , "input": { "club": "Arsenal", "season": "2025/26" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run transfermarkt.com/get_club_squad# with {"club":"Arsenal","season":"2025/26"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "club" ], "properties": { "club": { "type": "string", "description": "Club name, Transfermarkt club link, or club ID; for example Arsenal." }, "season": { "type": "string", "default": "", "description": "Season start year or full season; for example 2025 or 2025/26. Defaults to the current season." } }}Output schema
{ "type": "object", "required": [ "club", "league", "season", "total_squad_value", "average_player_age", "currency", "club_link", "club_id", "players" ], "properties": { "club": { "type": "string" }, "league": { "type": [ "string", "null" ] }, "season": { "type": "string" }, "club_id": { "type": "string" }, "players": { "type": "array", "items": { "type": "object", "required": [ "name", "shirt_number", "position", "age", "nationality", "market_value", "contract_end_date", "player_link", "player_id" ], "properties": { "age": { "type": [ "integer", "null" ] }, "name": { "type": "string" }, "position": { "type": [ "string", "null" ] }, "player_id": { "type": "string" }, "nationality": { "type": [ "string", "null" ] }, "player_link": { "type": "string" }, "market_value": { "type": [ "integer", "null" ], "description": "Value in euros." }, "shirt_number": { "type": [ "integer", "null" ] }, "contract_end_date": { "type": [ "string", "null" ] } } } }, "currency": { "enum": [ "EUR" ], "type": "string" }, "club_link": { "type": "string" }, "total_squad_value": { "type": [ "integer", "null" ], "description": "Squad value in euros." }, "average_player_age": { "type": [ "number", "null" ] } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
transfermarkt.com/get_club_squad- Returns
- club, league, season, squad value, average age, players with shirt number, position, age, nationality, market value, contract end, link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method transfermarkt.com/get_club_squad with the inputs above.
Ask your agent
- What's Bayer Leverkusen's current squad worth, and who are their most valuable players?
- Pull the Transfermarkt squad list for Napoli in the 2023/24 season with each player's market value and contract expiry date
- I need Ajax's full roster with positions, ages, nationalities and when each contract ends, sorted by market value
- Show me the total squad value and average age for Aston Villa in 2021, plus the individual player valuations
- On transfermarkt.com, look up club ID 418 and list every player with shirt number and market value for this season
See more
All Transfermarkt methodsFinds a football player on Transfermarkt by name (a club picks among namesakes) and returns the current and highest market values, the value history and the transfer history, in euros.
transfermarkt.com/get_player_valueLooks up a Premier League player by name and returns the profile and either career totals or the stats for a chosen season. If names clash, a current Premier League player is preferred.
premierleague.com/get_player_statsGets UEFA club competition matches in a date range, with kick-off times in a chosen time zone, scores, stages and venues. You can limit the list to one club.
uefa.com/get_competition_matchesGets the Premier League table for the current season or a chosen season, with each club's last five league results.
premierleague.com/get_league_tableGets Premier League fixtures and results in a date range, with kickoff times in your chosen time zone. Returns up to 380 matches.
premierleague.com/get_fixtures_and_resultsFinds a football match between two teams on SofaScore (on a given date, or their latest played or live match) and returns its score, goals, red cards, team statistics and player ratings.
sofascore.com/get_matchGets a football player's season statistics on SofaScore by name, with an optional competition and season (defaults: the player's main league and the current season). Unavailable statistics are null.
sofascore.com/get_player_season_statsReturns the league-phase or group-stage table for a UEFA club competition and season, with qualification labels where shown.
uefa.com/get_competition_table