DocsSample data

UK and Irish bookmaker prices: a sample snapshot

One snapshot of pre-match prices from UK and Irish bookmakers, taken from the OddsRelay odds API on 11 October 2026. Free to download and reuse under CC BY 4.0.

What it holds

Two views of the same moment:

  • the raw board: each bookmaker's own markets, with outcomes named the way that bookmaker names them;
  • the standard matched board: every bookmaker's price on the same outcome lined up under one name, with the line on line markets.

CSV and JSON, with a data dictionary and a Frictionless datapackage.json. The tables join on event_id and bookmaker_key.

Files

  • data/raw_prices.csv: one row per raw-board price: event, bookmaker, market, outcome, price, and when that market last changed.
  • data/matched_prices.csv: one row per bookmaker price on the standard matched board: event, market, outcome, line, bookmaker, price.
  • data/events.csv: the events: sport, competition, start time, the two sides, and the racecourse for races.
  • data/bookmakers.csv: the bookmakers in the sample, by key and name.
  • data/raw_board.json and data/standard_board.json: the same prices in the API's own JSON shape.
  • DATA_DICTIONARY.md: every column with its type and meaning, and what each market key means.
  • datapackage.json: the Frictionless Data descriptor, each table's schema and keys.
  • summary.md: when the snapshot was taken, what it holds, and plain arithmetic on it, such as each bookmaker's margin on the soccer result market.

Download it

The files are on Hugging Face and GitHub, with the script that took the snapshot.

The data is licensed under CC BY 4.0. Attribution: OddsRelay (https://oddsrelay.io).

What it is not

  • Not the whole feed. It is a sample: a few events per sport, a few markets per event.
  • Not a coverage figure. Every count in it describes this one snapshot file. None of it measures what the OddsRelay feed covers.
  • Not a time series. One snapshot, so no history, no closing prices and no results. Prices move all the time; these are the prices at one moment.
  • Not exchange data. Bookmakers only: every exchange is left out, with every lay price and liquidity figure. Links to bookmakers' pages are left out too.
  • Not advice. It is market data for building and analysis.

Load it

With pandas, each bookmaker's margin on the soccer result market (1 / price summed over home, draw and away, minus 1); with the standard library, the events per sport and the prices per market.

import pandas as pd

prices = pd.read_csv("data/raw_prices.csv")
events = pd.read_csv("data/events.csv")
books = pd.read_csv("data/bookmakers.csv")
prices = prices.merge(events[["event_id", "sport"]], on="event_id").merge(books, on="bookmaker_key")

result = prices[(prices["sport"] == "soccer") & (prices["market"] == "h2h")]
markets = (result.assign(inverse=1 / result["price"])
           .groupby(["event_id", "bookmaker_name"])
           .agg(outcomes=("price", "size"), inverse=("inverse", "sum")))
complete = markets[markets["outcomes"] == 3]
print((complete["inverse"] - 1).groupby("bookmaker_name").mean().round(3))

Current prices

This sample is one moment. For current prices, call the API: Free gives you 50,000 tokens for 14 days from sign-up, with no card, then no tokens until you choose a plan, on the same key.

Start free · Docs · Walking the raw board