French Horse Racing Results · LeTrot & ZEturf
Pricing
from $0.70 / 1,000 horse in a races
French Horse Racing Results · LeTrot & ZEturf
Export French race cards, starters and official arrivées — the same public meetings listed on LeTrot (trot) and ZEturf (FR). One row per horse-in-race: finish, times, trainer, jockey. No login. Not live betting odds.
Pricing
from $0.70 / 1,000 horse in a races
Rating
0.0
(0)
Developer
Corentin Robert
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Export French race cards, starters and official arrivées — the same public meetings listed on LeTrot (trot) and ZEturf (FR). One row per horse-in-race. Finish, times, trainer, jockey or driver.
No login. No API key. Not live betting odds.
Who is this for?
| You are… | Typical goal | Suggested setup |
|---|---|---|
| Form / ratings analyst | Rebuild a day of arrivées with reduced-km times | Yesterday · Trot · max 200 |
| Turf media / data desk | Fill a CMS table after Vincennes or Cabourg | Hippodrome filter · Trot |
| Database vendor | Nightly FR cards + results | Date range · All meetings · maxItems 0 |
| Agency building a turf widget | Small, cheap sample for a client demo | Prefill dates · 20 rows |
| Owner / trainer office | One meeting, one spreadsheet | Hippodrome name · Racecard view |
What you get by default: race date and off-time (Paris), hippodrome, cloth, horse, rider, trainer, finish when the race is official, finish time and reduced km, career form figures, links to the LeTrot day page (trot) and ZEturf results.
What this Actor does not do: live in-play odds, steamers, or tote markets. For live PMU odds see other Store Actors — this one is cards and arrivées only.
Quick start
- Open the Actor on Apify and keep From date / To date on a recent race day (prefill is a full French trotting day).
- Leave Discipline on Trot (LeTrot) or switch to All French meetings.
- Click Start. Download CSV / Excel from the Dataset tab.
Free plan: 20 rows per run. Paid plans follow pay-per-event.
Ready-made examples (published tasks)
Publish these from published-tasks/ after the first Store push (Console → task Publication). Links 404 until then.
| Example | Best for |
|---|---|
| Cabourg trot starters & arrivées | LeTrot meeting sample |
| One French race day (all tracks) | Full FR card like ZEturf |
| LeTrot day URL | Paste-a-link workflow |
| Flat & jumps at Moulins | Galop / ZEturf FR |
What it extracts
| Category | Fields |
|---|---|
| Meeting | raceDate, raceTime, reunionNumber, raceNumber, hippodrome, discipline, raceName, raceStatus |
| Race setup | distanceMeters, prizeMoneyEur, rail, declaredRunners |
| Horse | horseName, horseNumber, age, sex, coat, horseBreed, formFigures, careerRuns, careerWins, careerEarningsEur |
| People | riderName, driverName, jockeyName, trainerName, ownerName, breederName |
| Result | finishPosition, finishTime, reducedKmTime, horseStatus, startingPrice |
| Links | letrotUrl (trot days), zeturfUrl |
Empty source fields stay null.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
dateFrom | date | yesterday (Paris) if empty | YYYY-MM-DD |
dateTo | date | same as from | Max 31 days per run |
discipline | enum | trot | trot · galop · all |
hippodromes | string list | empty | Case-insensitive contains, e.g. Vincennes |
startUrls | string list | empty | LeTrot /courses/YYYY-MM-DD or a URL with R1 C4 |
maxItems | integer | 20 | 0 = no ceiling (paid). Free plan: 20 / run |
API-only (omit from Console): verboseLogs (boolean), proxyConfiguration (Apify proxy object). Cloud runs use datacenter proxy by default.
JSON example
{"dateFrom": "2026-08-28","dateTo": "2026-08-28","discipline": "trot","hippodromes": ["Cabourg"],"maxItems": 20}
Output example
{"recordKey": "2026-08-28-R1-C1-4","raceDate": "2026-08-28","raceTime": "18:05","reunionNumber": 1,"raceNumber": 1,"hippodrome": "HIPPODROME DE CABOURG","discipline": "trot_harness","raceName": "PRIX DES ESCALLONIAS","raceStatus": "official","horseName": "JASMIN PRECIEUX","horseNumber": 1,"finishPosition": 11,"finishTime": "3'26\"0","reducedKmTime": "1'14\"9","riderName": "J.L.CL. DERSOIR","trainerName": "J.L.CL. DERSOIR","letrotUrl": "https://www.letrot.com/courses/2026-08-28"}
Dataset views: Overview, Results, Racecard.
How much does it cost to scrape LeTrot or ZEturf results?
HTTP-only (no browser). You pay pay-per-event: a tiny start fee plus one event per horse-in-race row.
| Scenario | Approx. cost (Free tier list) |
|---|---|
| 20 rows (Try / Free plan cap) | ~$0.02 |
| 1,000 rows | ~$1.00 + start |
| 50,000 rows | ~$50 + start |
| Tier | Per horse-in-race |
|---|---|
| Free | $0.001 |
| Bronze | $0.0009 |
| Silver | $0.0008 |
| Gold | $0.0007 |
| Platinum | $0.0006 |
| Diamond | $0.0005 |
Actor start is $0.00005 per GB of memory (this Actor defaults to 512 MB). Compute is small because there is no headless Chrome.
Is it legal to scrape LeTrot / ZEturf race results?
This Actor only reads public race cards and official arrivées (meetings already published for the racing public). It does not log into a betting account or collect private customer data. Horse racing results can include names of licence-holders (trainers, drivers). Your use must comply with GDPR and with the terms of any site you reuse the data on. This is not betting advice.
How it works
- Resolve the date range (or a pasted LeTrot / ZEturf URL).
- Load the public French programme for each day.
- Keep meetings that match discipline and hippodrome.
- Load starters / arrivées for each race.
- Push one dataset row per horse, progressively.
Local development
cd french-horse-racing-resultsnpm installnpm testapify run
apify run validates .actor/INPUT.json (or storage/key_value_stores/default/INPUT.json). Repo input.json is merged when you are not on the Apify platform (KV / CLI input wins on conflict). Local storage/ is not uploaded to Console.
Input (API-only keys)
| Key | Type | Default |
|---|---|---|
verboseLogs | boolean | false |
proxyConfiguration | object | { "useApifyProxy": true } on cloud |
Support
Contact corentin@outreacher.fr if you need a custom scraper or tailored automation.