FotMob Scraper icon

FotMob Scraper ⚽ Match Details, Stats, Lineups & Players

From $0.8/1K. Pull structured football data from FotMob: match details with scores, team stats, events, lineups, player ratings, H2H, league tables and fixtures, team squads, and player careers. Paste match URLs, pull fixtures by date, or scrape leagues, teams and players.

Open actor on Apify ↗Need a custom scraper?Telegram @abotapi ↗

FotMob Scraper at a glance

FotMob Scraper is a ready-to-run Apify actor from abotapi for collecting news data. Its output documents 38 fields, including type, id, match, name and league, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
News, Developer Tools
Pricing
$2.00 per 1,000 results (Free plan), from $1.20 on paid plans
Output
38 documented fields · JSON, CSV, Excel
Inputs
27 options

What FotMob Scraper ⚽ Match Details, Stats, Lineups & Players can do

  • Seven ways to find data. Matches by id, pasted FotMob links, fixtures on any date, whole leagues, teams, players, or the latest news. No need to build URLs by hand.
  • Full match depth, rival-beating. Every match record carries scores, team stats, events, lineups, flat player-stat rows, shotmaps, team form and player of the match - a superset of the best-known match-details scraper on the store.
  • League, team, player and news surfaces. League tables with fixtures and seasons, team squads with form, player careers with trophies and recent matches, plus the latest football news articles - surfaces a match-only scraper cannot reach.
  • Shot-level xG. The shotmap records every shot's coordinates, shooter, body part, situation and expected goals.
  • Built for schedules. Incremental mode returns only new and changed records on recurring runs, and a refused run fails loudly instead of returning an empty dataset.
  • Simple per-result pricing. Every record bills the same tiered rate (lower per plan tier), plus a small surcharge only for news articles whose full text was read.

Choose what to collect

These inputs let you configure FotMob Scraper ⚽ Match Details, Stats, Lineups & Players. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredHow to discover what to scrape. News reads the latest football headlines (the default: at least 20 results out of the box). Matches by id reads the match links you list below. Paste FotMob URLs reads any mix of match, team, player and league links. Fixtures by date finds every match played on a date. League, Team and Player scrape those pages directly.

Choices: matches, urls, fixturesByDate, league, team, player, news

