FotMob Scraper - Live Scores, xG, Ratings & Standings
Pricing
from $2.00 / 1,000 match (fixtures / live / result)s
FotMob Scraper - Live Scores, xG, Ratings & Standings
Scrape FotMob football data in one Actor: fixtures, live scores, league standings, match details with lineups/xG/player ratings, team squads, player profiles, transfers, and search. HTTP JSON API alternative — Python, Node.js, MCP.
Pricing
from $2.00 / 1,000 match (fixtures / live / result)s
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Unofficial community Actor. Not affiliated with FotMob.
FotMob scraper and FotMob API alternative for football fixtures, live scores, league standings, match details (lineups, xG, player ratings), team squads, player profiles, transfers, and search — in one Actor. Pull structured JSON with Python, Node.js, cURL, or MCP. Optional locale=de for German URLs and Accept-Language.
Sports data suite
| Actor | Role |
|---|---|
| FotMob Scraper ◄── you are here | Football scores, xG, ratings, standings, transfers |
| PrizePicks Player Props Scraper | US DFS pick'em lines |
| Underdog Fantasy Player Props | Underdog props & odds |
| DFS Multi-Source Props Scraper | Cross-platform props board |
Suite next step: after FotMob match ratings / xG, run PrizePicks Player Props Scraper or DFS Multi-Source Props Scraper to join player form with live pick'em lines.
When to use
- Pull today's fixtures, live scores, and final results across all competitions in one run
- Export Bundesliga / Premier League standings, season fixtures, and top scorers
- Deep-dive a match: lineups, events, team stats (xG), per-player ratings
- Load team squads or player profiles by FotMob id / URL
- Track the transfers feed or search teams and players by name
- Chain date matches → match details with
enrichMatchDetails(no glue Actors)
When not to use: deep market-value / transfer-fee history — this Actor focuses on FotMob scores, ratings, and match analytics.
Key features
- Eight modes —
matches,leagues,league,match,team,player,transfers,search(+auto) - One Actor vs fragmented suites — directory → standings → match details without hopping listings
- Enrich toggle —
enrichMatchDetailsexpands fixtures into full detail records in the same run - xG & ratings — team stats and per-player ratings when FotMob publishes them
- Locale —
enorde(German site paths / language headers; same global ids) - HTTP-first —
curl_cffiChrome TLS against FotMob/api/data/*; browser not required - Failed lookups not written — only successful records land in the dataset
Input
| Field | Description |
|---|---|
mode | auto / matches / leagues / league / match / team / player / transfers / search |
dates / dateFrom / dateTo | Day buckets for matches (YYYYMMDD) |
timezone | Day timezone (e.g. Europe/Berlin) |
matchStatus | all / finished / live / upcoming |
leagueIds / leagueUrls | Competitions (filter or league mode targets) |
seasons | Optional season strings (2025/2026) |
matchIds / matchUrls | Match detail targets |
teamIds / teamUrls | Team profile targets |
playerIds / playerUrls | Player profile targets |
searchQueries | Search mode terms |
transferPages | Pages for transfers mode |
enrichMatchDetails | Also fetch match details in matches/league modes |
include* toggles | Standings, fixtures, lineups, xG stats, shotmap, raw… |
locale | en or de |
maxItems | Cap (0 = unlimited) |
proxyConfiguration | Optional Apify Proxy |
Example — today's matches (Berlin timezone)
{"mode": "matches","timezone": "Europe/Berlin","matchStatus": "all","locale": "de","maxItems": 200}
Example — Bundesliga standings + fixtures
{"mode": "league","leagueIds": ["54"],"includeStandings": true,"includeFixtures": true,"includeTopPlayers": true}
Example — match details (lineups, xG, ratings)
{"mode": "match","matchIds": ["4506324"],"includeLineups": true,"includeTeamStats": true,"includePlayerStats": true,"includeEvents": true}
Example — team squad
{"mode": "team","teamIds": ["9825"],"includeSquad": true,"includeFixtures": true}
Example — transfers feed
{"mode": "transfers","transferPages": 2,"maxItems": 100}
Example — search teams / players
{"mode": "search","searchQueries": ["Bayern", "Haaland"],"maxItems": 50}
Output
Every dataset item has recordType, source, and scrapedAt. Main shapes:
recordType | Highlights |
|---|---|
match | matchId, teams, score, status, utcTime, leagueId, matchUrl |
leagueDir | leagueId, name, category, ccode, leagueUrl |
league | standings, fixtures, matchIds, top players, season |
matchDetail | lineups, events, teamStats (xG…), playerStats, venue, H2H |
team | squad, fixtures, standings slice |
player | bio, primary team, position, recent matches, career |
transfer | player, from/to clubs, fee fields, date |
searchHit | typed suggest/search hits with ids |
Example — match row
{"recordType": "match","matchId": 5903801,"leagueId": 54,"leagueName": "Bundesliga","ccode": "GER","utcTime": "2026-08-04T17:00:00.000Z","started": false,"finished": false,"homeTeam": { "id": 9823, "name": "Bayern München", "score": null },"awayTeam": { "id": 9788, "name": "Borussia Dortmund", "score": null },"matchUrl": "https://www.fotmob.com/de/match/5903801","date": "20260804","source": "fotmob-scraper","scrapedAt": "2026-08-04T16:00:00Z"}
Use cases
- Daily football data pipeline: schedule
matches→ optionalenrichMatchDetails - Prediction / model features: xG, ratings, lineups from
matchmode - Fantasy / tipster research: upcoming fixtures + team form tables
- CMS scoreboards: finished results for a date range as CSV/JSON
- ID discovery:
leaguesorsearchto resolve FotMob ids for downstream runs
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/fotmob-scraper').call({mode: 'matches',timezone: 'Europe/Berlin',maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token="YOUR_TOKEN")run = client.actor("crawloop/fotmob-scraper").call(run_input={"mode": "league","leagueIds": ["54"],"includeStandings": True,"includeFixtures": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("name"), len(item.get("standings") or []))
cURL
curl -s -X POST "https://api.apify.com/v2/acts/crawloop~fotmob-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"match","matchIds":["4506324"],"includePlayerStats":true,"includeTeamStats":true}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID / name (crawloop/fotmob-scraper).
Example prompts:
- "Run FotMob Scraper for today's matches in Europe/Berlin and return finished games as JSON"
- "Scrape Bundesliga league id 54 standings and top scorers with FotMob Scraper"
- "Get FotMob match details for match id 4506324 with lineups and xG, then summarize player ratings"
FAQ
Do I need a FotMob account?
No. The Actor uses public JSON endpoints — no login required.
Is German /de a different dataset?
No — locale only affects language headers and URL prefix. Competition and match ids are global.
How do I find league or match ids?
Run mode=leagues or mode=search, or start from mode=matches and read matchId / leagueId on each row.
Can I get historical seasons?
Yes — mode=league with seasons like 2024/2025 when FotMob lists that season under availableSeasons.
What about transfers vs Transfermarkt?
This Actor exposes FotMob's transfers feed (recent moves). Deep fee histories belong in a Transfermarkt-focused tool.
Can I use this as a FotMob API alternative in production?
Yes for scheduled pipelines and exports (JSON/CSV). Respect fair use and FotMob terms; endpoints can change.