# Flashscore Scraper: Live Scores, Results, Fixtures, All Sports (`fernandosord/flashscore-scraper`) Actor

Scrape Flashscore matches for 29 sports, including football, tennis, basketball, hockey and baseball. Today, any day from 7 back to 7 ahead, or live now, or the results and fixtures of a team, player or league page. Scores, status, teams, league, start time. Optional events, stats, odds.

- **URL**: https://apify.com/fernandosord/flashscore-scraper.md
- **Developed by:** [Plainsource](https://apify.com/fernandosord) (community)
- **Categories:** News, Other
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 matches

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Scrape Flashscore matches for 29 sports, including football, tennis, basketball, hockey, baseball, American football, volleyball and cricket. Pick sports and a day (or a range of days from 7 days back to 7 days ahead), or take only the matches that are live right now. You can also paste team, tennis player or league page URLs to get their results and fixtures. Each match is one row with teams, score, status, league and start time. Turn on match details to add the event timeline, statistics and bookmaker odds. No login and no proxy needed.

### What data you get

One row per match.

| Field | What it is |
|---|---|
| `matchId`, `url` | Flashscore match ID and the match page link |
| `sport`, `country`, `league`, `category`, `leagueUrl`, `leagueId` | Where the match belongs. Tennis has no country, so `category` holds the tour (for example ATP - SINGLES) |
| `round` | Round or stage (Round 15, Final). See the FAQ for when it is filled |
| `startTime` | Start time in UTC, ISO 8601 |
| `status`, `statusDetail`, `minute` | scheduled, live, finished, postponed, cancelled, abandoned or interrupted, plus Flashscore's own text (Half time, Set 2, After extra time). `minute` is filled for live football, futsal and beach soccer |
| `homeTeam`, `homeTeamShort`, `homeTeamId`, `homeTeamUrl` | Home side (first player in tennis and similar sports) |
| `awayTeam`, `awayTeamShort`, `awayTeamId`, `awayTeamUrl` | Away side |
| `homeScore`, `awayScore`, `score` | Goals, points or runs. In tennis and other set sports, sets won |
| `periodScores` | Score per set, quarter, period, half or inning. Football has the first half only |
| `homeTeamCountry`, `awayTeamCountry`, `currentGameScore`, `note` | Only when Flashscore sends them: player nationality, live point score in tennis, cricket match situation |
| `events` | With match details: goals, cards, substitutions and similar, with minute, team, player and score after a goal |
| `statistics` | With match details: statistics for the match and for each half or period |
| `odds` | With match details: main market (1X2 or home/away) for each bookmaker, current and opening |

### How to use it

1. Pick one or more **sports**, or paste **team, player or league page URLs**.
2. Choose **Matches by day** and the day offsets (0 is today, -1 yesterday, 1 tomorrow), or **Live now**.
3. Optional: add **league filters** (a name like `England: Premier League` or a league URL), turn on **match details**, and set **max matches**.
4. Start the Actor and open the dataset. Export as JSON, CSV or Excel, or read it through the API.

Example input:

```json
{
    "sports": ["soccer"],
    "mode": "day",
    "dayOffsetFrom": -1,
    "dayOffsetTo": -1,
    "leagueFilters": ["England: Premier League"],
    "includeDetails": true,
    "maxMatches": 5
}
```

Example output (shortened, from a real run):

```json
{
    "matchId": "xxDTaeAO",
    "url": "https://www.flashscore.com/match/football/arsenal-hA1Zm19f/liverpool-lId4TMwf/?mid=xxDTaeAO",
    "sport": "football",
    "country": "England",
    "league": "Premier League",
    "round": "Round 9",
    "startTime": "2026-11-01T16:30:00.000Z",
    "status": "finished",
    "statusDetail": "Finished",
    "homeTeam": "Liverpool",
    "homeTeamId": "lId4TMwf",
    "awayTeam": "Arsenal",
    "awayTeamId": "hA1Zm19f",
    "homeScore": 0,
    "awayScore": 1,
    "score": "0-1",
    "periodScores": [{ "period": 1, "label": "1st half", "home": 0, "away": 0 }],
    "events": [
        { "period": "1st Half", "minute": "16'", "team": "away", "type": "Goal", "player": "Havertz K.", "related": [{ "role": "Assistance", "player": "Rice D." }], "homeScore": 0, "awayScore": 1 },
        { "period": "1st Half", "minute": "45+3'", "team": "home", "type": "Yellow Card", "player": "Barcola B.", "reason": "Tripping" }
    ],
    "statistics": [
        { "period": "Match", "group": "Top stats", "name": "Ball possession", "home": "56%", "away": "44%" },
        { "period": "Match", "group": "Top stats", "name": "Total shots", "home": "17", "away": "10" }
    ],
    "odds": [
        { "bookmaker": "bet365.us", "market": "1X2", "scope": "FULL_TIME", "home": 2.75, "draw": 3.6, "away": 2.45, "openingHome": 3.25, "openingDraw": 3.5, "openingAway": 2.1 }
    ]
}
```

A basketball row without details looks the same minus `events`, `statistics` and `odds`, and its `periodScores` hold the four quarters.

### How much does it cost?

You pay per match saved: **$0.0009 per match** ($0.90 per 1,000 matches), plus a start fee of $0.0005 per run. Match details do not cost extra, they only make the run slower. Runs that find no matches, and inputs that fail, save nothing and cost only the start fee.

Worked example: a daily run of all football matches for one day (about 270 matches) costs 270 x $0.0009 + $0.0005 = $0.2435.

### Use cases

- Keep a database of results and fixtures for a sport or a league, with a scheduled run every day.
- Poll live matches every few minutes to power a score alert or a dashboard.
- Pull statistics and event timelines of finished matches for analysis or models.
- Track opening and current odds from several bookmakers for the same match.
- Build a fixture list for one team or one tennis player.

### FAQ

**Do I need a proxy?** No. Requests from Apify servers worked without one in testing. A proxy field is there if you ever see blocked requests.

**Which sports work?** The 29 in the sport list: football, tennis, basketball, hockey, American football, baseball, handball, rugby union and league, volleyball, beach volleyball, cricket, darts, snooker, table tennis, badminton, MMA, boxing, esports, futsal, floorball, bandy, Aussie rules, water polo, field hockey, beach soccer, netball, pesapallo and kabaddi. Races (motorsport, cycling, golf, horse racing) have no home and away sides and are not covered. Checked against live data: football, tennis, basketball, hockey, baseball, American football, handball, rugby union, volleyball, cricket, darts, snooker, table tennis, MMA and esports. The other sports use the same data format but were not checked one by one.

**How far back and ahead can I go?** Day mode covers 7 days back and 7 days ahead of today. For more history, paste a team, player or league page URL: those give the results and fixtures Flashscore lists on that page (whole seasons for leagues, years back for teams and players).

**When is `round` filled?** On league page URLs, and whenever match details are on. In plain day mode and on team or player pages Flashscore does not send it with the list, so it is empty unless you turn on match details.

**What about `minute`?** Football, futsal and beach soccer only. It is calculated from the time the current half started and is capped at 45 in the first half and 90 in the second (120 in extra time). Other sports show the current set, quarter or period in `statusDetail`.

**What does "Live now" return?** Every match Flashscore marks as live for the chosen sports. If nothing is live you get an empty dataset and a message. Interrupted matches are not counted as live.

**Why are there no odds on some matches?** Flashscore shows only the bookmakers that operate in a country. Set the odds country code (default US) to see another country's bookmakers. Some leagues have no odds at all.

**What does a league filter match?** A name matches any league whose full name contains it, so `Premier League` also finds the Egyptian one. Use `England: Premier League` or the league URL to be exact. A filter that matches nothing is reported in the run log and in the `SUMMARY` record, and the run still succeeds.

**What is not included?** Lineups, head-to-head tables, standings, player ratings, venue and referee. Start times are UTC; use the time zone offset to decide where a day starts.

**Is this allowed?** The Actor reads the same public data the Flashscore website shows to every visitor. Check Flashscore's terms and the law that applies to you before you use the data commercially.

### Other Actors by this developer

- [Dataset Merge and Dedupe](https://apify.com/fernandosord/dataset-merge-dedupe): combine the datasets of your scheduled runs into one list without duplicates.
- [Google Sheets Export](https://apify.com/fernandosord/google-sheets-export): send a dataset to a Google Sheet.
- [Google Trending Now](https://apify.com/fernandosord/google-trending-now): see what people search for right now.
- [Google News RSS Scraper](https://apify.com/fernandosord/google-news-rss-scraper): news headlines by topic or keyword.

# Actor input Schema

## `sports` (type: `array`):

Which sports to list. Leave empty (and give no page URLs below) to get today's football as an example.

## `mode` (type: `string`):

Matches on a day (or a range of days), or only the matches that are live right now.

## `dayOffsetFrom` (type: `integer`):

0 is today, -1 yesterday, 1 tomorrow. Flashscore lists 7 days back and 7 days ahead. Ignored in live mode.

## `dayOffsetTo` (type: `integer`):

Same scale as the first day. Leave equal to the first day for a single day. Every day in between is included.

## `leagueFilters` (type: `array`):

Optional. Keep only these leagues. Either a name (for example England: Premier League, or just Champions League) or a Flashscore league URL (https://www.flashscore.com/football/england/premier-league/). A name matches any league whose full name contains it. Applies to the sports above.

## `pageUrls` (type: `array`):

Optional. Flashscore pages whose results and fixtures you want, for example https://www.flashscore.com/team/arsenal/hA1Zm19f/ or https://www.flashscore.com/football/england/premier-league/. Works for teams, tennis players and leagues.

## `pageMatches` (type: `string`):

Past results, upcoming fixtures, or both. Only used with the page URLs above.

## `includeDetails` (type: `boolean`):

Adds the event timeline (goals, cards, substitutions, and similar), statistics for the whole match and each half, odds from several bookmakers and the round. Costs 3 to 4 extra requests per match, so runs are slower. Matches that have not started have odds only.

## `maxMatches` (type: `integer`):

The Actor stops after this many matches in total. Every match saved is one billed result.

## `timezoneOffset` (type: `integer`):

Decides where one day starts and ends in day mode, as hours from UTC. 0 is UTC, -5 is New York in winter, 1 is Berlin in winter. Start times in the output are always UTC.

## `oddsCountryCode` (type: `string`):

Two-letter country code. Flashscore shows different bookmakers per country, so this changes which bookmakers appear in the odds. Only used with match details.

## `proxyConfiguration` (type: `object`):

Optional. Flashscore answered requests from Apify servers without a proxy in testing, so leave this off unless you see blocked requests.

## Actor input object example

```json
{
  "sports": [
    "soccer"
  ],
  "mode": "day",
  "dayOffsetFrom": 0,
  "dayOffsetTo": 0,
  "pageMatches": "both",
  "includeDetails": false,
  "maxMatches": 20,
  "timezoneOffset": 0,
  "oddsCountryCode": "US"
}
```

# Actor output Schema

## `results` (type: `string`):

One item per post, newest first for each publication.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sports": [
        "soccer"
    ],
    "maxMatches": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("fernandosord/flashscore-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sports": ["soccer"],
    "maxMatches": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("fernandosord/flashscore-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sports": [
    "soccer"
  ],
  "maxMatches": 20
}' |
apify call fernandosord/flashscore-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fernandosord/flashscore-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/dbWKv31KO6MslvRnT/builds/j2g0gxhlaBfPDOhcN/openapi.json
