Racing Post Racecards Scraper avatar

Racing Post Racecards Scraper

Pricing

from $6.34 / 1,000 results

Go to Apify Store
Racing Post Racecards Scraper

Racing Post Racecards Scraper

Scrape Racing Post racecards: one row per runner with silks, horse, jockey, trainer, form, ratings, going and forecast odds. Export to CSV, Excel, JSON or XML.

Pricing

from $6.34 / 1,000 results

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

ParseForge Banner

πŸ‡ Racing Post Racecards Scraper

πŸš€ Export every runner on today's racecards in seconds. One row per horse, 58 columns: silks image, course, off time, race name, class, distance, going, prize money, then the horse with its number, draw, age, weight, jockey, trainer, owner, form figures, Official Rating, RPR, Topspeed and the Racing Post betting forecast price. A typical British and Irish day carries 6 to 9 meetings, 37 to 56 races and 370 to 940 runners, and the whole card is collected over plain HTTP on 1 GB of memory.

Racing Post is the reference publication for British and Irish horse racing. Its racecards are the version of the card that the industry actually reads: the declared field, the weights, the draw, the six most recent form figures, the Official Rating, the Racing Post Rating, the Topspeed figure and the paper's own betting forecast. This Actor reads the same JSON the racingpost.com page renders for an anonymous visitor, so the numbers match the page, and nothing is inferred from screen scraping a table.

Coverage follows the racing calendar. Cards are published for today and the days ahead, the field is declared about 48 hours before the off, and international meetings appear alongside the domestic ones: at verification time the index carried meetings in Great Britain, Ireland, France, the United States, Australia, Hong Kong and Peru.

🎯 Target AudienceπŸ’‘ Primary Use Cases
Form analysts and racing modellersBuild a daily runner table with ratings, form figures and forecast prices
Tipping sites and racing mediaPublish full cards with silks, jockeys, trainers and going without manual entry
Betting and trading desksFeed a pricing model the declared field, weights, draw and going every morning
Bloodstock and syndicate managersTrack your horses, sires and trainers across every card in Britain and Ireland

πŸ“‹ What the Racing Post Racecards Scraper does

πŸ’‘ Why it matters: a British and Irish race day spreads 400 to 900 runners across six to nine meetings and dozens of separate pages, and the card changes as horses are withdrawn. Rebuilding that into a spreadsheet by hand is a morning's work every morning. This Actor returns it as one flat table in a single run, and never bills for a row it did not deliver.

  • πŸ—“οΈ A whole day in one input: leave the defaults and you get every runner declared for today. Set raceDate to tomorrow or a YYYY-MM-DD date for any future card.
  • πŸ”— Any racecard URL: a day index (/racecards/2026-09-10/), a meeting (/racecards/15/doncaster/2026-09-10/) or a single race (/racecards/15/doncaster/2026-09-10/926640). A race URL returns only that race.
  • 🏟️ The race, carried on every row: course, country, off time in ISO 8601, race name, class, age restriction, rating band, distance in furlongs and in yards, going, going detail with GoingStick and rail movements, surface, weather, winner prize, total prize money, declared runner count and the TV channel.
  • 🐎 The runner: saddlecloth number, draw, age, weight in stones and pounds and in pounds, jockey with claim, trainer, owner, and links to each of their Racing Post profiles.
  • πŸ“ˆ The form that analysts use: the recent form figure string, the Official Rating for the day, the Racing Post Rating, the Topspeed figure, days since last run, headgear with a first-time flag and trainer recent form percentage.
  • 🎯 Betting forecast: the Racing Post forecast price as the printed fraction (5/2) and as a decimal multiplier, ready for a model.
  • 🧬 Breeding: colour and sex, country of origin, sire, dam and damsire.
  • 🎽 Silks: the runner's silks image URL, first column, so a card renders straight out of the dataset.
  • πŸ” Clean data: one runner per row, de-duplicated across sources, the same 58 columns on every row, Not Disclosed or N/A instead of blank cells, and non-runners excluded unless you ask for them.

