FotMob Matches Scraper avatar

FotMob Matches Scraper

Pricing

from $3.00 / 1,000 match results

Go to Apify Store
FotMob Matches Scraper

FotMob Matches Scraper

Scrape all football matches on FotMob for any date or date range — fixtures, live scores and final results across every competition — as one clean JSON/CSV record per match with teams, score, kickoff time, status and league. Filter by league or match status. Failed requests are never billed.

Pricing

from $3.00 / 1,000 match 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 Matches Scraper — Every Fixture, Live Score & Final Result, by Date

Turn any date (or date range) on FotMob into clean, structured JSON or CSV: every football match across every competition that day — teams, score, kickoff time, status, and league context — one tidy record per match. Yesterday's results, today's live scores, or next week's fixtures, all in a single dataset.

Point it at one or more dates (or just leave it empty for today), optionally filter by league or match status, and get back data ready for a spreadsheet, database, model, or app. No login, no account, no HTML wrangling — and you are never billed for failed requests.

Good to know: every match carries its FotMob matchId. Feed those ids straight into the FotMob Match Details Scraper to drill from a day's scoreline down to lineups, events, and per-player stats — no manual id-hunting in between.


Why this Actor

  • A whole day of football in one run. A single request per date returns every match across every competition FotMob tracks — no per-league fan-out, no pagination, no crawling.
  • Fixtures, live scores, and results — your choice. Filter by status to keep only finished, live (in progress), or upcoming matches, or take them all.
  • Built to chain. Every record carries the matchId and a ready-made matchUrl, designed to feed the FotMob Match Details Scraper.
  • Date, range, or just today. Pass explicit dates, a from/to range, or leave everything empty to scrape today's matches automatically.
  • Filter to the leagues you care about. Pass FotMob leagueIds to keep only matches in those competitions (the filter matches the league or its parent competition, so group-stage matches of a tournament are kept too).
  • Works globally, no login. No FotMob account, no per-region setup. Apify Proxy (datacenter by default) handles the requests for you.
  • You never pay for failures. A date that can't be fetched is reported in the run summary — not written to your dataset and not billed.
  • Clean, consistent output. Integer ids, nested home/away team objects, ISO timestamps, and a stable schema across every league and date.

Problems this Actor solves

If you are…Your problemHow this Actor solves it
Building a football-data pipelineYou need a daily feed of fixtures and results across all leaguesOne run per date returns every match; chain the matchIds into the Match Details Scraper
A model / prediction developerCollecting historical results day-by-day is slow and brittlePass a date range and pull every result with scores in one run
A live-score / notifications appPolling many league endpoints for in-play matches is painfulFilter status=live and scrape today's date on a schedule
A fantasy / betting tool builderYou need upcoming fixtures across competitions in one placeFilter status=upcoming over a date range; export straight to your backend
A content creator / journalistCompiling the day's scoreboard by hand is tediousOne dated record per match — export to Sheets, CSV, or your CMS

What data you get

Each match becomes one dataset record:

