# Bet365 Live Odds & In-Play Data Scraper (`sian.agency/bet365-live-odds-scraper`) Actor

Scrape live Bet365 in-play betting odds, running scores, and pre-match lines across soccer, basketball, tennis, baseball, hockey, esports and more. Clean structured rows with Asian handicaps, over/under totals and match timers. Export directly to JSON, CSV or Excel.

- **URL**: https://apify.com/sian.agency/bet365-live-odds-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Sports, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 in-play odds line extracteds

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

## Bet365 Live Odds & In-Play Data Scraper — Live Betting Odds, Spreads & Scores ⚡

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Sports Betting Odds](https://img.shields.io/badge/Store-Sports%20Betting%20Odds-1AE392)](https://apify.com/sian.agency/sports-betting-odds-scraper?fpr=sian) [![Football Match Analytics](https://img.shields.io/badge/Store-Football%20API-1AE392)](https://apify.com/sian.agency/football-api-scraper?fpr=sian) [![Basketball Box Scores](https://img.shields.io/badge/Store-Basketball%20API-FF8C42)](https://apify.com/sian.agency/basketball-api-scraper?fpr=sian)

#### 🎉 Real-time Bet365 in-play odds, match spreads, over/under totals and pre-match market lines in one actor — with running scores and zero API keys

##### Built for quant bettors, line shoppers, tipsters, and sports modeling teams who need live in-play data without maintaining brittle browser automations

***

***

### 🔎 What is the Bet365 Live Odds & In-Play Data Scraper — and when should you use it?

The **Bet365 Live Odds & In-Play Data Scraper** turns live in-play odds, match spreads, over/under totals and pre-match market lines from Bet365 into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** extracting real-time Bet365 betting odds, live in-play lines, match running scores, and closing line values across soccer, basketball, tennis, baseball, and American football.

**Use something else when:** you need multi-bookmaker odds aggregation across 60+ sportsbooks (FanDuel, DraftKings, Pinnacle, Betfair). Use [Sports Betting Odds Scraper](https://apify.com/sian.agency/sports-betting-odds-scraper?fpr=sian) for multi-bookmaker market comparison across 60+ global sportsbooks. Use [Football API Scraper](https://apify.com/sian.agency/football-api-scraper?fpr=sian) for European and global soccer match analytics, lineups and player stats. Use this actor when you specifically need Bet365 in-play or pre-match odds and running match lines.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/bet365-live-odds-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want extract live Bet365 in-play and pre-match betting odds, handicap lines, and match scores using the Apify Actor `sian.agency/bet365-live-odds-scraper`.

Use it when I need: extracting real-time Bet365 betting odds, live in-play lines, match running scores, and closing line values across soccer, basketball, tennis, baseball, and American football.

Don't use it when: you need multi-bookmaker odds aggregation across 60+ sportsbooks (FanDuel, DraftKings, Pinnacle, Betfair) — use sports-betting-odds-scraper or football-api-scraper instead.

How to call it: choose `operation` (`inplay`, `prematch`, `sports`, or `event_detail`) and select your target `sport` (e.g. `soccer`, `basketball`, `tennis`).

Start with this input:
{
  "operation": "inplay",
  "sport": "soccer",
  "oddsFormat": "decimal"
}

Ask me which sport or Bet365 event ID you want to pull live in-play odds for, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Scrape live in-play soccer odds and running match scores from Bet365.*
- *Extract pre-match basketball odds and point spreads from Bet365.*
- *List all currently active live in-play sports on Bet365.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/bet365-live-odds-scraper.md](https://apify.com/sian.agency/bet365-live-odds-scraper.md).

### 📋 Overview

**Extract real-time Bet365 odds without fighting bot mitigation or maintaining browser scrapers.** The **Bet365 Live Odds & In-Play Data Scraper** delivers direct access to Bet365's global in-play and pre-match betting feeds across soccer, basketball, tennis, baseball, ice hockey, volleyball, table tennis, rugby, handball, horse racing, and esports.

Every match row unrolls Bet365's native market groups into clean, structured records — giving you exact moneyline odds (1X2), Asian handicaps, over/under goal lines, corner markets, running match timers, and live scores.

**Why quantitative sports teams choose this actor:**

- ⚡ **True Live In-Play Streams**: Real-time odds updates, live running scoreboards, and match minute timestamps for in-progress fixtures.
- 🎯 **Deep Market Group Unrolling**: 1X2 Full-Time Result, Asian Handicap lines, Over/Under totals, Both Teams to Score (BTTS), and Corner markets.
- 🏈 **Multi-Sport Coverage**: 13 sports including Soccer, NBA/EuroLeague Basketball, ATP/WTA Tennis, MLB, NHL, and competitive Esports.
- 🔢 **Dual Odds Format**: Native Decimal (1.95, 3.40) or American (-105, +240) odds format conversion out of the box.
- 💰 **Pay-Per-Event (PPE) Pricing**: Transparent per-line pricing starting at $0.001–$0.002, a generous free trial tier, and zero charges on empty or failed queries.
- 📊 **Visual SIÁN Ledger Dashboard**: Instant `report.html` run report with hero KPIs, sample record inspection JSON, and structured preview tables.

***

### ✨ Features

- ⚡ **Live In-Play Odds**: Extract active matches in progress with live running scores, game minute, and current betting lines.
- 📅 **Pre-Match Leagues & Fixtures**: Upcoming scheduled games with opening and current market prices across 13 sports.
- 🔍 **Deep Event Detail & Props**: Pass any Bet365 event ID to pull full betting boards and player props.
- 🏆 **Live Sports Directory**: Inspect all active sports categories and in-play match counts currently streaming.
- 📊 **Comprehensive Market Unrolling**: Asian lines, European 3-way handicaps, over/under goal lines, and both teams to score.
- 🛡️ **Zero-Waste Charging**: Charges are applied per successfully extracted betting line. Failed queries are never charged.
- 📤 **Instant Multi-Format Export**: Download datasets directly as JSON, CSV, or Excel for spreadsheets, Pandas, or database ingestion.

***

### 🎬 Quick Start

Pick an operation, pick your sport, and run. Each run produces one clean dataset you can export to JSON, CSV or Excel. Start with **Sports Directory** to see active in-play sports, then pull **Live In-Play Odds**.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~bet365-live-odds-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"operation": "inplay", "sport": "soccer", "oddsFormat": "decimal"}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose an operation

- **Live In-Play Odds (`inplay`)**: Real-time odds, scores, and match minute for live games in progress.
- **Pre-Match Odds (`prematch`)**: Upcoming tournament fixtures and opening/closing lines.
- **Event Detail (`event_detail`)**: All market groups and props for a specific Bet365 match ID.
- **Sports Directory (`sports`)**: Discover which sports have live events running right now.

#### Step 2: Set your sport and odds format

Select your sport (`soccer`, `basketball`, `tennis`, `baseball`, `ice_hockey`, `table_tennis`, `esports`, etc.) and choose **Decimal** or **American** odds format.

#### Step 3: Run and collect

Start the run and export the dataset in CSV, JSON, or Excel straight from the Apify Console.

**That's it! In under a minute, you'll have:**

- Live in-play odds lines with the exact handicap/spread attached
- Running scores and game minute timestamps
- A clean, joinable dataset keyed by Bet365 event ID

***

### 📥 Input Configuration

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `operation` | `string` | **Yes** | `inplay` | `inplay` (Live Odds), `prematch` (Upcoming), `sports` (Directory), or `event_detail` (Match Props) |
| `sport` | `string` | No | `soccer` | `soccer`, `basketball`, `tennis`, `baseball`, `american_football`, `ice_hockey`, `volleyball`, `table_tennis`, `rugby_union`, `rugby_league`, `handball`, `esports`, `horse_racing`, or `all` |
| `eventId` | `string` | No | `""` | Specific match fixture ID (required when operation is `event_detail`) |
| `oddsFormat` | `string` | No | `decimal` | `decimal` (e.g. 1.95) or `american` (e.g. -105, +240) |

**Example — Live In-Play Soccer Odds:**

```json
{
  "operation": "inplay",
  "sport": "soccer",
  "oddsFormat": "decimal"
}
```

**Example — Upcoming Pre-Match Basketball Fixtures:**

```json
{
  "operation": "prematch",
  "sport": "basketball",
  "oddsFormat": "american"
}
```

**Example — Event Detail & Props:**

```json
{
  "operation": "event_detail",
  "sport": "soccer",
  "eventId": "149821034"
}
```

***

### 📤 Output

Results are saved to the Apify dataset as flat, curated rows. **Live In-Play Odds** emits one row per match × market × outcome:

| Field | Type | Description |
|---|---|---|
| `status` | `string` | `success` or `error` |
| `_operation` | `string` | Operation that generated the row (`inplay`, `prematch`, `sports`) |
| `sport` | `string` | Sport category (e.g. `Soccer`, `Basketball`) |
| `league` | `string` | Competition name (e.g. `UEFA Champions League`, `NBA`) |
| `eventId` | `string` | Unique Bet365 event fixture identifier |
| `homeTeam` | `string` | Home team / player name |
| `awayTeam` | `string` | Away team / player name |
| `matchTime` | `string` | Current in-play match minute or scheduled kickoff time |
| `currentScore` | `string` | Running score (e.g. `1 - 1`) |
| `marketName` | `string` | Market type (e.g. `Fulltime Result`, `Asian Handicap`, `Match Goals`) |
| `selection` | `string` | Outcome choice (e.g. `Real Madrid`, `Over 2.5`, `Draw`) |
| `odds` | `string` | Current price in requested format (`2.10` or `+110`) |
| `handicap` | `string` | Spread or goal line if applicable (e.g. `-0.5`, `2.5`) |
| `isInPlay` | `boolean` | `true` for live games, `false` for pre-match |
| `capturedAt` | `string` | ISO-8601 UTC timestamp of price capture |

**Example row (JSON):**

```json
{
  "_operation": "inplay",
  "_fetchedAt": "2026-08-16T14:30:00.123Z",
  "status": "success",
  "sport": "Soccer",
  "league": "UEFA Champions League",
  "eventId": "149821034",
  "homeTeam": "Real Madrid",
  "awayTeam": "Bayern Munich",
  "matchTime": "68'",
  "currentScore": "1 - 1",
  "marketName": "Fulltime Result",
  "selection": "Real Madrid",
  "odds": "2.10",
  "handicap": null,
  "isInPlay": true,
  "capturedAt": "2026-08-16T14:30:00.123Z"
}
```

***

### 💼 Use Cases & Workflows

#### 1. Live In-Play Arbitrage & Line Shopping

Compare live Bet365 in-play prices with Pinnacle, Betfair Exchange, and FanDuel. Feed odds into automated alert bots when market discrepancies appear.

#### 2. Predictive Model Backtesting & CLV Tracking

Capture historical opening lines, mid-game price adjustments, and closing line values (CLV) with microsecond precision timestamps.

#### 3. Automated Sports Trading & In-Game Hedging

Track game momentum, score changes, and shifting spread/total lines to trigger hedge positions across sportsbooks.

#### 4. Sports Media, Scores & Betting Widgets

Integrate clean JSON endpoints into live dashboards, match analysis portals, and mobile sports applications.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

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

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/bet365-live-odds-scraper').call({
    operation: 'inplay',
    sport: 'soccer',
    oddsFormat: 'decimal'
});

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

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/bet365-live-odds-scraper').call(
    run_input={
        'operation': 'inplay',
        'sport': 'soccer',
        'oddsFormat': 'decimal'
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~bet365-live-odds-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "inplay", "sport": "soccer", "oddsFormat": "decimal"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule (e.g. every 2 minutes during game day)
2. **HTTP Request**: Call the actor API
3. **Process**: Handle the JSON in-play rows
4. **Action**: Push to database, trigger telegram alerts, or log to spreadsheet

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **50 rows** per run — full feature access to live in-play and pre-match markets
- No credit card required
- Perfect for testing a sport, market or integration

#### PAID Tier (Production Ready)

- **Unlimited** rows per run
- Fast, structured in-play feeds direct from Bet365
- Pay-per-result: only charged for lines actually returned

💰 **Bulk per-row pricing that undercuts the market** — pay only for verified lines returned, with zero charges for empty or failed matches.

🔗 [View current pricing](https://apify.com/sian.agency/bet365-live-odds-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Which sports are available for live in-play scraping?**\
A: Soccer, basketball, tennis, baseball, ice hockey, volleyball, table tennis, rugby union, rugby league, handball, horse racing, and esports.

**Q: Are odds available in American or Decimal format?**\
A: Both formats are natively supported. Set `oddsFormat` to `decimal` or `american`.

**Q: Can I scrape lines for a specific match?**\
A: Yes! Use `operation: "event_detail"`, specify the `sport`, and supply the `eventId`.

**Q: Do I need a Bet365 account or residential proxies?**\
A: No. All extraction, proxy rotation, and data formatting are handled autonomously in the cloud.

**Q: What output formats are available?**\
A: JSON, CSV, and Excel — export directly from the Apify dataset.

**Q: How often do live odds update?**\
A: Lines reflect live prices in real time; each row carries a `capturedAt` timestamp.

***

### 🐛 Troubleshooting

**No rows returned**

- The selected sport may currently have no live in-play games — run `operation: "sports"` to see active live sports.
- Check if the sport is in off-season.

**Fewer rows than expected**

- On the FREE tier output is capped at 50 rows — upgrade for unlimited dataset rows.

***

### ⚠️ Responsible Use

This tool returns sports betting odds **for data, research and informational purposes only**. It is **not betting advice** and does not facilitate the placement of bets. Sports betting may be **restricted or illegal** in your jurisdiction — you are responsible for complying with all applicable laws. You must be of legal gambling age (**18+, or 21+ where required**). If you or someone you know has a gambling problem, help is available: call **1-800-GAMBLER** (US) or contact your local support service.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what has been chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### ⚠️ Trademark Disclaimer

Bet365™ is a registered trademark of Hillside (New Media) Ltd. This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Hillside (New Media) Ltd or Bet365**. It accesses publicly available sports data for informational purposes. All product names, logos, and brands are property of their respective owners and are used for identification purposes only.

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's Console Issues tab
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `operation` (type: `string`):

🎯 **PICK ONE OPERATION PER RUN.**

- **⚡ Live In-Play Odds** — real-time odds for games currently in progress
- **📅 Pre-Match Odds** — upcoming scheduled game lines
- **🏆 Available Sports / Leagues** — list of active sports categories and competitions
- **🔍 Event Detail & Props** — all market lines for a specific event ID

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

⚽ **Target sport.** Soccer, Basketball, Tennis, Baseball, Ice Hockey, Volleyball, Table Tennis, Rugby Union, Rugby League, Handball, Esports, Horse Racing.

## `eventId` (type: `string`):

🔢 **Specific event / match ID** to pull all deep market lines and player props for. Used when operation is `event_detail`.

## `oddsFormat` (type: `string`):

🔢 **How odds prices are expressed.** `decimal` (e.g. 1.95, 3.40) or `american` (e.g. -105, +240).

## Actor input object example

```json
{
  "operation": "inplay",
  "sport": "soccer",
  "eventId": "",
  "oddsFormat": "decimal"
}
```

# Actor output Schema

## `output` (type: `string`):

Bet365 in-play odds, pre-match lines, or active sports directory — one flat row per match line (event × market × outcome) with curated camelCase fields (sport, league, homeTeam, awayTeam, marketName, selection, odds, handicap, isInPlay, …).

## `report` (type: `string`):

HTML report with run status, line counts, sample record JSON artifact, and collapsible MCP/API snippets.

# 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("sian.agency/bet365-live-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 = {}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/bet365-live-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/YWKCSbYwNgkvz4VTF/builds/AAvwfWTNPkqcyjJDE/openapi.json
