GB & AU · REST + WebSocket + Webhook

Greyhound Racing
API

The greyhound racing API for Great Britain and Australia. Racecards, results, sectionals, starting prices and Betfair markets, plus dogs, trainers, tracks and breeding — 38 endpoints, one clean envelope, official SDKs.

Free 500 calls/day $99/mo live compare plans →

No card to start · 38 endpoints · GB + AU

$ curl https://api.greyhoundapi.com/v1/races/4827193056 \
     -H "X-API-Key: $GREYHOUNDAPI_KEY"

{
  "meta": { "data_as_of": "2026-07-08T14:03Z", "count": 1 },
  "data": {
    "race_id": 4827193056, "track": "Romford", "distance_m": 400,
    "status": "complete",
    "runners": [
      { "trap": 1, "dog": "Miami Yeats", "position": 1, "sp": "5/2" },
      { "trap": 2, "dog": "Full Monty",  "position": 2 }
    ]
  }
}
import { GreyhoundAPI } from "@greyhoundapi/sdk";

const gapi = new GreyhoundAPI({ apiKey });

// today's GB card, then one race
const card = await gapi.racecards.today({ region: "GB" });
const race = await gapi.races.get(4827193056);

console.log(race.runners[0].dog); // "Miami Yeats"
from greyhoundapi import GreyhoundAPI

gapi = GreyhoundAPI(api_key=key)

# today's GB card, then one race
card = gapi.racecards_today(region="GB")
race = gapi.race(4827193056)

print(race["runners"][0]["dog"])  # "Miami Yeats"
use GreyhoundApi\Client;

$gapi = new Client($key);

// today's GB card, then one race
$card = $gapi->racecardsToday(["region" => "GB"]);
$race = $gapi->race(4827193056)["data"];

echo $race["runners"][0]["dog"];  // "Miami Yeats"

The signature

Data as clean
as the rail.

Six traps, one lure, a fixed distance — greyhound racing is a tidy sport, and the feed matches it. Every race comes back in the same shape, with measured freshness and no surprises, whether it ran at Romford tonight or Wentworth Park last year.

6 traps, 6 colours One consistent envelope Stamped freshness
GREYHOUNDAPI
Romford · R8 · 400mLIVE
1stDroopys Ace5/2
2ndBallymac Bolt3/1
3rdSwift Iris4/1
data_as_of2026‑08‑16T21:04Z

By the numbers

A serious archive, kept fresh.

Coverage across Great Britain and Australia, measured in the open and updated continuously.

Figures refresh daily — last built 16:23 UTC
612.5k Races Every graded card in both regions, back to the first day of coverage.
3.8M Runners tracked Trap, weight, starting price, trainer and owner on every entry.
3+ years Of history Deepening every night as the pipeline settles the day’s racing.
48 Tracks All of them reachable on the free key, not a sampler of three.

Races indexed, by how far back you look

GBAU

Counted from the live table, not a marketing figure.

26,520 3 months
69,363 6 months
155,533 12 months
328,478 2 years

The same query behind /v1/races — what you see here is what the endpoint returns.

98.83% Uptime
9 min Typical results delay
Race finishesIn your app
Regions GB AU
Live status
01 Free sandbox The race & track endpoints over a 7-day window at 500 requests a day — build and evaluate before you pay a penny. Try the sandbox 02 Documentation Every endpoint with parameters, five-language examples and a “Run it live” console right in the browser. Read the docs 03 Support Integration questions, data coverage or billing — a direct line to the people who built the feed. Get in touch

Why this feed

Built for people who take the data seriously.

Freshness

Honest, not hidden

Every race carries its lifecycle status and the exact moment its result reached the pipeline. Delays are measured and published on the status page.

Time

Timezone-correct

UTC everywhere, rendered track-local, with date parameters resolved per track — a Sydney "today" and a London "today" both behave exactly as you'd expect.

Depth

A real archive

Career form, price history, trap statistics and track records, recomputed nightly from published results — not just today's card.

Live

Results stream

Subscribe to results, status changes and card updates over WebSocket, with a 15-minute replay window so you never miss an event.

The full surface

Thirty-eight endpoints.
One envelope.

Everything the feed exposes — racecards to results, dogs to breeding, markets to the live stream — in a single consistent shape, filterable by region=GB or region=AU across every one.

