# Bring a Trailer Scraper — BaT Auction Results & Live Auctions (`hipersoft/bringatrailer-scraper`) Actor

Scrape Bring a Trailer (BaT) car auctions: sold prices, high bids, end dates, no-reserve flag, location, photos and descriptions for 260,000+ completed auctions plus every live auction. Filter by make/model page, year and sold/unsold. Export CSV/JSON.

- **URL**: https://apify.com/hipersoft/bringatrailer-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.001 / auction

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

## Bring a Trailer Scraper: BaT Auction Results, Sold Prices & Live Auctions

**Bring a Trailer Scraper** extracts car auction data from **Bring a Trailer (BaT, bringatrailer.com)**, the largest online auction site for collector, classic and enthusiast cars. Get **260,000+ completed auctions** with **sold prices, high bids, end dates and results**, plus **every live auction** with its **current bid and end time**. Each auction includes the **title, model year, price, currency, sold/not-sold status, no-reserve flag, location with GPS coordinates, description and main photo**. Filter by **make or model page** (e.g. Porsche 911, BMW E30 M3, Land Rover Defender), **model year** and **result**, and export to **CSV, Excel or JSON**.

### What does Bring a Trailer Scraper do?

- 🏁 **Completed auction results**: sold prices and high bids from more than 260,000 BaT auctions, newest first.
- 🔴 **Live auctions**: every auction currently running with its current bid and exact end time.
- 🚗 **Make and model filters**: paste any BaT make, model or category page, such as Porsche 911, Ford Bronco, Mercedes-Benz 300SL or Toyota Land Cruiser.
- 📅 **Model-year range** and **sold / not sold** filters.
- 🔎 **Title contains**: narrow down to "Turbo", "5-Speed", "Defender 110" and so on.
- 🏷️ **No-reserve** flag and filter.
- 📍 **Location**: country and coordinates for live auctions.
- 📝 **Description excerpt** and **main photo** for every auction.

### What data can you scrape from Bring a Trailer?

| Field | Description |
|---|---|
| ID, title, link | BaT listing identifier, title and page |
| Year | Model year |
| Status | Live, sold, not sold or withdrawn |
| Price | Sold price, high bid or current bid |
| Currency | Auction currency |
| Result text | E.g. "Sold for USD $157,911 on 10/5/2026" |
| End date | When the auction ended or ends |
| No reserve | Whether the auction had no reserve |
| Premium | Premium (featured) listing |
| Location | Country, country code, latitude, longitude |
| Description | Listing excerpt |
| Photo | Main image link |

### Use cases for BaT auction data

- **Collector-car valuation**: build price guides from real BaT sold prices by make, model and year.
- **Dealers and flippers**: find what cars actually sell for before buying or listing.
- **Market trend analysis**: track prices of Porsche 911s, Land Cruisers, Broncos or any model over time.
- **Auction monitoring**: watch live auctions for a model and get alerts before they end.
- **Insurance and appraisals**: support agreed-value appraisals with comparable sales.
- **Content and newsletters**: publish weekly "top sales" and "notable results" lists.

### How to scrape Bring a Trailer

1. Click **Try for free** to open Bring a Trailer Scraper in Apify Console.
2. Choose **Completed auctions**, **Live auctions** or **Both**.
3. Optionally paste **make or model pages** from bringatrailer.com and set **year**, **result** or **title** filters.
4. Set **Max auctions** and click **Start**.
5. Download the auctions as **CSV, Excel or JSON**.

### Input

#### Example input

```json
{
  "auctionType": "completed",
  "startUrls": [
    { "url": "https://bringatrailer.com/porsche/911/" },
    { "url": "https://bringatrailer.com/land-rover/defender/" }
  ],
  "result": "sold",
  "yearFrom": 1985,
  "yearTo": 1998,
  "titleContains": "",
  "noReserveOnly": false,
  "maxItems": 1000
}
```

| Field | Description |
|---|---|
| **Auctions** | Completed, live or both. |
| **Make or model pages** | BaT make/model/category pages. Leave empty for all auctions. |
| **Result** | All, sold only or not sold only (completed auctions). |
| **Model year from / to** | Model-year range. |
| **Title contains** | All words must appear in the title. |
| **No-reserve auctions only** | Only no-reserve auctions. |
| **Max auctions** | Stop after this many auctions (0 = no limit). |

### Output

#### Completed auction example

```json
{
  "id": 120517943,
  "title": "Modified 1972 Porsche 911T Coupe 5-Speed",
  "url": "https://bringatrailer.com/listing/1972-porsche-911t-coupe-48/",
  "year": 1972,
  "status": "sold",
  "price": 157911,
  "priceLabel": "sold price",
  "currency": "USD",
  "resultText": "Sold for USD $157,911 on 10/5/2026",
  "endDate": "2026-10-05",
  "noReserve": false,
  "countryCode": "US",
  "excerpt": "This 1972 Porsche 911T coupe delivered new to Porsche Audi at O’Hare in Elk Grove Village, Illinois…",
  "imageUrl": "https://bringatrailer.com/wp-content/uploads/2026/08/1972_Porsche_911T_Coupe_5-Speed-18-scaled-27344.jpg"
}
```

