# Flashscore League Archive: Results & Tables (`incognito_mode/flashscore-league-archive-scraper`) Actor

Scrape any league's full history from Flashscore: every season's results with half-time scores, league tables (home/away, form, over/under, HT/FT), top scorers and champions. Football, basketball, hockey and 20+ sports, back to 1901. No API key.

- **URL**: https://apify.com/incognito\_mode/flashscore-league-archive-scraper.md
- **Developed by:** [Elena Vance](https://apify.com/incognito_mode) (community)
- **Categories:** Sports, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Flashscore League Archive: Results & Tables

Download a league's complete history from Flashscore: **every season's
results, league tables, top scorers and champions**. It works for any sport
and any league Flashscore covers, including the Premier League, LaLiga, the
Champions League, the NBA, the NHL, MLS and thousands of smaller
competitions, and it goes back decades. The Premier League archive starts
in **1901/02**.

- **Full seasons in one run.** All 380 Premier League matches of a season
  take about 5 seconds. Paging and duplicates are handled for you.
- **Half-time scores** for football, **quarter and period scores** for
  basketball and hockey, plus extra time and penalty shoot-outs.
- **Six standings views:** overall, home, away, form (last 5), over/under
  goal lines and half-time/full-time. Each includes zone labels such as
  "Promotion - Champions League" or "Relegation".
- **Champions of every season** and **top scorers** with goals and assists.
- **No API key, no browser, no proxy.** Runs are fast and cheap.

***

### What can it scrape?

| Data | What you get |
| --- | --- |
| **Results** | Every played match of a season: date, round, stage (league phase, play-offs ...), teams with ids and links, full-time, regular-time and half-time score, period scores, how it was decided (regular time, extra time, penalties), winner, and notes such as aggregate scores |
| **Fixtures** | The rest of the current season's schedule |
| **Standings** | One row per team: rank, played, W/D/L, goals for/against, points, zone, last-5 form. Split tables (NBA and NHL conferences and divisions) keep their group |
| **Over/under table** | Per team, how many matches went over or under each goal line (0.5 to 6.5), plus average goals |
| **HT/FT table** | Per team, how many matches ended W/W, D/W, L/W ... |
| **Top scorers** | Rank, player, team, nationality, position, goals, assists |
| **Seasons** | Every season of the league with its champion and Flashscore ids |

Sports: football, basketball, hockey, handball, volleyball, baseball,
American football, rugby, futsal, water polo, cricket, esports and more.
Anything with a league page on Flashscore works.

***

### Output example

Each row has a `recordType`: `match`, `standing`, `topScorer` or `season`.
The dataset has one view for each type.

```json
{
  "recordType": "match",
  "sport": "football",
  "country": "England",
  "league": "Premier League",
  "season": "2024/2025",
  "stage": "Main",
  "round": "Round 28",
  "startTime": "2025-03-09T16:30:00Z",
  "status": "finished",
  "homeTeam": "Manchester Utd",
  "awayTeam": "Arsenal",
  "homeScore": 1,
  "awayScore": 1,
  "halfTimeScore": "1-0",
  "periodScores": [{ "home": 1, "away": 0 }, { "home": 0, "away": 1 }],
  "decidedBy": "regular-time",
  "winner": "draw",
  "eventId": "nV1t4zCM",
  "url": "https://www.flashscore.com/match/nV1t4zCM/"
}
```

```json
{
  "recordType": "standing",
  "league": "Premier League",
  "season": "2024/2025",
  "view": "overall",
  "rank": 1,
  "team": "Liverpool",
  "played": 38, "wins": 25, "draws": 9, "losses": 4,
  "scoresFor": 86, "scoresAgainst": 41, "scoreDifference": 45,
  "points": 84,
  "zone": "Promotion - Champions League (League phase)",
  "form": ["D", "L", "D", "L", "W"]
}
```

```json
{
  "recordType": "topScorer",
  "league": "Premier League",
  "season": "2024/2025",
  "rank": 1,
  "player": "Salah M.",
  "team": "Liverpool",
  "nationality": "Egypt",
  "position": "Forward",
  "goals": 29,
  "assists": 18
}
```

```json
{
  "recordType": "season",
  "league": "Premier League",
  "season": "2024/2025",
  "seasonStart": 2024,
  "seasonEnd": 2025,
  "winner": "Liverpool",
  "seasonUrl": "https://www.flashscore.com/football/england/premier-league-2024-2025/"
}
```

***

### How to use it

Paste one or more **league URLs** from Flashscore. Then choose **which
seasons** and **what to collect**.

**The current Premier League season: results and table:**

```json
{ "leagueUrls": ["https://www.flashscore.com/football/england/premier-league/"] }
```

**Ten seasons of LaLiga results for a betting model, with over/under tables:**

```json
{ "leagueUrls": ["https://www.flashscore.com/football/spain/laliga/"],
  "lastSeasons": 10,
  "include": ["results", "standings"],
  "standingsViews": ["overall", "overUnder"], "overUnderLines": ["1.5", "2.5", "3.5"] }
```

**Every Premier League champion since 1901:**

```json
{ "leagueUrls": ["https://www.flashscore.com/football/england/premier-league/"],
  "include": ["seasons"], "lastSeasons": 200 }
```

**A specific past season, everything:**

```json
{ "leagueUrls": ["https://www.flashscore.com/basketball/usa/nba-2024-2025/"],
  "include": ["results", "standings", "topScorers", "seasons"],
  "standingsViews": ["overall", "home", "away"] }
```

**The 2010s of the Bundesliga:**

```json
{ "leagueUrls": ["https://www.flashscore.com/football/germany/bundesliga/"],
  "fromYear": 2010, "toYear": 2019 }
```

#### Choosing seasons

- **No season settings:** the current season. A past-season URL such as
  `.../premier-league-2024-2025/` gets that season instead.
- **`seasons`:** exact seasons, such as `2024-2025` (or `2024/2025`), `2024`
  for calendar-year leagues like MLS, or `current`.
- **`lastSeasons`:** the N most recent seasons.
- **`fromYear` / `toYear`:** seasons starting within that range.

You can combine these options. For example, `lastSeasons: 3` plus
`seasons: ["1990-1991"]` returns four seasons.

#### Tips

- **Knockout cups** such as the FA Cup have no table. You still get results
  and top scorers, and the run says so in its status.
- **Multi-stage competitions** such as the Champions League return every
  stage's matches: qualification, league phase and play-offs. Each match
  carries its `stage`.
- **`homeScore`/`awayScore`** is the result as Flashscore lists it. For a
  match decided on penalties, the regular-time score is in
  `homeScoreRegularTime`/`awayScoreRegularTime`, and `decidedBy` is
  `penalties`.
- **`halfTimeScore`** is available for football. Other sports give their
  periods in `periodScores`.
- Very old seasons have results and tables, but usually no top-scorer list.

***

### Pricing

Pay per event. You are charged only for rows you receive:

| Row | Price |
| --- | ---: |
| Match (result or fixture) | $0.001 |
| Standings row | $0.0005 |
| Top scorer | $0.0002 |
| Season (with champion) | $0.0005 |

Some examples:

- A full Premier League season (380 results + table) costs **$0.39**.
- Ten seasons of results for a 20-team league cost **$3.80**.
- Every champion of a 115-season league costs **$0.06**.

Invalid input and unknown leagues or seasons are never charged. The run
stops cleanly when it reaches your maximum charge.

***

### FAQ

**Is it legal to scrape Flashscore?** This Actor only collects publicly
visible sports data, without logging in. You are responsible for how you use
the data. Check Flashscore's terms and your local laws before using it
commercially.

**How far back does it go?** As far as Flashscore does, which varies by
league. Major leagues go back decades: the Premier League archive has 115
seasons (to 1901/02), the Champions League 56 and the NBA 34. Smaller
leagues usually start in the 2000s. A season Flashscore doesn't have comes back as an uncharged
`SEASON_NOT_FOUND` row that lists the newest available seasons.

**Can I get match statistics, lineups or odds?** Not from this Actor, which
covers whole seasons. See the other Flashscore Actors on this account for
per-match statistics and odds comparison.

**Why is my league name "Premier League" for 1990/91?** Flashscore files
the old First Division under the Premier League's archive, and this Actor
uses Flashscore's names.

***

### Ready-made examples

Open one, press **Try for free**, and change the input to your own:

- [Download 10 seasons of Premier League results](https://apify.com/incognito_mode/flashscore-league-archive-scraper/examples/premier-league-results-history)
- [Get LaLiga final tables for the last 20 seasons](https://apify.com/incognito_mode/flashscore-league-archive-scraper/examples/laliga-final-tables)
- [List Serie A top scorers season by season](https://apify.com/incognito_mode/flashscore-league-archive-scraper/examples/serie-a-top-scorers-history)
- [Download NBA game results for the last 3 seasons](https://apify.com/incognito_mode/flashscore-league-archive-scraper/examples/nba-historical-results)

### More Flashscore Actors

Same data source, same flat rows and pay-per-result pricing:

- [Flashscore Betting Odds Scraper](https://apify.com/incognito_mode/flashscore-odds-scraper) — pre-match odds from 100+ bookmakers with opening prices, plus outright winner odds
- [Flashscore Odds Movement Tracker](https://apify.com/incognito_mode/flashscore-odds-tracker) — line movement and exact closing lines on a schedule
- [Flashscore Match Stats Scraper](https://apify.com/incognito_mode/flashscore-match-stats-scraper) — player stats with xG, lineups, box scores and team stats per match
- [Flashscore Teams & Players](https://apify.com/incognito_mode/flashscore-team-player-scraper) — squads, transfers with fees, market values and player careers
- [Flashscore Tennis Scraper](https://apify.com/incognito_mode/flashscore-tennis-scraper) — ATP/WTA results, serve stats, point-by-point, draws and rankings

# Actor input Schema

## `leagueUrls` (type: `array`):

Flashscore league pages, any sport: football, basketball, hockey, handball, volleyball ... e.g. https://www.flashscore.com/football/england/premier-league/. A past-season URL (.../premier-league-2024-2025/) scrapes that season when no season filter is set.

## `seasons` (type: `array`):

Specific seasons: 2024-2025 (or 2024/2025), a single year such as 2024 for calendar-year leagues, or current. Leave empty (and the fields below too) for the current season only.

## `lastSeasons` (type: `integer`):

The N most recent seasons (the current one included), within the year range if one is set.

## `fromYear` (type: `integer`):

Seasons starting in this year or later.

## `toYear` (type: `integer`):

Seasons starting in this year or earlier.

## `include` (type: `array`):

Results: every played match with scores and half-time scores. Fixtures: upcoming matches of the current season. Standings: league tables (views below). Top scorers: goals and assists per player. Seasons: one row per season with its champion.

## `standingsViews` (type: `array`):

Which tables to return. Home/away split the table by venue; form covers the last five matches; over/under counts matches above and below a goal line; HT/FT counts half-time/full-time outcomes. Not every league has every view.

## `overUnderLines` (type: `array`):

Goal lines for the over/under view, e.g. 1.5, 2.5, 3.5. Empty = every line Flashscore has (0.5 to 6.5).

## `maxItems` (type: `integer`):

Stop after this many dataset rows in total.

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

Not needed: Flashscore's data hosts do not block by IP. The Actor escalates to Apify proxies automatically if it is ever refused.

## Actor input object example

```json
{
  "leagueUrls": [
    "https://www.flashscore.com/football/england/premier-league/",
    "https://www.flashscore.com/basketball/usa/nba/"
  ],
  "seasons": [
    "2024-2025",
    "2023-2024"
  ],
  "include": [
    "results",
    "standings",
    "topScorers"
  ],
  "standingsViews": [
    "overall"
  ],
  "overUnderLines": [
    "2.5"
  ],
  "maxItems": 10000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing every scraped row.

# 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 = {
    "leagueUrls": [
        "https://www.flashscore.com/football/england/premier-league/"
    ],
    "include": [
        "results",
        "standings",
        "topScorers"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("incognito_mode/flashscore-league-archive-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 = {
    "leagueUrls": ["https://www.flashscore.com/football/england/premier-league/"],
    "include": [
        "results",
        "standings",
        "topScorers",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("incognito_mode/flashscore-league-archive-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 '{
  "leagueUrls": [
    "https://www.flashscore.com/football/england/premier-league/"
  ],
  "include": [
    "results",
    "standings",
    "topScorers"
  ]
}' |
apify call incognito_mode/flashscore-league-archive-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,incognito_mode/flashscore-league-archive-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/UBfdPhSbgDMbdhgeN/builds/9I3ms1KN6rmaUdKaJ/openapi.json
