Flashscore Scraper: Results & Fixtures API for 20+ Sports
Pricing
from $1.00 / 1,000 matches
Flashscore Scraper: Results & Fixtures API for 20+ Sports
Flashscore scraper: match results and upcoming fixtures for any league or tournament in 20+ sports: football, tennis, basketball, ice hockey, NFL, baseball, cricket and rugby. Scores, winners, set and period scores, rounds, teams and logos, with monitor mode for new results. $1 per 1,000 matches.
Pricing
from $1.00 / 1,000 matches
Rating
0.0
(0)
Developer
Local Wire
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Features
Share
Flashscore Results & Fixtures Scraper: Football, Tennis, NBA, NHL, Cricket & More
Flashscore scraper for match results and upcoming fixtures from any league or tournament page on flashscore.com: football (soccer), tennis, basketball, ice hockey, American football, baseball, cricket, rugby and more, with scores, winners, set and period scores, rounds, team names and logos. $1 per 1,000 matches ($0.001 each) plus $0.0001 per run.
One run can cover up to 100 leagues. For each league you get the season's results and the upcoming fixtures in one request, as JSON, CSV or Excel. A monitor mode returns each finished match once, so an hourly schedule becomes a results feed.
What you get
One record per match. The dataset has Matches and Period and set scores views.
{"type": "match","sport": "hockey","league": "nhl","country": "USA","tournament": "NHL","tournamentUrl": "https://www.flashscore.com/hockey/usa/nhl/","round": null,"matchId": "hW7AXZxJ","matchUrl": "https://www.flashscore.com/match/hW7AXZxJ/","startTime": "2026-11-07T01:00:00.000Z","status": "finished","statusText": "Finished","statusCode": 3,"home": { "id": "EZekktRt", "name": "Calgary Flames", "shortName": "Calgary Flames", "code": "CGY", "slug": "calgary-flames", "country": null, "logo": "https://static.flashscore.com/res/image/data/0UdKwb6k-zBmwri9p.png", "score": 3 },"away": { "id": "4CM4ojpD", "name": "Anaheim Ducks", "code": "ANA", "score": 5 },"homeScore": 3,"awayScore": 5,"winner": "away","periods": [{ "period": 1, "home": 3, "away": 1, "homeTiebreak": null, "awayTiebreak": null },{ "period": 2, "home": 0, "away": 1, "homeTiebreak": null, "awayTiebreak": null },{ "period": 3, "home": 0, "away": 3, "homeTiebreak": null, "awayTiebreak": null }],"resultNote": null,"scrapedAt": "2026-11-07T09:00:00.000Z"}
| Field | Meaning |
|---|---|
sport, league, country, tournament, tournamentUrl | Where the match belongs. league is the built-in key or the path of the URL you gave. |
round | The round as Flashscore labels it (for example "Round 10"), when there is one. |
matchId, matchUrl | Flashscore's match id and the match page. |
startTime | Start time in UTC (ISO 8601). |
status | scheduled, live, finished, postponed, cancelled, abandoned, interrupted, awarded, walkover or retired. |
statusText, statusCode | Flashscore's stage in words, such as "Finished", "After extra time", "After overtime", "After penalties" or "After shootout", and its numeric code. |
home, away | id, name, shortName, code (e.g. EVE), slug, country (tennis players), logo and score. |
homeScore, awayScore | The final or current score. Sets won in tennis. |
winner | home, away, draw, or null while the match is not decided. |
periods[] | Quarter, period or set scores, with tiebreak points where they apply. |
resultNote | The result in words where Flashscore gives one (cricket). |
The run's OUTPUT record lists, per league, how many results and fixtures the page held, the totals Flashscore reports for the season, how many were delivered or skipped as already seen, and any problems.
Quick start
The form opens with the Premier League and a cap of 50 matches. Press Start for 50 records at $0.05:
{"leagues": ["premier-league"],"maxResults": 50}
This weekend's Premier League and LaLiga matches:
{ "leagues": ["premier-league", "laliga"], "daysBack": 1, "daysAhead": 2 }
A tennis tournament, results only:
{ "leagueUrls": ["https://www.flashscore.com/tennis/atp-singles/paris/"], "include": "results" }
Every Lakers and Celtics result this season:
{ "leagues": ["nba"], "include": "results", "teams": ["Lakers", "Celtics"] }
A multi-sport results feed (schedule it hourly):
{ "leagues": ["premier-league", "nba", "nhl", "nfl"], "monitorMode": true }
How to choose leagues
- Built in (
leagues):premier-league,championship,laliga,serie-a,bundesliga,ligue-1,eredivisie,liga-portugal,scottish-premiership,mls,champions-league,europa-league,nba,euroleague,nhl,nfl,mlb,ipl,big-bash-league,six-nations,premiership-rugby. - Anything else (
leagueUrls): paste the league or tournament page from flashscore.com or flashscore.co.uk, for examplehttps://www.flashscore.com/football/italy/serie-b/orhttps://www.flashscore.com/tennis/atp-singles/paris/. Sub-pages such as/results/and/fixtures/are accepted.
Supported sports: football, tennis, basketball, ice hockey, American football, baseball, cricket, rugby union, rugby league, handball, volleyball, beach volleyball, futsal, Aussie rules, darts, snooker, floorball, bandy, water polo, badminton and table tennis.
What each sport returns
Football (soccer)
Results and fixtures for any league or cup: Premier League, LaLiga, Serie A, Bundesliga, Ligue 1, Champions League, MLS and every other football competition with a Flashscore page. Each match has the round ("Round 10"), final score, winner or draw, kick-off time in UTC, and team names, three-letter codes and logos. Matches decided after extra time or penalties say so in statusText ("After extra time", "After penalties"). Football records carry the final score only: periods is empty, so there are no half-time scores.
Tennis
Every match of an ATP, WTA, Challenger or ITF tournament: paste the tournament URL. homeScore and awayScore are sets won, periods holds each set's games with tiebreak points in homeTiebreak and awayTiebreak, and home.country and away.country give the players' countries. Retirements and walkovers have their own status values.
Basketball
NBA, Euroleague and any other league. periods holds the four quarters, plus a fifth entry for overtime, and statusText reads "After overtime" when a game went past regulation.
Ice hockey
NHL and other leagues. periods holds the three periods plus overtime where played, and statusText distinguishes "After overtime" from "After shootout".
American football
NFL and other competitions, with quarter scores in periods and overtime flagged in statusText.
Baseball
MLB and other leagues: final score, winner and start time. Inning-by-inning scores are not included.
Cricket
IPL, Big Bash League and other competitions. resultNote gives the result in words, for example "Royal Challengers Bengaluru won by 5 wickets". periods is empty.
Rugby, handball, volleyball and other sports
Rugby union and rugby league and handball have half scores in periods; volleyball, beach volleyball, badminton and table tennis have set scores; futsal and water polo have their period scores. Darts, snooker, Aussie rules, floorball and bandy return the final score, winner and status.
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
leagues | string[] | premier-league when no league is given | Built-in league keys (see above). |
leagueUrls | string[] | Any Flashscore league or tournament URL. Up to 100 leagues per run in total. | |
include | string | both | both, results (finished and live matches of the season so far) or fixtures. |
teams | string[] | Keep matches where either side's name contains any of these: Arsenal, Lakers, Sinner. | |
daysBack | integer | no limit | Keep matches starting on or after this many days ago (UTC). Ignored when dateFrom is set. |
daysAhead | integer | no limit | Keep matches starting up to this many days from now. Ignored when dateTo is set. |
dateFrom / dateTo | string | Keep matches starting inside this range (2026-11-01). | |
monitorMode | boolean | false | Return only finished matches not returned before for that league. Forces include to results. |
monitorStoreName | string | flashscore-sports-monitor | The key-value store that remembers returned matches. Use one name per feed. |
maxResults | integer | 1000 | Stop after this many matches. |
Use cases
- Results feeds. An hourly run in monitor mode delivers each match once, as soon as it finishes.
- Fixture lists. The next matches of every league you follow, with start times in UTC, for apps, newsletters and calendars.
- Sports analytics and models. Season results across leagues and sports in one schema.
- Tennis tournaments. Whole draws with set scores and tiebreaks from a single URL.
- Lower leagues and niche sports. Anything with a Flashscore page works, not just the big leagues.
- AI agents. Small, predictable records that answer "what are this weekend's Premier League fixtures?".
Monitor mode
Turn on monitorMode and schedule the Actor. Each run returns only finished matches it has not returned before for that league, so you get a feed with no duplicates. A match cut off by your spending limit comes through on the next run. Use a different monitorStoreName for each separate feed.
Pricing
Pay per result: $0.001 per match ($1 per 1,000) plus $0.0001 per run.
| Run | Matches | Cost |
|---|---|---|
| The quick-start run | 50 | $0.05 |
| A weekend of Premier League and LaLiga | about 20 | about $0.02 |
| A Premier League season's results so far plus upcoming fixtures | about 200 | about $0.20 |
| An hourly four-league results monitor, about 30 finished matches a day | 24 runs, 30 matches | $0.0024 + $0.03 = about $0.03 a day |
To cap spending, set maxResults or a maximum cost per run in the run options (maxTotalChargeUsd in the API). The Actor stops cleanly at the limit.
Use it from the API
curl -X POST "https://api.apify.com/v2/acts/localwire~flashscore-sports/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "content-type: application/json" \-d '{"leagues": ["premier-league"], "daysBack": 0, "daysAhead": 3}'
With the official clients:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("localwire/flashscore-sports").call({ leagues: ["nba"], include: "results", daysBack: 2 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("localwire/flashscore-sports").call(run_input={"leagueUrls": ["https://www.flashscore.com/tennis/atp-singles/paris/"], "include": "results"})items = client.dataset(run["defaultDatasetId"]).list_items().items
Use it from an AI agent (MCP)
Apify hosts an MCP server at https://mcp.apify.com. Add it to an MCP client (Claude, ChatGPT, Cursor, VS Code and others) and sign in with your Apify account, or send your API token as an Authorization: Bearer header. To expose just this Actor as a tool:
https://mcp.apify.com?tools=localwire/flashscore-sports
Then ask "what are this weekend's Premier League fixtures?". Notes for agents: with no input the Actor returns the Premier League's season results and fixtures, up to 1,000 records, so pass daysBack, daysAhead or a small maxResults to keep the answer short. Use leagueUrls for a competition that is not in the built-in list.
Integrations
Apify connects runs to Make, n8n, Zapier, LangChain, webhooks and other tools, and datasets export as JSON, CSV, Excel, XML or RSS. Typical setups: monitor-mode results posted to Discord, Slack or Telegram through a webhook; fixtures appended to Google Sheets each morning; season results loaded into a database for modelling.
FAQ
Does Flashscore have an API?
Flashscore does not publish a public API for its results and fixtures. This Actor reads the public league and tournament pages and returns their results and fixtures as structured records.
How do I scrape Flashscore results for a league that is not in the list?
Open the league or tournament on flashscore.com, copy the address and paste it into leagueUrls. Any page of the form /sport/country-or-tour/league/ works for the supported sports.
How do I get tennis results with set scores?
Paste the tournament URL (for example https://www.flashscore.com/tennis/atp-singles/paris/) into leagueUrls and set include to results. Each match has sets won, each set's games and tiebreak points.
Can I get live scores?
Matches in progress appear with status: "live" and the score at the moment of the run. The Actor takes a snapshot each time it runs; it is not a streaming feed and has no minute-by-minute events.
Does it include odds, lineups, match statistics or standings?
No. The Actor returns results and fixtures only: no betting odds, lineups, match statistics, standings tables or minute-by-minute events.
How far back do results go?
The league page lists the current season's results; for leagues with very long seasons (NBA, NHL, MLB) it holds roughly the latest 100. Earlier seasons are not read. To keep a full history, schedule runs or use monitor mode and store the results.
How do I get only one team's or one player's matches?
Put part of the name in teams, for example ["Arsenal"] or ["Sinner"]. A match is kept when either side's name contains it.
How do I export Flashscore data to CSV or Excel?
Open the run's dataset and choose CSV or Excel, or request https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv.
What time zone are the start times in?
UTC, in ISO 8601 (2026-11-07T01:00:00.000Z).
Limitations
- One page per league. The Actor reads each league's public results page, which lists the season's results so far and roughly the next 100 fixtures. For very long seasons (NBA, NHL, MLB) that means about the latest 100 results and the next 100 fixtures; the
OUTPUTrecord gives the season totals. - Not included: minute-by-minute events, lineups, match statistics, standings tables, betting odds, past seasons, football half-time scores and baseball innings.
- Monitor mode returns matches with status
finishedonly. Matches that end by retirement, walkover or award are not returned in monitor mode; a normal run includes them. - Sports. Only the sports listed above; a URL for another sport is rejected with a clear message.
- Polite by design. One request every 2 seconds, no proxies. If Flashscore refuses a request (a challenge page, access denied, or rate limiting that persists after one wait), the run stops with a clear message and keeps what it already has. It never tries to get round protection.
- Layout changes. The data comes from the page Flashscore serves; if Flashscore changes it, runs report "no match data found" until the Actor is updated.
Disclaimer
This Actor is not affiliated with, endorsed by or sponsored by Flashscore or Livesport. Flashscore is a trademark of its owner. Results and fixtures are facts; check Flashscore's terms of use for how you may reuse the data, especially commercially.