Flashscore Standings Scraper avatar

Flashscore Standings Scraper

Pricing

from $3.10 / 1,000 standing rows

Go to Apify Store
Flashscore Standings Scraper

Flashscore Standings Scraper

Fetches league/tournament standings (points tables) from FlashScore for one or more competitions in a single run: rank, played, won, drawn, lost, goals, points, with overall/home/away/form table types. No login or API key needed. Derived from romy/flashscore-all-in-one-api.

Pricing

from $3.10 / 1,000 standing rows

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Categories

Share

What does FlashScore Standings Scraper do?

FlashScore Standings Scraper takes one or more FlashScore tournament/stage id pairs and pushes the current league points table (standings) for each, one dataset row per competition queried.

It talks directly to the same internal API the official FlashScore Android app uses (global.lsapp.eu), reverse-engineered via Frida SSL-pinning bypass and live mitmproxy capture against a real device — the exact static headers and feed format the app itself sends, never guessed. No FlashScore account, no API key, no scraping setup. This is the standings slice of FlashScore All-in-One API, split out as its own focused, batch-run Actor.

Why use FlashScore Standings Scraper?

  • Batch by design — pass an array of competitions, get one dataset row per competition, all fetched in parallel
  • Real, confirmed field mapping — rank, team, played, won, goals, points, and qualification zone were cross-checked against the rendered standings screen for real English Premier League data, not guessed from the raw feed
  • No lookup step needed in the common case — tournamentId and tournamentStageId both come straight from the parent Actor's /leagues endpoint
  • Optional best-effort resolve — if you only have a tournamentStageId (e.g. from a competition tree or search result), the Actor will try to resolve tournamentId for you before failing
  • Use cases: standings dashboards, league-table snapshots for multiple competitions in one run, feeding a downstream analytics pipeline

Input

FieldTypeDescription
competitionsarrayRequired, non-empty. Each item: { tournamentId?, tournamentStageId, type? }.
competitions[].tournamentIdstringFlashScore tournament id, e.g. "SY30SsKF" for Premier League. Get it from the parent Actor's /leagues endpoint. Optional — see below.
competitions[].tournamentStageIdstringFlashScore tournament stage id, e.g. "CfoA8Dmm" for Premier League's Main stage. Required.
competitions[].typestringStandings table type: OVERALL, HOME, AWAY, or FORM. Defaults to OVERALL.

If tournamentId is omitted, the Actor first calls the parent's getTournamentSeasons(tournamentStageId) and tries to extract a tournamentId from the response as a best effort — that endpoint's return shape is not fully verified upstream, so this is a fallback, not the primary path. If it can't find one, the Actor throws a clear error asking you to supply tournamentId directly from /leagues instead.

Example:

{
"competitions": [
{ "tournamentId": "SY30SsKF", "tournamentStageId": "CfoA8Dmm" },
{ "tournamentStageId": "CfoA8Dmm", "type": "FORM" }
]
}

Output

One dataset row per competition entry. Real output from a live run against English Premier League 2026/27 (tournamentId: "SY30SsKF", tournamentStageId: "CfoA8Dmm"), trimmed to two rows:

{
"tournamentId": "SY30SsKF",
"tournamentStageId": "CfoA8Dmm",
"type": "OVERALL",
"standings": [
{
"rank": 1,
"teamId": "Wtn9Stg0",
"teamName": "Man City",
"teamLogo": "https://static.flashscore.com/res/image/data/UXcqj7HG-lQuhqN8N.png",
"played": 2,
"won": 2,
"goals": "6:2",
"points": 6,
"qualificationZone": "q1"
},
{
"rank": 2,
"teamId": "S66R0t75",
"teamName": "Hull",
"teamLogo": "https://static.flashscore.com/res/image/data/jL2Nk4Fa-bJFnYpTt.png",
"played": 2,
"won": 2,
"goals": "3:0",
"points": 6,
"qualificationZone": "q1"
}
]
}

goals is kept as the raw upstream "for:against" string (e.g. "6:2") rather than split into two fields. qualificationZone (e.g. "q1" for a Champions League spot) is only present on rows that actually have one.

Known limitations

  • Top scorers, draws/brackets, results, and fixtures are not part of this Actor — they're covered by the parent FlashScore All-in-One API directly, or by future spin-off Actors.
  • getTournamentSeasons()'s response shape is unverified upstream — the tournamentId-omitted resolve path is best-effort, not guaranteed. Supplying tournamentId directly from /leagues is the reliable path.
  • Only the four confirmed table types (OVERALL, HOME, AWAY, FORM) are supported — there is no 4 variant; it was never a real value in the app's own enum.

Pricing

Pay-per-event, standing — charged once per standings row returned (one team/entry in a table). FREE tier: $0.004 per event. See the Actor's Pricing tab for current rates across all plan tiers.