🎬 Full Demo (🚧 Coming soon)

A short walkthrough video is in production.

πŸ“Š Output

Each row is one declared runner in one race. Fields, in dataset order:

FieldDescription
imageUrlJockey silks image for this runner (SVG on rp-assets.com)
horseNameHorse name as printed on the card
horseUrlRacing Post horse profile and form page
raceUrlRacing Post racecard page for this race
raceIdRacing Post race identifier
courseCourse name, for example Doncaster
countryCodeCountry code of the meeting, for example GB, IRE, FR
countryCountry name
raceDateTimeScheduled off time, ISO 8601 UTC
raceDateRace date, YYYY-MM-DD
raceTimeLocalOff time in the meeting's local clock, for example 13:15
raceNameFull race title including sponsor
raceClassRace class, N/A outside Britain where classes are not used
raceTypeFlat, Hurdle, Chase or NH Flat
ageRestrictionAges allowed, for example 2yo, 4yo+
ratingBandOfficial rating band for handicaps, for example 0-100
distanceRace distance as printed, for example 6Β½f, 2m7f
distanceYardsRace distance in yards
goingGoing description, for example Good To Soft
goingDetailsFull going statement with GoingStick and rail movements
surfaceTurf, Polytrack, Tapeta, Beach or All-Weather
weatherWeather reported at the meeting
winnerPrizePrize to the winner, formatted with its currency symbol
totalPrizeMoneySum of all advertised places, as a number
currencyCurrency of the prize figures, GBP or EUR
runnerCountRunners declared in this race
liveOnBroadcaster showing the race, for example ITV, RTV, SKY
saddleClothNumberSaddlecloth number
drawStall number, N/A in jumps races
ageHorse age in years
weightWeight carried in stones and pounds, for example 8-11
weightLbsWeight carried in pounds
jockeyBooked jockey
jockeyUrlRacing Post jockey profile
jockeyClaimLbsWeight allowance the jockey claims, 0 when none
trainerTrainer
trainerUrlRacing Post trainer profile
trainerFormPercentTrainer runners to form percentage over the last 14 days
ownerRegistered owner
ownerUrlRacing Post owner profile
formRecent form figure string, most recent run last, for example 3213
officialRatingOfficial Rating carried today
rprRacing Post Rating
topSpeedRacing Post Topspeed figure
forecastOddsRacing Post betting forecast price as a fraction, for example 5/2
forecastOddsDecimalThe same forecast price as a decimal multiplier
headGearHeadgear codes, for example t tongue tie, v visor, b blinkers
firstTimeHeadGearYes when the headgear is worn for the first time
daysSinceLastRunDays since the horse last raced
countryOfOriginCountry the horse was bred in
colourAndSexColour and sex code, for example b f, gr g
sireSire
damDam
damSireDamsire
commentRacing Post race-reader comment on this runner
isNonRunnerYes when the horse has been withdrawn
scrapedAtWhen the row was collected, ISO 8601
errornull on data rows; error rows carry a message and are never charged

Three real records from a verification run:

