1,585AU races in window
15Bookmakers quoting
14Median books / race
46Price history (days)
How this was measured
Measured at 15 Oct 2026 23:58 UTC from race_snapshots on auodds_api — the production ingest store, change-only price capture.
Window: 2026-10-08T23:58:50Z to 2026-10-15T23:58:50Z
(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 4.79s 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,585 races at least one
customer-served bookmaker quoted, not against the 1,585 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.
"Days quoting" is the number of the window's 7 race days on which the book wrote at least one price. A book quoting on fewer days than the window holds either joined the panel, or was dark, part-way through the window; the share on the days it did quote is printed beneath so the two cases can be told apart. The window share stays the headline figure.
How many books quote the same race
Median 14,
mean 13.70. 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 · 358 horse · 276 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':
107 New Zealand
races quoted by 13
bookmakers, a median of
12 books per race
(mean 11.93)
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
57 harness · 50 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
Britain and Ireland
The same query over the same 7-day window, with the same bookmakers excluded,
run against country IN (GB, IE):
1,376 races quoted by
9 bookmakers
(5 UK-licensed), a median of
4 books per race
(mean 3.60)
across 7 race days. Market page: UK & Irish racing odds API.
Eligible races and books per race, by country and code
A race is eligible when at least one customer-served bookmaker quoted it. The denominator of every share below is the 1,376 eligible races.
Share of races quoted, by bookmaker
"Licence" is the bookmaker's home market: an Australian book on this table quotes the meeting from Australia and is not part of the UK-licensed panel. "First close in market" is the first race that book closed here, read from the archive — the connector's launch date on this market, so a book with few days quoting is new, not failing. "Races closed" counts races the book held a closing line for inside the window.
Closing lines, results and field agreement
"Closing line" is the share of eligible races the archive holds a closing line for. "Results" counts stored results against archived races that started at least an hour ago; a code showing "—" has no result source yet, and its races carry prices only. "Result delay" is minutes from the scheduled start to the stored result. "Field disagreements" counts races two or more books closed where the books disagree on the number of runners after scratchings, the missing-or-unmatched-runner case. "Flagged rows" are races the archive marks as a possible venue split or duplicate, published rather than hidden.
Endpoints that answer for this market
Known limits
Measured exactly as the Australian figures are: the same window, the same query shape, the same excluded bookmakers, country IN (GB, IE). A bookmaker's share is stated against the races at least one customer-served bookmaker quoted. 'Closes' counts races the book held a closing line for; 'first close' is the first race that book closed in this market, measured from the archive, which is the connector's launch date on the market. Results are measured against archived races that started at least an hour ago. The published predicate is SELECT race_id, bookmaker_key, min(category), min(start_time), min(country) FROM race_snapshots WHERE start_time >= (now() AT TIME ZONE 'utc') - interval '7 days' AND start_time <= (now() AT TIME ZONE 'utc') AND country IN ('GB', 'IE') GROUP BY race_id, bookmaker_key
South Africa
The same query over the same 7-day window, with the same bookmakers excluded,
run against country IN (ZA):
61 races quoted by
5 bookmakers
(4 SA-licensed), a median of
1 books per race
(mean 1.92)
across 5 race days. Market page: South African racing odds API.
Eligible races and books per race, by country and code
A race is eligible when at least one customer-served bookmaker quoted it. The denominator of every share below is the 61 eligible races.
Share of races quoted, by bookmaker
"Licence" is the bookmaker's home market: an Australian book on this table quotes the meeting from Australia and is not part of the SA-licensed panel. "First close in market" is the first race that book closed here, read from the archive — the connector's launch date on this market, so a book with few days quoting is new, not failing. "Races closed" counts races the book held a closing line for inside the window.
Closing lines, results and field agreement
"Closing line" is the share of eligible races the archive holds a closing line for. "Results" counts stored results against archived races that started at least an hour ago; a code showing "—" has no result source yet, and its races carry prices only. "Result delay" is minutes from the scheduled start to the stored result. "Field disagreements" counts races two or more books closed where the books disagree on the number of runners after scratchings, the missing-or-unmatched-runner case. "Flagged rows" are races the archive marks as a possible venue split or duplicate, published rather than hidden.
Endpoints that answer for this market
Known limits
Measured exactly as the Australian figures are: the same window, the same query shape, the same excluded bookmakers, country IN (ZA). A bookmaker's share is stated against the races at least one customer-served bookmaker quoted. 'Closes' counts races the book held a closing line for; 'first close' is the first race that book closed in this market, measured from the archive, which is the connector's launch date on the market. Results are measured against archived races that started at least an hour ago. The published predicate is SELECT race_id, bookmaker_key, min(category), min(start_time), min(country) FROM race_snapshots WHERE start_time >= (now() AT TIME ZONE 'utc') - interval '7 days' AND start_time <= (now() AT TIME ZONE 'utc') AND country IN ('ZA') GROUP BY race_id, bookmaker_key
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
31 Aug 2026 23:15 UTC
— 46 days as at
2026-10-15. The price store spans the full 45-day retention horizon it purges to, so its earliest race (2026-08-31) 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'