Flashscore Football Scraper - Live Scores, Results & Stats avatar

Flashscore Football Scraper - Live Scores, Results & Stats

Pricing

from $1.00 / 1,000 matches

Go to Apify Store
Flashscore Football Scraper - Live Scores, Results & Stats

Flashscore Football Scraper - Live Scores, Results & Stats

Scrape football matches from Flashscore across every league: fixtures, live scores, final results, halftime and second-half scores, extra time and penalty shootouts, goalscorers with assists, cards, substitutions and match statistics. No proxy, no login.

Pricing

from $1.00 / 1,000 matches

Rating

0.0

(0)

Developer

Nada Hanad

Nada Hanad

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Share

Get football data from Flashscore as clean JSON: fixtures for the days you choose, live scores, final results with halftime and second-half breakdowns, extra time and penalty shootouts, and, per match, every goal with its assist, cards with the offence, substitutions and full match statistics including expected goals. Every league Flashscore covers, from the Premier League to the Brazilian state divisions. No login, no API key and no proxy.

What data you get

Matches mode returns one row per match:

  • Status resolved from Flashscore's own stage codes, not guessed: scheduled, live, finished, postponed, cancelled or interrupted, plus stageDetail naming the exact stage (FIRST_HALF, HALF_TIME, EXTRA_TIME, AFTER_PENALTIES, AWARDED).
  • Score with its parts: full-time score, first and second half, after extra time, and the penalty shootout.
  • Winner including draws, which is the field most scrapers get wrong by only reporting a side.
  • Competition: name, country, phase such as Qualification or Play Offs, plus IDs and the Flashscore URL.
  • Teams: name, Flashscore team ID and slug, three-letter code and crest image.
  • raw: all 41 original feed fields for the match, so nothing is lost if you need something we did not map.

Match details mode takes match IDs and returns, per match:

  • Goals, cards and substitutions with the minute, the side, the player, the assisting player, the running score after each goal, and the reason attached to a card or a disallowed goal. 19 incidents in the example below.
  • Match statistics split by period and group: expected goals, possession, shots, corners, fouls, saves and more. 120 rows for that match.
  • Head to head: recent form for both teams and their previous meetings.

How to use

  1. Choose Matches mode and set Days (0 is today, -1 yesterday, 1 tomorrow; add several for a range).
  2. Narrow it down if you want: by status, by country, or with a regular expression on the competition name. A full day of world football is 1,500 to 2,000 matches, so a filter is usually worth setting.
  3. Run it, then export as JSON, CSV or Excel, or read it from the API. To go deeper on a match, run the Actor again in Match details mode with the matchId values you got back.

Input

