Bet365 Odds Scraper - Live, Pre-Match & Player Props avatar

Bet365 Odds Scraper - Live, Pre-Match & Player Props

Pricing

from $2.49 / 1,000 odds selections

Go to Apify Store
Bet365 Odds Scraper - Live, Pre-Match & Player Props

Bet365 Odds Scraper - Live, Pre-Match & Player Props

Scrape Bet365 betting odds in one run: live in-play, pre-match 1X2, player props, and outrights across 30+ sports. Event, market, selection, plus decimal, American, and fractional prices. Unofficial Bet365 API alternative — Python, Node.js, MCP.

Pricing

from $2.49 / 1,000 odds selections

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Unofficial community Actor. Not affiliated with Bet365 or Hillside. For informational and research use only — this Actor does not place bets or provide betting advice. You are responsible for complying with applicable laws and platform terms.

Bet365 scraper and Bet365 API alternative for live in-play odds, pre-match lines, player props, outrights, and the sports / competition catalog. One run returns one row per selection (or catalog entity) you can export as JSON, CSV, or Excel, call from Python or Node.js, or drive from MCP / AI assistants. No Bet365 login.

Sports betting suite

ActorRole
Bet365 Odds Scraper ◄── you are hereBet365 live, pre-match, props, outrights
PrizePicks Player Props ScraperUS DFS pick'em lines
Underdog Fantasy Player PropsUnderdog props & odds
DFS Multi-Source Props ScraperCross-platform props board
FotMob ScraperFootball scores, xG, ratings

Suite next step: after a Bet365 snapshot, run DFS Multi-Source Props Scraper to compare sportsbook lines with PrizePicks / Underdog / Pick6 boards, or FotMob Scraper for match xG and ratings.

When to use

  • Pull a live in-play board (event, market, current prices) for soccer, tennis, basketball, and 30+ other sports
  • Snapshot pre-match 1X2 and listed markets for a sport
  • Expand a match into player props / extra markets via event mode
  • Export outrights (league winner, top scorer, futures)
  • Build a sports and competition directory (PDs and event ids) to feed later runs

When not to use: historical closing-line warehouses, multi-book aggregators, or account-gated bet history. This Actor reads the public sportsbook board only.

Key features

  • Six modessports, competitions, inplay, prematch, event, outrights (+ auto)
  • One row per selection — CSV-friendly unroll (market × outcome), plus catalog rows when you only need the directory
  • Three odds formats — decimal (default), American, fractional; all three stored when a price exists
  • 30+ sports — soccer, tennis, NBA/WNBA, NFL, MLB, NHL, MMA, esports, golf, cricket, darts, rugby, racing, …
  • Geo hostses (default English sportsbook), de, it, nl, com
  • Browser intercept for prices — Camoufox captures live splash / in-play coupons; catalog stays on HTTP
  • Residential ES/GB proxy required for odds — datacenter IPs typically see empty coupons
  • Empty coupons not billed as odds — failed price lookups are not written as fake selections

Input

FieldTypeDefaultDescription
modestringprematchauto, sports, competitions, inplay, prematch, event, outrights
sportstringsoccerSport slug, or all
eventIdsstring[][]Event / competition ids (event mode)
eventPdsstring[][]Native path descriptors
eventUrlsstring[][]Sportsbook hash URLs
oddsFormatstringdecimaldecimal / american / fractional
sitestringeses, de, it, nl, com
languagestringenMenu language
maxItemsinteger0Cap dataset size (0 = unlimited)
proxyConfigurationobjectresidential ESApify Proxy; residential Spain or UK for live / pre-match odds

Example — live soccer in-play:

{
"mode": "inplay",
"sport": "soccer",
"oddsFormat": "decimal",
"site": "es"
}

Example — Premier League PD (from competitions mode) then event markets:

{
"mode": "event",
"eventPds": ["#AC#B1#C1#D1002#E91422157#G40#"],
"oddsFormat": "american",
"site": "es"
}

Example URL inside input (not a markdown link):

{
"mode": "event",
"eventUrls": ["https://www.bet365.es/#/AC/B1/C1/D8/E149821034/F2/"]
}

Output

FieldDescription
recordTypesport · competition · event · odds
sport / sportSlug / sportIdClassification
league / eventName / eventId / pdFixture keys (reuse pd in event mode)
homeTeam / awayTeamSplit from event name when possible
marketName / selection / handicapMarket unroll
oddsPrice in oddsFormat
oddsDecimal / oddsAmerican / oddsFractionalAlways filled together when a price exists
isInPlay / suspended / capturedAtLive flags + UTC snapshot

Example odds row:

{
"recordType": "odds",
"sport": "Football",
"sportSlug": "soccer",
"league": "MLS",
"eventName": "Inter Miami v Toronto FC",
"eventId": "199038810",
"homeTeam": "Inter Miami",
"awayTeam": "Toronto FC",
"marketName": "Full Time Result",
"selection": "Inter Miami",
"odds": "1.36",
"oddsDecimal": 1.36,
"oddsAmerican": "-278",
"oddsFractional": "4/11",
"isInPlay": false,
"capturedAt": "2026-08-21T22:51:18.000Z"
}

Use cases

  • In-play monitoring — schedule the Actor on soccer/tennis live boards
  • Pre-match dumps — daily coupon snapshot for modeling or CMS widgets
  • Props research — event mode after you have a Bet365 event id from competitions
  • DFS line shop — join Bet365 player markets with PrizePicks / Underdog on player name
  • Outrights tracker — league winner / top scorer futures into a sheet

Integration examples

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/bet365-odds-scraper').call({
mode: 'prematch',
sport: 'soccer',
oddsFormat: 'decimal',
site: 'es',
maxItems: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/bet365-odds-scraper").call(
run_input={"mode": "inplay", "sport": "soccer", "site": "es"}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("eventName"), item.get("selection"), item.get("odds"))

cURL

curl "https://api.apify.com/v2/acts/crawloop~bet365-odds-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"sports","site":"es","maxItems":50}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Add the Apify MCP server in Claude Desktop, Cursor, or any MCP client, connect your Apify account, then call this Actor by its Store name crawloop/bet365-odds-scraper.

Example prompts:

  • "Run Bet365 Odds Scraper in inplay mode for soccer and return the top 30 rows as JSON"
  • "Scrape Bet365 pre-match basketball odds in American format and summarize the shortest prices"
  • "Chain Bet365 Odds Scraper then DFS Multi-Source Props Scraper for the same NBA slate"

FAQ

Is this an official Bet365 API? No. It is an unofficial scraper of the public sportsbook board.

Why do I get catalog rows instead of odds? Live prices are geo-sensitive. Set site to es and use Apify residential proxies in Spain or the UK (apifyProxyCountry: ES or GB), then rerun inplay or prematch. Catalog modes (sports, competitions) do not need prices.

How do I get a match’s player props? Run competitions or prematch first, copy eventId / pd, then run event mode.

Does it need a Bet365 account? No. Login-gated pages are out of scope.

Python, Node.js, or MCP? All three. Use the Apify client snippets above, or call the Actor from an MCP-connected assistant.