Flashscore Scraper avatar

Flashscore Scraper

Pricing

from $3.00 / 1,000 matches

Go to Apify Store
Flashscore Scraper

Flashscore Scraper

Extract live scores, fixtures and results from FlashScore: kick-off times, teams, live and final scores, set and period breakdowns, winners and tournament details. Covers soccer, tennis, basketball, hockey, handball, baseball and American football, for any day within a week either side of today.

Pricing

from $3.00 / 1,000 matches

Rating

0.0

(0)

Developer

FalconScrape

FalconScrape

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

๐Ÿš€ FlashScore Scraper

Extract live scores, fixtures and results from FlashScore in structured JSON. The FlashScore Scraper returns a whole day's schedule in a single request โ€” every match with its tournament, teams, start time, live or final score, set-by-set breakdown and winner โ€” across soccer, tennis, basketball, hockey, handball, baseball and American football.

Pick a sport, hit run, and get a clean dataset. Running it on Apify also gives you scheduled runs, an API, webhooks, integrations with Google Sheets, Zapier and Make, automatic proxy rotation, and run monitoring โ€” no infrastructure to maintain.

โœจ Features

  • โšฝ Soccer-first, seven sports deep โ€” soccer, tennis, basketball, hockey, handball, baseball and American football, all returning the same fields.
  • ๐Ÿ”ด Live, finished and upcoming in one pass โ€” today's feed carries matches still to start, matches in play with their running score, and matches already decided.
  • ๐Ÿ† Every match placed in its tournament โ€” competition name, id, stage id and the FlashScore path it lives at, so rows group cleanly by league.
  • ๐ŸŽพ Set and period breakdowns โ€” the score of each set, quarter, period or inning alongside the overall score.
  • ๐Ÿ… Teams and players in full โ€” id, full name, short name, slug and crest or headshot image for both sides, plus country where the sport names one.
  • ๐Ÿ“… A fortnight of coverage โ€” any day from seven back to seven ahead, so you can pull yesterday's results or next week's fixtures with one input change.
  • โš ๏ธ Retirements and walkovers flagged โ€” a statusDetail of retired, walkover or after-penalties tells you when the winner cannot be read off the score.
  • โšก Fast and lightweight โ€” an entire day of soccer, over 480 matches across 200+ tournaments, arrives in one request. No browser required.

๐Ÿ’ก Why use the FlashScore Scraper?

  • Power a live-score widget or bot with a scheduled run against today's feed.
  • Build a results history by running the scraper daily, or backfilling the last week one day at a time.
  • Feed sports models and prediction tools with a consistent, structured match history across seven sports.
  • Track a competition by filtering the dataset on the tournament name or id you care about.
  • Monitor in-play matches using the live status and the running score that comes with it.

๐Ÿ› ๏ธ How to use the FlashScore Scraper

  1. Pick your sport. sport accepts soccer (the default), tennis, basketball, hockey, handball, baseball or american-football.
  2. Pick your day. dayOffset is counted from today: 0 for today, -1 for yesterday, 3 for three days out. Anything from -7 to 7 works.
  3. Set the match limit. maxItems caps how many matches you get.
  4. Run it. Results appear in the dataset and can be downloaded as JSON, CSV, Excel, HTML or XML, or pulled from the API.

๐Ÿ“ฅ Input

FieldTypeDescription
sportstringWhich sport to return: soccer, tennis, basketball, hockey, handball, baseball or american-football. Default soccer.
dayOffsetintegerWhich day, counted from today. 0 today, -1 yesterday, 1 tomorrow. Range -7 to 7. Default 0.
maxItemsintegerMaximum number of matches to return. Default 50.
proxyConfigurationobjectProxy used for the run. The default is fine โ€” results do not vary by country.

Example input:

{
"sport": "soccer",
"dayOffset": 0,
"maxItems": 500,
"proxyConfiguration": { "useApifyProxy": true }
}

๐Ÿ“Š Sample output data

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

[
{
"matchId": "n0DIvUYs",
"sport": "soccer",
"tournament": {
"id": "8189",
"name": "PREMIER LEAGUE: Round 2",
"stageId": "hnrqmMpc",
"url": "/football/england/premier-league/"
},
"startsAt": "2026-08-21T19:00:00.000Z",
"updatedAt": "2026-08-21T19:47:12.000Z",
"status": "live",
"statusDetail": "live",
"home": {
"id": "ppjDR086",
"name": "Manchester City",
"shortName": "MCI",
"slug": "manchester-city",
"country": "England",
"image": "8mfxRUyd-hpqHTiSz.png"
},
"away": {
"id": "Wtn9Stg0",
"name": "Tottenham",
"shortName": "TOT",
"slug": "tottenham",
"country": "England",
"image": "OMwjPqbK-CQKBqPPZ.png"
},
"score": { "home": 1, "away": 0 },
"periods": [{ "home": 1, "away": 0 }],
"winner": null,
"scrapedAt": "2026-08-21T19:48:03.117Z"
}
]

