# Bring a Trailer Auctions Scraper (`piotrv1001/bringatrailer-auctions-scraper`) Actor

The Bring a Trailer Auctions Scraper extracts completed auction results from BringaTrailer.com, capturing sale prices, high bids, sold/reserve-not-met outcomes, end dates, bid counts, make, model, mileage and specs — ideal for collector-car comps, dealer pricing and market research.

- **URL**: https://apify.com/piotrv1001/bringatrailer-auctions-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 auction results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Auctions Scraper

Easily extract completed auction results from Bring a Trailer (BaT). The **Bring a Trailer Auctions Scraper** collects sale prices, high bids, auction outcomes, end dates and vehicle specs for any make or model, which is useful for collector-car comps, dealer pricing and market research.

### ✨ Features

- 🏁 **Auction outcomes, not just prices**: every result is labelled as **sold at auction**, **sold after the auction**, **reserve not met** or **withdrawn**, with the sale price and the high bid kept in separate fields.
- 🔍 **Keyword search**: search completed auctions by keyword (`porsche 911`, `bmw m3`, `ford bronco`) and filter for sold or unsold results only.
- 📅 **Date range**: limit results to auctions that ended between two dates. This is useful for weekly or monthly comps.
- 🚗 **Vehicle specs**: turn on details to add the bid count, lot number, make, model, era, category, mileage, listing details (engine, gearbox, colors, options), seller type (dealer or private party) and main photo.
- 🧩 **Parts flagged**: parts and memorabilia lots (manuals, wheels, signs) are marked `isVehicle: false`, so they don't skew your car comps.
- 🔗 **Direct auction URLs**: paste individual auction pages to get their full results.
- 📋 **Run summary**: every run saves a summary that shows how many auctions matched and why the run stopped. It also shows whether a search reached the site's result limit.

### 🛠️ How It Works

1. **Enter keywords or auction URLs**, for example `porsche 911` or `https://bringatrailer.com/listing/2017-porsche-911-carrera-coupe-40/`.
2. **Pick filters (optional)**: sold or unsold only, an end-date range, and whether to scrape full auction details.
3. **Run the scraper**: results come back newest first as structured JSON, CSV or Excel.

#### Good to know

- **Sold after auction**: a car can sell after the auction ends. When it does, the final bid and the sale price differ, e.g. a bid of $91,500 and a sale of $99,000. With details on, you get both numbers and the correct outcome. Without details, the outcome is `sold` and both amounts come from the search results.
- **Reserve not met** means the high bid did not meet the seller's reserve. `soldPrice` is empty and `highBid` holds the last bid.
- Amounts are auction results as reported by Bring a Trailer. They do not include the buyer's fee, taxes or shipping.
- **Search limit**: Bring a Trailer shows about 10,000 results per search. When a search is larger, the run summary says `truncated: true`. Use a narrower keyword or a date range to reach older auctions.
- **Mileage** is kept exactly as listed ("68k Miles Shown", "42k Miles Shown, TMU").

### 💰 Pricing

| Event | Price |
| --- | --- |
| Auction result (from search) | $0.001 |
| Auction result with details | $0.005 |

If the details for an auction can't be loaded, you still get the search result, charged as a plain auction result.

### 📊 Sample Output Data

An auction result with details (sold after the auction ended), followed by a search-only result (reserve not met):

```json
[
    {
        "id": 121997332,
        "url": "https://bringatrailer.com/listing/2017-porsche-911-carrera-coupe-40/",
        "title": "27k-Mile 2017 Porsche 911 Carrera Coupe 7-Speed",
        "year": 2017,
        "outcome": "sold-after-auction",
        "soldPrice": 99000,
        "highBid": 91500,
        "currency": "USD",
        "resultLabel": "Sold",
        "resultText": "Sold for USD $99,000 on 09/22/26",
        "endedAt": "2026-09-22T17:33:46.000Z",
        "resultPostedAt": "2026-09-22T21:00:40.000Z",
        "bidCount": 28,
        "lotNumber": "264271",
        "make": "Porsche",
        "model": "Porsche 991 911 Carrera",
        "era": "2010s",
        "origin": "German",
        "category": null,
        "isVehicle": true,
        "mileageText": "27k Miles",
        "listingDetails": [
            "27k Miles",
            "Twin-Turbocharged 3.0L Flat-Six",
            "Seven-Speed Manual Transaxle",
            "GT Silver Metallic",
            "Black Leather Upholstery",
            "Premium Plus & Sport Chrono Packages"
        ],
        "sellerType": "Dealer",
        "imageUrl": "https://bringatrailer.com/wp-content/uploads/2026/09/2017-Porsche-911-Carrera-1-scaled-copy-2026-09-10-kcp-61294.jpg",
        "noReserve": false,
        "countryCode": "US",
        "detailFetched": true,
        "scrapedAt": "2026-09-23T14:50:12.000Z"
    },
    {
        "id": 120455084,
        "url": "https://bringatrailer.com/listing/2004-bmw-m3-coupe-250/",
        "title": "11k-Mile 2004 BMW M3 Coupe",
        "year": 2004,
        "outcome": "reserve-not-met",
        "soldPrice": null,
        "highBid": 57000,
        "currency": "USD",
        "resultText": "Bid to USD $57,000 on 9/22/2026",
        "endedAt": "2026-09-22T17:49:29.000Z",
        "resultPostedAt": "2026-09-22T17:49:29.000Z",
        "noReserve": false,
        "countryCode": "US",
        "detailFetched": false,
        "scrapedAt": "2026-09-23T14:50:12.000Z"
    }
]
```

Price your next collector car with real Bring a Trailer results. Try the **Bring a Trailer Auctions Scraper** today! 🚀

# Actor input Schema

## `keywords` (type: `array`):

Search completed Bring a Trailer auctions, e.g. `porsche 911`, `bmw m3` or `ford bronco`. Results come newest first.

## `listingUrls` (type: `array`):

Individual auction pages, e.g. `https://bringatrailer.com/listing/2017-porsche-911-carrera-coupe-40/`. Always scraped with full details.

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

Only sold auctions, only unsold ones (reserve not met), or both.

## `endedAfter` (type: `string`):

Only auctions that ended on or after this date (UTC).

## `endedBefore` (type: `string`):

Only auctions that ended on or before this date (UTC).

## `scrapeDetails` (type: `boolean`):

Open every auction and add the bid count, whether it sold at auction or after it ended, lot number, make, model, era, category, mileage, listing details (engine, gearbox, colors, options), seller type and photo. Charged as an auction result with details instead of an auction result.

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

Maximum number of auction results to save. A single keyword reaches at most ~10,000 results; use a date range for older auctions.

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

Proxy used to reach bringatrailer.com. The default works for most runs.

## Actor input object example

```json
{
  "keywords": [
    "porsche 911"
  ],
  "result": "all",
  "scrapeDetails": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "keywords": [
        "porsche 911"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/bringatrailer-auctions-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 = {
    "keywords": ["porsche 911"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/bringatrailer-auctions-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 '{
  "keywords": [
    "porsche 911"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/bringatrailer-auctions-scraper --silent --output-dataset

```

## MCP server setup

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