# Bring a Trailer Auctions Scraper (`devilscrapes/bring-a-trailer-auctions-scraper`) Actor

Scrape Bring a Trailer collector-car auctions — active and completed. Get VIN, mileage, seller type, lot number, spec bullets, current/final bid, and optional full bid-history per listing. Built for appraisers, insurers, dealers, and comp-sales researchers.

- **URL**: https://apify.com/devilscrapes/bring-a-trailer-auctions-scraper.md
- **Developed by:** [DevilScrapes](https://apify.com/devilscrapes) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

<p align="center">
<img src=".actor/icon.svg" width="160" alt="Bring a Trailer Auctions Scraper" />
</p>

## Bring a Trailer Auctions Scraper

**$1.50 / 1,000 results** — pay only for results, no credit card to try.

Structured collector-car auction data from [bringatrailer.com](https://bringatrailer.com) —
active and completed auctions, VIN, mileage, seller type, lot number, and
optional full bid-history — ready for a spreadsheet or a valuation model,
not a scroll-and-read HTML page.

### 🎯 What this scrapes

Give it a make slug (`porsche`), the global `auctions` index, or a direct
listing/category URL, and it returns one normalised record per collector-car
auction listing — active or completed — carrying current or final bid,
VIN/chassis, mileage, seller type, lot number, spec bullets, and (optionally)
the full bid-history feed reconstructed from the listing's comment stream.

### 🔥 Features

- Active **and** completed/sold auctions — the sold-price time-series most
  competitors skip.
- VIN/chassis, normalised mileage, seller type (private party vs. dealer),
  and lot number — parsed and typed, not left in free text.
- Optional full bid-history: bidder, amount, and ISO-8601 timestamp per bid.
- Works from a bare make slug, the global auctions index, a category URL,
  or a direct listing URL.
- Deduplicated by listing ID across every input entry in a single run.

### 💡 Use cases

- **Classic-car appraisers** building comp sets from real sold prices.
- **Insurers** valuing collector vehicles against recent auction results.
- **Dealers** tracking what similar inventory is actually selling for.
- **Comp-sales researchers** who need VIN-decode-ready, machine-joinable
  auction records at scale.

### ⚙️ How to use it

1. Click **Try for free**.
2. Set `makesOrUrls` to one or more make slugs (e.g. `porsche`), the literal
   `auctions`, or direct listing/category URLs.
3. Choose whether to include active auctions, completed auctions, and full
   bid history.
4. Run. Results land in the default dataset — export to JSON or CSV.

### 📥 Input

| Field | Type | Default | Description |
|---|---|---|---|
| `makesOrUrls` | array of strings | — (required) | Make slugs, `auctions`, or direct listing/category URLs |
| `includeActive` | boolean | `true` | Scrape active auctions found on index pages |
| `includeCompleted` | boolean | `true` | Scrape completed/sold auctions found on index pages |
| `includeBidHistory` | boolean | `true` | Parse the full bid-history feed per listing |
| `maxListings` | integer | `50` | Hard cap on total listings detail-scraped per run |
| `proxyConfiguration` | object | `{"useApifyProxy": true}` | Apify Proxy configuration |

```json
{
  "makesOrUrls": ["porsche"],
  "includeActive": true,
  "includeCompleted": true,
  "includeBidHistory": true,
  "maxListings": 50,
  "proxyConfiguration": {"useApifyProxy": true}
}
```

### 📤 Output

One row per auction listing, deduplicated by `listing_id`:

```json
{
  "listing_id": 512034,
  "title": "1987 Porsche 911 Carrera Coupe 5-Speed",
  "url": "https://bringatrailer.com/listing/1987-porsche-911-carrera-coupe-16/",
  "year": 1987,
  "make": "porsche",
  "vin": "WP0AB29901S685909",
  "mileage": 28000,
  "mileage_raw": "28k Miles",
  "status": "sold",
  "currency": "USD",
  "bid_amount": 52000,
  "no_reserve": true,
  "seller_type": "private_party",
  "lot_number": "256804",
  "comment_count": 160,
  "bid_count": 34,
  "watchers": 412,
  "views": 18904,
  "auction_end_at": "2026-06-12T18:00:00+00:00",
  "thumbnail_url": "https://bringatrailer.com/wp-content/uploads/2026/05/thumb.jpg",
  "spec_bullets": ["3.2L Flat-Six", "5-Speed Manual", "Guards Red Paint", "Recent Service"],
  "bid_history": [
    {"bidder_name": "carguy88", "bidder_id": 44221, "amount": 51000, "timestamp": "2026-06-12T17:58:11+00:00"}
  ],
  "scraped_at": "2026-08-10T12:00:00.000Z"
}
```

### 💰 Pricing

| Event | Price |
|---|---|
| Actor start | $0.01 |
| Listing scraped | $0.0013 |
| Bid history fetched | $0.0005 |

Pay-per-event. No data → no charge (only the small actor-start warm-up fee).

### 🚧 Limitations

- v1 reads only the `items` array present in the index page's initial
  server-rendered response — no auto-pagination past that. Pass an explicit
  `.../page/2/` URL as an additional `makesOrUrls` entry to reach deeper
  pages.
- Only bid events are materialised into `bid_history`; general comment text
  is represented by the `comment_count` aggregate only.
- Single-listing mode (a direct `/listing/...` URL) can't recover `status`,
  `no_reserve`, or `auction_end_at` from the index banner — those three
  fields fall back to documented placeholders in that mode.
- Currency is passed through as-is; no FX conversion performed.

### ❓ FAQ

**Does this need a Bring a Trailer login?**
No — every page scraped is public and unauthenticated.

**Can I get only completed (sold) auctions?**
Yes — set `includeActive` to `false` and `includeCompleted` to `true`.

**How do I scrape a single listing?**
Pass its full `https://bringatrailer.com/listing/...` URL in `makesOrUrls`.

### 💬 Your feedback

Found a field that's off, or a make that isn't parsing right? Open an issue
via the Actor's Apify Store page or reach out at
[apify.com/DevilScrapes](https://apify.com/DevilScrapes) — we read every
report.

# Actor input Schema

## `makesOrUrls` (type: `array`):

Bring a Trailer make slugs (e.g. <code>porsche</code>), the literal <code>auctions</code> for the global active-auctions index, or direct listing/category URLs (e.g. <code>https://bringatrailer.com/listing/1987-porsche-911-carrera-coupe-16/</code>). A <code>/listing/</code> URL is scraped as a single listing; every other entry is scanned as an index page.

## `includeActive` (type: `boolean`):

Scrape live/active auctions found on index pages.

## `includeCompleted` (type: `boolean`):

Scrape completed/sold auctions found on index pages.

## `includeBidHistory` (type: `boolean`):

Parse the full bid-history feed (bidder, amount, timestamp) from each listing's detail page. The detail page is always fetched regardless of this setting — VIN, mileage, seller type, and lot number live there too. When false, only bid\_count/comment\_count aggregates are kept.

## `maxListings` (type: `integer`):

Hard cap on total listings detail-scraped in one run, across all Makes or URLs entries combined.

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

Apify Proxy configuration. Mandatory per DevilScrapes anti-blocking policy; no confirmed anti-bot on this target, so no residential proxy group is forced by default.

## Actor input object example

```json
{
  "makesOrUrls": [
    "porsche",
    "auctions",
    "https://bringatrailer.com/listing/1987-porsche-911-carrera-coupe-16/"
  ],
  "includeActive": true,
  "includeCompleted": true,
  "includeBidHistory": true,
  "maxListings": 200,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All dataset items as JSON.

## `datasetItemsCsv` (type: `string`):

Same data exported to CSV.

## `datasetView` (type: `string`):

Open the run dataset in the Console.

# 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 = {
    "makesOrUrls": [
        "porsche"
    ],
    "includeActive": true,
    "includeCompleted": true,
    "includeBidHistory": true,
    "maxListings": 200,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("devilscrapes/bring-a-trailer-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 = {
    "makesOrUrls": ["porsche"],
    "includeActive": True,
    "includeCompleted": True,
    "includeBidHistory": True,
    "maxListings": 200,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("devilscrapes/bring-a-trailer-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 '{
  "makesOrUrls": [
    "porsche"
  ],
  "includeActive": true,
  "includeCompleted": true,
  "includeBidHistory": true,
  "maxListings": 200,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call devilscrapes/bring-a-trailer-auctions-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,devilscrapes/bring-a-trailer-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/M3iDDsJGrM4BWMJxH/builds/FXTx4YtLdLYavh9mH/openapi.json
