BlogRacing and each way

Best odds guaranteed (BOG) and your data

A bookmaker offering best odds guaranteed settles a winning bet at the starting price when that price beats the one you took, and the best odds guaranteed data a tool can use before the race is the fixed price and its exchange lay.

The uplift is paid after the off, so a pre-race table can never show it as a number.

What does best odds guaranteed mean?

Best odds guaranteed means a winning bet is paid at the starting price when that beats the price taken. You back a horse at a fixed price ahead of the race. When the race goes off, the bookmaker compares that price with the starting price (SP) returned for the race. If the SP is longer, a winning bet is paid at the SP. If it is shorter, you keep the price you took. The rule only ever moves in the bettor's favour, and only on a winner.

The concession belongs to each bookmaker, and each one writes its own terms. Which races qualify, the time from which it applies, whether each-way bets are covered and any cap on the extra paid all vary. A bookmaker can also withdraw it from an individual account. The glossary entry keeps the definition short.

It is a bookmaker promotion. The exchange side has no equivalent, and a lay bet settles at the price it was matched at, whatever the SP turns out to be.

What BOG changes in a matched bet

It adds upside to one leg only. A qualifying bet is sized the usual way: lay stake = back stake × back odds ÷ (lay odds − commission), with commission at your own exchange rate. The pair then costs the same small amount whichever way the race goes.

Take an illustrative 2% commission. Back a horse for 10 units at 6.0 and lay it at 6.4, and the lay stake is 60 ÷ 6.38 = 9.40 units. If the horse loses, the back stake is gone and the lay returns 9.21 after commission. If it wins at the fixed price, the back bet makes 50 and the lay costs 50.78. Either way the pair ends about 0.78 units down.

Now say the horse wins and its SP is 9.0. BOG pays the back bet at 9.0, so it makes 80 instead of 50. The lay still costs 50.78, because it was struck at 6.4. The pair ends 29.22 units up. If the horse loses, or wins at an SP no bigger than 6.0, the result is the same 0.78 loss as before.

The uplift depends on the SP

On most bets BOG adds nothing, because most horses lose. Treat it as a possible bonus on an ordinary qualifying bet, with the bookmaker's own terms deciding what is paid.

What the BOG board holds

The feed's bog board, GET /v2/odds/bog, holds pre-match win prices for horse races, each from a bookmaker offering best odds guaranteed on that race. Every other bookmaker's price for the same race is on the standard board. The horse racing data guide covers the other racing boards and the place terms they add, and dutching data, explained covers the one matched board with no lay side.

Each outcome carries the bookmakers' back prices, best first, and the exchange lay prices for the same horse, lowest first, from Betfair, Smarkets and Matchbook. Every lay offer carries available, the money on offer at that price.

The shape is the standard board's shape. A racing event carries venue in place of teams, and the win market carries a back list and a single lay list with no place terms. For code already reading the standard board, a BOG view is a path change. Here is an example, adapted from a recorded reply:

GET /v2/odds/bog · cut to one outcome · example

{
  "meta": { "feed_type": "bog", "region": "uk", "odds_format": "decimal", "processed_at": "2026-09-17T02:27:42.471Z" },
  "data": [{
    "event_id": "or_evt_58ab94d71497",
    "sport_key": "horse_racing",
    "sport_title": "Horse Racing",
    "commence_time": "2026-09-17T12:30:00Z",
    "venue": "Ayr",
    "markets": [{
      "key": "win",
      "outcomes": [{
        "name": "Bassrah",
        "back": [
          { "bookmaker": "ladbrokes", "price": 4.0, "link": "https://www.ladbrokes.com/en/sports/event/258542357" },
          { "bookmaker": "betfred", "price": 4.0, "link": "https://www.betfred.com/sports/horse-racing/event/36917738" }
        ],
        "lay": [
          { "exchange": "matchbook", "price": 4.3, "available": 17.26, "link": null },
          { "exchange": "smarkets", "price": 4.5, "available": 90.21, "link": "https://smarkets.com/sport/horse-racing/ayr/2026/09/17/13-30/45322266/" }
        ]
      }]
    }]
  }]
}

The SP is not in the feed

The starting price is set at the off, after the last pre-match price the board carries. A table that shows a BOG payout before the race is guessing. Our view is that a BOG table should rank on the fixed-price pair and show the uplift as a possibility, never as a number. A proof record has the same limit, which is why tipster proofing keeps the advised price and the time it was on offer.

The reply holds no score and no loss figure. Each horse's back prices arrive with the exchange lays for the same horse, minus any lay too thin to use. The rating and qualifying loss are yours to work out, as the oddsmatcher widget does on screen, so your users' own commission rate goes into them:

Your code, on one BOG outcome · example

// commission is your user's own exchange rate, e.g. 0.02
// stake is the back stake
const back = outcome.back[0];   // best back price first
const lay = outcome.lay[0];     // lowest lay price first

const layStake = (stake * back.price) / (lay.price - commission);
const ifItWins = stake * (back.price - 1) - layStake * (lay.price - 1); // at the fixed price
const rating = (back.price / lay.price) * 100;
const layCovered = lay.available >= layStake;

The last line is the check a racing table needs most, because the money behind a racing lay price can be thin. When available at the top lay price is smaller than the lay stake, the rest has to be laid further down the list, or at a price the reply does not show, and the qualifying loss moves with it.

Narrowing the board to your users

A BOG table is only useful for the bookmakers a user holds accounts with. The matched boards take bookmakers, exchanges and a kick-off window as filters, so a request can ask for one user's books and the next few hours of racing. The matched board filters guide lists them.

GET /v2/coverage, without a key, lists the bookmakers and sports on each product, bog included, and whether each is live. That tells a tool whose prices a BOG table will hold before it asks.

For age, meta.processed_at is the board's time and meta.last_seen gives each venue's last read per sport, so every line in a table can carry an upper bound on how old its prices are. The freshness guide covers both.

Try it on a real race

The API reference has the full response shape, and the BOG feed page says what it carries.

Sources, checked 29 September 2026

  1. Sky Bet Help: Best Odds Guaranteed (one bookmaker's terms) (opens in a new tab)

Related posts

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