๐Ÿ“‹ Data fields

FieldDescription
matchIdFlashScore's identifier for the match
sportThe sport the match belongs to
tournamentCompetition object: id, name, stageId and url (a FlashScore path)
startsAtStart time in ISO 8601 (UTC)
updatedAtWhen the match was last updated, in ISO 8601 (UTC). Only set once a match has started
statusscheduled, live or finished
statusDetailFiner-grained state: scheduled, live, finished, postponed, retired, walkover or after-penalties. Unrecognised codes pass through as unknown:<code> rather than being mislabelled
home, awayTeam or player object: id, name, shortName, slug, country and image. country is set for individual sports such as tennis and is usually empty for club teams
scoreOverall score, as { home, away }. null until a match starts
periodsArray of { home, away }, one per set, quarter, period or inning played so far
winnerhome, away or null โ€” null while a match is unplayed or in progress, and for a draw
scrapedAtWhen the row was collected, in ISO 8601 (UTC)

๐Ÿ’ฐ How much does it cost to scrape FlashScore?

The scraper uses pay per event pricing, so you only pay for the data you actually get:

EventPriceWhat it covers
Actor start$0.005Charged once per run
Match$0.003One match with its tournament, teams, start time, status, score and period breakdown

A default run of 50 matches costs about $0.16. A full day of soccer โ€” around 480 matches across 200+ tournaments โ€” costs about $1.45. Apify's free tier includes $5 of monthly usage, enough to pull several full days.

โš™๏ธ Tips and advanced options

  • Raise maxItems for a full day. The default of 50 is a sample; a day of soccer runs to roughly 480 matches, tennis to around 200.
  • The next day or two carry the fullest fixture lists. Today's feed only reaches to the end of today, and days further out are still filling up, so dayOffset: 1 and 2 usually return the most scheduled matches.
  • Schedule it for live scores. Run it every few minutes against dayOffset: 0 and read the live rows โ€” score and periods update in play, and updatedAt tells you how fresh each row is.
  • Backfill a week one day at a time. Seven runs at -1 through -7 give you the last week of finished results.
  • Do not read the winner off the score. For rows where statusDetail is retired or walkover, the win goes to the side that did not retire, so the winner can hold the lower score โ€” trust the winner field.
  • Group by tournament.id, not by name. Names carry the round (PREMIER LEAGUE: Round 2) and so change week to week; the id does not.

๐Ÿง Good to know

  • All times are UTC. startsAt, updatedAt and scrapedAt are ISO 8601 with a Z suffix.
  • periods grows as a match progresses and holds up to five entries โ€” enough for a five-set tennis match or four quarters plus overtime.
  • Only the current window is published. Days outside -7 to 7 return nothing, which is why the input rejects them.
  • score is sets in tennis, goals in soccer, points in basketball and so on โ€” it is the sport's own headline score, with the finer detail in periods.
  • A tournament name can be missing a round for competitions that do not have one; the field is still returned.

โ“ FAQ

Which sports are supported? Soccer, tennis, basketball, hockey, handball, baseball and American football. Every sport returns the same fields, so one downstream schema handles them all.

How far ahead or back can I go? Seven days in each direction. Beyond that FlashScore publishes nothing for the day, and the scraper rejects the input rather than finishing with an empty dataset.

Does it return live scores? Yes. Matches in progress come back with status: "live", the running score, the periods played so far, and an updatedAt timestamp.

Can I get more than one sport in a run? One sport per run. Schedule one run per sport, or call the Actor once per sport through the API โ€” a run is a single request, so it finishes in seconds.

Why is winner empty on a match that finished 2-1? It should not be. winner is empty only while a match is unplayed or in progress, and for draws. If you see it empty on a decided match, open an issue.

What does unknown:24 in statusDetail mean? FlashScore uses a wide range of fine-grained state codes and adds new ones. Rather than guess, the scraper passes unrecognised codes through untouched. status is always one of the three known values, so filter on that.

Is scraping FlashScore legal? The scraper only collects publicly available data and stores no personal information. FlashScore's Terms of Service still apply to you as the operator of the run, so you are responsible for making sure your use complies with applicable law and terms โ€” consult a lawyer if you are unsure.

๐Ÿ†˜ Support

Something is broken or missing. Open an issue on the Actor's Issues tab and it will be looked at. Custom variants and bulk extractions can also be arranged.

Start extracting FlashScore live scores today! ๐Ÿš€