[
{
"imageUrl": "https://www.rp-assets.com/svg/8/9/5/147598.svg",
"horseName": "Speed Of Sound",
"horseUrl": "https://www.racingpost.com/profile/horse/8688617/speed-of-sound/form",
"raceUrl": "https://www.racingpost.com/racecards/15/doncaster/2026-09-10/926640",
"raceId": "926640",
"course": "Doncaster",
"countryCode": "GB",
"country": "United Kingdom",
"raceDateTime": "2026-09-10T12:15:00.000Z",
"raceDate": "2026-09-10",
"raceTimeLocal": "13:15",
"raceName": "British Stallion Studs 'Carrie Red' EBF Fillies' Nursery Handicap",
"raceClass": "2",
"raceType": "Flat",
"ageRestriction": "2yo",
"ratingBand": "N/A",
"distance": "6Β½f",
"distanceYards": 1431,
"going": "Good To Soft",
"goingDetails": "GOOD TO SOFT, Good in places (GoingStick: 6.1) (Rail Movements: 2.25 & 5.20 +19yds and 3.00 +9yds)",
"surface": "Turf",
"weather": "Light rain",
"winnerPrize": "Β£28,347",
"totalPrizeMoney": 54104,
"currency": "GBP",
"runnerCount": 12,
"liveOn": "ITV",
"saddleClothNumber": 4,
"draw": 5,
"age": 2,
"weight": "8-11",
"weightLbs": 123,
"jockey": "Saffie Osborne",
"jockeyUrl": "https://www.racingpost.com/profile/jockey/100350/saffie-osborne/",
"jockeyClaimLbs": 0,
"trainer": "Richard Spencer",
"trainerUrl": "https://www.racingpost.com/profile/trainer/30665/richard-spencer/",
"trainerFormPercent": 69,
"owner": "Phil Cunningham",
"ownerUrl": "https://www.racingpost.com/profile/owner/147598/phil-cunningham/",
"form": "3213",
"officialRating": 81,
"rpr": 95,
"topSpeed": 91,
"forecastOdds": "5/2",
"forecastOddsDecimal": 2.5,
"headGear": "N/A",
"firstTimeHeadGear": "No",
"daysSinceLastRun": 21,
"countryOfOrigin": "IRE",
"colourAndSex": "b f",
"sire": "Sioux Nation",
"dam": "All Speed",
"damSire": "Camacho",
"comment": "Form of Yarmouth win lifted since; good 3rd in York sales race latest (6f, good to soft)",
"isNonRunner": "No",
"scrapedAt": "2026-09-09T18:53:43.868Z",
"error": null
},
{
"imageUrl": "https://www.rp-assets.com/svg/3/5/4/231453.svg",
"horseName": "Art Of Life",
"horseUrl": "https://www.racingpost.com/profile/horse/9472243/art-of-life/form",
"raceUrl": "https://www.racingpost.com/racecards/15/doncaster/2026-09-10/926640",
"raceId": "926640",
"course": "Doncaster",
"countryCode": "GB",
"country": "United Kingdom",
"raceDateTime": "2026-09-10T12:15:00.000Z",
"raceDate": "2026-09-10",
"raceTimeLocal": "13:15",
"raceName": "British Stallion Studs 'Carrie Red' EBF Fillies' Nursery Handicap",
"raceClass": "2",
"raceType": "Flat",
"ageRestriction": "2yo",
"ratingBand": "N/A",
"distance": "6Β½f",
"distanceYards": 1431,
"going": "Good To Soft",
"goingDetails": "GOOD TO SOFT, Good in places (GoingStick: 6.1) (Rail Movements: 2.25 & 5.20 +19yds and 3.00 +9yds)",
"surface": "Turf",
"weather": "Light rain",
"winnerPrize": "Β£28,347",
"totalPrizeMoney": 54104,
"currency": "GBP",
"runnerCount": 12,
"liveOn": "ITV",
"saddleClothNumber": 2,
"draw": 9,
"age": 2,
"weight": "8-12",
"weightLbs": 124,
"jockey": "Rossa Ryan",
"jockeyUrl": "https://www.racingpost.com/profile/jockey/95744/rossa-ryan/",
"jockeyClaimLbs": 0,
"trainer": "Clive Cox",
"trainerUrl": "https://www.racingpost.com/profile/trainer/5863/clive-cox/",
"trainerFormPercent": 38,
"owner": "Isa Salman Al Khalifa",
"ownerUrl": "https://www.racingpost.com/profile/owner/231453/isa-salman-al-khalifa/",
"form": "622",
"officialRating": 82,
"rpr": 87,
"topSpeed": 73,
"forecastOdds": "4/1",
"forecastOddsDecimal": 4,
"headGear": "N/A",
"firstTimeHeadGear": "No",
"daysSinceLastRun": 27,
"countryOfOrigin": "GB",
"colourAndSex": "b f",
"sire": "Palace Pier",
"dam": "Musical Art",
"damSire": "Dutch Art",
"comment": "All races on good to firm; pulled hard but kept tabs on winner over 7f latest; improve",
"isNonRunner": "No",
"scrapedAt": "2026-09-09T18:53:43.878Z",
"error": null
},
{
"imageUrl": "https://www.rp-assets.com/svg/b/0/7/267270b.svg",
"horseName": "Wondervision",
"horseUrl": "https://www.racingpost.com/profile/horse/8881440/wondervision/form",
"raceUrl": "https://www.racingpost.com/racecards/15/doncaster/2026-09-10/926640",
"raceId": "926640",
"course": "Doncaster",
"countryCode": "GB",
"country": "United Kingdom",
"raceDateTime": "2026-09-10T12:15:00.000Z",
"raceDate": "2026-09-10",
"raceTimeLocal": "13:15",
"raceName": "British Stallion Studs 'Carrie Red' EBF Fillies' Nursery Handicap",
"raceClass": "2",
"raceType": "Flat",
"ageRestriction": "2yo",
"ratingBand": "N/A",
"distance": "6Β½f",
"distanceYards": 1431,
"going": "Good To Soft",
"goingDetails": "GOOD TO SOFT, Good in places (GoingStick: 6.1) (Rail Movements: 2.25 & 5.20 +19yds and 3.00 +9yds)",
"surface": "Turf",
"weather": "Light rain",
"winnerPrize": "Β£28,347",
"totalPrizeMoney": 54104,
"currency": "GBP",
"runnerCount": 12,
"liveOn": "ITV",
"saddleClothNumber": 11,
"draw": 2,
"age": 2,
"weight": "8-2",
"weightLbs": 114,
"jockey": "Nicola Currie",
"jockeyUrl": "https://www.racingpost.com/profile/jockey/92938/nicola-currie/",
"jockeyClaimLbs": 0,
"trainer": "Jack Channon",
"trainerUrl": "https://www.racingpost.com/profile/trainer/40161/jack-channon/",
"trainerFormPercent": 41,
"owner": "Bramble Syndicate",
"ownerUrl": "https://www.racingpost.com/profile/owner/267270/bramble-syndicate/",
"form": "331",
"officialRating": 72,
"rpr": 95,
"topSpeed": 86,
"forecastOdds": "11/2",
"forecastOddsDecimal": 5.5,
"headGear": "N/A",
"firstTimeHeadGear": "No",
"daysSinceLastRun": 24,
"countryOfOrigin": "IRE",
"colourAndSex": "b f",
"sire": "Minzaal",
"dam": "Wonderworld",
"damSire": "Sea The Moon",
"comment": "Overcame some trouble in running to win handicap debut over 6f on AW; can progress",
"isNonRunner": "No",
"scrapedAt": "2026-09-09T18:53:43.880Z",
"error": null
}
]

