FotMob Scraper - Live Scores, xG, Ratings & Standings avatar

FotMob Scraper - Live Scores, xG, Ratings & Standings

Pricing

from $2.00 / 1,000 match (fixtures / live / result)s

Go to Apify Store
FotMob Scraper - Live Scores, xG, Ratings & Standings

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

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

34

Total users

10

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

FotMob Scraper — Live Scores, xG, Player Ratings, Standings & Transfers

Get structured football data from FotMob with one Apify Actor for matches, leagues, match details, teams, players, transfers, and search. Choose a mode, provide optional IDs or dates, then receive records in an Apify dataset. Use it as a football data API source for live scores, league standings, xG, player ratings, fixtures, results, team squads, and more, including Premier League, Bundesliga, and Champions League coverage available through FotMob.

Why this Actor

  • Nine modes in one Actor: auto, matches, leagues, league, match, team, player, transfers, and search cover a broad set of FotMob data needs.
  • Cheapest per record: match records start at $2 per 1,000 and search hits at $1 per 1,000; per-event pricing is shown below so you can estimate costs from the records you need. Small runs have a tiny start fee.
  • HTTP JSON collection: the Actor reads FotMob's public data endpoints directly. It does not need a browser, which keeps the collection process lightweight.
  • Match analysis fields: request xG, player ratings, lineups, shotmap, and momentum when FotMob provides them.
  • Profiles and transfers included: get team and player profiles and transfer feed records alongside match data, areas often outside the scope of single-purpose score tools.
  • Chain collection in one run: collect matches, then set enrichMatchDetails to fetch details for those matches, including xG and lineups.
  • Structured export: records land in an Apify dataset ready for JSON, CSV, Excel, API access, or further processing.

What problems it solves

  • Analytics and prediction models: build feature sets from fixtures, results, standings, xG, lineups, and player performance.
  • Live-score apps and alerts: retrieve scheduled, live, or finished matches and feed score updates into your app or notification workflow.
  • Fantasy and tipster tools: combine player ratings, team form, fixtures, and season leaders for research and planning.
  • Media and CMS scoreboards: collect match lists, results, competition tables, and match details in a consistent dataset format.
  • ID mapping: search clubs, players, and matches or enumerate league IDs before running targeted collections.

What data you get

Each successful dataset item includes a record type, source, and scrape timestamp. The exact fields depend on the selected mode and optional include settings; FotMob may not publish every field for every record.

ModeWhat one record containsTypical use
matchesOne fixture, live match, or result with teams, score, status, date, competition, and IDsDaily schedules, live-score feeds, results
leaguesOne competition directory entry with its name, category, country code, ID, and URLDiscover competitions and build ID lists
leagueOne competition season with available standings, fixtures, top players, season, and match IDsLeague standings, season analysis, fixture lists
matchOne match detail record with requested lineups, events, team and player stats, ratings, xG, venue, and related dataMatch reports and performance analysis
teamOne team profile with optional squad, fixtures, and standings sliceSquad research and club pages
playerOne player profile with biography, position, primary team, recent matches, and career details when availablePlayer pages and profile enrichment
transfersOne recent transfer row with player, clubs, date, and fee fields when availableTransfer feeds and roster tracking
searchOne typed search result with entity details and IDsResolve team, player, or match IDs
autoRecords from the mode inferred from the inputs you provideConvenient runs when the target is clear from filled fields

For match detail records, includeShotmap adds the shotmap payload and includeMomentum adds momentum graph data. These optional fields can increase record size. The includeRaw option attaches the full FotMob payload as rawData.

How to use it in 60 seconds

  1. Pick a mode. Choose matches for a date's fixtures, league for a competition season, match for match details, or another mode for profiles, transfers, and search. auto selects based on the inputs you fill.
  2. Fill targets. Add IDs or URLs for the selected mode. For matches, use dates or dateFrom and dateTo; filters such as leagueIds, matchStatus, and timezone are optional.
  3. Run the Actor. Set include options and maxItems as needed. Results are written as they are collected.
  4. Export or connect. Download JSON, CSV, or Excel from the dataset, read records through the Apify API, or connect an integration.

Input examples

Examples use only input fields defined by the Actor schema. You can combine applicable options; defaults are used for fields you leave out.

