French Horse Racing Results · LeTrot & ZEturf avatar

French Horse Racing Results · LeTrot & ZEturf

Pricing

from $0.70 / 1,000 horse in a races

Go to Apify Store
French Horse Racing Results · LeTrot & ZEturf

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

Corentin Robert

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 goalSuggested setup
Form / ratings analystRebuild a day of arrivées with reduced-km timesYesterday · Trot · max 200
Turf media / data deskFill a CMS table after Vincennes or CabourgHippodrome filter · Trot
Database vendorNightly FR cards + resultsDate range · All meetings · maxItems 0
Agency building a turf widgetSmall, cheap sample for a client demoPrefill dates · 20 rows
Owner / trainer officeOne meeting, one spreadsheetHippodrome 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

  1. Open the Actor on Apify and keep From date / To date on a recent race day (prefill is a full French trotting day).
  2. Leave Discipline on Trot (LeTrot) or switch to All French meetings.
  3. 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.

ExampleBest for
Cabourg trot starters & arrivéesLeTrot meeting sample
One French race day (all tracks)Full FR card like ZEturf
LeTrot day URLPaste-a-link workflow
Flat & jumps at MoulinsGalop / ZEturf FR

What it extracts

CategoryFields
MeetingraceDate, raceTime, reunionNumber, raceNumber, hippodrome, discipline, raceName, raceStatus
Race setupdistanceMeters, prizeMoneyEur, rail, declaredRunners
HorsehorseName, horseNumber, age, sex, coat, horseBreed, formFigures, careerRuns, careerWins, careerEarningsEur
PeopleriderName, driverName, jockeyName, trainerName, ownerName, breederName
ResultfinishPosition, finishTime, reducedKmTime, horseStatus, startingPrice
LinksletrotUrl (trot days), zeturfUrl

Empty source fields stay null.

Input

FieldTypeDefaultNotes
dateFromdateyesterday (Paris) if emptyYYYY-MM-DD
dateTodatesame as fromMax 31 days per run
disciplineenumtrottrot · galop · all
hippodromesstring listemptyCase-insensitive contains, e.g. Vincennes
startUrlsstring listemptyLeTrot /courses/YYYY-MM-DD or a URL with R1 C4
maxItemsinteger200 = 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.

ScenarioApprox. cost (Free tier list)
20 rows (Try / Free plan cap)~$0.02
1,000 rows~$1.00 + start
50,000 rows~$50 + start
TierPer 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.

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

  1. Resolve the date range (or a pasted LeTrot / ZEturf URL).
  2. Load the public French programme for each day.
  3. Keep meetings that match discipline and hippodrome.
  4. Load starters / arrivées for each race.
  5. Push one dataset row per horse, progressively.

Local development

cd french-horse-racing-results
npm install
npm test
apify 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)

KeyTypeDefault
verboseLogsbooleanfalse
proxyConfigurationobject{ "useApifyProxy": true } on cloud

Support

Contact corentin@outreacher.fr if you need a custom scraper or tailored automation.