Flashscore Standings Scraper
Pricing
from $3.10 / 1,000 standing rows
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
Maintained by CommunityActor 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 —
tournamentIdandtournamentStageIdboth come straight from the parent Actor's/leaguesendpoint - Optional best-effort resolve — if you only have a
tournamentStageId(e.g. from a competition tree or search result), the Actor will try to resolvetournamentIdfor you before failing - Use cases: standings dashboards, league-table snapshots for multiple competitions in one run, feeding a downstream analytics pipeline
Input
| Field | Type | Description |
|---|---|---|
competitions | array | Required, non-empty. Each item: { tournamentId?, tournamentStageId, type? }. |
competitions[].tournamentId | string | FlashScore tournament id, e.g. "SY30SsKF" for Premier League. Get it from the parent Actor's /leagues endpoint. Optional — see below. |
competitions[].tournamentStageId | string | FlashScore tournament stage id, e.g. "CfoA8Dmm" for Premier League's Main stage. Required. |
competitions[].type | string | Standings 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 — thetournamentId-omitted resolve path is best-effort, not guaranteed. SupplyingtournamentIddirectly from/leaguesis the reliable path.- Only the four confirmed table types (
OVERALL,HOME,AWAY,FORM) are supported — there is no4variant; 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.