Today's matches (Berlin timezone)

{
"mode": "matches",
"timezone": "Europe/Berlin",
"matchStatus": "all",
"locale": "de",
"maxItems": 200
}

An empty dates list and no date range means today's matches in UTC by default. timezone selects the day bucket used for match collection.

Bundesliga standings and fixtures

{
"mode": "league",
"leagueIds": ["54"],
"includeStandings": true,
"includeFixtures": true,
"includeTopPlayers": true
}

Match details (lineups, xG, ratings)

{
"mode": "match",
"matchIds": ["4506324"],
"includeLineups": true,
"includeTeamStats": true,
"includePlayerStats": true,
"includeEvents": true
}

Team squad

{
"mode": "team",
"teamIds": ["9825"],
"includeSquad": true,
"includeFixtures": true
}

Transfers feed

{
"mode": "transfers",
"transferPages": 2,
"maxItems": 100
}

Search teams and players

{
"mode": "search",
"searchQueries": ["Bayern", "Haaland"],
"maxItems": 50
}

Premier League results over a date range

dateFrom and dateTo are inclusive and use YYYYMMDD format. League ID 47 is the Premier League.

{
"mode": "matches",
"leagueIds": ["47"],
"dateFrom": "20260801",
"dateTo": "20260831",
"matchStatus": "finished",
"timezone": "Europe/London"
}

Today's matches with match detail enrichment

This fetches the match list and then requests match detail records for those matches. Details are charged as separate match-detail events; use a suitable run timeout for a large set.

{
"mode": "matches",
"timezone": "Europe/Berlin",
"matchStatus": "all",
"enrichMatchDetails": true,
"maxItems": 100
}

Output examples

Every dataset item includes recordType, source, and scrapedAt. These examples show common fields; available data can vary by match and season.

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/match/5903801",
"date": "20260804",
"source": "fotmob-scraper",
"scrapedAt": "2026-08-04T16:00:00Z"
}

Match details (xG, venue, player of the match)

{
"recordType": "matchDetail",
"matchId": 4506324,
"leagueName": "Premier League",
"homeTeam": { "id": 10252, "name": "Aston Villa", "score": 0 },
"awayTeam": { "id": 10260, "name": "Manchester United", "score": 0 },
"xgHome": 0.5,
"xgAway": 0.56,
"xgotHome": 0.39,
"xgotAway": 0.97,
"venue": "Villa Park",
"referee": "Robert Jones",
"attendance": "42682",
"playerOfTheMatch": {
"playerId": 268375,
"name": "Emiliano Martinez",
"teamName": "Aston Villa",
"rating": 8.4
}
}

Record types at a glance

recordTypeCommon fields
matchmatchId, teams, score, status, utcTime, leagueId, matchUrl
leagueDirleagueId, name, category, ccode, leagueUrl
leaguestandings, fixtures, matchIds, top players, season
matchDetaillineups, events, xgHome/xgAway, teamStats, playerStats, venue, referee, H2H
teamsquad, fixtures, standings slice
playerbio, primary team, position, recent matches, career
transferplayer, from/to clubs, fee fields, date
searchHittyped search hits with entity IDs. ccode is not provided by FotMob search and is null

Pricing — what a run costs

This Actor uses pay-per-event pricing. The following prices are per 1,000 successfully delivered records:

EventPrice per 1,000 records
Match (fixture, live match, or result)$2.00
League directory row$1.50
League season record$6.00
Match details (xG, ratings, lineups)$6.00
Team profile$5.00
Player profile$5.00
Transfer row$2.00
Search hit$1.00

The Actor start fee is $0.00005 per run—practically zero, so small runs stay cheap. For example:

  • A day of fixtures (about 70 matches) costs approximately $0.14.
  • 100 match detail records cost approximately $0.60.
  • 5 top-league tables cost approximately $0.03.

You pay only for records delivered to the dataset. Set maxItems to limit the number of records, and use Apify's max-charge-per-run cap to control spend. Apify's free plan includes $5 monthly credit to try Actors. Exact prices are on the Pricing tab and may change.

Compared to the alternatives

