FlashScore Live Scores Scraper avatar

FlashScore Live Scores Scraper

Pricing

from $6.20 / 1,000 match records

Go to Apify Store
FlashScore Live Scores Scraper

FlashScore Live Scores Scraper

Fetch a sport's full match list for any day, live-score deltas, or per-match detail bundles by match id β€” no login or API key needed. Talks directly to FlashScore's internal app API via reverse-engineered live capture. The live-scores slice of romy/flashscore-all-in-one-api, covering 39 sports.

Pricing

from $6.20 / 1,000 match records

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Categories

Share

What does FlashScore Live Scores Scraper do?

FlashScore Live Scores Scraper fetches a sport's full match list for a given day, its lightweight live-score delta feed, and/or rich per-match detail + live-hash snapshots for specific match ids β€” one dataset row per match/record, no API key needed.

It talks directly to the same internal feed/GraphQL API the official FlashScore Android app uses, reverse-engineered by live MITM capture against a real device (Frida SSL-pinning bypass, ~960 requests across three separate exploration sessions) and cross-checked against the app's own decompiled source (Jadx). This is the live-scores/match-list slice of FlashScore All-in-One API, split out as its own focused Actor β€” odds, lineups, stats, standings, news, search, and competitions are separate spin-off Actors.

Why use FlashScore Live Scores Scraper?

  • No auth, no API key β€” the app's own static headers (x-fsign etc.) are the same on every request, confirmed identical across every endpoint and sport in every capture session
  • Full day's match list in one call β€” every match for a sport on one day, across all competitions, in a single response
  • Cheap live polling β€” live: true hits the same lightweight delta feed the app itself polls repeatedly, instead of re-fetching the full match list
  • Per-match detail bundle β€” for any match id, get GraphQL detail (participants, league, round, settings), the cache-invalidation version hash, and the legacy summary feed in one row
  • Global coverage β€” 39 confirmed sports, from soccer and tennis to darts and kabaddi
  • Use cases: live-score dashboards, sports data pipelines, odds/results monitoring, match research tools

Input

FieldTypeDescription
sportstringSport name (case-insensitive, e.g. SOCCER) or numeric id. Required unless matchIds or includeSportsList is set.
dateOffsetintegerDays from today: 0=today, negative=past, positive=future. Confirmed live range -7 to 7. Ignored when live is true. Default 0.
livebooleanIf true, fetch the lightweight live-score delta feed for the sport instead of the full day's match list. Default false.
matchIdsstring[]For each match id, fetches detail + version hash + summary in parallel and pushes one row per id. Independent of sport/live/dateOffset.
includeSportsListbooleanIf true, also fetch the full sport list (with match/live counts) and push each sport record as its own row. Default false.

At least one of sport, matchIds, includeSportsList must be given.

sport accepts any of: SOCCER, TENNIS, BASKETBALL, HOCKEY, AMERICAN_FOOTBALL, BASEBALL, HANDBALL, RUGBY_UNION, FLOORBALL, BANDY, FUTSAL, VOLLEYBALL, CRICKET, DARTS, SNOOKER, BOXING, BEACH_VOLLEYBALL, AUSSIE_RULES, RUGBY_LEAGUE, BADMINTON, WATER_POLO, GOLF, FIELD_HOCKEY, TABLE_TENNIS, BEACH_SOCCER, MMA, NETBALL, PESAPALLO, MOTORSPORT, AUTORACING, MOTORACING, CYCLING, HORSE_RACING, ESPORTS, WINTER_SPORTS, SKI_JUMPING, ALPINE_SKIING, CROSS_COUNTRY, BIATHLON, KABADDI (these are the app's own internal constant names, decompiled from its enum β€” not localized display text).

Example:

{
"sport": "SOCCER",
"dateOffset": 0
}

Output

One dataset row per match record when using sport/live (raw pipe-feed fields, tagged with type: "match" β€” field names are FlashScore's own short codes, e.g. AE/AF = home/away team name, AG/AH = home/away score; some rows are league/section headers rather than individual matches). Real example, live-tested (Belgian Challenger Pro League, 2026-08-31):

{
"type": "match",
"AA": "CKQq04lL",
"AD": "1788110100",
"AE": "Seraing",
"AF": "K. Lierse S.K.",
"AG": "1",
"AH": "1",
"AW": "1"
}

One row per id when using matchIds, real example (4GzyLE2N, Newcastle vs West Brom, EFL Cup):

{
"matchId": "4GzyLE2N",
"detail": {
"data": {
"findEventById": {
"id": "4GzyLE2N",
"sportId": 1,
"leagueNames": { "nameA": "England", "nameC": "EFL Cup" },
"eventParticipants": [
{ "name": "Newcastle", "type": { "side": "HOME" } },
{ "name": "West Brom", "type": { "side": "AWAY" } }
]
}
}
},
"versionHash": [],
"summary": [{ "EA": "Newcastle", "EB": "West Brom", "EE": "England: EFL Cup" }]
}

Known limitations

  • The legacy pipe-feed endpoints (sport/live mode) return raw short field codes; only a subset (EA/EB, EE/EF, EG, EH) were individually cross-checked against the rendered UI β€” score/status fields (DS/DE/DF/DG/DH/DI, DA/DZ) are best-effort, not confirmed.
  • matchIds versionHash can be empty for a match that has no cache-invalidation hash currently published (e.g. finished/off-cycle matches) β€” that's expected, not an error.
  • Odds, lineups, stats, standings, news, search, and competitions are not covered here β€” use FlashScore All-in-One API or its other spin-off Actors.

Pricing

Pay per event, billed as match β€” one charge per match/live-update row pushed to the dataset (sport list rows, match listings, live updates, and match-detail lookups all count as one match event each). FREE-tier price: $0.008 per match event. See the Actor's Pricing tab for current tiered rates.