Flashscore Results Scraper: Full Seasons by League avatar

Flashscore Results Scraper: Full Seasons by League

Pricing

from $0.70 / 1,000 matches

Go to Apify Store
Flashscore Results Scraper: Full Seasons by League

Flashscore Results Scraper: Full Seasons by League

Full-season match results from public Flashscore league, tournament and team pages. Scores, half-time, periods, extra time and penalties for football, tennis, basketball, hockey and more. Past seasons, date filters, upcoming matches. No proxy, no login.

Pricing

from $0.70 / 1,000 matches

Rating

0.0

(0)

Developer

ZeroLag Data

ZeroLag Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Flashscore scraper for full seasons. Paste a league, tournament or team address from flashscore.com and get every match as a clean row: final score, half-time, periods, penalties, round and start time.

  • Price: $1.00 per 1,000 matches on the Free plan, $0.70 on Business. Platform usage is included.
  • Input: Flashscore addresses. Add past seasons, dates or upcoming matches when you need them.
  • Output: teams, score, winner, half-time, periods, penalties, stage, round, start time and match link.
  • Measured: all 380 matches of the 2023/2024 Premier League in 24 seconds on Apify.

Found a bug, need a field, or want a new Actor? Open an issue on the Issues tab. If it works well for you, a short review helps others find it.

How to use it

  1. Open a league, tournament or team on flashscore.com and copy the address.
  2. Paste it into League, tournament or team addresses. Add as many as you need.
  3. Set Seasons per league and Maximum results, then click Start.
  4. Export the results as JSON, CSV or Excel.
AddressYou get
flashscore.com/football/england/premier-league/The current season
flashscore.com/football/england/premier-league-2023-2024/That season
flashscore.com/tennis/atp-singles/wimbledon-2023/That tournament, qualifying included
flashscore.com/team/arsenal/hA1Zm19f/That team in all competitions, newest first

Tabs in the address, such as /results/ or /standings/, make no difference.

Example input:

{
"urls": ["https://www.flashscore.com/football/england/premier-league-2023-2024/"],
"maxItems": 400
}

Football, tennis, basketball, hockey, baseball, American football, handball, volleyball, rugby, cricket, darts, snooker, futsal and Australian football were tested.

What data you get

Rows have the same fields in every sport. A value the source does not show is null.

FieldWhat it holds
matchId, matchUrlMatch ID and link
sport, categorySport, then the country, region or tour
league, leagueUrl, seasonCompetition. season is empty for team addresses
stage, roundFor example Play Offs and Semi-finals. Empty where the source has none
startTimeStart in UTC
statusfinished, abandoned, scheduled or live. other means a state the Actor does not know yet
resultTyperegular time, extra time, penalties, retired, walkover or awarded
homeTeam, awayTeamTeams, or the first and second player
homeTeamId, awayTeamIdFlashscore IDs, the same in every season
homeScore, awayScoreFinal score as the results list shows it, or sets won in tennis
winnerhome, away or draw. A shoot-out counts
halfTimeHomeScore, halfTimeAwayScoreHalf-time score in football, futsal, handball and rugby
regularTimeHomeScore, regularTimeAwayScoreScore before any extra time
penaltiesHomeScore, penaltiesAwayScoreShoot-out score
periodsScore of each half, quarter, period, set or inning. Tennis sets add tieBreakHome and tieBreakAway
noteFlashscore's note, such as an aggregate score or how a cricket match was won
sourceUrl, retrievedAtWhere and when the row was read

One real row:

{
"recordType": "match",
"matchId": "jXP8f29S",
"matchUrl": "https://www.flashscore.com/match/jXP8f29S/",
"sport": "football",
"category": "England",
"league": "Premier League",
"stage": null,
"leagueUrl": "https://www.flashscore.com/football/england/premier-league/",
"season": "2023/2024",
"round": "Round 38",
"startTime": "2024-05-19T15:00:00.000Z",
"status": "finished",
"resultType": "regular time",
"homeTeam": "Arsenal",
"awayTeam": "Everton",
"homeTeamId": "hA1Zm19f",
"awayTeamId": "KluSTr9s",
"homeScore": 2,
"awayScore": 1,
"winner": "home",
"halfTimeHomeScore": 1,
"halfTimeAwayScore": 1,
"regularTimeHomeScore": 2,
"regularTimeAwayScore": 1,
"penaltiesHomeScore": null,
"penaltiesAwayScore": null,
"periods": [
{
"home": 1,
"away": 1,
"tieBreakHome": null,
"tieBreakAway": null
},
{
"home": 1,
"away": 0,
"tieBreakHome": null,
"tieBreakAway": null
}
],
"note": null,
"sourceUrl": "https://www.flashscore.com/football/england/premier-league-2023-2024/results/",
"retrievedAt": "2026-11-06T01:29:07.769Z"
}

