FlashScore Leagues & Fixtures Scraper
Pricing
from $3.10 / 1,000 records
FlashScore Leagues & Fixtures Scraper
Fetches named league/competition directories plus paginated past results and upcoming fixtures from FlashScore, keyed by sport or tournament stage id. Uses the internal API of the official FlashScore Android app — no account or API key needed. Split out from romy/flashscore-all-in-one-api.
What does FlashScore Leagues & Fixtures Scraper do?
FlashScore Leagues & Fixtures Scraper takes a sport and/or a list of tournament stage ids and pushes named leagues, the raw country/competition tree, and paginated past results / upcoming fixtures — one dataset row per league, competition-tree record, or match event.
It talks directly to the same internal API the official FlashScore Android app uses, reverse-engineered by capturing and analyzing live traffic from the real app with Frida on a real device. No FlashScore account, no API key. This is the leagues/competitions slice of FlashScore All-in-One API, split out as its own focused, batch (dataset-based) Actor.
Why use FlashScore Leagues & Fixtures Scraper?
- Three data sources in one run — named leagues (with ready-to-use
tournamentId/tournamentStageId), the raw competition tree, and paginated results/fixtures, all as plain dataset rows - Enum sport parameter, not opaque numbers —
sporttakes a readable name (SOCCER,TENNIS, ...) resolved from the app's own internal identifiers, not guessed - Automatic pagination — results and fixtures are paginated for you, page by page, until the upstream API signals no more pages or
maxPagesis hit - No account needed — every call works fully anonymously
- Use cases: building a league directory, tracking a season's results/fixtures, feeding tournament stage ids into other FlashScore spin-off Actors (e.g. flashscore-standings-scraper)
Input
| Field | Type | Description |
|---|---|---|
sport | string | Sport name (case-insensitive, e.g. SOCCER) or numeric id. Fetches the named league list for this sport. |
includeRawCompetitions | boolean | Fetch the full raw country/competition tree (unmapped pass-through records). Default false. |
tournamentStageIds | string[] | Tournament stage ids to fetch results/fixtures for (from this Actor's own league rows, or the parent Actor's /leagues endpoint). |
fetchResults | boolean | For each tournament stage id, fetch paginated past results. Only relevant when tournamentStageIds is given. Default true. |
fetchFixtures | boolean | For each tournament stage id, fetch paginated upcoming fixtures. Only relevant when tournamentStageIds is given. Default true. |
maxPages | integer | Stop paginating results/fixtures after this many pages per tournament stage id. Default 5. |
At least one of sport, includeRawCompetitions, or tournamentStageIds must be given.
Example:
{"sport": "SOCCER","includeRawCompetitions": true,"tournamentStageIds": ["CfoA8Dmm"],"maxPages": 2}
Output
One dataset row per league, competition-tree record, or match event, each tagged with a type field. Real rows from this Actor's own smoke test:
A league row (English Premier League):
{"type": "league","name": "Premier League","region": "England","tournamentId": "SY30SsKF","stages": [{ "tournamentStageId": "CfoA8Dmm", "name": "Main", "order": 1 }]}
A competition-tree-record row (raw, unmapped fields — SA groups by sport id, SG lists semicolon-separated {countryId}_{competitionId} pairs):
{"type": "competition-tree-record","SA": "1","SG": "198_dYlOSQOD;198_2DSCa5fE;77_KIShoMk3;81_W6BOzpK2;..."}
A result row (trimmed — real Premier League match, past result):
{"type": "result","tournamentStageId": "CfoA8Dmm","page": 1,"id": "4S67nB0K","startTime": 1788103800,"event": {"eventParticipants": [{ "id": "b9jIngSq", "name": "Man Utd", "type": { "side": "HOME" }, "state": { "result": "5" } },{ "id": "6ZgQpXdd", "name": "Ipswich", "type": { "side": "AWAY" }, "state": { "result": "2" } }],"eventRound": { "value": "Round 2" }}}
A fixture row (trimmed — real Premier League match, upcoming fixture):
{"type": "fixture","tournamentStageId": "CfoA8Dmm","page": 1,"id": "27MtCUO7","startTime": 1788202800,"event": {"eventParticipants": [{ "id": "KbkIs7pm", "name": "Aston Villa", "type": { "side": "HOME" } },{ "id": "hQ2PuoFa", "name": "Arsenal", "type": { "side": "AWAY" } }],"eventRound": { "value": "Round 2" }}}
Known limitations
- The raw competition tree (
competition-tree-recordrows) is unmapped — only the fields cross-checked against the rendered UI elsewhere in the parent Actor are given clean names; here the raw short codes (SA,SG) are returned as-is. - Results/fixtures pagination stop condition: the response DOES carry a
hasNextPageboolean (confirmed live during this Actor's own smoke test) — this Actor uses it as the primary stop signal, falling back to "empty or short page" if it's ever absent, as a safety net against the parent Actor's more general "no total-count field" caveat. event's inner fields are passed through as-is — this Actor doesn't individually map every nested field (scores, incidents, participant images), since the parent client itself only types this response asunknown.- This is an unofficial, reverse-engineered integration, not affiliated with or endorsed by FlashScore. Behavior may change if FlashScore changes its API.
Pricing
Pay per event. Charged $0.004 per record — one dataset row produced (league, raw competition-tree record, result, or fixture). See the Actor's Pricing tab for current rates across tiers.