FlashScore Match Detail Scraper
Pricing
from $3.10 / 1,000 match detail fetcheds
FlashScore Match Detail Scraper
Fetches full lineups (starting XI, formation, coaches, substitution/card/goal incidents) and match statistics (possession, shots) for FlashScore match ids. Uses the FlashScore Android app's internal API — no login or API key needed. Derived from romy/flashscore-all-in-one-api as a focused spin-off.
Pricing
from $3.10 / 1,000 match detail fetcheds
Rating
0.0
(0)
Developer
Romy
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
12 days ago
Last modified
Categories
Share
What does FlashScore Match Detail Scraper do?
FlashScore Match Detail Scraper takes one or more FlashScore match ids and pushes full match lineups (starting XI, substitutes, formation, coaches, substitution/card/goal incidents) and match statistics (possession, shots, and every other stat FlashScore tracks per team), one dataset row per match.
It talks directly to the same internal API the official FlashScore Android app uses (global.ds.lsapp.eu), reverse-engineered by live Frida SSL-pinning bypass + mitmproxy capture against a real device — real persisted-query GraphQL hashes the app itself sends (dli2 for lineups, dsos2 for stats), never guessed. No FlashScore account, no API key. This is the match-detail slice of FlashScore All-in-One API, split out as its own focused Actor.
Why use FlashScore Match Detail Scraper?
- Two calls in one row — lineups and statistics, fetched in parallel and merged into a single dataset item per match id
- Rich lineup data — starting XI, bench, formation (e.g. "4-2-3-1"), coaches, and every substitution/goal/card incident with the minute it happened
- Full stat breakdown per team — ball possession, shots (total/on target/off target/blocked), and whatever else FlashScore reports for that sport
- No account needed — every read request works fully anonymously
- Use cases: post-match analysis, fantasy-sports scoring, stats dashboards, enriching a match-list pipeline with detail
Input
| Field | Type | Description |
|---|---|---|
matchIds | string[] | Required. FlashScore match ids (from flashscore-live-scores-scraper or the parent Actor's /search). |
includeLineups | boolean | Default true |
includeStats | boolean | Default true |
Example:
{"matchIds": ["lOnDnXeE"],"includeLineups": true,"includeStats": true}
Output
One dataset row per match id (real output from a live smoke test — a finished Bordeaux vs. Lyon match, trimmed for brevity):
{"matchId": "lOnDnXeE","lineups": {"data": {"findEventById": {"eventParticipants": [{"name": "Bordeaux","type": { "side": "HOME" },"lineup": {"formation": { "name": "4-2-3-1" },"players": [{ "name": "Carrasso Cedric", "number": "1", "playerRoles": [{ "title": "Goalkeeper" }] }]}},{ "name": "Lyon", "type": { "side": "AWAY" } }]}}},"stats": {"data": {"findEventById": {"eventParticipants": [{"type": { "side": "HOME" },"stats": [{"values": [{ "name": "Ball possession", "label": "60%" },{ "name": "Total shots", "label": "10" }]}]},{"type": { "side": "AWAY" },"stats": [{"values": [{ "name": "Ball possession", "label": "40%" },{ "name": "Total shots", "label": "13" }]}]}]}}}}
If includeLineups or includeStats is false, the corresponding field is omitted from the row entirely rather than pushed as null.
Known limitations
- Lineups and stats are only populated for matches that have started or finished — a match far in the future returns an empty/near-empty shape (upstream behavior, not an error on this Actor's part).
- Match summary (score/status), odds, standings, and every other endpoint family are separate spin-off Actors from the same parent.
Pricing
Pay-per-event. One match-detail event is charged per match id processed, starting at $0.004 on the Free plan. See the Actor's Pricing tab for current rates across plans.