FieldTypeDefaultDescription
modestringmatchesmatches for fixtures, live scores and results; matchDetails for goals, cards, statistics and head to head.
daysarray["0"]Day offsets from today, from -7 to 7. Several entries are fetched in one run and deduplicated.
statusarrayallKeep only scheduled, live, finished, postponed, cancelled or interrupted.
countriesarrayallKeep only these countries or regions, for example England, Spain, Europe.
tournamentFilterstringCase-insensitive regular expression on the full competition name, e.g. `champions league
matchIdsarrayDetails mode: match IDs such as nauPfE4F, or full flashscore.com/match/... URLs.
detailsarrayall threeDetails mode: summary, statistics, h2h.
maxItemsinteger0Stop after this many rows; 0 means no limit.
maxConcurrencyinteger5Parallel requests in details mode.
timeoutSecsinteger30Per-request timeout.
tokenstringAdvanced. Overrides the feed signature, which the Actor otherwise discovers by itself.
proxyConfigurationobjectoffOptional. Not needed in normal use.

Output example

One match from a matches run (the raw object with all 41 feed fields is omitted here for readability):

{
"matchId": "A7Ob65ig",
"url": "https://www.flashscore.com/match/A7Ob65ig/",
"sport": "football",
"status": "finished",
"stage": "finished",
"stageDetail": "FINISHED",
"stageCode": 3,
"stageDetailCode": 3,
"startTime": "2026-09-05T11:30:00.000Z",
"lastUpdate": "2026-09-05T13:25:43.000Z",
"note": null,
"tournament": {
"name": "Premier League",
"fullName": "ENGLAND: Premier League",
"country": "England",
"phase": null,
"id": "CfoA8Dmm",
"stageId": "dYlOSQOD",
"path": "/football/england/premier-league/",
"url": "https://www.flashscore.com/football/england/premier-league/"
},
"home": {
"name": "Newcastle",
"fullName": "Newcastle",
"id": "xlRGtL0n",
"slug": "newcastle-utd",
"url": "https://www.flashscore.com/team/newcastle-utd/xlRGtL0n/",
"code": "NEW",
"image": "https://static.flashscore.com/res/image/data/UXo7VXPq-2Vnc5VQf.png"
},
"away": {
"name": "Bournemouth",
"fullName": "Bournemouth",
"id": "pEUOvaVb",
"slug": "bournemouth",
"url": "https://www.flashscore.com/team/bournemouth/pEUOvaVb/",
"code": "BOU",
"image": "https://static.flashscore.com/res/image/data/C60HMWTH-2XyrBA7b.png"
},
"score": {
"home": 2,
"away": 2,
"firstHalf": {
"home": 1,
"away": 2
},
"secondHalf": {
"home": 1,
"away": 0
},
"afterExtraTime": null,
"penalties": null
},
"winner": "draw",
"inPlay": false,
"ok": true,
"dayOffset": 0,
"scrapedAt": "2026-09-05T14:25:49.907Z"
}

A match details item, trimmed to the first incidents, statistics and one head-to-head match:

{
"matchId": "A7Ob65ig",
"url": "https://www.flashscore.com/match/A7Ob65ig/",
"sport": "football",
"ok": true,
"summary": {
"periods": [
{
"period": "1st Half",
"home": 1,
"away": 2
},
{
"period": "2nd Half",
"home": 1,
"away": 0
}
],
"incidents": [
{
"id": "vXvmuLs2",
"period": "1st Half",
"minute": "9'",
"side": "away",
"overturned": false,
"label": "Goal",
"reason": null,
"scoreHome": 0,
"scoreAway": 1,
"participants": [
{
"type": "goal",
"typeCode": 3,
"name": "Tavernier M.",
"playerId": "jFqXIRZj",
"url": "https://www.flashscore.com/player/tavernier-marcus/jFqXIRZj/",
"role": "Goal"
}
],
"type": "goal",
"player": "Tavernier M."
},
{
"id": "hCprNG1c",
"period": "1st Half",
"minute": "28'",
"side": "home",
"overturned": false,
"label": "Yellow Card",
"reason": "Elbowing",
"scoreHome": null,
"scoreAway": null,
"participants": [
{
"type": "yellow-card",
"typeCode": 1,
"name": "Elanga A.",
"playerId": "dOlRWlZ6",
"url": "https://www.flashscore.com/player/elanga-anthony/dOlRWlZ6/",
"role": "Yellow Card"
}
],
"type": "yellow-card",
"player": "Elanga A."
},
{
"id": "ddyGxKko",
"period": "1st Half",
"minute": "35'",
"side": "away",
"overturned": false,
"label": "Own goal",
"reason": null,
"scoreHome": 0,
"scoreAway": 2,
"participants": [
{
"type": "own-goal",
"typeCode": 4,
"name": "Thiaw M.",
"playerId": "0vSsR1xI",
"url": "https://www.flashscore.com/player/thiaw-malick/0vSsR1xI/",
"role": "Own goal"
}
],
"type": "own-goal",
"player": "Thiaw M."
}
]
},
"statistics": [
{
"period": "Match",
"group": "Top stats",
"name": "Expected goals (xG)",
"home": "0.67",
"away": "1.50"
},
{
"period": "Match",
"group": "Top stats",
"name": "Ball possession",
"home": "57%",
"away": "43%"
},
{
"period": "Match",
"group": "Top stats",
"name": "Total shots",
"home": "8",
"away": "17"
},
{
"period": "Match",
"group": "Top stats",
"name": "Shots on target",
"home": "2",
"away": "5"
}
],
"h2h": [
{
"heading": "Last matches: Newcastle",
"section": "Overall",
"matches": [
{
"matchId": "A7Ob65ig",
"url": "https://www.flashscore.com/match/A7Ob65ig/",
"date": "2026-09-05T11:30:00.000Z",
"competition": "Premier League",
"competitionCode": "PL",
"country": "England",
"home": {
"name": "Newcastle",
"slug": "newcastle-utd",
"id": "p6ahwuwJ"
},
"away": {
"name": "Bournemouth",
"slug": "bournemouth",
"id": "OtpNdwrc"
},
"score": "2:2",
"scoreHome": 2,
"scoreAway": 2,
"winner": null
}
]
}
],
"scrapedAt": "2026-09-05T14:25:34.913Z"
}

A match that cannot be found, or has no data yet, produces { "matchId": "...", "ok": false, "error": "..." } and is not charged.

Pricing

  • $0.001 per match in matches mode. A full day of world football is roughly 1,500 to 2,000 matches, about $1.50 to $2.00 for everything, or a few cents once you filter by country or competition.
  • $0.01 per match in details mode, whatever number of sections you request. Goals, cards, substitutions, every statistic and both teams' recent form count as one charge.
  • Matches that fail or have no data are free. Runs on the Apify free plan.

Use cases

  • Betting and trading models: build a history of results, halftime splits, expected goals and shot volumes, then keep it current with a scheduled daily run.
  • Live scoreboards and bots: poll matches mode for in-play scores and push updates to a site, app or Discord.
  • Fantasy football: settle goals, assists and cards from the incident feed.
  • Media and newsletters: generate daily results digests with scorers and headline statistics.
  • Research and machine learning: label datasets across leagues and seasons, including shootouts, extra time and abandoned matches, which most feeds quietly drop.
  • AI agents: give an assistant a tool that answers "who scored in the Newcastle match" or "what is on today in Spain".

Integrations

curl -X POST "https://api.apify.com/v2/acts/clearfetch~flashscore-football-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"days": ["0"], "countries": ["England"], "status": ["finished"]}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("clearfetch/flashscore-football-scraper").call(
run_input={"days": ["0"], "countries": ["England"], "status": ["finished"]}
)
for match in client.dataset(run["defaultDatasetId"]).iterate_items():
print(match["home"]["name"], match["score"]["home"], "-", match["score"]["away"], match["away"]["name"])

Works with the Apify integrations for n8n, Make, Zapier, Google Sheets, Slack and webhooks, with scheduled runs, and with AI agents through the Apify MCP server.

FAQ

Do I need a proxy? No. The feed answers ordinary datacenter requests. A proxy input exists if you want one.

Do I need a Flashscore account? No. Nothing here requires a login or a cookie.

How is the score reported after a penalty shootout? As Flashscore displays it, which adds the shootout winner's extra point: a 0-0 match won 4-3 on penalties is published as 1-0, with penalties carrying 4-3. Because that inflates the displayed score, firstHalf is left null on those matches rather than derived from a number that would be wrong. Match details mode returns the labelled periods straight from the source.

How fresh is the data? Each run reads the feed live, so matches in progress carry their current score. Schedule a run every few minutes if you need a running scoreboard.

What if Flashscore changes its feed signature? The Actor discovers the current signature from the site on every run and falls back to a known value, so a rotation does not break it. The token input is a last resort.

Which sports does this cover? Football. The same feed carries other sports; ask if you want one added.

Is this legal? It reads the same public endpoints a browser reads, with no login and no personal data. Scores and results are facts. You are responsible for how you use the data, including any redistribution.

Changelog

  • 1.0.0 (2026-09) — first release: matches mode with day ranges and status, country and competition filters; details mode with goals, assists, cards, substitutions, statistics and head to head; status resolved from Flashscore's own stage codes; automatic feed-signature discovery.