August 14, 2026 · 8 min read

FlashScore Live Sports Scraper: 3 Practical Use Cases

By Crawlerbros Engineering Team · Updated September 19, 2026

To extract real-time sports data from FlashScore, you do not need complex browser automation, proxy pools, or cookie management. The Flashscore Scraper targets internal live-feed endpoints directly, using a single HTTP request to fetch live scores, match statuses, and league details across 14 sports. This approach bypasses heavy rendering overhead and runs efficiently on standard datacenter IPs.

In this guide, we explain how to configure and deploy this scraper for production workflows, detailing three practical use cases, input schemas, and data-quality controls.

Operational workflow

To build a reliable data pipeline around FlashScore, you must structure your collection process to handle the dynamic nature of live sports. The following workflow outlines how to initialize, execute, and process sports data systematically:

  1. Define the target sport and scope: Select one of the 14 supported sports from the input schema and decide whether you need only active matches or the entire day's schedule.
  2. Initialize the scraper: Run the Flashscore Scraper on the Apify platform with your JSON configuration.
  3. Execute the request: The scraper sends a direct HTTP request to the FlashScore internal endpoint, utilizing a hardcoded token and TLS impersonation to retrieve the raw feed.
  4. Parse and clean: The scraper filters out null values, omitting empty fields entirely to deliver a clean, non-null JSON dataset.
  5. Ingest and route: Your downstream application receives the JSON payload and routes the match records to your database, alerting system, or visualization widgets.

The role of the Actor

The primary component in this workflow is the Flashscore Scraper. This Actor acts as a lightweight extractor that handles the complex network negotiations, headers, and TLS fingerprinting required to communicate with FlashScore's internal feed. Instead of managing headless browsers, you interact with a clean API that returns structured JSON records containing match IDs, team names, scores, and match URLs.

Practical use cases

Use case 1: Sports betting signals

  • Outcome: A real-time alerting database that flags sudden score changes, comebacks, or high-scoring matches to identify potential betting opportunities.
  • Question to answer: Which live matches are currently experiencing rapid score changes or late-game shifts that deviate from pre-match expectations?
  • Configure: Set sport to "football", liveOnly to true, and maxItems to 200.
  • Working method: Schedule the Flashscore Scraper to run every 60 seconds. Ingest the output into an in-memory database. Compare the current homeScore and awayScore against the values from the previous run. If a score changes, calculate the time elapsed using startTime and scrapedAt to determine if a late-game event has occurred, then push a notification to your trading channel.
  • Deliverable: A live JSON stream of score-change events containing matchId, homeTeam, awayTeam, homeScore, awayScore, and the calculated score delta.
  • Stop condition: Terminate the monitoring loop when all targeted high-profile matches transition to a status of "finished".

Use case 2: Fantasy sports feeds

  • Outcome: An automated daily ingestion pipeline that updates player and team performance metrics for fantasy sports platforms.
  • Question to answer: What are the final scores and match statuses for all scheduled games today to calculate fantasy league standings?
  • Configure: Set sport to "basketball", liveOnly to false, and maxItems to 500.
  • Working method: Run the scraper twice daily: once in the morning to capture the scheduled kick-off times (startTime) and once at midnight to collect the final results. Your ingestion script reads the status field; if the status is "finished", it updates the fantasy database with the final homeScore and awayScore values.
  • Deliverable: A daily structured master file containing all scheduled, live, and completed basketball matches with their respective scores and league paths.
  • Stop condition: Stop the daily ingestion run once the scraper returns 100% of the day's matches with a status of "finished".

Use case 3: Media sites

  • Outcome: A lightweight, self-updating live score widget embedded on a sports news website.
  • Question to answer: What are the current scores and active match statuses for ongoing tennis tournaments to display on a public homepage?
  • Configure: Set sport to "tennis", liveOnly to true, and maxItems to 50.
  • Working method: Deploy the Flashscore Scraper to run every 2 minutes. Write the output directly to a public cloud storage bucket as a static JSON file. Configure your frontend widget to fetch this static JSON file directly from the bucket, minimizing database queries and avoiding backend load during high-traffic match windows.
  • Deliverable: A publicly accessible, low-latency static JSON file containing active tennis matches, current set scores, and match URLs.
  • Stop condition: Pause the automated scraper runs during hours when no live tennis matches are returned in the dataset.

Input schema and configuration controls

The scraper is controlled by three main input parameters that allow you to restrict the scope of your data collection:

  • Sport (sport): An enum string specifying the sport. Supported values include football, tennis, basketball, hockey, american-football, baseball, handball, rugby-union, rugby-league, futsal, volleyball, cricket, darts, and snooker.
  • Live matches only (liveOnly): A boolean flag. When set to true, the scraper filters the feed to return only matches currently in progress. When set to false, it returns all scheduled, live, and finished matches for the current day.
  • Max Items (maxItems): An integer between 1 and 1000 that limits the number of match records returned in a single run.

Output structure and data handling

The output data is returned as a clean JSON array. A key feature of this scraper is that empty or missing fields are completely omitted from the output rather than being returned as null values. This keeps the payload size small and simplifies downstream parsing.

Each match record contains core fields such as matchId, sport, homeTeam, awayTeam, status, statusCode, and scrapedAt. Optional fields like homeScore, awayScore, league, country, leaguePath, startTime, homeTeamShort, awayTeamShort, and url are included only when they contain active data.

Operational limitations

While the scraper is highly efficient, you should design your data pipeline with the following limitations in mind:

  • No event timelines: The current version of the scraper does not extract per-match event timelines, such as individual goal scorers, yellow cards, or substitutions. It returns match headers and scores only.
  • No historical archives: The scraper accesses the live-feed endpoint, which provides data for the current day only. You cannot query historical dates directly; instead, you must build your own archive by running the scraper daily with liveOnly set to false and saving the results.
  • Zero-match outputs: If there are no active or scheduled games for your selected sport at the time of the run, the scraper will return zero items with an exit code of 0. Your downstream code must handle empty arrays gracefully without treating them as system failures.

Frequently asked questions

Do I need a proxy or cookies?

No. The scraper does not require proxies or cookies. It connects directly to FlashScore's internal feed using standard HTTP requests, a hardcoded X-Fsign token, and Chrome 131 TLS fingerprint impersonation. It can run successfully from any standard datacenter IP address.

How fresh is the data?

The data is fetched in real time directly from the live feed at the moment of execution. Live scores generally update within seconds of the actual event occurring on the field.

What does liveOnly do?

When liveOnly is set to true, the scraper filters the response to include only matches that are currently in progress (e.g., live or half-time). When set to false, it returns all matches scheduled for the current calendar day, including those that have already finished or have not yet started.

Why do some sports return zero matches?

This occurs when there are no matches scheduled or playing for that sport on the current day. For example, selecting american-football during the off-season or cricket outside of active tournament windows will result in an empty dataset. This is normal behavior and not an error.

Are event timelines included?

No, individual event timelines (such as cards, substitutions, and goal scorers) are not included in the current release. The scraper provides match headers, current scores, and status details. Retrieving detailed timelines requires additional API calls that are not supported in this version.

Resources

  • Apify Actor: Access the Flashscore Scraper on the Apify platform to configure and run your extraction tasks.
  • FlashScore Portal: Visit the main FlashScore website to view the sports, leagues, and match structures supported by the feed.

● Featured actors

FlashScore Live Sports Scraper

Scrape live matches from FlashScore for football, basketball, tennis, hockey, baseball and 11 other sports. Returns match ID, teams, live score, status, league, start time and optional event timeline.

Run on Apify ↗