Flashscore Scraper – Football, Tennis & Basketball Live Scores avatar

Flashscore Scraper – Football, Tennis & Basketball Live Scores

Pricing

from $1.00 / 1,000 match scrapeds

Go to Apify Store
Flashscore Scraper – Football, Tennis & Basketball Live Scores

Flashscore Scraper – Football, Tennis & Basketball Live Scores

Flashscore scraper for live scores, fixtures and results in football, tennis, basketball, ice hockey and 25+ other sports. Period and set scores, match statistics, goals, cards and incidents. Fast, no browser, pay only per match.

Pricing

from $1.00 / 1,000 match scrapeds

Rating

0.0

(0)

Developer

Enes Bulanık

Enes Bulanık

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 days ago

Last modified

Share

Flashscore scraper for live scores, fixtures and results in football, tennis, basketball, ice hockey and 25+ other sports. Period and set scores, match statistics, goals, cards and incidents. Fast, no browser, pay only per match.

One run can return thousands of matches from any day in the last week or the next week. Export to JSON, CSV, Excel, or connect via API, webhooks, Make, Zapier or n8n.

What can this Flashscore scraper do?

  • ⚽ Football / soccer scores – every league Flashscore covers (Premier League, LaLiga, Serie A, Bundesliga, Ligue 1, Champions League, MLS, Brasileirão, Süper Lig and thousands of lower leagues).
  • 🎾 Tennis results – ATP, WTA, Challenger, ITF; set scores and tiebreak points.
  • 🏀 Basketball scores – NBA, EuroLeague, NCAA and more, with quarter scores.
  • 🏒 Ice hockey – NHL, KHL, AHL, with period, overtime and shoot-out scores.
  • 🏈⚾🤾🏐🏏🎯🎮 American football, baseball, handball, volleyball, cricket, darts, eSports, table tennis, rugby, futsal, snooker and more.
  • 📅 Fixtures (up to 7 days ahead), results (up to 7 days back) and live matches right now.
  • 📊 Match details (optional): statistics per half/set, incidents (goals with assists, cards, substitutions, penalties), referee, stadium, attendance.
  • 🔎 Filters by tournament/country, team/player, and status (scheduled, live, finished…).
  • ⚡ Fast & cheap: uses Flashscore's lightweight data feed, no headless browser. 5,000 matches in ~15 seconds.

Use cases

  • Betting models & sports trading – collect historical results, xG and stats to train and backtest prediction models; poll live scores for in-play strategies.
  • Sports analytics & research – build datasets of results, period scores and team statistics across leagues.
  • Apps, websites & bots – power livescore widgets, Telegram/Discord bots, fantasy apps and newsletters with fixtures and results.
  • Media & content – auto-generate match reports, daily result round-ups and fixture lists.
  • Monitoring – schedule the Actor every few minutes and get notified when your team scores.

How to use

  1. Click Try for free / Start.
  2. Select one or more sports.
  3. Choose the day range (0 = today, -1 = yesterday, 1 = tomorrow; -7…+7).
  4. Optionally filter by tournament (e.g. Premier League, LaLiga), team (e.g. Real Madrid) or status, or tick Only live matches.
  5. Tick Include match details if you need statistics and incidents.
  6. Run and download your data as JSON, CSV, Excel or HTML.

Input

FieldTypeDescription
sportsarraySports to scrape, e.g. ["football", "tennis"]. Default ["football"].
dayOffsetFromintegerFirst day relative to today (-7…7). Default 0 (today).
dayOffsetTointegerLast day relative to today (-7…7). Defaults to dayOffsetFrom.
onlyLivebooleanOnly matches in progress right now.
statusFilterarrayscheduled, live, finished, postponed, cancelled, abandoned, interrupted.
tournamentFilterstringComma-separated substrings matched against tournament/country, e.g. ENGLAND: Premier League, Champions League.
teamFilterstringComma-separated substrings matched against home/away team or player.
includeMatchDetailsbooleanAdd statistics, incidents and match info (extra charge per match).
maxItemsintegerMax matches to save (0 = unlimited). Default 50.
timezoneOffsetintegerHours from UTC that define the "day" boundaries. Default 0 (UTC).
proxyConfigurationobjectOptional proxy. Not needed in normal use.

Example – all of last week's finished Premier League and LaLiga matches with stats:

{
"sports": ["football"],
"dayOffsetFrom": -7,
"dayOffsetTo": -1,
"statusFilter": ["finished"],
"tournamentFilter": "ENGLAND: Premier League, SPAIN: LaLiga",
"includeMatchDetails": true,
"maxItems": 0
}

Output

Each match is one dataset item. Real example (shortened – statistics contains ~100 rows for this match):

