FotMob League Scraper avatar

FotMob League Scraper

Pricing

from $10.00 / 1,000 league-season results

Go to Apify Store
FotMob League Scraper

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

Elena Vance

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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 a matchUrl); feed the matchIds straight 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 problemHow this Actor solves it
A football data / analytics builderStitching standings, fixtures, and player form together by hand is slow and brittleOne run returns all three per league-season, in a stable schema you can rely on
A model / prediction developerYou need clean historical results and tables to train and backtest onPull up to 10 seasons per league, each with standings and every result with scores
A fantasy / betting tool builderTracking form across leagues means babysitting many requestsSeason top players (rating/goals/assists) and full results in a single record
A content creator / journalistCompiling league tables and fixture lists is manual and error-proneExport the standings and full fixture list straight to Sheets, CSV, or your CMS
An app / chatbot / agent developerYou need league data without building and maintaining a scraperPay per record on demand; chain matchIds into the Match Details Scraper

What data you get

Each requested league-season becomes one dataset record:

FieldDescription
leagueIdFotMob league id (integer) — the league this record covers
name / shortNameLeague name and short name (e.g. Premier League / PL)
countryCountry / region code for the competition
seasonThe season this record covers, in FotMob format (e.g. 2025/2026)
latestSeasonThe competition's most recent season
isCurrentSeasontrue when season equals the latest season
leagueColorThe league's brand color, when available
leagueUrlCanonical fotmob.com league page
availableSeasonsEvery season FotMob lists for this league (use to request history)
standingsOptional: the standings table — see below
topPlayersOptional: byRating, byGoals, byAssists — see below
matchesOptional: every fixture and result — see below
matchIdsOptional: flat list of integer match ids (feed the Match Details Scraper)
sourceAlways fotmob-league-scraper
scrapedAtISO 8601 timestamp of the run
rawDataOptional: 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)

  1. Click Try for free / Start.
  2. Add one or more League ids or URLs (one per line), e.g. 47 for the Premier League, or paste a full league URL like https://www.fotmob.com/leagues/47/overview/premier-league. (Don't know the id? Run the FotMob Leagues List Scraper first.)
  3. Choose how many seasons:
    • Current season (default): leave Seasons empty and Max seasons at 1.
    • More history: set Max seasons up to 10 for 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.
  4. Toggle what you need: standings, fixtures & results, top players (all on by default), and optionally raw data.
  5. 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

FieldTypeDefaultDescription
League ids or URLslist["47"]One FotMob league id or league URL per line. Numeric ids and /leagues/<id>/… URLs both work.
Seasonslist(empty)Specific seasons in FotMob format (e.g. 2024/2025). Empty = use Max seasons.
Max seasons (most recent)integer1When no specific seasons are given, scrape this many of the most recent seasons per league (1–10). 1 = current only.
Include standingsbooleantrueInclude the league standings table.
Include fixtures & resultsbooleantrueInclude every fixture and result with scores and match ids.
Include top playersbooleantrueInclude season top players by rating, goals, and assists.
Include raw databooleanfalseAdds the full raw FotMob league payload under rawData. Significantly increases item size.
Proxy configurationobjectApify Proxy, datacenterApify Proxy routes requests. Datacenter (the default) is enough for most runs; switch to Residential if you hit blocks on very large jobs.
Delay between requestsinteger1Politeness delay in seconds before each request (0–10).
Max itemsinteger0Stop 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 ActorBuild your own scraperManual checking
Standings + fixtures + top players in one recordYesYou maintain itImpractical
Historical seasons (up to 10)YesYou maintain itOne page at a time
Match ids that chain into match detailYesYou wire it upCopy-paste
Handles FotMob request signingBuilt inYou reverse-engineer it
Never billed for failuresYes
Export JSON / CSV / Excel / APIYes, built-inDIYCopy-paste
Setup time~60 secondsDays; breaks on site changesHours 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 matchIds from 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 matchIds from 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 SUMMARY record (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.