The 14:15 at Vincennes, ten minutes before the off. A 50/1 outsider is suddenly 20/1. In a pari-mutuel pool that means one thing: money is coming in on that horse, fast. If your bot finds out two minutes later, after a scraper run has spun up, fetched and finished, the price has already moved again.
So I put the odds behind an endpoint that is already awake.
What you get
Horse Racing Pulse API is a Server Actor on Apify: an always-on HTTP API over the live PMU programme (French tracks plus the foreign tracks PMU takes bets on). It refreshes every race still open for betting once a minute and keeps 90 minutes of snapshots in memory, so a call is answered in milliseconds.
GET /movers?countries=FRA&window_minutes=10 returns the horses the money is moving on:
{ "updated_at" : "2026-11-11T07:45:24+00:00" , "window_minutes_used" : 10.0 , "mover_count" : 1 , "movers" : [ { "signal" : "steamer" , "trigger" : "relative" , "hippodrome" : "LYON LA SOIE" , "race_code" : "R4C2" , "race_name" : "OURASI" , "horse_num"…