Football xG: Understat Matches, Shots & Tables

io.github.serenidoPublished by GitHub account serenidov1.0.0Updated Oct 25, 2026

Understat football xG data: xG tables, matches, shots, players and lineups for top 5 leagues + RFPL.

The publisher's own server: Shots

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingData & Analytics

Overview

AI-generated overview

Remote Apify-hosted MCP server that pulls Understat expected-goals football data — league tables, matches, shots, players and lineups — for six leagues.

What you can do
  • Retrieve xG league tables with xPts, xG, xGA, npxG and PPDA, plus optional form tables
  • Fetch fixtures and results with home/away xG and win/draw/loss probabilities
  • Get team match logs and player season stats with per-90 figures
  • Pull every shot with xG, pitch position, situation and type, plus lineups and player match logs
  • Choose a mode (table, matches, teamMatches, players, shots, lineups, playerMatches) and leagues/seasons
When to use it
Useful for football analytics, betting research, fantasy football picks by xG and xA, and match reports or data journalism that need Understat numbers without writing a scraper.
Requirements
A remote MCP endpoint at mcp.apify.com with the tool scoped in the URL; an Apify account connected via OAuth on first use. Runs in Apify's cloud, so no local runtime or proxy setup. Usage is billed per row.
Before you install
Paid usage at $3 per 1,000 rows, drawn from Apify account credit (free plan includes $5 monthly). Connecting grants the server access to your Apify account via OAuth. Data comes from Understat and is passed through Apify's cloud.

Installation

In SourceWeft

  1. Open Football xG: Understat Matches, Shots & Tables in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.serenido%2Ffootball-xg/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "football-xg-understat-matches-shots-tabl": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=serenido/football-xg-scraper"
    }
  }
}

README

Football xG Scraper API

Get Understat expected goals (xG) data as clean rows: xG league tables, fixtures and results with xG, team match logs (xG, xGA, PPDA), player stats per 90, every shot with xG, lineups. Premier League, La Liga, Bundesliga, Serie A, Ligue 1, RFPL, 2014 to now.

Runs in the cloud on Apify. No servers, no proxy setup, no code to maintain. Open it on Apify

Price: $3 per 1,000 rows. No monthly fee. Apify's free plan gives $5 of usage every month, no credit card needed. Current price.

What you get

  • xG league table: points vs expected points (xPts), xG, xGA, npxG, PPDA, deep passes; optional form table of the last N matches
  • Fixtures and results with home/away xG and Understat's win/draw/loss probabilities
  • Team match logs: xG, xGA, PPDA and deep passes per team per match
  • Player season stats with per-90 numbers (xG90, xA90, xGChain90)
  • Every shot with xG, pitch position, situation and shot type; lineups and player match logs

Quick start: Python

bash
pip install -U apify-client
python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("serenido/football-xg-scraper").call(run_input={    "mode": "table",    "leagues": [        "EPL",        "La_liga"    ],    "seasons": [        "current"    ]})
for item in client.dataset(run.default_dataset_id).iterate_items():    print(item)

Quick start: JavaScript (Node.js)

bash
npm install apify-client
javascript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("serenido/football-xg-scraper").call({    "mode": "table",    "leagues": [        "EPL",        "La_liga"    ],    "seasons": [        "current"    ]});
const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);

Quick start: one HTTP call

Runs the tool and returns the rows in one request. Good for runs under 5 minutes; for bigger runs use the Python or JavaScript example.

bash
curl -X POST "https://api.apify.com/v2/acts/serenido~football-xg-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \  -H "Content-Type: application/json" \  -d '{"mode": "table", "leagues": ["EPL", "La_liga"], "seasons": ["current"]}'

Get your token in Apify Console > Settings > API & Integrations.

Use it from AI apps (MCP)

Any app that supports remote MCP servers (Claude, ChatGPT, Cursor, VS Code and others) can run this tool for you. Add this server URL: https://mcp.apify.com?tools=serenido/football-xg-scraper. Your Apify account connects on first use. Example config for Cursor:

json
{  "mcpServers": {    "apify": {      "url": "https://mcp.apify.com?tools=serenido/football-xg-scraper"    }  }}

Input example

json
{  "mode": "table",  "leagues": [    "EPL",    "La_liga"  ],  "seasons": [    "current"  ]}

Other modes: matches, teamMatches, players, shots, lineups, playerMatches. All options are listed on the input page.

Output example (one row)

json
{  "type": "shot",  "league": "Premier League (England)",  "season": "2026/27",  "matchId": "31239",  "date": "2026-10-12 19:00:00",  "homeTeam": "Coventry",  "awayTeam": "Newcastle United",  "minute": 5,  "team": "Coventry",  "player": "Jack Rudoni",  "result": "Goal",  "isGoal": true,  "xG": 0.7612,  "x": 0.885,  "y": 0.5,  "situation": "Penalty",  "shotType": "LeftFoot"}

Download as JSON, CSV or Excel, or connect to Make, Zapier or n8n.

Use cases

  • Football models and betting research
  • Fantasy football (FPL) player picks by xG and xA
  • Match reports and data journalism

More tools by Serenido

Support

Found a bug or need a field? Open an issue here or on the Issues tab on Apify.

Use it only for public data and follow the website's terms and the laws that apply to you. This project is not affiliated with the websites it reads.

Source: README.md at commit 2d35e2b

Tools

0
This server asks you to sign in, so SourceWeft could not read its tools without an account and has not indexed them. What a connected account sees can depend on that account and its permissions.

Version history

1
  1. v1.0.0LatestOct 25, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.

Other Shots integrations