Equibase Horse Racing Scraper - US Race Entries & Results
Pricing
Pay per event
Equibase Horse Racing Scraper - US Race Entries & Results
Scrape US Thoroughbred horse racing data from Equibase.com — the official source for North American racing. Extract race entries (horses, jockeys, trainers, odds) and results (finish order, times, payouts) for any date and track. Ideal for handicappers and sports analytics.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
30
Total users
6
Monthly active users
0.17 hours
Issues response
16 hours ago
Last modified
Share
Scrape North American Thoroughbred racing data from Equibase.com, the official statistics provider for the sport. Returns one record per race — entries (post position, horse, jockey, trainer, weight, morning-line odds), results (finish order, winning time, win/place/show payouts, exotics), and race conditions — for every track running on a given date.
Equibase Horse Racing Scraper Features
- Returns the complete daily slate. Every track racing on the date, pulled from Equibase's own entries index — not a curated shortlist of the marquee cards.
- Covers US and Canadian Thoroughbred tracks. Woodbine and Delta Downs get the same treatment as Saratoga.
- Extracts 25+ fields per race — entries, results, payouts, and conditions in structured JSON.
- One record per race, not per horse. The full field lives in a single
entriesstring, so a race card is one row. - Three data modes: entries only, results only, or both.
- Handles Equibase's Imperva bot protection internally. No proxy setup, no captcha wrangling — you pick a date and get data.
- Scrapes any date. Today's cards, tomorrow's early entries, or a past date for completed results.
Who Uses Equibase Racing Data?
- Handicappers — Build speed figures and pace models off entries, then check them against finish order and times.
- Sports analytics platforms — Import every meeting for the day into a database without stitching together a dozen track sites.
- Bettors and syndicates — Track odds movement and payouts across the full card, including the tracks nobody else bothers to cover.
- Racing media and bloggers — Pull results and payouts for recaps the moment a card finishes.
- Data vendors — Feed a normalized racing dataset into downstream products instead of maintaining scrapers per track.
How Equibase Horse Racing Scraper Works
- Pick a date (defaults to today) and a data mode. Leave the track filter empty to get everything.
- The scraper reads Equibase's authoritative entries index for that date — the full list of tracks running, US and Canadian.
- It clears the site's Imperva challenge once with a real browser session, then collects each track's race card.
- Entries are parsed into one record per race; results and payouts are attached for past races. You get clean JSON.
Input
{"raceDate": "07/11/2026","trackCodes": [],"dataMode": "both","maxItems": 500}
| Field | Type | Default | Description |
|---|---|---|---|
raceDate | string | today | Date to scrape, MM/DD/YYYY or YYYY-MM-DD. Use a past date for completed results. |
trackCodes | array | [] (all) | Optional track-code filter (e.g. ["SAR", "GP", "WO"]). Empty scrapes every track racing that date. |
dataMode | string | both | entries (race cards), results (finish order + payouts), or both. Results exist only for past races. |
maxItems | integer | 50 | Max race records returned (one race = one record). Default samples several meetings; raise it (e.g. 500) to collect the entire day's slate. |
To collect every race at every track for a day, leave trackCodes empty and set maxItems high enough to cover it — a busy US day runs 200–300 races across ~25 tracks.
{"raceDate": "07/11/2026","trackCodes": ["SAR", "GP"],"dataMode": "results","maxItems": 100}
Equibase Horse Racing Scraper Output Fields
One record per race. Entry fields are always populated; result fields fill in once a race has run (results_available tells you which).
{"race_id": "SAR-2026-07-11-R8","race_date": "2026-07-11","track_code": "SAR","track_name": "Saratoga","race_number": 8,"race_name": "Allowance Optional Claiming","race_type": "Allowance","distance": "6 Furlongs","distance_furlongs": 6.0,"surface": "Dirt","track_condition": "Fast","purse_usd": 90000,"post_time": "4:47 PM","age_sex_restriction": "3yo+","entries_count": 7,"entries": "1|Bold Venture|J. Rosario|C. Brown|122|5-2 | 2|Sea Foam|I. Ortiz Jr.|T. Pletcher|120|3-1","results_available": true,"winner_horse": "Bold Venture","winner_jockey": "J. Rosario","winner_trainer": "C. Brown","winning_time": "1:09.42","finish_order": "1. Bold Venture (2), 2. Sea Foam (nk), 3. Grey Skies (1 1/4)","win_payout": 7.20,"place_payout": 3.40,"show_payout": 2.80,"exotic_payouts": "{\"exacta\": 24.60, \"trifecta\": 98.75}","entry_url": "https://www.equibase.com/static/entry/SAR071126USA-EQB.html","result_url": "https://www.equibase.com/static/chart/summary/SAR071126USA-EQB.html","scraped_at": "2026-07-11T20:15:00.000Z"}
| Field | Type | Description |
|---|---|---|
race_id | string | Unique race identifier (track code + date + race number) |
race_date | string | Race date in YYYY-MM-DD format |
track_code | string | Short track code (e.g. SAR, GP, WO) |
track_name | string | Full track name (e.g. Saratoga, Gulfstream Park, Woodbine) |
race_number | number | Race number on the card (1–12+) |
race_name | string | Race name or grade (e.g. Kentucky Derby, Allowance Optional Claiming) |
race_type | string | Classification: Maiden, Allowance, Stakes, Claiming, etc. |
distance | string | Distance description (e.g. 6 Furlongs, 1 1/8 Miles) |
distance_furlongs | number | Distance in furlongs (decimal) |
surface | string | Racing surface: Dirt, Turf, Synthetic, or All-Weather |
track_condition | string | Track condition: Fast, Good, Sloppy, Muddy, Firm, Soft, Yielding |
purse_usd | number | Total purse in US dollars |
post_time | string | Scheduled post time (local track time) |
age_sex_restriction | string | Eligibility restriction (e.g. 3yo+, F&M) |
entries_count | number | Number of horses entered |
entries | string | Pipe-delimited entry list: `post |
results_available | boolean | Whether results are attached (false for future/today races) |
winner_horse | string | Winning horse |
winner_jockey | string | Winning jockey |
winner_trainer | string | Winning trainer |
winning_time | string | Official winning time (e.g. 1:09.42) |
finish_order | string | Order of finish with margins: place. horse (margin) |
win_payout | number | Win payout on a $2 bet |
place_payout | number | Place payout on a $2 bet |
show_payout | number | Show payout on a $2 bet |
exotic_payouts | string | Exotic payouts as JSON: exacta, trifecta, superfecta, daily double, pick 3/4/5/6 |
entry_url | string | Equibase entry page URL for this track/date |
result_url | string | Equibase result summary URL for this track/date |
scraped_at | string | ISO timestamp when the record was scraped |
FAQ
How do I scrape Equibase race data?
Equibase Horse Racing Scraper takes a date and returns every race running that day. Set raceDate, leave trackCodes empty to get all tracks, and pick a dataMode. It handles Equibase's bot protection for you, so there's nothing to configure beyond what you actually want.
Does the scraper return every track for the day?
Yes. Equibase Horse Racing Scraper reads Equibase's own entries index — the authoritative list of every meeting racing on the date — rather than a curated homepage feed, so small and Canadian tracks come through alongside the majors. Set maxItems high enough to cover the slate (a busy US day is 200–300 races) and leave the track filter empty.
Can I get just results, or just entries?
Equibase Horse Racing Scraper has a dataMode for that: entries, results, or both. Results only exist for races that have already run, so for past dates use results or both; for today's or tomorrow's cards, entries is what's available.
Do I need to configure proxies or solve captchas?
No. Equibase Horse Racing Scraper clears Equibase's Imperva bot protection internally — there's no proxy field to set and no captcha to solve. That's the part that makes most people give up on scraping Equibase, and it's handled.
How much does Equibase Horse Racing Scraper cost?
Equibase Horse Racing Scraper bills per race record on a pay-per-event basis — you pay for the races you actually collect, capped by maxItems. A single-track results run is a handful of records; a full-day pull across every track is a few hundred.
Need More Features?
Need a different field, an odds-history mode, or another racing data source? File an issue or get in touch.
Why Use Equibase Horse Racing Scraper?
- Complete coverage — every track on the card, US and Canadian, from Equibase's own index.
- Zero bot-protection hassle — it clears the Imperva challenge internally, which is more than you can say for pointing
curlat Equibase and getting "Pardon Our Interruption." - Clean, one-row-per-race JSON — consistent field names for entries, results, and payouts, so the data goes straight into your model instead of a cleanup script.