# Equibase Horse Racing Scraper: Race Entries, Results & Payouts (`getascraper/equibase-us-horse-racing-scraper`) Actor

Pull every entry and result Equibase publishes for US Thoroughbred racing, by date and track. Get post positions, jockeys, trainers, morning-line odds, winning times, and win, place, show, and exotic payouts. Built for handicappers, DFS players, and betting-model builders. Priced per race row.

- **URL**: https://apify.com/getascraper/equibase-us-horse-racing-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Sports
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.60 / 1,000 race records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏇 Equibase Horse Racing Scraper: Race Entries, Results & Payouts

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EEF6F1;border:1px solid #C7DDCF;border-top:4px solid #1D5B3A;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every entry, result, and payout from Equibase, structured and ready to use</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pull morning-line entries or official results for any US thoroughbred track and date, including win, place, show, and exotic wager payouts, without opening a single Equibase page by hand.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7DDCF;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1D5B3A">🏇 Full entries</span><br>
<span style="font-size:12px;color:#57534E">Post position, jockey, trainer, weight, and morning-line odds for every horse</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7DDCF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1D5B3A">🏆 Official results</span><br>
<span style="font-size:12px;color:#57534E">Winner, winning time, and win, place, and show payouts</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7DDCF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1D5B3A">🎟️ Exotics included</span><br>
<span style="font-size:12px;color:#57534E">Exacta, trifecta, superfecta, and double payoffs per race</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7DDCF;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1D5B3A">📅 Any track, any date</span><br>
<span style="font-size:12px;color:#57534E">Filter by track code, or leave it blank for every card running that day</span>
</td>
</tr>
</table>

Equibase publishes race data across hundreds of separate per-track pages with no clean export.
This Actor turns any date and track into one normalized feed: post positions and morning-line
odds before the race, winners and payouts after it.

### 🐎 Who this is for

- **I am a handicapper** building my own speed and pace models, pulling official results and payouts race by race instead of copying numbers off Equibase by hand.
- **I am a DFS player** researching morning-line odds and jockey and trainer combos across every card running today, without opening dozens of individual track pages.
- **I am a horse racing content site** publishing daily results and payout recaps, pulling structured data instead of re-typing chart summaries.
- **I am a betting-model builder** backtesting strategies against historical exotic payouts, feeding results straight into my spreadsheet or database.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EEF6F1;border:1px solid #C7DDCF;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1D5B3A;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a date and track</span><br>
<span style="font-size:12px;color:#57534E">Enter a race date and, optionally, one or more Equibase track codes.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EEF6F1;border:1px solid #C7DDCF;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1D5B3A;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Choose entries, results, or both</span><br>
<span style="font-size:12px;color:#57534E">Pull the morning-line card, the finished results, or both in one run.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EEF6F1;border:1px solid #C7DDCF;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1D5B3A">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get one row per race</span><br>
<span style="font-size:12px;color:#57534E">Every race lands as one dataset row, ready to filter, sort, or export.</span>
</td>
</tr>
</table>

Leave the track code field empty to pull every track running on the target date.

### 📋 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `raceDate` | string | No | Race date, picked from the date field. Leave blank for today. |
| `trackCodes` | array of strings | No | Equibase track codes to filter (e.g. `PRX`, `DEL`, `CD`). Leave empty to scrape every track running on the date. |
| `dataMode` | enum | No | `entries`, `results`, or `both`. Defaults to `both`. |
| `maxItems` | integer | No | Maximum number of race rows to return. Defaults to 10. |
| `proxyConfiguration` | object | No | Proxy settings. Defaults to a setup that reliably clears Equibase's bot detection; most users can leave this as is. |

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `raceId` | string | Unique ID built from track code, date, and race number |
| `raceDate` | string | Race date |
| `trackCode` | string | Short Equibase track code |
| `trackName` | string | Full track name (e.g. Parx Racing) |
| `raceNumber` | integer | Race number on the card |
| `raceType` | string | Race classification (e.g. Claiming, Starter Optional Claiming) |
| `purseUsd` | number | Total purse in US dollars |
| `postTime` | string | Scheduled post time (entries only) |
| `entriesCount` | integer | Number of horses entered |
| `entries` | array | One object per horse: post position, horse name, jockey, trainer, weight, morning-line odds (entries only) |
| `resultsAvailable` | boolean | True once the race has been run and results are posted |
| `winnerHorse` | string | Winning horse's name (results only) |
| `winnerJockey` | string | Winning jockey's name (results only) |
| `winnerTrainer` | string | Winning trainer's name (results only) |
| `winningTime` | string | Winning time for the race (results only) |
| `finishOrder` | array | Horse names in finish order, winner first (results only) |
| `winPayout` / `placePayout` / `showPayout` | number | Win, place, and show payout for a $2 bet on the winner (results only) |
| `exoticPayouts` | array | One object per exotic wager: wager type, winning combination, and payout (results only) |
| `entryUrl` / `resultUrl` | string | Link to the source Equibase page |
| `scrapedAt` | string | Timestamp of when the row was scraped |