{
"matchId": "j944GznD",
"url": "https://www.flashscore.com/match/j944GznD/",
"sport": "Football",
"sportSlug": "football",
"country": "Brazil",
"category": "Brazil",
"tournament": "Serie B",
"tournamentFullName": "BRAZIL: Serie B",
"tournamentUrl": "https://www.flashscore.com/football/brazil/serie-b/",
"tournamentId": "lOEwe4o4",
"startTime": "2026-10-06T22:30:00.000Z",
"startTimestamp": 1791325800,
"status": "finished",
"statusDetail": "Finished",
"statusCode": 3,
"homeTeam": "Sport Recife",
"awayTeam": "Sao Bernardo",
"homeTeamId": "KIBeGAFO",
"awayTeamId": "Wp4nyhLR",
"homeScore": 2,
"awayScore": 1,
"regularTimeHomeScore": 2,
"regularTimeAwayScore": 1,
"penaltiesHomeScore": null,
"penaltiesAwayScore": null,
"periodScores": [
{ "period": 1, "name": "1st Half", "home": 1, "away": 0 },
{ "period": 2, "name": "2nd Half", "home": 1, "away": 1 }
],
"winner": "home",
"homeLogo": "https://static.flashscore.com/res/image/data/WrU0J0Qq-fezSJdFa.png",
"awayLogo": "https://static.flashscore.com/res/image/data/plaFSegT-AP3c0ay7.png",
"lastUpdated": "2026-10-07T00:27:46.000Z",
"details": {
"periodScores": [
{ "period": "1st Half", "home": 1, "away": 0 },
{ "period": "2nd Half", "home": 1, "away": 1 }
],
"incidents": [
{
"period": "1st Half", "time": "17'", "team": "home", "type": "Goal", "typeCode": 3,
"player": "Neto Pessoa", "playerId": "hAC6Qegp", "score": "1-0",
"related": [{ "type": "Assistance", "player": "Chrystian Barletta", "playerId": "2agS5CnN" }]
},
{
"period": "2nd Half", "time": "59'", "team": "home", "type": "Substitution - Out", "typeCode": 6,
"player": "Juan Alano", "playerId": "2gTENNBg",
"related": [{ "type": "Substitution - In", "player": "Andrade K.", "playerId": "ABBFeKO2" }]
},
{
"period": "2nd Half", "time": "86'", "team": "home", "type": "Goal", "typeCode": 3,
"player": "Patrick de Paula", "playerId": "KQpVDN6N", "score": "2-1"
}
],
"statistics": [
{ "period": "Match", "group": "Top stats", "name": "Ball possession", "home": "48%", "away": "52%" },
{ "period": "Match", "group": "Shots", "name": "Expected goals (xG)", "home": "1.63", "away": "1.99" },
{ "period": "Match", "group": "Shots", "name": "Total shots", "home": "19", "away": "20" },
{ "period": "Match", "group": "Attack", "name": "Corner kicks", "home": "5", "away": "9" },
{ "period": "Match", "group": "Passes", "name": "Passes", "home": "86% (382/444)", "away": "89% (414/466)" }
],
"matchInfo": {
"referee": "Junior R.",
"refereeCountry": "Bra",
"venue": "Estadio Adelmar da Costa Carvalho",
"city": "Recife",
"attendance": "18 258",
"capacity": "26 418"
}
},
"scrapedAt": "2026-10-07T18:06:48.547Z"
}

Field notes

  • status – scheduled, live, finished, postponed, cancelled, abandoned, interrupted. statusDetail gives the exact stage (1st Half, Half Time, Set 3, After Extra Time, After Penalties, Walkover, …).
  • homeScore/awayScore – the score as shown on Flashscore. Football after penalties shows the score after extra time (e.g. 0-0) and the shoot-out in penaltiesHomeScore/AwayScore. In ice hockey and handball the shoot-out winner gets +1 goal, exactly like Flashscore displays it.
  • Tennis/volleyball/darts/eSports: homeScore/awayScore are sets (or maps/legs); periodScores contain games per set and homeTiebreak/awayTiebreak where played.
  • regularTimeHomeScore/AwayScore – score after regular time (before overtime/extra time).
  • country is empty for international categories without a country (e.g. ATP tennis); category always contains the group name (e.g. ATP - Singles).
  • All times are UTC ISO 8601.

Pricing

This Actor uses pay-per-event pricing – you only pay for the data you get:

EventPrice
Match scraped (match)$0.001 per match ($1 per 1,000 matches)
Match details (match-details)$0.003 per match with details enabled

Examples: today's 50 football matches ≈ $0.05. A full week of football results (~2,000 matches) ≈ $2. 100 matches with statistics and incidents ≈ $0.40. Platform usage is minimal because no browser is used.

You can set a maximum cost per run in the run options – the Actor stops cleanly when it is reached.

FAQ

Is it legal to scrape Flashscore? This Actor only collects publicly available sports data (scores, fixtures, statistics) that anyone can see on the website without logging in. It does not collect personal data. You are responsible for using the data in compliance with Flashscore's terms and the laws of your jurisdiction. This Actor is not affiliated with, endorsed by, or connected to Flashscore or Livesport in any way.

How fresh are live scores? Data is fetched at run time directly from the feed that powers the website, so it is as fresh as the website. For a live ticker, schedule the Actor (e.g. every 1–5 minutes) with onlyLive: true.

Can I get older results than 7 days? Not with this Actor yet – Flashscore's daily feed covers today ±7 days. Run it daily on a schedule to build your own history.

Can I get odds, lineups or H2H? Not in the current version. Open an issue if you need them.

Why is a match missing details? Lower leagues often have no statistics or incidents on Flashscore. In that case statistics/incidents are empty arrays. Scheduled matches have no details yet.

Which sports are supported? Football, tennis, basketball, ice hockey, American football, baseball, handball, volleyball, rugby union & league, cricket, darts, snooker, eSports, table tennis, badminton, beach volleyball, futsal, floorball, bandy, water polo, field hockey, Aussie rules, beach soccer, netball, MMA, boxing, pesäpallo and kabaddi. Race-type sports (golf, motorsport, cycling, horse racing, winter sports) are not supported.

Cricket scores? For cricket, homeScore/awayScore contain total runs as provided by the feed; wickets/overs are not parsed.

The Actor stopped working – what now? Flashscore sometimes changes its internals. The Actor automatically re-discovers the feed signature from the website. If something still breaks, please report it in the Issues tab and it will be fixed quickly.