# What bet365 odds data you can get

> What bet365 odds data is, how to judge a supplier's bet365 coverage, why an oddsmatcher needs the exchange lay beside it, and how to read it from the feed.

Published 1 July 2026 · updated 5 November 2026

**bet365 odds data is bet365's prices as structured data your software can read, and bet365 odds for matched betting are only useful once each price sits beside an exchange lay with money behind it.**

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 bet365 has no in-play prices on it. Whether bet365 offers an API of its own is a separate question, answered in [is there a bet365 API](https://oddsrelay.io/blog/is-there-a-bet365-api).

## What good bet365 coverage looks 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](https://oddsrelay.io/coverage) lists each product, venue and sport, and `GET /v2/coverage` without a key adds the live status, so you can watch bet365 for a few weeks before you commit. [Choosing a bet365 odds API](https://oddsrelay.io/compare/bet365-odds-apis) turns these questions into checks you can run on any supplier.

## 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, for featured football and UK and Irish racing. The [bet365 page](https://oddsrelay.io/bookmakers/bet365) profiles the book. On the six matched boards each outcome carries `back` offers from bookmakers and `lay` offers from Betfair, Smarkets and Matchbook. Name `bookmakers=bet365` and the board keeps only bet365's back offers, dropping any outcome left without one:

GET /v2/odds/standard?region=uk&bookmakers=bet365 (trimmed) · example:

```json
{
  "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" },
      "smarkets": { "soccer": "2026-09-17T02:20:54Z" }
    },
    "count": 1,
    "version": "v2",
    "next_cursor": null
  },
  "data": [{
    "event_id": "or_evt_917dd44bce05",
    "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": "smarkets", "price": 3.0, "available": 175, "link": null }]
      }]
    }]
  }]
}
```

Every offer is a source fact. The bet365 price arrives with the exchange lays for the same selection, and a lay with too little money behind it never makes the row. Rating and qualifying loss are a short sum in your code at your own commission rate, the same sum the [oddsmatcher widget](https://oddsrelay.io/widgets/oddsmatcher) runs:

Your code, on the example pair · example:

```ts
const back = 2.9; // bet365
const lay = 3.0;  // Smarkets 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](https://oddsrelay.io/blog/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. Past prices are a separate product, covered in [bet365's price history](https://oddsrelay.io/blog/bet365-historical-odds).

## 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](https://oddsrelay.io/blog/why-lay-liquidity-matters) goes further.

## How old each bet365 price is

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 for match odds, and for every market within six hours of kick-off. Further from kick-off, prices in the other markets can be older. The [freshness guide](https://oddsrelay.io/docs/guides/freshness) shows the age check in code.

## Reading bet365 from the feed

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](https://oddsrelay.io/docs/guides/quickstart), [matched-board filters](https://oddsrelay.io/docs/guides/matched-board-filters) and [filters and tokens](https://oddsrelay.io/docs/guides/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](https://oddsrelay.io/blog/buy-vs-build-odds-data) works through the costs.

## Make a first bet365 call

Run the quickstart call with bet365 as its bookmaker. The [API reference](https://oddsrelay.io/docs/reference) has every field in the sample above.

18+ · OddsRelay supplies odds data only and takes no bets. Please gamble responsibly.

Source: https://oddsrelay.io/blog/bet365-odds-data-guide