### 💰 Pricing

Pricing is pay per result: you are billed for race rows actually saved to your dataset. Empty
runs cost nothing. There are no subscriptions or fixed monthly fees.

### ⭐ Enjoying Equibase US Horse Racing Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#EEF6F1;border:1px solid #C7DDCF;border-left:5px solid #1D5B3A;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this saved you from copying results off Equibase by hand, a rating helps a lot.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other handicappers and racing sites find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#1D5B3A;border:1px solid #C7DDCF;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/equibase-us-horse-racing-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

##### Does it get blocked?

Equibase runs bot detection on its race pages. This Actor is built to clear it automatically on
every run, so you do not need to configure anything yourself.

##### Do I need an Equibase account or API key?

No. Every field this Actor returns is public race data. There is no login, account, or API key
involved.

##### How fresh is the data?

Each run loads the live race page directly from Equibase, so entries and results are as current
as the site itself. Results appear once Equibase posts them, typically shortly after a race
finishes.

##### Does it cover every US track?

Yes. Any track that publishes an entries card or results chart on Equibase can be pulled by its
track code. Leave the track code field blank to pull every track running on a given date.

### 🔗 Other actors

- [SofaScore Scraper: Live scores, stats and fixtures](https://apify.com/getascraper/sofascore-live-events-scraper) ↗ - extracts live sports scores, stats, and fixtures.
- [CA State Bar Attorney Scraper](https://apify.com/getascraper/ca-state-bar-attorney-scraper) ↗ - extracts California attorney directory records by name or bar number.
- [Probate & foreclosure leads scraper](https://apify.com/getascraper/probate-foreclosure-leads-scraper) ↗ - extracts probate and foreclosure lead records from public filings.
- [SEC EDGAR Scraper for RAG: 10-K/10-Q/8-K as JSON](https://apify.com/getascraper/sec-edgar-rag-extractor) ↗ - extracts SEC filings as structured JSON for analysis.
- [HiBid Scraper: Real-Time Auction Listings](https://apify.com/getascraper/hibid-scraper) ↗ - extracts live auction listings and bidding data.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/equibase-us-horse-racing-scraper/changelog.md

# Actor input Schema

## `raceDate` (type: `string`):

Scraping target date. Leave blank to extract today's races.

## `trackCodes` (type: `array`):

Optional list of short Equibase track codes to filter (e.g., \['CD', 'GP', 'BEL', 'AQU', 'PRX']). Leave empty to scrape all tracks running on the target date.

## `dataMode` (type: `string`):

'entries' = race card morning-line details only; 'results' = completed race results and payouts; 'both' = full entry card and summary payouts.

## `maxItems` (type: `integer`):

The maximum number of race cards to scrape and push to the dataset.

## `proxyConfiguration` (type: `object`):

Equibase now runs Imperva bot protection that hard-blocks datacenter and other cloud-provider IPs site-wide (confirmed live 2026-09-07 with a 403 Incapsula 'Access Denied' page). Residential proxy (the default) is required to reach the site at all.

## Actor input object example

```json
{
  "raceDate": "",
  "trackCodes": [],
  "dataMode": "both",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "raceDate": "",
    "trackCodes": [],
    "dataMode": "both",
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/equibase-us-horse-racing-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "raceDate": "",
    "trackCodes": [],
    "dataMode": "both",
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/equibase-us-horse-racing-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "raceDate": "",
  "trackCodes": [],
  "dataMode": "both",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call getascraper/equibase-us-horse-racing-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/equibase-us-horse-racing-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/BpbOJUHN4tTBUFgO8/builds/F0vSkBm8AUcEghyoJ/openapi.json
