Most changes were under a minute
At P95, the recorded source-to-ingest interval was 37 seconds; at P99, 92 seconds. 98.3% of sampled available captures were within 60 seconds.
These are odds changes observed by our sources and then ingested by the API. The study does not measure when a bookmaker first published a price or how old an unchanged quote is when you read it.
- Median
- 9s
- P95
- 37s
- P99
- 92s
Which clock did we measure?
We measured the interval from the recorded source observation to API ingest. Publication and client read time sit outside it.
- Bookmaker publishes a price.We do not have a verified publication timestamp for every quote.
- Our source observes it.The archive carries
source_ts, which may come from different upstream timestamp fields. - Our API ingests the change.The archive records
ingest_ts. This study measures this interval from step 2. - Your application reads it.Poll timing, streaming, caching and unchanged prices affect what you see. This study did not sample client reads.
All charts use ingest_ts − source_ts for captures marked available. The bookmaker refresh-rate guide covers polling policy, a different measurement.
The daily tail moved from 28 to 64 seconds
The daily P95 ranged from 28 to 64 seconds. The highest sampled day was 23 September; the next day was 46 seconds. One day is a lead for investigation, not evidence of a lasting slowdown.
| Date, UTC | P95 | Median | Within 60s | Captures |
|---|---|---|---|---|
| 2026-09-20 | 44s | 10s | 98.5% | 741 |
| 2026-09-21 | 28s | 9s | 99.9% | 728 |
| 2026-09-22 | 42s | 11s | 98.0% | 725 |
| 2026-09-23 | 64s | 14s | 94.3% | 653 |
| 2026-09-24 | 46s | 14s | 97.9% | 713 |
| 2026-09-25 | 32s | 9s | 99.6% | 717 |
| 2026-09-26 | 28s | 4s | 98.2% | 756 |
20 bookmaker sources, one uneven week
Unibet had the longest sampled tail: 250 seconds at P95. Most other source rows were below 60 seconds. Sport and event coverage differed, so the rows describe this sample rather than rank bookmakers by speed.
| Bookmaker source | Captures | Median | P95 age | Within 60s | Coverage |
|---|---|---|---|---|---|
| BetRight | 310 | 9s | 35s | 98.6% | 35/35 |
| TAB | 298 | 6s | 22s | 99.7% | 35/35 |
| William Hill | 290 | 15s | 47s | 97.7% | 35/35 |
| Ladbrokes | 289 | 6s | 43s | 96.1% | 35/35 |
| PointsBet | 287 | 6s | 25s | 99.8% | 34/35 |
| Sportsbet | 275 | 9s | 51s | 96.9% | 35/35 |
| Unibet | 272 | 8s | 250s | 88.4% | 35/35 |
| TABtouch | 271 | 7s | 30s | 99.8% | 35/35 |
| Bet365 | 267 | 11s | 39s | 98.5% | 35/35 |
| 888sport | 264 | 9s | 33s | 98.6% | 33/35 |
| Pinnacle | 262 | 6s | 23s | 100.0% | 28/35 |
| BetOnline | 261 | 10s | 27s | 99.1% | 28/35 |
| FanDuel | 260 | 7s | 29s | 99.1% | 35/35 |
| DraftKings | 245 | 12s | 35s | 99.2% | 28/35 |
| BetRivers | 242 | 9s | 28s | 98.2% | 28/35 |
| Ladbrokes UK | 240 | 12s | 46s | 97.7% | 28/35 |
| Betfred | 215 | 6s | 27s | 100.0% | 21/35 |
| BetMGM | 183 | 7s | 21s | 100.0% | 21/35 |
| Caesars | 180 | 20s | 53s | 97.5% | 21/35 |
| Betway | 122 | 6s | 33s | 100.0% | 14/35 |
Sorted by sample size. Coverage is nonempty day × sport combinations out of 35. Ladbrokes and Ladbrokes UK are separate source identities, not separate corporate operators. This table is not a fastest-bookmaker ranking. See the bookmaker directory for current coverage.
Baseball had the longest tail
Baseball's sampled P95 was 51 seconds. The other four sports ranged from 29 to 39 seconds. MLB and Japan NPB contributed to the longer baseball tail, but sport mix and bookmaker mix overlap.
| Sport | P95 age | Median | Within 60s | Captures |
|---|---|---|---|---|
| Baseball | 9s | 96.3% | 994 | |
| American football | 9s | 98.6% | 1230 | |
| Soccer | 8s | 99.1% | 1266 | |
| Basketball | 8s | 99.1% | 1123 | |
| Australian rules | 8s | 99.9% | 420 |
At league level, MLB had 790 sampled available captures and a 51-second P95. NFL had 620 and a 45-second P95. NCAAF had 562 and a 28-second P95. Smaller league samples can swing sharply, so we would not build a league ranking from one week.
Player props had a 42-second P95
Player-prop-containing captures had a 42-second P95. Spread/handicap captures were at 34 seconds and game totals at 36. Those captures can share one timestamp across several market types. This is a difference in the sampled mix, not proof that the player-prop pipeline runs slower.
| Market family | Captures containing market | Median | P95 age | Within 60s |
|---|---|---|---|---|
| Game total | 3296 | 9s | 36s | 98.6% |
| Spread / handicap | 3202 | 8s | 34s | 98.9% |
| Moneyline | 2621 | 9s | 37s | 98.7% |
| Three-way moneyline | 2173 | 9s | 39s | 98.3% |
| Team total | 2173 | 8s | 35s | 98.8% |
| Player prop | 1856 | 9s | 42s | 98.3% |
| Both teams to score | 428 | 7s | 31s | 99.3% |
| Big win / little win | 327 | 9s | 32s | 99.4% |
Market counts overlap. One ingest capture can contain a moneyline, spread, total and prop. They cannot be added to get a total capture count.
Where the long tail sat
Unibet had 18 sampled available captures over 60 seconds. Eleven fell on 26 September. Eight of the 18 were MLB; the three longest MLB captures on the 26th were 586, 560 and 551 seconds.
Sportsbet had eight captures over 60 seconds; four were Japan NPB. Its longest available capture was 431 seconds. Those are concrete places to inspect source timestamps and ingest logs. The archive alone cannot tell us whether a delay happened at the bookmaker, during collection, or because the upstream timestamp means something different.
We excluded captures marked unavailable. They can retain an older source timestamp when availability changes. Putting them in the available-price distribution would make the tail look worse for the wrong reason.
Method and data
We sampled the odds-change archive for 20 bookmaker source identities, five sports and seven complete UTC days, 20–26 September 2026. The 700 day × sport × book combinations contained 128,691 archive blobs; 599 combinations had data. We randomly selected up to eight blobs from each combination with a fixed seed, for 4,629 sampled blobs.
Those blobs held 372,209 changed-odds rows. We grouped selection rows from the same ingest into capture records, kept the 5,033 sampled captures marked available, and measured ingest_ts − source_ts. Each capture was weighted by the number of blobs in its day × sport × book combination divided by the number sampled there. The unweighted check was close: 10-second median, 38-second P95 and 98.3% within 60 seconds.
The archive stores semantic changes, not every scrape or unchanged price. The source timestamp can originate from several upstream fields. Event start time was absent from the sampled rows, so we could not independently check prematch status for each row. Coverage varies by book and sport. A longer matched-event study would be needed before comparing bookmaker performance.
The public JSON contains rounded aggregate results, field definitions and limits. It contains no prices, raw capture rows or archive paths.
Stable data URL: https://odds-api.net/static/data/odds-freshness-2026-09-20-26.json
What developers can use
Use this as evidence about one ingest stage. In your own product, read an event odds snapshot, retain as_of_ts_ms as its assembly time, and apply your own age threshold. Assembly time is not proof of a bookmaker price's age. If you need changes as they arrive, take a snapshot and follow the SSE or WebSocket stream. The transport cannot make an upstream observation fresher; it can cut the wait after ingest.
The next study we want is a scheduled client-read sample that also records unchanged quotes. That would answer the broader question in this headline more directly. Until then, nine seconds means observed source timestamp to ingest for available changed odds in this sample. No more, no less.