FlashScore Leagues & Fixtures Scraper avatar

FlashScore Leagues & Fixtures Scraper

Pricing

from $3.10 / 1,000 records

Go to Apify Store
FlashScore Leagues & Fixtures Scraper

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.

Pricing

from $3.10 / 1,000 records

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Categories

Share

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 — sport takes 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 maxPages is 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

FieldTypeDescription
sportstringSport name (case-insensitive, e.g. SOCCER) or numeric id. Fetches the named league list for this sport.
includeRawCompetitionsbooleanFetch the full raw country/competition tree (unmapped pass-through records). Default false.
tournamentStageIdsstring[]Tournament stage ids to fetch results/fixtures for (from this Actor's own league rows, or the parent Actor's /leagues endpoint).
fetchResultsbooleanFor each tournament stage id, fetch paginated past results. Only relevant when tournamentStageIds is given. Default true.
fetchFixturesbooleanFor each tournament stage id, fetch paginated upcoming fixtures. Only relevant when tournamentStageIds is given. Default true.
maxPagesintegerStop 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-record rows) 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 hasNextPage boolean (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 as unknown.
  • 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.