Fundamentals
Football odds data, explained
Football is where odds data does most of its volume. This explains the main markets, how they're structured as event, market and selections, and how matched back/lay pairs work for football.
· 5 min read
A full odds-data layer runs well past football and racing into tennis, cricket, rugby and basketball. Here is what multi-sport coverage really means, and why depth per sport beats a long list that thins out.
Most betting volume is football and horse racing, but a full odds-data layer spans much more: tennis, cricket, rugby, basketball and beyond, each with its own market structure. The value of a feed is not the length of its sport list. It is whether it carries the sports your users actually bet, at real depth, in one consistent shape. This guide covers the main sports and their quirks, why a single row shape across them matters for your build, and where honest coverage sits.
A serious odds feed covers the sports that carry real betting volume, led by football and horse racing and extending outward from there. Football is the anchor for most UK products, and racing is close behind because of its each-way and place markets. See football odds data and horse racing odds data for how those two are structured in detail.
Past those two, the sports that matter for a UK-facing product are roughly these:
The point is not the count. A product that carries fifteen sports but only match odds in each is thinner than one that carries five sports with every market a user might bet. Coverage is a two-axis thing: how many sports, and how deep in each.
Each sport has its own natural unit of betting, so its markets are shaped differently, and that shapes the data. Football is organised around a fixed 90 minutes, so its markets are goals-based: match odds, over/under, both teams to score, correct score. That structure is familiar and the same for every match.
Tennis is organised around sets and games, so a tennis market set is built differently. You have the match winner, but also set betting (set_betting for the exact set score), total games, and per-set markets. A row for a tennis selection carries the same fields as a football one, but the market key names a tennis concept rather than a football concept.
Cricket adds format on top: a Twenty20 match and a five-day Test share a sport but not a market list. Rugby leans on handicaps and try-scorer markets. Basketball turns on the point spread. If you are new to how any single market decomposes into events, selections and prices, how odds data is structured is the primer.
A consistent row shape means every sport arrives in the same fields, so your code parses tennis exactly as it parses football. The market names change; the envelope does not. That is what keeps a multi-sport build from turning into a per-sport special case every time you add a sport.
In a matched feed, the same discipline extends to the exchange side. A tennis selection carries its bet365 back price paired with the current exchange lay price, a rating, and the qualifying_loss, exactly as a football selection does. Here is a non-football row to show the shape holding across sports (illustrative, not live data):
{
"event": "Sinner vs Alcaraz",
"market": "match_odds",
"selection": "Alcaraz",
"back": { "bookmaker": "bet365", "odds": 1.91 },
"lay": { "exchange": "matchbook", "odds": 1.94, "liquidity": 640 },
"rating": 96.8,
"qualifying_loss": -0.21
// ... region, feed_type and freshness fields elided
}Nothing in that structure is tennis-specific except the values. Your oddsmatcher or scanner reads it with the same code path it uses for a Premier League match. When set-level markets appear, only the market and selection fields change; back, lay, rating and qualifying_loss stay put. That consistency is the difference between adding a sport in an afternoon and rewriting your parser.
No: depth per sport beats a long list that thins out. A feed can advertise forty sports and still be useless for your product if it carries only the headline market in most of them, or drops selections when a market is deep. Users bet the deep markets, so a feed that only reaches match odds fails exactly where it matters.
Judge depth on the same dimensions across every sport: does the feed carry the markets your users actually bet, does it keep every selection whole rather than dropping some, and does that hold week after week as fixtures and formats change. A short list carried deep and kept current is worth more than a long list that is one market wide and quietly incomplete.
| Sport | Headline market | Depth that actually gets bet |
|---|---|---|
| Football | match_odds | over/under, BTTS, correct score, cards |
| Tennis | match_odds | set_betting, total games, per-set markets |
| Cricket | match_odds | top batsman, total runs, format-specific markets |
| Rugby | match_odds | handicap, try scorer, total points |
| Basketball | match_odds | point spread, totals, quarter markets |
Coverage is strongest across UK books for the major sports, with bet365 included as standard, and it extends into regional sports where the books and exchanges support it. The core is 60+ UK bookmakers, bet365 included, matched against three exchanges (Betfair, Smarkets and Matchbook) for lay prices. For football, racing and tennis that matching is deep and maintained.
Where coverage extends further is into regional sports and regional books. The big aggregators tend to skip domestic South African and Nigerian bookmakers, and the sports those markets bet; a region-aware feed reaches them. Matched (back-and-lay) data depends on an exchange being present for that region, so we never claim matched coverage where there is no exchange to lay against. We say what is covered and to what depth, rather than asserting a sport count.
That honesty is checkable. The coverage dashboard shows which sports and books are live right now, so you can confirm the sports your users bet are carried at the depth you need before you build anything on them.
If you are scoping a multi-sport product, the deciding question is not how many sports a feed lists, but whether it carries the ones your users bet, at depth, in one consistent shape. A free trial gives you the full UK feed across sports, bet365 included, matched against exchange lay prices, so you can see the row shape hold from football to tennis in your own code. OddsRelay powers a leading UK matched-betting platform today, and the live coverage dashboard lets you check the sports and books before you commit.
Written by
Founder, OddsRelay
James is the founder of OddsRelay — the odds-data feed behind matched betting, arbitrage and odds-comparison products: 60+ UK bookmakers with bet365 included, matched against exchange lay prices and delivered as one clean, documented API. He writes here about how that data layer actually behaves — coverage, matching, freshness and the trade-offs — from the side that builds and runs it. The same feed powers a leading UK matched-betting platform today.
Part of the Fundamentals cluster
What is an odds API? A 2026 guide for builders18+ · Data product for licensed operators. Please gamble responsibly.
Fundamentals
Football is where odds data does most of its volume. This explains the main markets, how they're structured as event, market and selections, and how matched back/lay pairs work for football.
· 5 min read
Matched betting & oddsmatcher
Racing is where each-way and extra-place matched betting lives, and it is the most demanding odds data to model. Here is what makes it hard and what a matched feed delivers for it.
· 5 min read
Fundamentals
Odds data is a four-level hierarchy: event to market to selection to price, plus bookmaker, region and freshness metadata. Once the shape clicks, integrating a feed is straightforward.
· 5 min read