FieldDescription
matchIdFotMob's stable numeric match id (the record's unique id). Integer. Feed it to the Match Details Scraper
leagueIdFotMob league id this match belongs to. Integer
leagueNameLeague / competition name (e.g. Premier League, World Cup Grp. K)
parentLeagueIdParent competition id, when the league is a stage/group (e.g. the World Cup id for a group). Integer or null
parentLeagueNameParent competition name, or null
ccodeFIFA country code (e.g. ENG); INT for international competitions. May be null
utcTimeKickoff time in UTC (ISO 8601)
started / finished / cancelledMatch status booleans
statusShortShort status label (e.g. FT, HT, AET); null for upcoming
statusLongLong status label (e.g. Full-Time); null for upcoming
homeTeam{ id, name, score }score is null before kickoff
awayTeam{ id, name, score }score is null before kickoff
matchUrlAbsolute FotMob match URL (https://www.fotmob.com/match/<id>)
dateThe YYYYMMDD date bucket this match was scraped under
sourceAlways fotmob-matches-scraper
scrapedAtISO 8601 timestamp of the run

Example output

{
"matchId": 4667820,
"leagueId": 894800,
"leagueName": "World Cup Grp. K",
"parentLeagueId": 77,
"parentLeagueName": "World Cup",
"ccode": "INT",
"utcTime": "2026-06-18T02:00:00.000Z",
"started": true,
"finished": true,
"cancelled": false,
"statusShort": "FT",
"statusLong": "Full-Time",
"homeTeam": { "id": 8700, "name": "Uzbekistan", "score": 1 },
"awayTeam": { "id": 8258, "name": "Colombia", "score": 3 },
"matchUrl": "https://www.fotmob.com/match/4667820",
"date": "20260618",
"source": "fotmob-matches-scraper",
"scrapedAt": "2026-06-18T11:09:20+00:00"
}

Matches are de-duplicated by matchId across the dates you request, so you get exactly one clean record per match. A date that cannot be fetched is not written to the dataset (and never billed) — it is listed in the run's SUMMARY record in the key-value store ({ "failures": [ { "input": "20260618", "error": "…" } ] }), and the run's status message tells you at a glance how many matches were captured.


How to use it (60 seconds)

  1. Click Try for free / Start.
  2. Choose the dates:
    • Today (default): leave Dates, Date from, and Date to empty.
    • Specific days: add one or more dates in YYYYMMDD form under Dates (e.g. 20260618).
    • A range: set Date from and Date to (YYYYMMDD, inclusive).
  3. (Optional) Narrow the results:
    • League ids — keep only matches in those competitions. (Discover ids with the FotMob Leagues List Scraper.)
    • Match statusAll, Finished only, Live, or Upcoming.
  4. Keep the Apify Proxy enabled (datacenter is enough — the default).
  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 dates.

Input reference

FieldTypeDefaultDescription
Dates (optional)list(empty)Specific dates in YYYYMMDD. If set, the date range is ignored. Empty = today.
Date from (optional)string(empty)Start of a YYYYMMDD range. Used only when Dates is empty.
Date to (optional)string(empty)End of a YYYYMMDD range (inclusive). Used only when Dates is empty.
League ids (optional)list(empty)Keep only matches in these FotMob league ids (matches the league or its parent competition). Empty = all leagues.
Match statusselectallKeep only all, finished, live, or upcoming matches.
TimezonestringUTCIANA timezone FotMob uses to bucket matches into a date (e.g. Europe/London).
Proxy configurationobjectApify Proxy (datacenter)Routes requests through Apify Proxy. Datacenter is enough — keep it enabled.
Max concurrencyinteger3Parallel requests, one per date (1–20). Kept moderate to be respectful.
Delay between requestsinteger1Politeness delay in seconds before each request (0–10).
Max itemsinteger0Stop after producing this many records (0 = no limit).

A single run is capped at 366 dates as a safety limit.


Pricing — what a run costs

This Actor uses transparent pay-per-event pricing with a built-in volume discount: a small Actor-start fee, a fixed price per successful match record for the first 10,000 results of a run, and a cheaper rate for every result beyond that. No subscription, no minimums, and failures are never charged. The exact per-result rate is shown on the Actor's Pricing tab.

  • One billed record per match. Failed dates bill nothing.
  • Failed requests are free. A date that won't load is 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
Every competition's matches for a dateYesYou maintain itImpractical
Date ranges (historical or upcoming)YesYou build itOne page at a time
Filter by league / statusYesYou build it
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 day

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.
  • FotMob League Scraper — standings, fixtures, results, and season top players per league-season.
  • FotMob Matches Scraper (this Actor) — every match for a date or range, with scores and status; emits the matchIds.
  • FotMob Match Details Scraper — pass those matchIds to get lineups, events, and per-player match stats.

Typical flow: scrape a date here → take the matchIds → run the FotMob Match Details Scraper for deep per-match data.


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 scrape today's matches every morning (or every few minutes for live scores), and webhooks to push finished runs into your pipeline (Sheets, Slack, your backend).
  • Chain to match detail: read matchId from each record and pass it to the FotMob Match Details Scraper to expand a day's results 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.

How do I get just today's matches? Leave Dates, Date from, and Date to all empty — the Actor defaults to today (in the timezone you choose).

Can I get live scores? Yes. Set Match status to Live and scrape today's date; schedule the Actor to re-run every few minutes for a live feed.

Why are some scores null? Matches that haven't kicked off yet appear with score: null and started: false — exactly what you want for upcoming-fixture lists.

What's the difference between leagueId and parentLeagueId? For multi-stage competitions (e.g. a World Cup group), leagueId is the stage and parentLeagueId is the overall competition. The league filter matches either, so passing the parent id keeps all of its groups.

How do I get a match's full details? Take the matchId from each record and run the FotMob Match Details Scraper — the two Actors are designed to chain.

How fresh is the data? Each run fetches live data, so you get exactly what FotMob shows at that moment.

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 concurrency moderate and delays reasonable. This project is not affiliated with, endorsed by, or sponsored by FotMob.