1,607AU races in window
15Bookmakers quoting
14Median books / race
45Price history (days)
How this was measured
Measured at 6 Oct 2026 03:52 UTC from race_snapshots on auodds_api — the production ingest store, change-only price capture.
Window: 2026-09-29T03:52:11Z to 2026-10-06T03:52:11Z
(7 days), filtered to country = 'AU'. A bookmaker "quoted a race"
if it wrote at least one price for at least one runner in that race — one row per
(race_id, bookmaker_key). The query took 5.98s and is
recomputed at most every 30 minutes, so this page is
served from cache and never waits on the database.
SELECT race_id, bookmaker_key, min(category), min(start_time) FROM race_snapshots WHERE start_time >= (now() AT TIME ZONE 'utc') - interval '7 days' AND start_time <= (now() AT TIME ZONE 'utc') AND country = 'AU' GROUP BY race_id, bookmaker_key
Machine-readable twin: /coverage-report.json — same numbers,
same measured_at and method fields, CORS-open, cacheable for 30 minutes.
Full product summary for language models: /llms-full.txt.
Results completeness, archive integrity, uptime and the limits of every check sit beside this
report on /data-quality.
Excluded from the table below, and why:
betfair_ex_au — Ingested for internal reference only; withheld from customer responses pending a Betfair data licence.
pinnacle — Non-Australian reference book, not part of the AU racing comparison set.
Share percentages are stated against the 1,607 races at least one
customer-served bookmaker quoted, not against the 1,616 races
any connector touched — a share whose denominator includes races no customer can read is the
wrong fraction.
Share of Australian races quoted, by bookmaker
The key column is what the API accepts in the
bookmakers query parameter. Matching is case-insensitive, but a display name that differs
from its key does not resolve — pass pointsbetau, not PointsBet.
How many books quote the same race
Median 14,
mean 13.22. The mean sits below the median because of a genuine thin
tail — a small number of races (typically ones that jumped at the very edge of the window, or
obscure meetings) carry only one or two books. Both are published rather than just the
flattering one.
Per day, so you can see it is not one busy day
Racing codes in the window
951 greyhound · 360 horse · 296 harness.
All three codes come through the same endpoints; filter with categories=horse,greyhound,harness.
New Zealand
Racing covers two countries, and this is the second one. The same query over the same
7-day window, with the same bookmakers excluded, run against
country = 'NZ':
96 New Zealand
races quoted by 12
bookmakers, a median of
12 books per race
(mean 12.00)
against 14 on an Australian race. New Zealand does not race
every day, so a per-day row is missing rather than zero on a day with no NZ meeting.
Racing codes in the window
52 harness · 44 horse.
This list is measured, not asserted: no New Zealand greyhound race has appeared in this
store, so categories=greyhound with country=NZ returns nothing.
Share of New Zealand races quoted, by bookmaker
A book absent from this table quotes Australian racing and not New Zealand racing. The
published predicate for these figures is
SELECT race_id, bookmaker_key, min(category), min(start_time) FROM race_snapshots WHERE start_time >= (now() AT TIME ZONE 'utc') - interval '7 days' AND start_time <= (now() AT TIME ZONE 'utc') AND country = 'NZ' GROUP BY race_id, bookmaker_key
Per day
Update cadence, last 24 hours
connector_poll_age is how old the connector's last successful read of the bookmaker was. price_age is how old the PRICES are. Capture is change-only, so a price can be minutes old while the poll confirming it is seconds old. They are different statistics; do not quote one as the other.
A 24-hour window is used deliberately: an instantaneous sample taken outside the Australian
card only catches the books quoting at that hour, which is how a freshness figure ends up
time-of-day biased. Every quote the API returns carries its own age_seconds —
read that rather than any median on this page.
Price history depth
/v1/racing/price-history reaches back to
22 Aug 2026 03:05 UTC
— 45 days as at
2026-10-06. The price store spans the full 45-day retention horizon it purges to, so its earliest race (2026-08-22) moves forward every day. Closing lines and price paths outlive the purge in the permanent archive (/v1/racing/closing-lines). Target retention is
45 days.
Verify this without an API key
Three endpoints need no authentication and return live data, so nothing on this page has to be taken on trust:
curl 'https://api.puntersedge.online/v1/demo/racing/next-to-go'
curl 'https://api.puntersedge.online/v1/demo/best-odds'
curl 'https://api.puntersedge.online/v1/uptime'
curl 'https://puntersedge.online/coverage-report.json'