38
10
Sections
2
Regions
Racecards2
GET/v1/racecards/today
GET/v1/racecards/upcoming
Races6
GET/v1/races
GET/v1/races/{id}
GET/v1/races/{id}/runners
GET/v1/races/{id}/result
GET/v1/races/{id}/status
GET/v1/races/{id}/market
Results3
GET/v1/results/today
GET/v1/results
GET/v1/results/latest
Meetings3
GET/v1/meetings
GET/v1/meetings/today
GET/v1/meetings/{id}
Dogs7
GET/v1/dogs/search
GET/v1/dogs/{id}
GET/v1/dogs/{id}/form
GET/v1/dogs/{id}/entries
GET/v1/dogs/{id}/prices
GET/v1/dogs/{id}/head-to-head/{id}
GET/v1/dogs/{id}/stats
Trainers5
GET/v1/trainers/search
GET/v1/trainers/{id}
GET/v1/trainers/{id}/runners
GET/v1/trainers/{id}/results
GET/v1/trainers/{id}/stats
Owners3
GET/v1/owners/search
GET/v1/owners/{id}
GET/v1/owners/{id}/stats
Tracks4
GET/v1/tracks
GET/v1/tracks/{id}
GET/v1/tracks/{id}/races
GET/v1/tracks/{id}/stats
Breeding2
GET/v1/sires/{name}/progeny
GET/v1/dams/{name}/progeny
Platform3
GET/v1/status
GET/v1/usage
GET/v1/reference
Browse the full docs → Get a free key + 1 WebSocket results stream

Crowd-sourced, not scraped

Built by real people
at the track.

GreyhoundAPI isn't a scraper pointed at someone else's results page.

It's an open, crowd-sourced database — cards and results captured by people trackside and kept current by a community of updaters, with every entry gate-kept and checked by us before it goes live.

01

Captured trackside

By people at the meeting, as it happens.

02

Kept current

A community of updaters keeps cards and results moving.

03

Gate-kept by us

Every entry checked before it goes live.

04

In your app

One clean shape across GB and AU, stamped and streamed.

Scraped feeds
The difference
GreyhoundAPI
Whatever the source page shows, gaps and lag included
Where it comes from
Captured by people at the track — not lifted from a web page
Break the moment a track quietly redesigns its results table
When a track changes
A community of updaters keeps cards and results current
No provenance — no way to tell where a figure came from or how fresh it is
Who checks it
Every entry gate-kept and verified by us before it ships
A grey area you'd rather not build a business on
What you build on
Open, crowd-sourced data in one clean, consistent shape across both regions
A single brittle source, with no one watching when it drifts
Knowing it's current
data_as_of and per-race freshness stamps on every response
You poll and hope — miss a race and you'll never know
How it reaches you
A WebSocket stream pushes results the moment they're logged

Open data, built by people, and looked after so it stays accurate. Every entry on the right is something you can check for yourself in a response.

See how freshness is stamped

Live Plus · statistics & AI

What tends to happen —
not just what happened.

Results tell you the past. The three statistics endpoints turn that archive into splits — by distance, trap, track, grade and going, with best and average winning times in each. One call answers a question that would otherwise be a thousand result rows and your own group-by.

Included with Live Plus $199/mo 180 req/min · 600,000 a month · all 38 endpoints
trainer-stats · by_track 200 OK
// GET /v1/trainers/118/stats?months=12
{
  "trainer_id": 118,
  "name": "M E Wiley",
  "window_months": 12,
  "overall": {
    "runs": 1887, "wins": 342,
    "win_pct": 18.12, "place_pct": 52.52
  },
  "by_track": [
    { "track": "Romford",
      "runs": 1831, "win_pct": 18.30 },
    { "track": "Central Park",
      "runs": 43, "win_pct": 13.95 }
  ],
  "by_distance": [
    { "distance_m": 400, "runs": 1687,
      "win_pct": 18.02,
      "best_time_s": 23.64 }
  ],
  "by_trap": [
    { "trap": 1, "runs": 370,
      "win_pct": 24.05 }
  ]
}
Pre-aggregated server-side. One request, not a thousand rows and a group-by — which is exactly why it suits a model or an agent.
5splits per response — distance, trap, track, grade, going
60months of rolling window, your choice
600krequests a month on Live Plus
180requests a minute

What you build

One feed, plenty of surface area.

It's raw data — what you make of it is yours. A few things people wire it into:

Form & ratings engines

Career form, sectionals, run and adjusted times and trap stats — the inputs for your own model, updated nightly from published results.

/dogs/{id}/form/races/{id}/runners/tracks/{id}/stats

Exchange & trading tools

Betfair market summaries, starting prices and implied moves alongside the result, so your dashboard shows price and outcome together.

/races/{id}/market/dogs/{id}/prices/results/latest

Alerting & bots

Push results and status changes into Slack, Discord or your own service the moment a race settles — no polling, no missed jumps.

wss://…/v1/stream/racecards/upcoming

Research & backtesting

The full archive with head-to-heads and historical prices, in one shape, ready to pull into a notebook and test an idea against.

/races/dogs/{id}/head-to-head/{rival}/results

Start here

Four calls to get the feel.

Paste your key and go — these four return the shape everything else follows.

Start free. Go live when you're ready.

A free key gives you the race & track endpoints against a rolling seven-day window — enough to build and evaluate. When you need live-day data, the full archive and the stream, one plan covers it.