✨ Why choose this Actor

What you get
Racing Post's own numbersOfficial Rating, RPR, Topspeed, form figures, weights and the betting forecast come from the JSON the page renders, not from parsing a rendered table.
The grain form analysis needsOne row per runner, with the race repeated on every row, so a CSV opens straight into a pivot table or a model.
Silks in the first columnEvery row carries the runner's silks image URL, so you can render a card without a second lookup.
The going, in fullNot just Good To Soft but the whole going statement with GoingStick reading and rail movements, which is what actually moves a time.
Fractions and decimalsThe forecast price is given both as the printed fraction and as a decimal multiplier, so no parsing on your side.
58 columns, one shapeEvery row has the same keys in the same order, so CSV imports, joins and Excel filters behave.
No blanks, no nullsA value Racing Post withholds is Not Disclosed; a value that does not apply, such as a draw in a chase, is N/A. Never an empty cell.
Fast and cheapHTTP only, 1 GB of memory, no proxy needed, no browser to warm up. One request per meeting returns the whole card.

πŸ“ˆ How it compares to alternatives

FeatureThis ActorTypical racecard scrapersBy hand
Fields per runner5810 to 20Whatever you copy
Official Rating, RPR and TopspeedAll threeUsually the Official Rating onlyThree columns to transcribe
Betting forecast priceFraction and decimalSometimesYes
Full going statement with GoingStickYesRarelyYes
Silks image URLYesRarelyNo
Pedigree (sire, dam, damsire)YesRarelyBehind a click
International meetingsGB, IRE, FR, USA, AUS, HK and moreUsually GB and IRE onlyPage by page
Requests per meeting11 per race1 per race
Memory and speed1 GB, no proxy, no browser2 to 4 GB with a browserHours
Subscriber-only Spotlight, Postdata and VerdictNot included, and said so plainlySometimes promised, rarely deliveredNeeds a subscription

