FotMob League Scraper
Pricing
from $10.00 / 1,000 league-season results
FotMob League Scraper
Scrape any FotMob league or competition: the full standings table, every fixture and result with scores, season top players (rating, goals, assists) and the list of available seasons — one clean JSON/CSV record per league-season. Get current or historical seasons. Failed lookups are never billed.
Pricing
from $10.00 / 1,000 league-season results
Rating
0.0
(0)
Developer
Elena Vance
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
FotMob League Scraper — Standings, Fixtures, Results & Season Top Players in One Record
Turn any FotMob league or competition into clean, structured JSON or CSV: the full standings table, every fixture and result with scores and match ids, the season's top players (by rating, goals, and assists), league metadata, and the list of available seasons — one tidy record per league-season.
Point it at a league id (or league URL), pick the current season or pull years of history, and get back data ready to drop into a spreadsheet, database, model, or app. No login, no account, no HTML wrangling — and you are never billed for failed lookups.
Good to know: every match in the output carries its FotMob
matchId. Feed those ids straight into the FotMob Match Details Scraper to drill from a whole season's results down to lineups, events, and per-player stats — no manual id-hunting in between.
Why this Actor
- A complete season in one record. One run returns the full standings table, every fixture and result with scores, and the season's top players (by rating, goals, and assists) — already joined and normalized into a single object per league-season. No stitching a dozen endpoints together by hand.
- It handles FotMob's signed API for you. FotMob's data API sits behind Cloudflare and signs every request with a rotating header. This Actor mints that signed header for each request and auto-refreshes it when FotMob rotates the key mid-run — so you never reverse-engineer or maintain the anti-bot layer.
- You only ever pay for real data. Transparent pay-per-event with a volume discount, and failures are never charged: an id that can't be parsed, or a season FotMob doesn't list for a league, is reported in the run summary — not written to your dataset and not billed.
- Current season or up to 10 years of history. Default to the live season, ask
for exact seasons by name (e.g.
2024/2025), or pull the 10 most recent seasons per league in one run. - Built to chain. Every match carries its
matchId(and amatchUrl); feed thematchIdsstraight into the FotMob Match Details Scraper for lineups, events, and per-player stats — no id-hunting, no glue code. Don't know a league's id? The FotMob Leagues List Scraper lists them all. - Drop-in clean output. Integer ids, parsed scores, ISO timestamps, and a stable schema across every league and season — no login, no HTML wrangling.
Problems this Actor solves
| If you are… | Your problem | How this Actor solves it |
|---|---|---|
| A football data / analytics builder | Stitching standings, fixtures, and player form together by hand is slow and brittle | One run returns all three per league-season, in a stable schema you can rely on |
| A model / prediction developer | You need clean historical results and tables to train and backtest on | Pull up to 10 seasons per league, each with standings and every result with scores |
| A fantasy / betting tool builder | Tracking form across leagues means babysitting many requests | Season top players (rating/goals/assists) and full results in a single record |
| A content creator / journalist | Compiling league tables and fixture lists is manual and error-prone | Export the standings and full fixture list straight to Sheets, CSV, or your CMS |
| An app / chatbot / agent developer | You need league data without building and maintaining a scraper | Pay per record on demand; chain matchIds into the Match Details Scraper |
What data you get
Each requested league-season becomes one dataset record:
| Field | Description |
|---|---|
leagueId | FotMob league id (integer) — the league this record covers |
name / shortName | League name and short name (e.g. Premier League / PL) |
country | Country / region code for the competition |
season | The season this record covers, in FotMob format (e.g. 2025/2026) |
latestSeason | The competition's most recent season |
isCurrentSeason | true when season equals the latest season |
leagueColor | The league's brand color, when available |
leagueUrl | Canonical fotmob.com league page |
availableSeasons | Every season FotMob lists for this league (use to request history) |
standings | Optional: the standings table — see below |
topPlayers | Optional: byRating, byGoals, byAssists — see below |
matches | Optional: every fixture and result — see below |
matchIds | Optional: flat list of integer match ids (feed the Match Details Scraper) |
source | Always fotmob-league-scraper |
scrapedAt | ISO 8601 timestamp of the run |
rawData | Optional: the full raw FotMob league payload, when Include raw data is on |
standings[] — one row per team: rank, teamId, teamName, shortName,
played, wins, draws, losses, goalsFor, goalsAgainst, goalDifference,
points. (Group-stage competitions are flattened into a single list of rows.)
topPlayers — three lists (byRating, byGoals, byAssists); each entry is
{ playerId, name, teamId, teamName, value } where value is the relevant metric
(rating, goal count, or assist count).
matches[] — one entry per fixture/result: matchId, round, homeId,
homeName, awayId, awayName, homeScore, awayScore, utcTime, started,
finished, matchUrl. Scores are null for matches that haven't been played yet.
Example output
Premier League, 2025/2026 — trimmed for readability (standings, matches, and
each topPlayers list are longer in a real record):
{"leagueId": 47,"name": "Premier League","shortName": "PL","country": "ENG","season": "2025/2026","latestSeason": "2025/2026","isCurrentSeason": true,"leagueColor": "#3D195B","leagueUrl": "https://www.fotmob.com/leagues/47","availableSeasons": ["2025/2026", "2024/2025", "2023/2024", "2022/2023"],"standings": [{"rank": 1, "teamId": 9825, "teamName": "Arsenal", "shortName": "ARS","played": 38, "wins": 27, "draws": 4, "losses": 7,"goalsFor": 88, "goalsAgainst": 32, "goalDifference": 56, "points": 85}// … 19 more rows],"topPlayers": {"byRating": [{ "playerId": 961995, "name": "Erling Haaland", "teamId": 8456, "teamName": "Manchester City", "value": 7.92 }// … more],"byGoals": [{ "playerId": 961995, "name": "Erling Haaland", "teamId": 8456, "teamName": "Manchester City", "value": 27 }// … more],"byAssists": [{ "playerId": 562727, "name": "Bukayo Saka", "teamId": 9825, "teamName": "Arsenal", "value": 12 }// … more]},"matches": [{"matchId": 4506384,"round": 1,"homeId": 9825, "homeName": "Arsenal","awayId": 10261, "awayName": "Wolverhampton Wanderers","homeScore": 2, "awayScore": 0,"utcTime": "2025-08-16T14:00:00.000Z","started": true, "finished": true,"matchUrl": "https://www.fotmob.com/match/4506384"}// … 379 more matches],"matchIds": [4506384, 4506385, 4506386], // 380 ids in a full Premier League season"source": "fotmob-league-scraper","scrapedAt": "2026-06-18T08:30:00+00:00"}
Inputs that could not be fetched are not written to the dataset (and never
billed). They are listed in the run's SUMMARY record in the key-value store —
{ "failures": [ { "input": "…", "leagueId": …, "error": "…" } ] } — and the run's
status message tells you at a glance how many league-seasons succeeded.
How to use it (60 seconds)
- Click Try for free / Start.
- Add one or more League ids or URLs (one per line), e.g.
47for the Premier League, or paste a full league URL likehttps://www.fotmob.com/leagues/47/overview/premier-league. (Don't know the id? Run the FotMob Leagues List Scraper first.) - Choose how many seasons:
- Current season (default): leave Seasons empty and Max seasons at
1. - More history: set Max seasons up to
10for the most recent N seasons. - Specific seasons: list them under Seasons in FotMob format
(e.g.
2024/2025). Available seasons are shown on every output record.
- Current season (default): leave Seasons empty and Max seasons at
- Toggle what you need: standings, fixtures & results, top players (all on by default), and optionally raw data.
- Click Save & Start. Download results as JSON, CSV, Excel, or via API from the Dataset tab; check Key-value store → SUMMARY for run totals and any failed lookups.
Input reference
| Field | Type | Default | Description |
|---|---|---|---|
| League ids or URLs | list | ["47"] | One FotMob league id or league URL per line. Numeric ids and /leagues/<id>/… URLs both work. |
| Seasons | list | (empty) | Specific seasons in FotMob format (e.g. 2024/2025). Empty = use Max seasons. |
| Max seasons (most recent) | integer | 1 | When no specific seasons are given, scrape this many of the most recent seasons per league (1–10). 1 = current only. |
| Include standings | boolean | true | Include the league standings table. |
| Include fixtures & results | boolean | true | Include every fixture and result with scores and match ids. |
| Include top players | boolean | true | Include season top players by rating, goals, and assists. |
| Include raw data | boolean | false | Adds the full raw FotMob league payload under rawData. Significantly increases item size. |
| Proxy configuration | object | Apify Proxy, datacenter | Apify Proxy routes requests. Datacenter (the default) is enough for most runs; switch to Residential if you hit blocks on very large jobs. |
| Delay between requests | integer | 1 | Politeness delay in seconds before each request (0–10). |
| Max items | integer | 0 | Stop after N league-season records (0 = unlimited). |
Pricing — what a run costs
This Actor uses transparent pay-per-event pricing with a built-in volume discount: a fixed price per successful league-season record for the first 10,000 results of a run, and a cheaper rate for every result beyond that, plus a small Actor-start fee ($0.02) charged once per run. No subscription, no minimums, and failed lookups are never charged. The exact per-result rate is shown on the Actor's Pricing tab.
- One billed record per league-season. Asking for 5 seasons of one league bills 5 records; failed lookups bill nothing.
- Failed lookups are free. Unparseable ids and seasons FotMob doesn't list for a league are reported in the summary, never billed.
- Bigger runs cost less per item. The discount tier resets per run, so one large run is cheaper than the same job split into many small ones.
- Try it free: an Apify free account includes $5 of monthly platform credit — enough to try the Actor before paying anything.
- Stay in control: set Max items and Apify's maximum charge per run; the Actor stops gracefully at your cap, keeping everything already scraped.
Compared to the alternatives
| This Actor | Build your own scraper | Manual checking | |
|---|---|---|---|
| Standings + fixtures + top players in one record | Yes | You maintain it | Impractical |
| Historical seasons (up to 10) | Yes | You maintain it | One page at a time |
| Match ids that chain into match detail | Yes | You wire it up | Copy-paste |
| Handles FotMob request signing | Built in | You reverse-engineer it | – |
| Never billed for failures | Yes | – | – |
| Export JSON / CSV / Excel / API | Yes, built-in | DIY | Copy-paste |
| Setup time | ~60 seconds | Days; breaks on site changes | Hours per season |
A family of FotMob Actors
This Actor is part of a set that fit together — start broad, then drill down:
- FotMob Leagues List Scraper — discover every league/competition and its id. Use it to find the ids you feed in here.
- FotMob League Scraper (this Actor) — standings, fixtures, results, and season
top players per league-season; emits the
matchIds. - FotMob Matches Scraper — match lists (e.g. by date or team), another source of match ids.
- FotMob Match Details Scraper — pass the
matchIdsfrom this Actor to get lineups, events, and per-player match stats.
Integrate the data
- Exports: JSON, CSV, Excel, XML from the Dataset tab — or fetch
programmatically:
GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json
- Run on a schedule: use Apify Schedules to refresh standings and results daily or weekly, and webhooks to push finished runs into your pipeline (Sheets, Slack, your backend).
- Chain to match detail: read
matchIdsfrom each record and pass them to the FotMob Match Details Scraper to expand a whole season into per-match data. - From code: call the Actor with the Apify API or SDKs (Python / JavaScript) and read the dataset when the run finishes.
- Run summary: every run writes a
SUMMARYrecord (key-value store) with totals, successes, failures, and billing counts — ideal for monitoring automated pipelines.
FAQ
Do I need a FotMob account or login? No. There is no account or login required.
Where do I find a league's id?
Use the FotMob Leagues List Scraper to list every league and its id, or copy it
from a FotMob league URL (fotmob.com/leagues/<id>/…). You can paste the full URL
here too — the Actor extracts the id for you.
Can I get past seasons?
Yes. Set Max seasons for the most recent N (up to 10), or list exact seasons under
Seasons in FotMob format (e.g. 2024/2025). Each record's availableSeasons shows
what's on offer for that league; a season a league doesn't have is reported in the
summary and is never billed.
How do I get every match's details?
Take the matchIds from each record and run the FotMob Match Details Scraper —
the two Actors are designed to chain.
Why are some scores null?
Matches that haven't been played yet appear in matches with homeScore/awayScore
as null and finished: false — useful for upcoming-fixture lists.
Do I need a proxy? Apify Proxy is pre-selected (datacenter). It's enough for most runs; switch to Residential only if you hit blocks on very large jobs.
How fresh is the data? Each run fetches live data, so you get exactly what FotMob shows at that moment. Schedule the Actor to keep your dataset as fresh as you need.
What formats can I export? JSON, CSV, Excel, XML — from the Console or via the Apify API.
Disclaimer
This Actor is intended for personal and research use. You are responsible for ensuring your use complies with FotMob's terms and applicable law. Please scrape responsibly — keep the request delay reasonable and pull only the seasons you need. This project is not affiliated with, endorsed by, or sponsored by FotMob.