bet365 odds data: what you can get, and how to use it
OddsRelay · · Updated · 4 min read
bet365 odds data means bet365's prices as structured data your software can read, and for a UK matched-betting product it is only useful once each price sits beside an exchange lay.
For a football match that means match odds and deeper markets such as totals, each outcome with a decimal price. The feed carries them before kick-off and has no in-play product. Whether bet365 has an official API is a separate question, answered in is there a bet365 API.
What does good bet365 coverage look like?
Coverage is more than a yes on a bookmaker list. Judge it on four things, because a feed can do well on one and badly on another:
- Market depth: does it carry the markets your product uses, or only the headline match odds?
- Freshness you can see: can you tell how old each price was when you read it? A stale price looks usable and isn't, so a feed should give you the time to check.
- Completeness: is the market whole, or do selections go missing?
- Consistency over time: does coverage hold week after week as markets change?
You can check depth yourself. GET /v2/sports lists the market keys seen under each competition, and a call naming bookmakers=bet365 shows which of them carry a bet365 price. Consistency is the one a demo cannot show. The coverage page, and GET /v2/coverage without a key, show each product, venue and sport as live or interrupted, so you can watch bet365 for a few weeks before you commit.
What is a qualifying bet, in data terms?
A qualifying bet is a back at the bookmaker covered by a lay at an exchange, sized so the two positions almost cancel. You back a selection at bet365, lay the same selection on an exchange, and whatever the result your net position is a small, known loss. That loss is the cost of claiming a free bet or offer.
So an oddsmatcher needs two prices per selection, from two venues, for the same event and market. A raw bet365 price is one of them. Pairing it with the right lay means mapping events and markets across bookmakers and exchanges, which is where most of the engineering sits.
A matched bet365 row pairs back and lay
The feed covers 140+ bookmakers, 60+ of them live in the UK & Ireland, and bet365 is included on every plan in the same shape as every other book. On the six matched boards each outcome carries back offers from bookmakers and lay offers from Betfair, Smarkets, Matchbook and BETDAQ. Name bookmakers=bet365 and the board keeps only bet365's back offers, dropping any outcome left without one:
{
"meta": {
"feed_type": "standard", "region": "uk",
"odds_format": "decimal",
"processed_at": "2026-09-17T02:20:57.271Z",
"last_seen": {
"bet365": { "soccer": "2026-09-17T02:20:51Z" },
"betfair_exchange": { "soccer": "2026-09-17T02:20:54Z" }
},
"count": 1,
"version": "v2",
"next_cursor": null
},
"data": [{
"event_id": "or_evt_917dd44bce05",
"sport_key": "soccer_epl",
"sport_title": "Premier League",
"commence_time": "2026-09-20T14:00:00Z",
"home_team": "Arsenal",
"away_team": "Chelsea",
"markets": [{
"key": "h2h",
"outcomes": [{
"name": "Arsenal",
"back": [{ "bookmaker": "bet365", "price": 2.9, "link": null }],
"lay": [{ "exchange": "betfair_exchange", "price": 3.0, "available": 175, "link": null }]
}]
}]
}]
}Every offer is a source fact. The bet365 price is paired against exchange lay and liquidity-gated. The rating and qualifying loss are simple arithmetic on the pair, at your own commission rate, and the oddsmatcher widget shows them:
const back = 2.9; // bet365 const lay = 3.0; // Betfair lay const rating = (back / lay) * 100; // 96.7: the closer to 100, the smaller the qualifying loss
The full working, including the lay stake and commission, is in qualifying loss and ratings explained. If you want bet365's own prices without a lay beside them, for comparison tables or content, the raw product carries each bookmaker's markets with a last_update per market.
The lay side carries its liquidity
A lay price you cannot get matched is not a real price. Each lay offer carries available, the money on offer at that price. Against a lay with little behind it the user's bet goes unmatched or fills at worse odds, and the small known loss becomes an unknown one.
Read available and treat a thin lay with caution before you rank on the rating alone. A qualifying bet a user cannot place is worse than no row, because it breaks trust the first time it fails. Why lay liquidity matters goes further.
How fresh is the bet365 data?
Every response carries meta.processed_at, the board's time, also sent as the X-Processed-At header. meta.last_seen gives the last read of each venue and sport. Now minus bet365's last_seen is an upper bound on the age of its prices in your hand. Every product on sale meets a maximum update time of 10–20 s. The freshness guide shows the age check in code.
How do you integrate bet365 data?
One authenticated call to a matched board, with the key in Authorization: Bearer <key> or x-api-key, returns the JSON above. Send Accept-Encoding: gzip (curl: --compressed), or the body comes back much larger. exchanges narrows the lay side, and markets and a kick-off window narrow the rest.
You poll. Send the last ETag back as If-None-Match and an unchanged board is a 304 that costs no tokens. A call's price comes from the board and the filters you name, and ?quote=true prices it without spending. The quickstart, matched-board filters and filters and tokens guides have the detail.
Where to spend your build time
Our view: if odds collection is your product, own it. If your product is an oddsmatcher or a comparison site, take bet365 with the rest of the feed and spend the time on what your users see. Buy vs build odds data works through the costs.
Make a first bet365 call
Request access, then run the quickstart call with bet365 as its bookmaker. The API reference has every field in the sample above.