πŸš€ How to use

  1. Create a free Apify account with $5 in credit.
  2. Open the Racing Post Racecards Scraper.
  3. Keep the defaults for today's full card, or set a date, paste a meeting or race URL, add filters, choose Max Items and click Start.
  4. Download the dataset as CSV, Excel, JSON or XML from the Storage tab, or read it through the API.

Every runner on tomorrow's cards:

{
"raceDate": "tomorrow",
"maxItems": 1000
}

British and Irish jumps runners only, for a named day:

{
"raceDate": "2026-09-11",
"maxItems": 5000,
"countryCodes": ["GB", "IRE"],
"raceType": "jumps"
}

A single race, including any withdrawn horses:

{
"startUrls": [{ "url": "https://www.racingpost.com/racecards/15/doncaster/2026-09-10/926640" }],
"maxItems": 50,
"includeNonRunners": true
}

Free-plan runs return up to 10 runners as a preview. Upgrade your Apify plan to collect up to 1,000,000 rows per run.

πŸ’Ό Business use cases

πŸ“Š Daily form table. A modeller runs the Actor every morning for today and tomorrow, joins officialRating, rpr, topSpeed, form and weightLbs onto a horse key, and refits a speed model before the first race.

🎯 Price your own book. A trading desk compares forecastOddsDecimal against its own model line for every runner on the card, and flags the races where the two disagree most.

πŸ“° Publish full cards. A racing site renders every meeting from one dataset: silks, saddlecloth number, draw, jockey, trainer, weights and the race-reader comment, with the going and the prize money in the header.

🐴 Track a stable or a sire. A bloodstock analyst filters rows by trainer, owner or sire across every card in Britain and Ireland, and gets an alert the day a horse is declared.

🌱 Going and draw research. An analyst collects goingDetails, surface, draw and distanceYards over a season to measure how much the draw is worth at each course on each going.

πŸ”Œ Automating Racing Post Racecards Scraper

Racecards change every day, so schedule the run rather than starting it by hand.

  • Schedule: set a daily schedule for 07:00 with raceDate left at today, and a second one the evening before with tomorrow if you want the field as soon as it is declared.
  • Webhooks: fire a webhook on ACTOR.RUN.SUCCEEDED to push the dataset into your warehouse or into a Google Sheet.
  • API: call run-sync-get-dataset-items for a one-shot pull straight into a script.
  • Integrations: the dataset is available to Make, Zapier, Airbyte, n8n and LangChain from the Actor page.

🌟 Beyond business use cases

πŸ† Syndicate mornings. A syndicate manager sends members a table of the day's runners, silks and all, the moment the field is declared.

πŸ“š Teaching form reading. A tutor uses form, officialRating and comment side by side to show what each figure is actually telling you.

🎲 Friendly office sweepstakes. A sweepstake organiser pulls the runners for a big race, complete with silks and forecast prices, and prints the slips.

πŸ“ˆ Learning data science. A student uses a season of racecards as a clean, well-shaped tabular dataset with real categorical and numeric features.

πŸ€– Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant that can browse:

I want to collect British and Irish horse racing racecards as structured data. Explain how the Apify Actor parseforge/racing-post-racecards-scraper works, what each of its 58 output fields means, and write me a Python script that calls it through the Apify API for tomorrow's cards and loads the result into a pandas DataFrame.

❓ Frequently Asked Questions

πŸ—“οΈ Which dates can I scrape?

Today and any future date that Racing Post has published. Past dates return no racecards, because a finished race moves to the results section of the site.

⏱️ How far ahead are runners available?

Racing Post lists the meetings and race titles weeks ahead, but the field is declared roughly 48 hours before the off. Ask for a date further out and you will see the meetings listed with no runners yet.

πŸ”— Which Racing Post URLs can I paste?

A day index such as /racecards/2026-09-10/, a meeting such as /racecards/15/doncaster/2026-09-10/, or a single race such as /racecards/15/doncaster/2026-09-10/926640. A race URL returns only the runners in that race.

🎯 Are these live bookmaker odds?

No. forecastOdds is the Racing Post betting forecast, the paper's own prediction of the starting price, and it is what the racecard publishes. Live bookmaker prices arrive on the site over a websocket feed and are not part of this dataset.

πŸ”’ Does this include Spotlight, Postdata, Verdict or the tips?

No. Those are Racing Post Members' Club content and are empty for an anonymous visitor, so the Actor does not include them. The shorter race-reader comment in the comment field is public and is included, as are the Official Rating, RPR and Topspeed figures.

🏁 Does it return results, finishing positions or starting prices?

No. This Actor covers racecards, meaning the runners declared before a race. Results live on a separate part of the site with a different shape.

πŸšͺ Why is draw sometimes N/A?

Jumps races have no starting stalls, so there is no draw. The field is N/A there rather than 0, which would look like a real stall number.

⚠️ What is the difference between Not Disclosed and N/A?

Not Disclosed means Racing Post withholds a value it would normally publish. N/A means the field does not apply to that runner or race, such as a draw in a chase or a race class outside Britain.

🌍 Which countries are covered?

Whatever Racing Post lists that day. Britain and Ireland always, and at verification time also France, the United States, Australia, Hong Kong and Peru. Use the country filter to narrow it, or leave it empty for everything.

🚫 Are withdrawn horses included?

Not by default, so every row is a horse still expected to run. Switch on Include non-runners and withdrawn horses come back with isNonRunner set to Yes.

πŸ›‘οΈ Do I need a proxy?

No. Racing Post answers plain HTTP from Apify's datacenter egress and the proxy input is off by default. If you run very large volumes you can switch Apify Proxy on from the input.

πŸ” Do I need an API key or a Racing Post account?

No. Only public pages are read, exactly as an anonymous visitor sees them.

πŸ“¦ How many runners can I collect?

Free-plan runs return 10 rows as a preview. Paid plans go up to 1,000,000 rows per run, which is far more than a single day of racing carries.

⏰ Can I run this on a schedule?

Yes. A daily schedule at 07:00 with raceDate set to today keeps a warehouse current, and an evening run with tomorrow catches the field as soon as it is declared.

πŸ“„ What output formats are supported?

CSV, Excel, JSON, XML, JSONL and RSS, from the Storage tab or through the API.

❌ What happens when a request fails?

The Actor retries up to five times with a backoff. If a source still does not answer, it writes one error row naming the source and continues; error rows are never charged.

πŸ”Œ Integrate with any app

The dataset is available through the Apify API the moment the run finishes. Use the run-sync-get-dataset-items endpoint for one-shot calls, webhooks to trigger downstream jobs, or the Make, Zapier, Airbyte and LangChain integrations listed on the Actor page.


πŸ’‘ Pro Tip: browse the complete ParseForge collection.

πŸ†˜ Need Help? Open our contact form with your run ID, your input and what you expected.

⚠️ Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Racing Post or Racing Post Ltd. It collects only publicly available data. You are responsible for using the data in compliance with Racing Post's terms of use and applicable data-protection laws.