ConsiderationThis ActorBuild your own scraperSingle-purpose FotMob toolsManual copy
Modes coveredNine modes in one Actor, including autoWhatever you implementUsually focused on one data type per toolDepends on what you copy
Team, player, and transfersTeam and player profiles plus transfers feedPossible, with separate endpoint workDepends on the specific toolManual and time-consuming
xG, shotmap, and momentumMatch details support these when availablePossible when endpoints expose themDepends on the toolUsually copied field by field
Setup timeConfigure input and runBuild, deploy, and maintain collection codeConfigure each separate toolRepeat manual work for each update
Maintenance when FotMob changesActor is maintained; report issues in the Issues tabYou handle endpoint changesEach tool maintainer handles its scopeYou adjust your process
Export formatsApify dataset formats and APIChoose and implement formatsDepends on platform and toolPaste into your chosen format
Start fee$0.00005 per run, plus record eventsInfrastructure and engineering costsPricing varies by toolNo Actor fee; staff time applies

The right choice depends on the fields and workflow you need. This Actor is designed for structured FotMob collection across match, competition, profile, transfer, and search data.

Use cases

  • Daily football data pipeline: schedule matches, then use enrichMatchDetails when the downstream process needs match detail records.
  • Prediction and model features: collect xG, ratings, lineups, results, and competition context where FotMob provides them.
  • Fantasy and tipster research: compare upcoming fixtures with team form and season player leaders.
  • CMS scoreboards: export results for a date range as JSON, CSV, or Excel and load them into a publishing workflow.
  • ID discovery: use leagues or search, then pass discovered IDs to targeted runs.
  • Soccer stats archive: store dated match and league records in your own dataset for analysis over time.

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 ApifyClient
client = 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 the Actor from AI tools through Apify MCP. Connect your Apify account, then call the Actor by its Store ID or name: crawloop/fotmob-scraper.

Example prompts:

  • “Run FotMob Scraper for today's matches in Europe/Berlin and return finished games as JSON.”
  • “Get Bundesliga league ID 54 standings and top scorers.”
  • “Fetch match 4506324 with lineups and xG, then summarize the player ratings.”

Schedule it

Use Apify Schedules for daily results or to poll live matches every few minutes. Connect run results to webhooks or automation tools such as Zapier, Make, and Google Sheets to pass records into your workflow.

FAQ

Do I need a FotMob account?
No. The Actor uses public JSON endpoints and does not require a FotMob login.

Is this a FotMob API?
It is an Actor that collects data from FotMob's public data endpoints and returns it in a structured Apify dataset. It is not an official FotMob API product, and endpoint availability can change.

Is it legal, and is the data public?
The Actor reads data available from public FotMob pages and endpoints. You are responsible for your use of the data under applicable laws and FotMob's terms. See the disclaimer below.

Does it need a proxy?
No. Requests use HTTP, and a datacenter proxy is usually sufficient if you choose to use one. Proxy configuration is optional.

How fresh are live scores?
They are as fresh as FotMob's public feed at the time the Actor runs. This is a snapshot, not a guaranteed real-time push stream.

Is German /de a separate dataset?
No. The locale option changes URL language and request language headers. Competition and match IDs are global.

How do I find league or match IDs?
Run mode: "leagues" or mode: "search", or start with mode: "matches" and read the matchId and leagueId fields from its records.

Can I get historical seasons?
Yes. Use mode: "league" and provide a seasons value such as 2024/2025 when FotMob lists that season in its available seasons.

Why can a player profile be empty?
FotMob sometimes returns empty player data. Missing records are not written to the dataset and are not billed as delivered records.

What happens if FotMob changes its API?
We maintain the Actor as FotMob's public endpoints change. If a mode stops working or its output changes unexpectedly, report the issue in the Actor's Issues tab.

What about transfers versus Transfermarkt?
This Actor provides FotMob's recent transfers feed. For deep transfer-fee histories, use a source focused on that data.

Can I use it in production?
You can use it for scheduled collection and exports. Plan for the possibility of endpoint changes, set appropriate run limits, and follow applicable terms and laws.

Disclaimer

This Actor is not affiliated with FotMob. It collects publicly accessible data; you are responsible for using it under applicable law and FotMob's terms. Data availability and accuracy are not guaranteed.