EquiAnalytix APIequianalytix.com ↗
Access EquiAnalytix race listings, TPR ratings, speed figures, trainer/jockey stats, live bookmaker odds, and results for UK, Ireland, and France races.
What is the EquiAnalytix API?
The EquiAnalytix API exposes 2 endpoints covering horse racing data for GB, Ireland, and France: use list_races to browse the published racecard window and get_race_dashboard to retrieve the full per-race analytics dashboard, including TPR ratings, speed figures, pace scores, class and breeding metrics, trainer and jockey strike rates, live bookmaker odds for upcoming races, and official results for archived races.
curl -X GET 'https://api.parse.bot/scraper/74471c9b-2117-4225-860d-989e873e3401/list_races?region=GB' \ -H 'X-API-Key: $PARSE_API_KEY'
Lists races published on the site, one row per race, sorted by date then off time. With no date the currently published racecard window is returned (today plus any upcoming days the site has already loaded; `dates_available` names them). With a date in that window only that day's races are returned; a past date is served from the site's archive (archived days available since May 2026) and a date the site has never published returns an empty list. `region` filters by the site's region code (values seen: GB, IRE, FR) and `meeting` by course name, both case-insensitive exact matches applied locally. `race_id` is the key for get_race_dashboard. `runner_count` excludes declared non-runners, which are counted in `non_runner_count`; `field_size` is the site's own declared field. `prize` is a currency-prefixed display string. Not paginated: the whole day (typically 30-60 races) comes back in one call, which downloads the site's full daily dataset (two to three round trips).
| Param | Type | Description |
|---|---|---|
| date | string | ISO date YYYY-MM-DD. Omitted = the whole currently published window. |
| region | string | Region code filter as used by the site, e.g. GB. Omitted = all regions. |
| meeting | string | Course / meeting name filter, e.g. Newmarket. Omitted = all meetings. |
{
"type": "object",
"fields": {
"date": "the date filter that was applied, or null when the whole published window was returned",
"races": "array of race summaries: race_id, date, region, meeting, off_time (24h local), race_name, race_type, race_class, pattern, rating_band, distance, distance_f (furlongs), going, prize, field_size, age_band, runner_count, non_runner_count",
"source": "live (current racecard window) or archive (past day)",
"race_count": "number of races returned after filters",
"dates_available": "array of ISO dates present in the dataset that was read"
},
"sample": {
"data": {
"date": "2026-09-24",
"races": [
{
"date": "2026-09-24",
"going": "Good",
"prize": "£7,731",
"region": "GB",
"meeting": "Newmarket",
"pattern": null,
"race_id": "rac_32298575660",
"age_band": "2",
"distance": "1m0f0y",
"off_time": "13:15",
"race_name": "Plantation Stud British EBF Maiden Stakes (Colts And Geldings Only)",
"race_type": "Flat",
"distance_f": 8,
"field_size": 7,
"race_class": "Class 3",
"rating_band": null,
"runner_count": 7,
"non_runner_count": 0
}
],
"source": "live",
"race_count": 30,
"dates_available": [
"2026-09-24",
"2026-09-25",
"2026-09-30"
]
},
"status": "success"
}
}About the EquiAnalytix API
What the API covers
The API surfaces data published on EquiAnalytix for races across Great Britain, Ireland, and France. list_races returns an array of race summaries — each record includes race_id, date, region, meeting, off_time, race_name, race_type, race_class, pattern, and rating_b. Without a date parameter the response covers the entire currently published racecard window (today plus any preloaded upcoming days); the dates_available field lists exactly which dates are in that window. Filtering by region (e.g. GB) or meeting (e.g. Newmarket) narrows results without requiring separate calls.
Race dashboard
get_race_dashboard takes a race_id from list_races and returns the full analytics layer for that race. The runners array delivers per-runner records containing the site's proprietary TPR rating system — tpr_rating, tpr_v2_*, and tpr_v3_* variants — alongside last-five speed figures (t1 through t5), distance, going, and track figures, plus trainer, jockey, and trainer-jockey combination strike rates and win probabilities. The race header includes distance, distance_ (formatted), rating_band, race_class, pattern, and course details.
Live vs archive behaviour
The source field in both endpoints signals whether data is drawn from the current live racecard (live) or a past race (archive). For live races, get_race_dashboard returns an odds block containing updated timestamp, off flag, non_runners, and a bookmakers object with prices from multiple books plus a Betfair exchange field per runner. For archived races odds is null and runner records carry result fields instead. The date parameter is optional for races in the current window but required when querying a past race.
The EquiAnalytix API is a managed, monitored endpoint for equianalytix.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when equianalytix.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official equianalytix.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a daily racecard dashboard filtering by region and meeting using
list_raceswithregionandmeetingparams - Compare live bookmaker odds across multiple books via the
bookmakersobject inget_race_dashboardfor upcoming races - Track trainer and jockey combination strike rates to inform pre-race selection models
- Feed TPR ratings (
tpr_rating,tpr_v2_*,tpr_v3_*) and win probabilities into a machine-learning pipeline - Analyse pace and speed figure trends (
t1–t5) across a runner's last five starts - Pull archived race results and ratings to build a historical performance database for GB, Ireland, and France
- Monitor
non_runnersupdates from the live odds block to keep selection models current before post time
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does EquiAnalytix have an official developer API?+
How does `list_races` behave when no date is provided?+
date parameter, list_races returns every race in the currently published racecard window — today plus any upcoming days the site has already loaded. The dates_available array in the response lists exactly which dates are included. Pass a specific ISO date (YYYY-MM-DD) to narrow results to a single day, and optionally combine with region or meeting to filter further.When are live odds available and what bookmakers are included?+
odds block in get_race_dashboard is populated only for races in the current live racecard window. It includes an updated timestamp, an off flag indicating whether the race has gone in-play, a non_runners list, and a bookmakers object with per-runner prices. For archived (past) races odds is returned as null and result fields are populated on the runner records instead.