matchIdsarrayOnly used when Mode = Matches by id. One entry per match: a FotMob match id (e.g. 4506324) or a full match link (e.g. https://www.fotmob.com/match/4506324). Each entry becomes one rich match record.
urlsarrayOnly used when Mode = Paste FotMob URLs. Paste any mix of match links (/match/), team links (/teams//overview/...), player links (/players//...) and league links (/leagues//overview/..., /table, /fixtures and /stats tabs work too). Each link is routed to its own scraper automatically; anything else is skipped with a warning.
datestringOnly used when Mode = Fixtures by date. Day to pull fixtures for, in YYYY-MM-DD (e.g. 2026-08-29). Matches are found through the leagues listed below, filtered to this date.
daysAheadintegerOnly used when Mode = Fixtures by date. Also pull fixtures for this many days after the date above. 0 = just the one day (max 14).
leagueIdsarrayUsed by Mode = League tables & fixtures (the leagues to scrape) and Mode = Fixtures by date (the leagues to search for matches). FotMob league ids (e.g. 47) or plain names (e.g. "Premier League", resolved automatically).
seasonstringOnly used when Mode = League tables & fixtures. Season label exactly as shown on the league page (e.g. 2026/2027). Leave empty for the current season.
Show 20 more inputs
More input fields
InputWhat it controls
teamIdsarrayOnly used when Mode = Team squads. FotMob team ids (e.g. 10252) or plain names (e.g. "Arsenal", resolved automatically). Each team yields its squad, form, fixtures and table.
playerIdsarrayOnly used when Mode = Player profiles. FotMob player ids (e.g. 268375) or plain names (e.g. "Lionel Messi", resolved automatically). Each player yields career history, trophies and recent matches.
newsPagesintegerOnly used when Mode = News articles. How many pages of the latest-news listing to walk (20 articles per page, 2 pages guarantees at least 20 results). The Max records cap below still governs the final count.
includePlayerStatsbooleanMatch records only. Include the flat per-player stat rows (ratings, goals, saves, passes, xG) plus top players.
includeEventsbooleanMatch records only. Include goals, cards and substitutions plus the shot-by-shot shotmap (xG per shot).
includeLineupsbooleanMatch records only. Include starters, subs, formations and coach for both sides.
includeTeamStatsbooleanMatch records only. Include possession, shots, passes, xG and every other team stat group.
includeH2HbooleanMatch records only. Include past meetings between the two teams plus the league-table snapshot carried on the match page. Off by default: it makes records much larger.
includeRawDatabooleanInclude the full embedded page payload under rawData. Large, turn on only when you need every field.
includeNewsBodybooleanOnly used when Mode = News articles. Fetch the full article text for each news record (one extra request per article, no extra per-record charge). Adds bodyHtml plus plain-text bodyText and fills in the lead. Works for FotMob-native articles (/news/...); syndicated embeds (/embed/news/...) are iframes to the publisher's site and carry no body on FotMob's side.
maxItemsintegerStop after this many records across the whole run (0 = no limit). Use it to cap run size and cost.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue that interrupted run without returning or charging for records already collected there. For recurring monitoring of the same scope, use Recurring updates below instead, leave this empty.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns all matching records as NEW. Later runs return only NEW, UPDATED and REAPPEARED records. Turn on Also-return options below only when you also want those extra records returned (and billed).
stateKeystringOptional. Name this monitoring campaign to keep its memory stable, or to deliberately share memory across differently configured runs. Leave empty to key the memory on this run setup automatically.
emitUnchangedbooleanOff by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.
emitExpiredbooleanOff by default. Turn on to also return records that were present before but are no longer found, marked EXPIRED. Only produced when a run covered its whole setup, so a capped or continued run never reports records as gone.
ignoreFieldsForChangesarrayOutput field names that should NOT mark a record as UPDATED. scrapedAt is always ignored because it is stamped fresh on every fetch. Add fields such as teamForm here if changes to them are not relevant to you. Ignored fields are still returned in the output.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

typeType (text)
idID (number)
matchNameMatch (text)
nameName (text)
leagueNameLeague (text)
homeTeamNameHome (text)
awayTeamNameAway (text)
homeScoreH (number)
awayScoreA (number)
scoreStrScore (text)
startedStarted (boolean)
finishedFinished (boolean)
Show 26 more fields
matchTimeUtcKickoff (UTC) (date)
roundNameRound (text)
countryCodeCountry (text)
venueVenue (text)
stadiumStadium (text)
refereeReferee (text)
attendanceAttendance (number)
urlURL (link)
matchUrlMatch URL (link)
changeTypeChange type (incremental mode) (text)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
matchIdMatch ID (number)
leagueIdLeague ID (number)
roundRound (text)
homeTeamHome team (text)
awayTeamAway team (text)
playerOfTheMatchPlayer of the match (text)
teamStatsTeam stats (text)
eventsEvents (text)
lineupsLineups (text)
playerStatsPlayer stats (text)
h2hH2H (text)
sourceSource (text)
scrapedAtScraped at (date)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "type": "match",
  "id": 4506324,
  "matchId": 4506324,
  "matchName": "Aston Villa-vs-Manchester United_Sun, Oct 6, 2024, 13:00 UTC",
  "matchUrl": "https://www.fotmob.com/match/4506324",
  "leagueId": 47,
  "leagueName": "Premier League",
  "round": "7",
  "roundName": "7",
  "countryCode": "ENG",
  "matchTimeUtc": "2024-10-06T13:00:00.000Z",
  "started": true,
  "finished": true,
  "homeTeam": {
    "id": 10252,
    "name": "Aston Villa",
    "score": 0
  },
  "awayTeam": {
    "id": 10260,
    "name": "Manchester United",
    "score": 0
  },
  "venue": {
    "name": "Villa Park",
    "city": "Birmingham",
    "capacity": 42788
  },
  "referee": "Robert Jones",
  "attendance": 42682,
  "playerOfTheMatch": {
    "playerId": 268375,
    "name": "Emiliano Martinez",
    "teamName": "Aston Villa"
  },
  "teamStats": [
    {
      "group": "Top stats",
      "title": "Ball possession",
      "key": "BallPossesion",
      "home": 54,
      "away": 46
    }
  ],
  "events": [
    {
      "type": "Card",
      "minute": 3,
      "minuteLabel": "3",
      "isHome": false,
      "playerName": "Christian Eriksen",
      "card": "Yellow"
    }
  ],
  "lineups": {
    "home": {
      "teamName": "Aston Villa",
      "formation": "4-4-1-1",
      "coach": "Unai Emery"
    }
  },
  "playerStats": [
    {
      "playerId": 268375,
      "playerName": "Emiliano Martinez",
      "rating_title": 8.14
    }
  ],
  "source": "fotmob",
  "scrapedAt": "2024-10-06T00:00:00Z"
}

Ways to use this data

  • Who: sports betting and odds researchers - collect team stats, xG shotmaps, head-to-head records and form to build and backtest models.
  • Who: live score apps and dashboards - feed fixtures, scores, events and ratings into your own site, bot or alerting tool.
  • Who: fantasy sports and scouting teams - track player ratings, positions, squads and career moves across leagues.
  • Who: sports analytics and data science teams - build historical datasets of results, xG-bearing stats and lineups for machine learning.
  • Who: media and content teams - generate match previews, reports and league tables automatically.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does FotMob Scraper return?

FotMob Scraper returns 38 documented fields, including type, id, match, name, league, home, away and h. Availability of each field depends on the source page and the selected mode.

How much does FotMob Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed matches on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated records, and unchanged ones are not billed.

Why did a fixtures run return fewer matches than the full day?

Fixtures mode discovers matches through the tracked leagues' fixtures (leagueIds, default Premier League). Add more league ids to widen the day, and raise Max items so nothing is cut off.

Do I need to know FotMob's numeric ids?

No. leagueIds, teamIds and playerIds also accept names (e.g. "Arsenal", "Lionel Messi", "Premier League") and are resolved to the right id automatically. An unresolvable name is skipped with a warning rather than silently guessed.

Why did my run fail instead of returning an empty dataset?

If the site refuses every request, the run stops with a clear message so "no matches today" is never confused with "nothing could be read". Run it again in a few minutes. If only some targets could be read, you still get what was found.