SofaScore API: Get player season stats
Gets 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.
Unofficial. Not affiliated with or endorsed by SofaScore.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Player, required
player Football player name, for example Erling Haaland.
Erling Haaland
- Season optional
season Season, for example 2025/26. Defaults to the current season.
2025/26
Default
.- Competition optional
competition Competition name, for example Premier League. Defaults to the player's main league.
Premier League
Default
.
Input as JSON
{ "player": "Erling Haaland", "season": "2025/26" , "competition": "Premier League"}Output
{ "age": 26, "team": "Manchester City", "goals": 27, "saves": null, "player": "Erling Haaland", "season": "2025/26" , "starts": 34, "assists": 8, "position": "Forward", "player_id": 839956, "red_cards": 0, "appearances": 35, "competition": "Premier League", "nationality": "Norway", "clean_sheets": null, "yellow_cards": 2, "expected_goals": 25.4326, "minutes_played": 2958, "sofascore_link": "https://www.sofascore.com/football/player/erling-haaland/839956" , "photo_image_link": "https://img.sofascore.com/api/v1/player/839956/image" , "average_sofascore_rating": 7.3114285714286}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"sofascore.com/get_player_season_stats","input":{"player":"Erling Haaland","season":"2025/26","competition":"Premier League"}}' # 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": "sofascore.com/get_player_season_stats" , "input": { "player": "Erling Haaland", "season": "2025/26" , "competition": "Premier League" }})# 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": "sofascore.com/get_player_season_stats" , "input": { "player": "Erling Haaland", "season": "2025/26" , "competition": "Premier League" } }), 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 sofascore.com/get_player_season_stats# with {"player":"Erling Haaland","season":"2025/26","competition":"Premier League"}"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": [ "player" ], "properties": { "player": { "type": "string", "minLength": 1, "description": "Football player name, for example Erling Haaland." }, "season": { "type": "string", "default": "", "description": "Season, for example 2025/26. Defaults to the current season." }, "competition": { "type": "string", "default": "", "description": "Competition name, for example Premier League. Defaults to the player's main league." } }}Output schema
{ "type": "object", "required": [ "player", "team", "position", "nationality", "age", "photo_image_link", "sofascore_link", "competition", "season", "appearances", "starts", "minutes_played", "goals", "assists", "expected_goals", "average_sofascore_rating", "yellow_cards", "red_cards", "saves", "clean_sheets", "player_id" ], "properties": { "age": { "type": [ "integer", "null" ], "description": "Age in years." }, "team": { "type": [ "string", "null" ], "description": "Team for this competition and season." }, "goals": { "type": [ "integer", "null" ], "description": "Goals." }, "saves": { "type": [ "integer", "null" ], "description": "Saves for goalkeepers." }, "player": { "type": [ "string", "null" ], "description": "Player name." }, "season": { "type": [ "string", "null" ], "description": "Season used." }, "starts": { "type": [ "integer", "null" ], "description": "Matches started." }, "assists": { "type": [ "integer", "null" ], "description": "Assists." }, "position": { "type": [ "string", "null" ], "description": "Playing position." }, "player_id": { "type": [ "integer", "null" ], "description": "SofaScore player ID." }, "red_cards": { "type": [ "integer", "null" ], "description": "Red cards." }, "appearances": { "type": [ "integer", "null" ], "description": "Appearances in the season." }, "competition": { "type": [ "string", "null" ], "description": "Competition used." }, "nationality": { "type": [ "string", "null" ], "description": "Country of nationality." }, "clean_sheets": { "type": [ "integer", "null" ], "description": "Clean sheets for goalkeepers." }, "yellow_cards": { "type": [ "integer", "null" ], "description": "Yellow cards." }, "expected_goals": { "type": [ "number", "null" ], "description": "Expected goals." }, "minutes_played": { "type": [ "integer", "null" ], "description": "Minutes played." }, "sofascore_link": { "type": [ "string", "null" ], "description": "Player page link on SofaScore." }, "photo_image_link": { "type": [ "string", "null" ], "description": "Player photo image link." }, "average_sofascore_rating": { "type": [ "number", "null" ], "description": "Average SofaScore rating from 0 to 10." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
sofascore.com/get_player_season_stats- Returns
- player, team, position, nationality, age, competition, season, appearances, starts, minutes, goals, assists, xG, rating, cards, saves, clean sheets
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 sofascore.com/get_player_season_stats with the inputs above.
Ask your agent
- How many goals and assists does Bukayo Saka have in the Premier League this season, and what's his average rating?
- Pull Jude Bellingham's 2023/24 La Liga numbers from SofaScore: appearances, minutes, xG, and cards.
- I need clean sheets and saves for Gianluigi Donnarumma in the Champions League 2024/25.
- Check SofaScore for Lamine Yamal's current season stats — starts, goals, assists, rating.
- What were Victor Osimhen's Serie A stats in 2022/23? Goals, xG, minutes played and yellow/red cards.
See more
All SofaScore methodsFinds 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_matchLooks 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_statsLooks up an NHL player by name, link or ID and returns the profile with regular-season stats for a season and career totals.
nhl.com/get_player_statsGets an MLB player's profile and regular-season hitting and pitching statistics for one season and for his career. Without a season it uses the current season, or the player's latest MLB season if he has no stats this year.
mlb.com/get_player_statsLooks up a Yahoo Sports player by name and returns the player's regular-season statistics for a season, alongside career totals. Each stat includes season and career values.
sports.yahoo.com/get_player_statsGets a named NFL player's season and career stats, with profile details. Active players are preferred when names match.
nfl.com/get_player_statsLooks up an ESPN player by name and returns season and career statistics. Use a league to tell apart players with the same name, and a season year or label to pick a past season.
espn.com/get_player_statsFinds a player on Basketball, Pro Football, Baseball or Hockey Reference and returns regular-season career statistics, awards and a season-by-season record.
sports-reference.com/get_player_career