Flashscore Scraper
Pricing
from $3.00 / 1,000 matches
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
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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
statusDetailofretired,walkoverorafter-penaltiestells 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
livestatus and the running score that comes with it.
๐ ๏ธ How to use the FlashScore Scraper
- Pick your sport.
sportacceptssoccer(the default),tennis,basketball,hockey,handball,baseballoramerican-football. - Pick your day.
dayOffsetis counted from today:0for today,-1for yesterday,3for three days out. Anything from-7to7works. - Set the match limit.
maxItemscaps how many matches you get. - Run it. Results appear in the dataset and can be downloaded as JSON, CSV, Excel, HTML or XML, or pulled from the API.
๐ฅ Input
| Field | Type | Description |
|---|---|---|
sport | string | Which sport to return: soccer, tennis, basketball, hockey, handball, baseball or american-football. Default soccer. |
dayOffset | integer | Which day, counted from today. 0 today, -1 yesterday, 1 tomorrow. Range -7 to 7. Default 0. |
maxItems | integer | Maximum number of matches to return. Default 50. |
proxyConfiguration | object | Proxy 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
| Field | Description |
|---|---|
matchId | FlashScore's identifier for the match |
sport | The sport the match belongs to |
tournament | Competition object: id, name, stageId and url (a FlashScore path) |
startsAt | Start time in ISO 8601 (UTC) |
updatedAt | When the match was last updated, in ISO 8601 (UTC). Only set once a match has started |
status | scheduled, live or finished |
statusDetail | Finer-grained state: scheduled, live, finished, postponed, retired, walkover or after-penalties. Unrecognised codes pass through as unknown:<code> rather than being mislabelled |
home, away | Team 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 |
score | Overall score, as { home, away }. null until a match starts |
periods | Array of { home, away }, one per set, quarter, period or inning played so far |
winner | home, away or null โ null while a match is unplayed or in progress, and for a draw |
scrapedAt | When 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:
| Event | Price | What it covers |
|---|---|---|
| Actor start | $0.005 | Charged once per run |
| Match | $0.003 | One 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
maxItemsfor a full day. The default of50is 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: 1and2usually return the most scheduled matches. - Schedule it for live scores. Run it every few minutes against
dayOffset: 0and read theliverows โscoreandperiodsupdate in play, andupdatedAttells you how fresh each row is. - Backfill a week one day at a time. Seven runs at
-1through-7give you the last week of finished results. - Do not read the winner off the score. For rows where
statusDetailisretiredorwalkover, the win goes to the side that did not retire, so the winner can hold the lower score โ trust thewinnerfield. - 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,updatedAtandscrapedAtare ISO 8601 with aZsuffix. periodsgrows 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
-7to7return nothing, which is why the input rejects them. scoreis sets in tennis, goals in soccer, points in basketball and so on โ it is the sport's own headline score, with the finer detail inperiods.- 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! ๐