FlashScore Match Detail Scraper avatar

FlashScore Match Detail Scraper

Pricing

from $3.10 / 1,000 match detail fetcheds

Go to Apify Store
FlashScore Match Detail Scraper

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

Romy

Maintained by Community

Actor 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

FieldTypeDescription
matchIdsstring[]Required. FlashScore match ids (from flashscore-live-scores-scraper or the parent Actor's /search).
includeLineupsbooleanDefault true
includeStatsbooleanDefault 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.