# 🚀 Flashscore Odds Scraper · 2,500 Free Matches/Month (`omkar-cloud/flashscore-odds-scraper`) Actor

Flashscore Odds Scraper gets you betting odds ⚡ fast, 🎯 100% accurate and 🔍 ridiculously detailed — opening & current prices from 20+ bookmakers for 1X2, over/under, handicaps, BTTS & correct score. 💰 $2 per 1,000 matches, no start fee. Scrape your first 2,500 matches free every month 🚀

- **URL**: https://apify.com/omkar-cloud/flashscore-odds-scraper.md
- **Developed by:** [Chetan Jain](https://apify.com/omkar-cloud) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 match odds scrapeds

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

## Flashscore Odds Scraper

Flashscore Odds Scraper by Omkar Cloud gets you 🎯 accurate, 🔍 detailed Flashscore betting odds.

Flashscore compares the prices of 20+ bookmakers for every big match, and every run reads them live — so you get the opening and the current price of every selection, per bookmaker, market and half, for any sport, day, competition or match, one row per match, and can successfully complete your project.

**$2 per 1,000 matches.** And with Apify's free plan you get $5 of credit every month, so your first **2,500 matches each month are free**.

This is an excellent Actor made by Omkar Cloud, which is Rated Excellent — [4.7 based on 30 reviews on Trustpilot](https://www.trustpilot.com/review/omkar.cloud).

👉 [**Try Flashscore Odds Scraper free**](https://apify.com/omkar-cloud/flashscore-odds-scraper) — your first 2,500 matches are Free.

### What can I get

- 💰 **Every bookmaker's price** — 20+ bookmakers for the UK, plus the local line-up of any country you pick (`US`, `DE`, `IN`, `BR` ...)
- 📈 **Opening and current odds** — spot the line moves, per selection, with whether the bookmaker takes live bets
- 🎯 **Every market** — 1X2, home/away, over/under with every line, both teams to score, double chance, draw no bet, Asian and European handicap, correct score, half time/full time and odd/even
- ⏱️ **By match part** — full time, first half and second half, or just the one you want
- ⚽ **Any sport, day or competition** — football, tennis, basketball, hockey and every other sport with head-to-head matches, for a week back to a week ahead
- 🔗 **Any match by URL** — paste flashscore.com match links or ids

### Why Flashscore Odds Scraper

Most other odds scrapers fail you in one of four ways:

- 🧩 **One market only** — the 1X2 line, not the handicaps, totals and correct scores
- 🗄️ **Stale, cached prices** — useless when the line just moved
- 💸 **Pay more to get the same data** — up to $5 per 1,000 matches
- 🪦 **Works today, breaks next month** — nobody maintains it

Flashscore Odds Scraper is read live on every run, priced honestly with no start fee, and actively maintained. Matches no bookmaker prices are skipped and never billed.

### Input

| Field | What it does |
|---|---|
| **Sports** | Sports by slug, like `football`, `tennis`, `basketball`, `hockey` |
| **Days** | `today`, `yesterday`, `tomorrow`, an offset from `-7` to `7`, or a date like `2026-09-19` |
| **Match Status** | Scheduled for pre-match prices, finished for closing odds, or all |
| **Competitions** | Keep only competitions whose name contains one of these, or paste their URLs |
| **Matches** | Specific matches by id (`GCxZ2uHc`) or flashscore.com match URL |
| **Bookmaker Country** | 2-letter country deciding which bookmakers you get — `GB` has 20+ |
| **Markets** | Keep only these markets. Empty = every market |
| **Match Part** | Full time, first half or second half. Empty = all three |
| **Max Matches** | Cost control for the whole run — 1,000 matches = $2 |

### Example: A Match with Its Odds

```json
{
  "source_input": "football +1",
  "source_kind": "day",
  "id": "joCde00k",
  "link": "https://www.flashscore.com/match/joCde00k/",
  "competition": { "name": "Premier League", "display_name": "ENGLAND: Premier League" },
  "status": "scheduled",
  "start_time": "2026-09-20T13:00:00Z",
  "home": { "name": "Bournemouth" },
  "away": { "name": "Liverpool" },
  "odds": {
    "geo": "GB",
    "bookmaker_count": 20,
    "market_count": 65,
    "markets": [
      {
        "bookmaker": { "id": 979, "name": "Betano.uk", "order": 0 },
        "bet_type": "OVER_UNDER",
        "bet_scope": "FULL_TIME",
        "has_live_betting": false,
        "selections": [
          { "selection": "over", "value": 1.47, "opening_value": 1.44, "handicap": 2.5, "is_active": true },
          { "selection": "under", "value": 2.7, "opening_value": 2.63, "handicap": 2.5, "is_active": true }
        ]
      },
      {
        "bookmaker": { "id": 16, "name": "bet365", "order": 1 },
        "bet_type": "HALF_FULL_TIME",
        "bet_scope": "FULL_TIME",
        "has_live_betting": true,
        "selections": [
          { "selection": "1/1", "value": 5, "opening_value": 5, "is_active": true },
          { "selection": "X/1", "value": 8, "opening_value": 8, "is_active": true }
        ]
      }
    ]
  }
}
```

*Trimmed for readability — `markets` carries every bookmaker and every line you asked for.*

### Get Started with 2,500 Free Matches

1. [Open Flashscore Odds Scraper](https://apify.com/omkar-cloud/flashscore-odds-scraper) — the form comes pre-filled with tomorrow's Premier League.
2. Pick your sports, days, competitions and markets and click **Start**.
3. Download the results as JSON, CSV or Excel 😎.

### Pricing

**$2 per 1,000 matches. No start fee.** You pay for the rows you get, nothing else.

| What you scrape | Price |
|---|---|
| Match row with every bookmaker's odds | **$0.002** each — $2 per 1,000 |
| Match with no odds for your country | **$0** — skipped, never billed |
| Actor start | **$0** — no start fee |

Apify's free plan gives you $5 of credit every month, so **2,500 matches are free every month**. A match reached twice in one run is scraped and billed only once.

### Run It from Code

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

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

const run = await client.actor('omkar-cloud/flashscore-odds-scraper').call({
    sports: ['football'],
    days: ['tomorrow', '+2'],
    competitions: ['Premier League', 'Champions League'],
    geo: 'GB',
    betTypes: ['home-draw-away', 'over-under'],
    maxResults: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("omkar-cloud/flashscore-odds-scraper").call(run_input={
    "sports": ["basketball"],
    "competitions": ["NBA"],
    "geo": "US",
    "maxResults": 30,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["home"]["name"], "vs", item["away"]["name"], item["odds"]["market_count"], "markets")
```

### FAQ

**Which bookmakers do I get?**
The ones Flashscore shows in the country you pick — 20+ for `GB`, fewer for some markets. Try `DE`, `IN` or `BR` for their local bookmakers.

**Why were some matches skipped?**
Bookmakers do not price every match — lower leagues and youth games often have no odds. Those are skipped and never billed.

**What does a run cost?**
$2 per 1,000 matches with odds, and no start fee. Set **Max Matches** to cap any run.

**How fresh are the odds?**
They are read live from Flashscore on every run, next to the opening price, so you can track line moves.

**Do I need proxies or a Flashscore account?**
No. The Actor handles everything.

### Popular Actors by Omkar Cloud

- [**Flashscore Scraper**](https://apify.com/omkar-cloud/flashscore-scraper) — live scores, results & match stats for 37 sports
- [**Flashscore Tennis Scraper**](https://apify.com/omkar-cloud/flashscore-tennis-scraper) — ATP, WTA & ITF matches with serve stats, point by point and rankings
- [**Sofascore Scraper**](https://apify.com/omkar-cloud/sofascore-scraper) — live scores, fixtures & results for 26 sports
- [**Sofascore Players Scraper**](https://apify.com/omkar-cloud/sofascore-players-scraper) — player profiles with 114 season statistics
- [**IMDb Scraper**](https://apify.com/omkar-cloud/imdb-scraper) — titles, ratings, cast & box office

### 💬 Have Questions? We Have Answers.

You're a developer — we know how hard completing a project can be. So we offer full support: just message us and we'll reply ✅ with a solution within 1 working day.

[![Message Us on WhatsApp](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://api.whatsapp.com/send?phone=918178804274\&text=I%20need%20help%20with%20using%20the%20Flashscore%20Odds%20Scraper%20Actor.)

[![Ask Us on Email](https://raw.githubusercontent.com/omkarcloud/assets/master/images/ask-on-email.png)](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Flashscore%20Odds%20Scraper%20Actor\&body=I%20need%20help%20with%20using%20the%20Flashscore%20Odds%20Scraper%20Actor.)

You are important to us — just message us and we will solve your problem ✅ within 1 working day. 🩷 Pinky Promise 🤙!

# Actor input Schema

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

Sports to scrape, by slug, like `football`, `tennis`, `basketball`, `hockey`, `american-football`, `baseball`, `handball`, `rugby-union`, `volleyball`, `cricket`, `darts`, `snooker`, `boxing`, `mma`, `esports` — any of Flashscore's 37 sports with head-to-head matches works.

## `days` (type: `array`):

Days to scrape: `today`, `yesterday`, `tomorrow`, an offset from today between `-7` and `7`, or a date like `2026-09-19` inside that window. Empty = today.

## `status` (type: `string`):

Keep only matches in one state — `Scheduled` for pre-match prices, `Finished` for closing odds. Empty = every match of the day.

## `competitions` (type: `array`):

Keep only competitions whose name contains one of these, like `Premier League`, `ENGLAND: Premier League`, `LaLiga`, `NBA` or `Champions League` — or paste the flashscore.com competition URL. Empty = every competition.

## `matches` (type: `array`):

Specific matches, by Flashscore match id like `GCxZ2uHc` or a pasted flashscore.com match URL like `https://www.flashscore.com/match/GCxZ2uHc/`.

## `geo` (type: `string`):

2-letter country code deciding which bookmakers you get, like `GB` (20+ bookmakers), `US`, `DE`, `IN` or `BR`.

## `betTypes` (type: `array`):

Markets to keep. Empty = every market the bookmakers price, which also includes draw no bet, European handicap and odd/even.

## `betScope` (type: `string`):

Part of the match the prices cover. Empty = full time, first half and second half.

## `timezone` (type: `string`):

Timezone for kick-off times and for what counts as "today" — an IANA name like `America/New_York` or an hour offset like `-4`. Empty = UTC.

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

Maximum number of match rows with odds for the whole run. Use this to control your cost (1,000 matches = $2).

## Actor input object example

```json
{
  "sports": [
    "football"
  ],
  "days": [
    "tomorrow"
  ],
  "status": "",
  "competitions": [
    "Premier League"
  ],
  "matches": [],
  "geo": "GB",
  "betScope": "",
  "maxResults": 100
}
```

# Actor output Schema

## `results` (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 = {
    "sports": [
        "football"
    ],
    "days": [
        "tomorrow"
    ],
    "competitions": [
        "Premier League"
    ],
    "matches": [],
    "geo": "GB",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("omkar-cloud/flashscore-odds-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": ["football"],
    "days": ["tomorrow"],
    "competitions": ["Premier League"],
    "matches": [],
    "geo": "GB",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("omkar-cloud/flashscore-odds-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": [
    "football"
  ],
  "days": [
    "tomorrow"
  ],
  "competitions": [
    "Premier League"
  ],
  "matches": [],
  "geo": "GB",
  "maxResults": 100
}' |
apify call omkar-cloud/flashscore-odds-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,omkar-cloud/flashscore-odds-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/9aYDtbvWdmOegHOw8/builds/xac2reGlrMbkKBSmq/openapi.json
