# Flashscore Scraper — Live Scores, Fixtures & Results (`studio-amba/flashscore-scraper`) Actor

Scrape live scores, upcoming fixtures and recent results from Flashscore.com. Covers football, tennis, basketball and ice hockey with team names, timestamps and scores. No login or cookies required.

- **URL**: https://apify.com/studio-amba/flashscore-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Flashscore Scraper

Extract live scores, upcoming fixtures and recent results from [Flashscore.com](https://www.flashscore.com) as clean structured JSON. Covers football, tennis, basketball and ice hockey, with team names, kickoff times, live minutes and scores in one run.

No login. No cookies. No browser automation. The actor talks to the same public JSON feed the Flashscore website itself loads, so it is fast and stable.

### What this actor does

Given a sport and a day range, this actor collects every match Flashscore lists — live, upcoming or recently finished — and returns one row per match with:

- Home and away team (or player) names
- Match status: scheduled, live or finished, with the live minute when in play
- Current or final score
- Tournament and country
- Team codes and crest images
- Kickoff time and a direct link to the match page

Flashscore itself does not publish an official API, so this actor reads the internal feed that powers Flashscore's live-score widgets directly.

### Why use it

- **Sports media and content sites** — pull live scores and results into your own pages without embedding Flashscore's widget.
- **Betting and fantasy sports tools** — track match status, kickoff times and final scores for settlement or research.
- **Fan and stats apps** — build league tables, fixture lists or result archives for a specific competition.
- **Sports data analysis** — collect match-level results across many leagues for modelling.

### How to scrape Flashscore data

1. Open the actor and pick a **Sport** (Football, Tennis, Basketball or Ice Hockey).
2. Choose a **Match Status** filter — `all`, `live`, `scheduled` or `finished`.
3. Set **Days Back** to include recent finished results (0-7 days) and/or **Days Forward** to include upcoming fixtures (0-7 days). Leave both at `0` to get only today's matches.
4. Optionally set a **League / Country Filter**, e.g. `Premier League` or `England`, to narrow the output to one competition or country.
5. Set **Max Results** and click **Start**.

The actor fetches Flashscore's day-by-day feed for the selected sport and date range, parses every match block, de-duplicates by match ID, applies your filters, and writes the result to the dataset. You can export it as JSON, CSV or Excel.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `sportId` | integer | Sport to scrape: `1` Football, `2` Tennis, `3` Basketball, `6` Ice Hockey. Default: `1`. |
| `matchStatus` | string | `all`, `live`, `scheduled` or `finished`. Default: `all`. |
| `daysBack` | integer | Days of past results to include besides today (0-7). Default: `0`. |
| `daysForward` | integer | Days of upcoming fixtures to include besides today (0-7). Default: `0`. |
| `leagueFilter` | string | Optional case-insensitive substring match on tournament name or country. |
| `maxResults` | integer | Maximum number of matches to return. Default: `200`. |
| `proxyConfiguration` | object | Apify proxy settings. Default: automatic Apify proxy. |

#### Example input

```json
{
    "sportId": 1,
    "matchStatus": "all",
    "daysBack": 1,
    "daysForward": 1,
    "leagueFilter": "Premier League",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
```

### Output

Each dataset item looks like this:

```json
{
    "matchId": "0hpMzPx3",
    "sport": "Football",
    "status": "finished",
    "statusMinute": null,
    "startTime": "2026-08-05T22:00:00.000Z",
    "tournament": "ARGENTINA: Liga Profesional - Clausura",
    "country": "Argentina",
    "homeTeam": "Boca Juniors",
    "awayTeam": "Estudiantes L.P.",
    "homeScore": 1,
    "awayScore": 0,
    "homeTeamCode": "BOC",
    "awayTeamCode": "EST",
    "homeCrestUrl": "https://static.flashscore.com/res/image/data/GQF9p3A6-pGZDw8HC.png",
    "awayCrestUrl": "https://static.flashscore.com/res/image/data/MgrzhmgT-2aA5n1nK.png",
    "url": "https://www.flashscore.com/match/football/boca-juniors-hMrWAFH0/estudiantes-l-p-p2SkCHXs/?mid=0hpMzPx3",
    "scrapedAt": "2026-08-06T09:09:24.656Z"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `matchId` | string | Flashscore's internal match identifier |
| `sport` | string | Sport name |
| `status` | string | `scheduled`, `live`, `finished` or `other` |
| `statusMinute` | string | null | Current minute when the match is live |
| `startTime` | string | Scheduled kickoff time, ISO 8601 |
| `tournament` | string | Full competition name |
| `country` | string | null | Country or region of the competition |
| `homeTeam` / `awayTeam` | string | Team or player names |
| `homeScore` / `awayScore` | number | null | Current or final score; `null` before kickoff |
| `homeTeamCode` / `awayTeamCode` | string | null | 3-letter team codes |
| `homeCrestUrl` / `awayCrestUrl` | string | null | Team crest / flag image URL |
| `url` | string | Direct link to the match page |
| `scrapedAt` | string | ISO 8601 timestamp of collection |

### Cost estimate

This actor uses a lightweight JSON feed and no browser, so runs are cheap and fast. A single day's feed for one sport is one HTTP request and typically returns 150-400 matches. Requesting a full week of history and forecast (`daysBack: 7, daysForward: 7`) is still only 15 requests. Exact cost depends on your Apify plan and proxy usage.

### Limitations

- **Odds are not included.** Flashscore's odds comparison loads through a separate, undocumented per-bookmaker feed that could not be reliably reverse-engineered; this actor focuses on scores, fixtures and results only.
- **History is limited to roughly 7 days back and forward.** Flashscore's day-by-day feed does not expose older archives; deep historical/season data would require a different, per-tournament endpoint.
- Only football, tennis, basketball and ice hockey are verified (`sportId` 1, 2, 3, 6). Other Flashscore sport IDs may work but have not been tested.
- Tournament headers on some minor/international competitions omit a country tag, so `country` can be `null`.
- Data is read from Flashscore's public live-score feed and may change format without notice.
- A run's usage cost only settles after the run reports SUCCEEDED — checking cost mid-run under-reports actual spend.

### Related scrapers

Following European sports and market data with Studio AMBA:

- **Transfermarkt Scraper** — player profiles, market values and transfer history
- Job, real estate and e-commerce scrapers across 30+ European countries

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API — maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

### Disclaimer

This actor collects publicly available match data from Flashscore.com for legitimate research, media and analysis use. Respect Flashscore's terms of service and applicable data protection law when using the output.

# Actor input Schema

## `sportId` (type: `integer`):

Which sport to scrape. Verified: 1 = Football, 2 = Tennis, 3 = Basketball, 6 = Ice Hockey. Other Flashscore sport IDs may work but are untested.

## `matchStatus` (type: `string`):

Filter which matches to return. 'all' returns scheduled, live and finished matches within the selected day range.

## `daysBack` (type: `integer`):

How many days of past results to include, in addition to today (0-7). Flashscore's public feed only exposes roughly a week of history per day.

## `daysForward` (type: `integer`):

How many days of upcoming fixtures to include, in addition to today (0-7).

## `leagueFilter` (type: `string`):

Optional case-insensitive substring to filter by tournament name or country (e.g. 'Premier League', 'England', 'Champions League'). Leave empty for all competitions.

## `maxResults` (type: `integer`):

Maximum number of matches to return.

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

Proxy settings. Flashscore's data feed sits behind Varnish with no bot-wall detected — residential is not required but recommended for reliability at scale.

## Actor input object example

```json
{
  "sportId": 1,
  "matchStatus": "all",
  "daysBack": 0,
  "daysForward": 0,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/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 = {
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/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 '{
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/flashscore-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/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/pTSovNFm7aIYza2Cy/builds/tsLdcdkTMH6QPVzPT/openapi.json
