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
2
Total users
1
Monthly active users
a day ago
Last modified
Share
Scrapes race entries and results from Equibase.com โ the official statistics provider for North American Thoroughbred racing. Returns structured race card data: horses, jockeys, trainers, morning-line odds, finish order, times, and pari-mutuel payouts.
What It Extracts
- Race entries: post position, horse name, jockey, trainer, owner, weight, morning-line odds
- Race results: finish order, winning time, margins, win/place/show payouts
- Exotic payouts: exacta, trifecta, superfecta, pick 3/4/5/6
- Race conditions: type (Maiden/Allowance/Stakes/Claiming), distance, surface, purse, track condition
- Coverage: any US Thoroughbred track on any date with public results
How It Works
- You provide a race date and optional track code filter
- The scraper navigates Equibase's entry and result pages using a real browser session
- Race card data is parsed and returned as one record per race
- Results (finish order, payouts) are attached when available for past races
Equibase protects its data pages with Imperva bot detection. The scraper uses residential proxy rotation and browser-based rendering to pass that check. Residential proxies are required โ datacenter IPs get the "Pardon Our Interruption" page every time.
Input Configuration
| Field | Type | Default | Description |
|---|---|---|---|
raceDate | String | Today | Date to scrape โ MM/DD/YYYY format. Leave blank for today's card. Use a past date for completed results. |
trackCodes | Array | All tracks | Optional filter by track code (AQU, CD, SA, GP, PRX, etc.). Empty = all tracks running that day. |
dataMode | Select | both | entries = race cards only; results = finish order + payouts; both = full data. Results only available for past races. |
maxItems | Integer | 10 | Maximum race records to return. Each race card is one record. |
proxyConfiguration | Object | Residential | Proxy settings. Residential proxy required โ datacenter IPs are blocked. |
Example: Today's entries at Parx Racing
{"sp_intended_usage": "Handicapping research","raceDate": "","trackCodes": ["PRX"],"dataMode": "entries","maxItems": 10}
Example: Yesterday's results at Aqueduct and Churchill Downs
{"sp_intended_usage": "Historical results database","raceDate": "05/10/2026","trackCodes": ["AQU", "CD"],"dataMode": "results","maxItems": 20}
Example: Full card data for all tracks on a given date
{"sp_intended_usage": "Daily racing analytics","raceDate": "05/09/2026","trackCodes": [],"dataMode": "both","maxItems": 50}
Output Schema
One record per race. Fields vary by data mode.
| Field | Type | Description |
|---|---|---|
race_id | String | Unique identifier: PRX-2026-05-11-R3 |
race_date | String | ISO date: 2026-05-11 |
track_code | String | Short track code: PRX, AQU, CD |
track_name | String | Full track name: Parx Racing, Aqueduct |
race_number | Number | Race number on the card |
race_name | String | Race name or grade if named (e.g. Kentucky Derby) |
race_type | String | Classification: Maiden, Allowance, Stakes, Claiming |
distance | String | Distance description: 6 Furlongs, 1 1/16 Miles |
distance_furlongs | Number | Distance in furlongs: 6, 8.5 |
surface | String | Dirt, Turf, Synthetic, All-Weather |
track_condition | String | Fast, Good, Sloppy, Muddy, Firm, Soft |
purse_usd | Number | Total purse in USD |
post_time | String | Scheduled post time (local track time) |
age_sex_restriction | String | Eligible horses: 3yo+, F&M, A |
entries_count | Number | Number of horses entered |
entries | String | Pipe-delimited entry list: post|horse|jockey|trainer|weight|ml_odds |
results_available | Boolean | Whether race results exist |
winner_horse | String | Name of the winning horse |
winner_jockey | String | Name of the winning jockey |
winner_trainer | String | Name of the winning trainer |
winning_time | String | Official winning time: 1:23.45 |
finish_order | String | Top finishers: 1. Tulip (2), 2. Hedge Ratio (nk), 3. Boss Sully (hd) |
win_payout | Number | $2 win payout for the winner |
place_payout | Number | $2 place payout |
show_payout | Number | $2 show payout |
exotic_payouts | String | JSON string with exacta, trifecta, superfecta amounts |
entry_url | String | Direct link to the Equibase entry page |
result_url | String | Direct link to the Equibase result summary page |
scraped_at | String | ISO timestamp of when this record was scraped |
Sample output (entries mode)
{"race_id": "PRX-2026-05-11-R3","race_date": "2026-05-11","track_code": "PRX","track_name": "Parx Racing","race_number": 3,"race_name": null,"race_type": "Maiden Claiming","distance": "6 Furlongs","distance_furlongs": 6,"surface": "Dirt","track_condition": "Fast","purse_usd": 16000,"post_time": "1:15 PM","age_sex_restriction": "3yo+","entries_count": 9,"entries": "1|Winning Time|J. Rocco Jr.|K. Magee|122|5/2 | 2|Gordian Knot|C. DeCarlo|J. Servis|120|3/1 | ...","results_available": false,"winner_horse": null,"winning_time": null,"finish_order": null,"win_payout": null,"exotic_payouts": null,"entry_url": "https://www.equibase.com/static/entry/PRX051126USA-EQB.html","result_url": "https://www.equibase.com/static/chart/summary/PRX051126USA-EQB.html","scraped_at": "2026-05-11T10:28:00.000Z"}
Pricing
$0.10 per run + $0.001 per race record. A single-track card of 9 races costs about $0.11. A full day across 8 tracks (roughly 72 races) runs about $0.17.
๐ FAQ
How do I scrape Equibase horse racing data? Equibase Horse Racing Scraper handles it. Set a date, optionally filter by track code, choose whether you want entries, results, or both, and run it. The output is structured JSON โ one record per race.
What track codes does Equibase use?
Equibase Horse Racing Scraper accepts standard track abbreviations: AQU (Aqueduct), CD (Churchill Downs), SA (Santa Anita), GP (Gulfstream Park), KEE (Keeneland), PRX (Parx Racing), BEL (Belmont Park), and dozens more. Leave trackCodes empty to scrape all active tracks on a given day.
How much does Equibase Horse Racing Scraper cost to run? Equibase Horse Racing Scraper costs $0.10 per run plus $0.001 per race record. A single day at one track with 9 races costs $0.11. An all-tracks sweep on a busy Saturday might cover 80+ races for around $0.18.
Can I get past performance data or PDF charts? Equibase Horse Racing Scraper does not access PDF chart files or historical past-performance detail โ those are Equibase's paid products and are not available on the public pages. The scraper returns entry and result data from the free public HTML pages: post positions, odds, finish order, times, and payouts.
Does Equibase Horse Racing Scraper need proxies? Yes. Equibase uses Imperva bot protection on all data pages. Residential proxies are required โ datacenter IPs receive an interstitial block page instead of race data. The default proxy configuration uses Apify residential proxies, which work correctly.
Need More Features?
Need custom fields, additional track coverage, or integration with a handicapping database? File an issue or get in touch.
Why Use Equibase Horse Racing Scraper?
- First US horse racing actor on Apify โ covers the largest Thoroughbred racing market in the world, which handles roughly $11B in annual wagering and was completely unserved before this
- Clean output โ returns structured JSON with consistent field names across all tracks and dates, not the raw HTML mess that comes with DIY scraping
- Flexible data modes โ entries-only for pre-race handicapping, results-only for historical analysis, or both for a complete race-day record