How much does it cost?

You pay for each saved match. Rows that only explain an empty result are free. Each run also has a start charge of $0.00005 per GB of memory.

PlanPrice per 1,000 matches
Free$1.00
Starter$0.90
Scale$0.80
Business$0.70

Example: a Premier League season has 380 matches. That costs $0.38 on the Free plan and $0.27 on Business.

How to build a dataset of several seasons

Give the newest season you want and how many to read. This input reads five seasons, from 2023/2024 back to 2019/2020.

{
"urls": ["https://www.flashscore.com/football/italy/serie-a-2023-2024/"],
"seasons": 5,
"maxItems": 2000
}

On 6 November 2026 this input saved 1,901 Serie A matches in 80 seconds. Use homeTeamId and awayTeamId to follow a team across seasons.

How to keep a results table up to date

Set First day to a short length and add an Apify Schedule. Recent matches are in the page itself, so these runs do not open a browser.

{
"urls": [
"https://www.flashscore.com/football/england/premier-league/",
"https://www.flashscore.com/football/spain/laliga/"
],
"dateFrom": "7 days",
"maxItems": 300
}

Join rows on matchId. You pay again for a match you read again, so keep the window as short as your schedule allows.

How to list upcoming matches

Set Matches to Upcoming matches. Use Last day for the end of the window. A length such as 7 days counts forward here.

{
"urls": ["https://www.flashscore.com/football/germany/bundesliga/"],
"matchType": "fixtures",
"dateTo": "7 days",
"maxItems": 100
}

Limits

  • No odds, lineups, goal scorers or match statistics. Rows come from the results list, so they hold what that list holds.
  • No list of all matches of one day. The Actor reads league, tournament and team pages, so name the leagues you need. Flashscore's robots.txt closes its day pages.
  • Only sports with two sides. Golf, motorsport and cycling pages have no match list and give a free notice row. Player pages are not supported.
  • A browser is needed beyond the newest matches. A page holds about 100 matches, and the rest load in steps of about 100, or 40 on team pages. The Actor opens the page and presses its Show more matches button.
  • Long lists take time. Each press of the button gets slower as the page grows. Two full seasons of MLB and NBA, 3,850 matches, took 163 seconds. One team page took 25 minutes for 4,320 matches, so use First day or Maximum results there.
  • Football periods holds two halves. Goals in extra time appear only in homeScore.
  • Some sports have less. Australian football has final points but no periods. Cricket scores are runs, without wickets or overs.
  • Pace: one page or one press of the button at a time, on purpose.
  • A run reads what Flashscore shows at that moment. A live row is a snapshot and does not update.

API and integrations

Start runs and read results through the Apify API or the JavaScript and Python clients. Use Schedules for repeat runs and webhooks to send the data on when a run ends.

Only need tennis? Tennis Scraper adds average odds, rankings and head-to-head records from another source.

FAQ

Do I need a proxy or a Flashscore account? No. The Actor reads public pages, and the test runs on Apify used no proxy.

Why is there a row with recordType set to notice? It explains why part of your input gave nothing, for example an address with no page, or that a long list stopped early. These rows are free.

How far back does the data go? It depends on the league. The Premier League archive on Flashscore lists 115 seasons, the oldest is 1901/1902. A test run read 306 matches of that oldest season.

Why does a shoot-out look different in football and hockey? The Actor keeps each sport as the results list shows it. In football homeScore stays at the score after extra time, and the shoot-out is only in penaltiesHomeScore. In hockey the final score already counts the shoot-out win.

Which time zone are the dates in? startTime, First day and Last day are all UTC.

Why did a run stop before the end of a season? It reached Maximum results or your spending limit, and the status message says which. A season of 380 matches needs a limit above 380. If the page itself failed, a free notice row says how many matches were read.

Can I use this data in a commercial product? Check first. The terms of use of Flashscore limit commercial use, scraping and copying large parts of its database. You are responsible for how you use the data.

This Actor is an independent tool with no connection to Flashscore or Livesport. All trademarks belong to their owners.