# FlashScore Scraper & API (`parsebird/flashscore-scraper`) Actor

Scrape live and scheduled FlashScore scores for football, basketball, tennis, and 13 other sports: teams, scores, match status, and goal/card/point history.

- **URL**: https://apify.com/parsebird/flashscore-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** News, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 match 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 & API

Extract live and scheduled match data from [FlashScore](https://www.flashscore.com) for football, basketball, tennis, and 13 other sports — scores, match status, live clock, and full goal/card/point history.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Pick a sport and any day from 7 days ago to 7 days ahead, and get every match with live scores, status, league, and a full history of goals, cards, substitutions, or period-by-period scores — sourced directly from FlashScore's own live-score feed.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
parsebird/flashscore-scraper on Apify. Call: ApifyClient("TOKEN").actor("parsebird/flashscore-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: sport (string, required, default "football" — one of football, basketball, american-football, futsal, rugby union, rugby league, handball, baseball, hockey, cricket, tennis, volleyball, badminton, table-tennis, darts, snooker), dayOffsets (array of strings, default ["0"] — each -7 to 7, where 0=today, -1=yesterday, 1=tomorrow; pass several to scrape multiple days). Output: one item per match with fields home_team, away_team, home_score, away_score, status (Not started/Live/Finished), status_time, start_time, league, and history (array of period summaries and goal/card/substitution events with time, side, player, and action). Full actor spec: fetch build via GET https://api.apify.com/v2/acts/parsebird~flashscore-scraper (Bearer TOKEN). Get token: https://console.apify.com/account/integrations
```

### What does FlashScore Scraper & API do?

**FlashScore Scraper & API** is a FlashScore API alternative that turns live scores and results into structured data — no manual refreshing, no copy-pasting scores off the site. It reads the same live-score feed FlashScore's own website loads, across 16 sports.

- ⚽ Scrape football, basketball, american football, futsal, rugby union, rugby league, handball, baseball, hockey, cricket, tennis, volleyball, badminton, table tennis, darts, and snooker
- 📅 Fetch any single day from 7 days ago to 7 days ahead, or select several days at once in one run
- 🔴 Get live match status, current period (e.g. "2nd Half", "Set 2"), and score in real time
- 📋 Full match history: period-by-period running scores, plus goals, cards, and substitutions with player names where FlashScore tracks them
- 🏆 League/competition name for every match
- ⏱️ Schedule recurring runs to track scores throughout matchday, trigger via the [Apify API](https://docs.apify.com/api/v2), or connect to Zapier, Make, Google Sheets, and webhooks
- 📁 Export results as JSON, CSV, Excel, or pull them straight into your app with the Apify API

### What data can you extract from FlashScore?

| Field | Description |
|-------|-------------|
| `home_team` / `away_team` | Team or player names |
| `home_score` / `away_score` | Current score (`null` before kickoff) |
| `status` | `Not started`, `Live`, or `Finished` |
| `status_time` | Current period and, where FlashScore provides it, the live clock (e.g. "2nd Half - 58'", "Set 1 - 0:41") |
| `start_time` | Scheduled kickoff, `DD.MM.YYYY HH:MM` (UTC) |
| `league` | Competition/league name, prefixed with country |
| `history` | Array of period summaries (`kind: "summary"`) and events (`kind: "event"`) with `time`, `score`, `side`, `player`, and `action` |

### How to scrape FlashScore live scores

1. Go to the [FlashScore Scraper & API](https://apify.com/parsebird/flashscore-scraper) page on Apify Store
2. Click **Try for free**
3. Choose a **Sport** from the dropdown
4. Select one or more **Days to fetch** (0 = Today, negative = past, positive = future)
5. Click **Start** and wait for the run to finish
6. Download your data as JSON, CSV, or Excel, or pull it through the **API** tab

### Use cases

- **Live score tracking** — Poll a sport on a schedule to track scores and status changes throughout the day
- **Results archiving** — Pull finished matches with full goal/card history for a league or date range
- **Betting/analytics research** — Feed match results, timing, and events into your own models or dashboards
- **Sports media** — Power a live-scores widget or ticker from structured match data
- **Historical lookback** — Fetch any of the last 7 days to backfill recent results

### How it works

FlashScore Scraper & API reads the same feed FlashScore's own website requests when you open a sport's scores page, then expands every match's period and event data from FlashScore's match-detail feed to build the `history` array. For matches that haven't started yet, `history` is returned empty since there's nothing to report; for live and finished matches, it includes every period and (when the sport tracks them) every event.

### Use with the Apify API

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("parsebird/flashscore-scraper").call(run_input={
    "sport": "football",
    "dayOffsets": ["0"],
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['home_team']} {item['home_score']} - {item['away_score']} {item['away_team']} ({item['status']})")
```

**JavaScript:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('parsebird/flashscore-scraper').call({
    sport: 'football',
    dayOffsets: ['0'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => console.log(`${item.home_team} ${item.home_score} - ${item.away_score} ${item.away_team} (${item.status})`));
```

### Output example

```json
{
  "home_team": "Beroe",
  "away_team": "Spartak Varna",
  "home_score": 0,
  "away_score": 0,
  "status": "Live",
  "status_time": "2nd Half - 57'",
  "start_time": "21.11.2025 16:45",
  "league": "BULGARIA: efbet League",
  "history": [
    {
      "kind": "summary",
      "time": "1st Half",
      "score": "0 - 0"
    },
    {
      "kind": "event",
      "time": "40",
      "side": "away",
      "player": "Lozev D.",
      "action": "Yellow Card"
    },
    {
      "kind": "event",
      "time": "44",
      "side": "home",
      "player": "Salomoni J.",
      "action": "Red Card"
    },
    {
      "kind": "summary",
      "time": "2nd Half",
      "score": "0 - 0"
    }
  ]
}
```

Download results in JSON, HTML, CSV, or Excel from the **Storage** tab, or fetch them programmatically from the [Dataset API](https://docs.apify.com/api/v2#/reference/datasets).

### Pricing

**How much does it cost to scrape FlashScore with this actor?**

FlashScore Scraper & API uses **Pay-per-event** pricing — you only pay for matches actually saved to the dataset:

| Event | Price per event | Price per 1,000 |
|-------|-----------------|------------------|
| `match-scraped` | $0.0009 | **$0.90** |

Pricing steps down automatically as your account's Apify usage tier increases: $0.90/1,000 on the Free tier and $0.80/1,000 on Bronze, Silver, and Gold. A full day of football (1,000+ matches worldwide) on the Free tier costs under $1. Every new Apify account gets free trial credits, so you can test this actor without adding a payment method first.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `sport` | string | **Yes** | `football` | Sport to scrape — see the dropdown for all 16 supported sports |
| `dayOffsets` | array of strings | No | `["0"]` | Days to fetch, `-7` to `7` (0 = today). Select multiple to scrape several days in one run |

### FAQ

**Does this actor use an official FlashScore API?**
No — FlashScore does not publish a public API for third-party use. This actor reads the same structured match-score feed FlashScore's own website loads.

**How accurate is the live clock in `status_time`?**
It comes directly from FlashScore's data whenever FlashScore provides one (for example, tennis and other set-based sports include an exact elapsed clock per game). For continuous-clock sports like football, hockey, and handball, the minute count is calculated from elapsed time since kickoff, which closely tracks the real game clock in the common case but can run ahead during long stoppages, interruptions, or delays. For sports with natural stoppages (basketball, baseball, cricket, etc.), only the current period is reported (e.g. "3rd Quarter") since a wall-clock estimate would be misleading there.

**Why is `history` empty for some matches?**
Matches that haven't started yet have no history to report. A small number of lower-tier fixtures also don't have detailed event tracking on FlashScore itself — for those, `history` may contain period scores only, without individual goal/card events.

**Can I get results for a specific league only?**
Not directly — this actor returns all matches for the sport and day(s) you select, across every league. Filter the `league` field in your downstream pipeline or with a data transformation actor.

**Can I schedule recurring runs?**
Yes. Use [Apify's Scheduler](https://docs.apify.com/platform/schedules) to run this actor every few minutes during matchday to track live scores as they update.

**Can I use this with the API or integrations?**
Yes. Every run is accessible through the [Apify API](https://docs.apify.com/api/v2), and you can connect this actor to Zapier, Make, Google Sheets, Slack, and webhooks from the **Integrations** tab.

**I found a bug or the actor stopped returning data — what do I do?**
FlashScore occasionally changes its feed format. Please open an issue on the **Issues** tab with your input and a description of what happened — reports are usually addressed quickly.

### Is it legal to scrape FlashScore?

Scraping publicly available data, such as match scores and results shown to any visitor without logging in, is generally considered legal, including under precedents like *hiQ Labs v. LinkedIn*. This actor does not access any account-gated or private data. You are responsible for using the collected data in compliance with FlashScore's terms of service and applicable data protection laws in your jurisdiction. Read more in [Apify's blog post on the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Related actors

Other sports-data actors from ParseBird:

- [SofaScore Scraper](https://apify.com/parsebird/sofascore-scraper) — extract live scores and stats from SofaScore
- [Tennis Scraper](https://apify.com/parsebird/tennis-scraper) — extract tennis rankings and match data
- [MLB Stats Scraper](https://apify.com/parsebird/mlb-stats-scraper) — extract MLB scores and statistics

# Actor input Schema

## `sport` (type: `string`):

Choose a sport for matches scraping.

## `dayOffsets` (type: `array`):

Choose which days to scrape. 0 = Today, -1 = Yesterday, 1 = Tomorrow. Select multiple to scrape several days at once.

## Actor input object example

```json
{
  "sport": "football",
  "dayOffsets": [
    "0"
  ]
}
```

# Actor output Schema

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

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/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 '{}' |
apify call parsebird/flashscore-scraper --silent --output-dataset

```

## MCP server setup

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