sportinglife APIsportingLife ↗
Fetch UK and Irish horse racing racecards from Sporting Life. Get meeting schedules, going conditions, runner form, odds, jockey, and trainer data via 2 endpoints.
What is the sportinglife API?
The Sporting Life API exposes UK and Irish horse racing data across 2 endpoints, returning meeting schedules and full racecards including runner-level detail. The get_meetings endpoint lists all race meetings for a given date with going conditions and race metadata, while get_racecard delivers per-race detail covering up to a dozen fields per runner — cloth number, draw, weight, jockey, trainer, official rating, form figures, and current odds.
curl -X GET 'https://api.parse.bot/scraper/053da0e4-83ad-44de-bdc2-fd6509e3706b/get_meetings?date=2026-08-20' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace sportinglife-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Sporting Life Racing SDK — fetch meetings then drill into a racecard."""
from parse_apis.sportinglife_api import SportingLife, InputNotFound
client = SportingLife()
# List today's meetings and print course info
for meeting in client.meetings.list(date="2026-08-20", limit=5):
print(meeting.course_name, meeting.going, f"({len(meeting.races)} races)")
# Take the first meeting and grab a race_id from its schedule
meeting = client.meetings.list(date="2026-08-20", limit=1).first()
if meeting is not None:
# Use the first race's id to fetch the full racecard
race_summary = meeting.races[0]
try:
racecard = client.racecards.get(date=meeting.date, race_id=str(race_summary.race_id))
except InputNotFound:
print("Race not found — it may have been abandoned")
else:
print(racecard.race.race_name, racecard.race.distance)
# Show top runners by Timeform star rating
for runner in racecard.runners[:3]:
print(
f" {runner.cloth_number}. {runner.horse_name}",
f"OR={runner.official_rating}",
f"stars={runner.timeform_stars}",
f"form={runner.form}",
)
print("exercised: meetings.list / racecards.get")
List all UK and Irish horse racing meetings and their race schedules for a given date. Returns meeting venue details, going conditions, and an array of races with basic metadata (time, name, class, distance, runner count). Use the returned race_id values with the get_racecard endpoint to fetch detailed runner information. Makes one upstream request per call.
| Param | Type | Description |
|---|---|---|
| daterequired | string | Race date in ISO format YYYY-MM-DD (e.g. 2026-08-20). |
{
"type": "object",
"fields": {
"date": "string — the requested date",
"meetings": "array of meeting objects, each with course_name, country, going, and a races array containing race_id, race_name, time, class, distance, runner_count"
},
"sample": {
"date": "2026-08-20",
"meetings": [
{
"date": "2026-08-20",
"going": "Good to Soft",
"races": [
{
"age": "2YO only",
"time": "12:50",
"going": "Good to Soft",
"race_id": 927487,
"distance": "6f",
"off_time": "12:52:13",
"race_name": "Sky Bet Lowther Stakes (Fillies' Group 2)",
"race_class": "1",
"race_stage": "WEIGHEDIN",
"has_handicap": false,
"runner_count": 17,
"course_surface": "TURF"
}
],
"country": "England",
"course_id": 295,
"meeting_id": 116736,
"course_name": "York"
}
]
}
}About the sportinglife API
Meeting and Race Schedule Data
The get_meetings endpoint accepts a single required parameter, date (ISO format YYYY-MM-DD), and returns an array of meeting objects covering UK and Irish fixtures for that day. Each meeting includes course_name, country, and going conditions alongside a races array. Each race entry in that array carries a race_id, race_name, scheduled time, class, and distance. The race_id values returned here are the keys you pass to get_racecard.
Detailed Racecard and Runner Data
The get_racecard endpoint takes both date and race_id and returns three top-level objects: race, meeting, and runners. The race object includes race_class, distance, age restriction, surface, runner_count, a has_handicap flag, and a freetext verdict field. The runners array is the core payload — each entry carries cloth_number, draw, horse_name, age, weight, jockey, trainer, official_rating, odds, form figures, and last_run_days since the horse's previous outing.
Coverage and Quirks
Coverage is limited to UK and Irish racing. The date parameter controls which fixture list is returned; there is no multi-date range query across either endpoint. Race and runner data reflects the state of the racecard at request time, so late withdrawals, jockey changes, or going updates will appear only when the source has updated. The verdict field on the race object is editorial text and may not be present for every race.
The sportinglife API is a managed, monitored endpoint for sportingLife — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sportingLife 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 sportingLife 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 racing digest that aggregates meeting schedules, going conditions, and race times for all UK and Irish courses.
- Populate a form guide tool using per-runner
formfigures,official_rating, andlast_run_daysfields from get_racecard. - Automate odds monitoring by polling the
oddsfield across runners for a specific race_id throughout the day. - Filter races by
classanddistancefrom get_meetings to surface maiden or handicap races matching a user's criteria. - Cross-reference
jockeyandtrainerpairings across multiple racecards to surface high-strike-rate combinations. - Feed draw bias analysis tools with
drawandcloth_numberdata alongsidesurfaceanddistancefrom the race object. - Track runner fitness by comparing
last_run_daysvalues across all runners in a race before selecting a betting market.
| 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 Sporting Life offer an official developer API?+
What does the verdict field in get_racecard contain?+
verdict field on the race object is editorial text associated with the race — typically a short analyst view on likely contenders. It is a plain string and may be absent for some races, particularly early in the day before content is published.Does the API cover racing outside the UK and Ireland?+
get_meetings and get_racecard cover UK and Irish fixtures only; international meetings such as French, US, or Australian racing are not included. You can fork this API on Parse and revise it to add an endpoint targeting international race data from a different source.Does the API return historical racecards or results?+
Can I query multiple dates in a single request to get_meetings?+
date parameter accepts a single ISO date string per request. To retrieve meetings across several days you would need to make one request per date. You can fork this API on Parse and revise it to wrap multiple date calls into a single batch endpoint.