FotMob Matches Scraper
Pricing
from $3.00 / 1,000 match results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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), orupcomingmatches, or take them all. - Built to chain. Every record carries the
matchIdand a ready-madematchUrl, designed to feed the FotMob Match Details Scraper. - Date, range, or just today. Pass explicit dates, a
from/torange, 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 problem | How this Actor solves it |
|---|---|---|
| Building a football-data pipeline | You need a daily feed of fixtures and results across all leagues | One run per date returns every match; chain the matchIds into the Match Details Scraper |
| A model / prediction developer | Collecting historical results day-by-day is slow and brittle | Pass a date range and pull every result with scores in one run |
| A live-score / notifications app | Polling many league endpoints for in-play matches is painful | Filter status=live and scrape today's date on a schedule |
| A fantasy / betting tool builder | You need upcoming fixtures across competitions in one place | Filter status=upcoming over a date range; export straight to your backend |
| A content creator / journalist | Compiling the day's scoreboard by hand is tedious | One dated record per match — export to Sheets, CSV, or your CMS |
What data you get
Each match becomes one dataset record:
| Field | Description |
|---|---|
matchId | FotMob's stable numeric match id (the record's unique id). Integer. Feed it to the Match Details Scraper |
leagueId | FotMob league id this match belongs to. Integer |
leagueName | League / competition name (e.g. Premier League, World Cup Grp. K) |
parentLeagueId | Parent competition id, when the league is a stage/group (e.g. the World Cup id for a group). Integer or null |
parentLeagueName | Parent competition name, or null |
ccode | FIFA country code (e.g. ENG); INT for international competitions. May be null |
utcTime | Kickoff time in UTC (ISO 8601) |
started / finished / cancelled | Match status booleans |
statusShort | Short status label (e.g. FT, HT, AET); null for upcoming |
statusLong | Long 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 |
matchUrl | Absolute FotMob match URL (https://www.fotmob.com/match/<id>) |
date | The YYYYMMDD date bucket this match was scraped under |
source | Always fotmob-matches-scraper |
scrapedAt | ISO 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)
- Click Try for free / Start.
- Choose the dates:
- Today (default): leave Dates, Date from, and Date to empty.
- Specific days: add one or more dates in
YYYYMMDDform under Dates (e.g.20260618). - A range: set Date from and Date to (
YYYYMMDD, inclusive).
- (Optional) Narrow the results:
- League ids — keep only matches in those competitions. (Discover ids with the FotMob Leagues List Scraper.)
- Match status —
All,Finished only,Live, orUpcoming.
- Keep the Apify Proxy enabled (datacenter is enough — the default).
- 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
| Field | Type | Default | Description |
|---|---|---|---|
| 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 status | select | all | Keep only all, finished, live, or upcoming matches. |
| Timezone | string | UTC | IANA timezone FotMob uses to bucket matches into a date (e.g. Europe/London). |
| Proxy configuration | object | Apify Proxy (datacenter) | Routes requests through Apify Proxy. Datacenter is enough — keep it enabled. |
| Max concurrency | integer | 3 | Parallel requests, one per date (1–20). Kept moderate to be respectful. |
| Delay between requests | integer | 1 | Politeness delay in seconds before each request (0–10). |
| Max items | integer | 0 | Stop 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 Actor | Build your own scraper | Manual checking | |
|---|---|---|---|
| Every competition's matches for a date | Yes | You maintain it | Impractical |
| Date ranges (historical or upcoming) | Yes | You build it | One page at a time |
| Filter by league / status | Yes | You build it | – |
| 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 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
matchIdfrom 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
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.
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.