Why teams stop scraping odds and buy a feed
OddsRelay · · Updated · 4 min read
Scraping your own odds stops making sense once keeping the prices correct costs more than the prices are worth to your product. Most teams cross that line gradually and notice it late. The signs are specific, and you can check for them this week.
How hard is it to scrape odds yourself?
Your collector is a snapshot of how each bookmaker's site behaved on the day you wrote it, and bookmakers do not hold still. A market is restructured or a selection is renamed, and code that worked last month returns wrong prices or none.
The silent break costs more than the loud one
A hard break throws an error and someone fixes it. A soft break keeps running. It serves a price the bookmaker withdrew an hour ago, or half a market, and nothing in your logs looks wrong. A user acts on that price, finds it gone, and trusts your product a little less.
Across dozens of bookmakers, something is usually drifting somewhere. Catching it early means watching every venue all the time, and that monitoring is a second system to build and staff.
When should a team stop scraping?
Look for these signals in your own team:
- Upkeep outweighs features. Count last quarter's engineering hours. If more went to keeping collectors alive than to what users asked for, the collectors are setting your priorities.
- Users find breaks first. A support message about a missing or wrong price means your monitoring runs behind your users.
- A bookmaker request you cannot staff. Users ask for a venue and the answer is "next quarter", because each one is another collector to write and keep alive.
- Prices you cannot date. Someone asks how old a price is and you cannot say, per venue, at that moment.
Two of these together mean the data has become an input to your product rather than the product itself. If users pay you for an oddsmatcher or a comparison table, they pay for what you build on the prices.
Keep collecting where collection is what you sell. The other case is in-play. The feed is pre-match only, so live prices stay yours to collect. For almost everyone else, collection is work every competitor also has to do, so doing it in-house buys no advantage. Collect only what you can differentiate on, and license the rest.
The buy versus build post lays out the full cost ledger, and the guide to choosing an odds data provider covers what to ask a supplier.
What a feed changes day to day
You send one keyed HTTP request and get JSON back. The side-by-side:
| Collecting it yourself | Licensing a feed | |
|---|---|---|
| A bookmaker changes | Your ticket and your fix, while users wait | The supplier's fix. Check any venue's status on the coverage page. |
| Exchange pairing | Your matcher and your name mapping | back and lay arrive paired, each lay with available |
| On-call | Evenings and weekends, on your rota | Keeping the feed up is the supplier's rota. You watch your own client. |
| Adding bookmakers | Another collector to write and keep alive | Covered venues are already in the board. The bookmakers filter picks which you receive. |
The step that is hardest to replicate is the pairing. OddsRelay's matched boards do it before you receive the data: each outcome's bookmaker prices are paired against exchange lay from Betfair, Smarkets, Matchbook and BETDAQ and liquidity-gated. The rating and qualifying loss are simple arithmetic on the pair, and the oddsmatcher widget shows them. One outcome looks like this:
{
"name": "Arsenal",
"back": [{ "bookmaker": "william_hill", "price": 2.9, "link": null }],
"lay": [{ "exchange": "betfair_exchange", "price": 3.0, "available": 175, "link": null }]
}If you would rather pair prices yourself, the raw product hands you each bookmaker's markets with a per-market last_update, the time that market last changed. Every product is on every plan.
Freshness you can check on every call
Every board carries its build time, meta.processed_at (or the X-Processed-At header), and a matched board adds meta.last_seen, the last read per venue and sport. Now minus last_seen is an upper bound on a price's age, so the claim is checkable on each call. Every product on sale meets a maximum update time of 10–20 s. The freshness guide explains each field.
Start with the venue that breaks most
Pick the bookmaker your collectors lost most often last quarter and see whether the coverage page shows it live. The feed covers 140+ bookmakers, 60+ of them live in the UK & Ireland. Run it beside your collector for a week, using the checks in how to test an odds feed before you buy, then request access.