#### Live auction example

```json
{
  "id": 113456983,
  "title": "RoW 1991 Porsche 911 Turbo",
  "year": 1991,
  "status": "live",
  "price": 305000,
  "priceLabel": "current bid",
  "currency": "USD",
  "endsAt": "2026-10-06T17:05:00.000Z",
  "noReserve": false,
  "premium": true,
  "country": "United States",
  "latitude": 45.5201,
  "longitude": -122.688
}
```

#### Output schema

| Field | Type | Description |
|---|---|---|
| `id` | number | BaT listing ID. |
| `title`, `url` | string | Auction title and link. |
| `year` | number | Model year. |
| `status` | string | `live`, `sold`, `not sold` or `withdrawn`. |
| `price` | number | Sold price, high bid or current bid. |
| `priceLabel` | string | What `price` means. |
| `currency` | string | Currency code. |
| `resultText` | string | Result as shown on BaT. |
| `endDate` | string | End date. |
| `endsAt` | string (ISO date) | End time of live auctions. |
| `noReserve`, `premium` | boolean | Auction flags. |
| `country`, `countryCode`, `latitude`, `longitude` | mixed | Location. |
| `excerpt` | string | Description excerpt. |
| `imageUrl` | string (URL) | Main photo. |
| `source` | string | Which search found the auction. |
| `scrapedAt` | string (ISO date) | When the row was collected. |

### How much does it cost to scrape Bring a Trailer?

Bring a Trailer Scraper uses **pay-per-auction** pricing: a small fixed price per auction, with automatic discounts on higher Apify plans. See the **Pricing** tab for the exact price. Thousands of auction results take only a few minutes.

### More vehicle and marketplace data

- [eBay Scraper](https://apify.com/hipersoft/ebay-scraper): eBay listings and prices, including eBay Motors.
- [Carousell Scraper](https://apify.com/hipersoft/carousell-scraper): Carousell marketplace listings.

### FAQ

**How do I get results for one model?**
Open the model on bringatrailer.com (e.g. bringatrailer.com/porsche/911/), copy the link and paste it into **Make or model pages**.

**Does it include unsold cars?**
Yes. Set **Result** to **Not sold only** to get "bid to" and withdrawn auctions with their high bids.

**How far back does the data go?**
All completed auctions listed on BaT, newest first, more than 260,000 in total.

**Can I monitor live auctions?**
Yes. Choose **Live auctions**, add model pages, and schedule the scraper to run every few hours.

**What formats can I export?**
CSV, Excel, JSON, XML, HTML and RSS, or read the results through the Apify API.

**Can I integrate Bring a Trailer Scraper with other apps?**
Bring a Trailer Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JS/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

**Is it legal to scrape Bring a Trailer?**
The scraper only collects publicly listed auction data. You are responsible for using the data in line with Bring a Trailer's terms.

### Related Actors

- [eBay Scraper](https://apify.com/hipersoft/ebay-scraper)
- [Carousell Scraper](https://apify.com/hipersoft/carousell-scraper)

### Notes

Original clean-room implementation. Returns only public data. Not affiliated with Bring a Trailer.

# Actor input Schema

## `auctionType` (type: `string`):

Completed auctions (results with sold prices), live auctions (current bids), or both.

## `startUrls` (type: `array`):

Optional. Bring a Trailer make, model or category pages, e.g. https://bringatrailer.com/porsche/911/ or https://bringatrailer.com/bmw/e30-m3/. Leave empty for all auctions.

## `result` (type: `string`):

For completed auctions: sold cars only, unsold (bid to / withdrawn) only, or all.

## `yearFrom` (type: `integer`):

Only cars from this model year or newer.

## `yearTo` (type: `integer`):

Only cars up to this model year.

## `titleContains` (type: `string`):

Only auctions whose title contains all of these words, e.g. 'turbo 5-speed' or 'Defender 110'.

## `noReserveOnly` (type: `boolean`):

Only auctions with no reserve.

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

Stop after this many auctions. 0 means no limit.

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

Not required for normal use.

## Actor input object example

```json
{
  "auctionType": "completed",
  "startUrls": [
    {
      "url": "https://bringatrailer.com/porsche/911/"
    }
  ],
  "result": "all",
  "noReserveOnly": false,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# 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 = {
    "startUrls": [
        {
            "url": "https://bringatrailer.com/porsche/911/"
        }
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/bringatrailer-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 = {
    "startUrls": [{ "url": "https://bringatrailer.com/porsche/911/" }],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/bringatrailer-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 '{
  "startUrls": [
    {
      "url": "https://bringatrailer.com/porsche/911/"
    }
  ],
  "maxItems": 100
}' |
apify call hipersoft/bringatrailer-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/bringatrailer-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/cKjpQQxOu2hwzjFkr/builds/vpwyvC8JuaeBpyesu/openapi.json
