Bring a Trailer Auctions & Results Scraper avatar

Bring a Trailer Auctions & Results Scraper

Pricing

from $2.72 / 1,000 item extracteds

Go to Apify Store
Bring a Trailer Auctions & Results Scraper

Bring a Trailer Auctions & Results Scraper

Extract public live Bring a Trailer auctions and displayed completed results with vehicle identity, bids, prices, status, country, timing, images, and source URLs.

Pricing

from $2.72 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Extract public Bring a Trailer auctions and displayed completed results as structured vehicle-market records.

The Actor captures vehicle identity, live bids or final displayed prices, auction status, country, timing, images, descriptions, and canonical source URLs.

Use it for recurring collector-market inventory tracking, appraisal research, comparable-price analysis, and data pipelines.

What does this Bring a Trailer scraper do?

The Actor supports three useful record scopes:

  • current public live auctions;
  • displayed completed auction results;
  • a balanced snapshot of both live auctions and results.

Live inventory is read from public server-rendered auction data.

Completed results use the public data route called by Bring a Trailer's results page.

No Bring a Trailer login is required.

The Actor does not place bids, watch vehicles, message sellers, or access private account data.

Who is it for?

Collector-car analysts can build recurring snapshots of supply, bids, and final results.

Appraisers and valuation teams can collect public comparable-sale records for further review.

Dealers can watch live inventory and inspect no-reserve or high-value vehicles.

Researchers can export public auction records into spreadsheets or warehouses.

Automation teams can schedule runs and trigger downstream webhooks when a dataset is ready.

Why use this Actor?

Bring a Trailer combines fast-moving live auctions with a large displayed results catalog.

Manual copying is slow and inconsistent.

This Actor normalizes both surfaces into one stable dataset shape.

It offers:

  • live, results, and combined modes;
  • sold versus reserve-not-met result filtering;
  • vehicle keyword filtering;
  • country and minimum-price filters;
  • unique record limits with maxItems, optional scan bounds with maxPages;
  • opt-in public vehicle essentials and bid counts;
  • explicit listing URL support;
  • typed JSON, CSV, Excel, XML, and API exports through Apify.

What data can you extract?

FieldMeaning
auctionIdBring a Trailer public auction/listing identifier when exposed
titleVehicle or lot headline
yearModel year parsed from source data or title
statuslive, sold, or unsold
priceNumeric displayed bid or result price
soldPriceSale result only; null for live and reserve-not-met records
resultTextClean source result/current-bid text
priceFormattedSource-formatted displayed price
currencyDisplayed currency code
countryPublic country name when exposed
countryCodeTwo-letter country code when exposed
latitude / longitudePublic location coordinates when exposed
endTimeAuction end time in ISO 8601 format
noReserveWhether the source flags the auction as no reserve
premiumWhether the source flags the lot as premium
repeatListingWhether the source flags a repeat listing
categoriesBring a Trailer category IDs
descriptionPublic listing excerpt when requested
chassisOpt-in source chassis string; not a verified VIN
mileageTextOpt-in source mileage including qualifiers such as “Shown”
listingDetailsOpt-in array of public vehicle-essential strings
locationOpt-in city/region, without postal code or street address
lotNumber / totalBidsOpt-in public lot number and displayed bid count
imageUrlPublic thumbnail URL
urlCanonical public auction listing URL
sourceUrlPage or route that produced the record
scrapedAtUTC extraction timestamp

Fields can be null when Bring a Trailer does not display them for a record.

How to scrape Bring a Trailer auctions

  1. Open the Actor input page.
  2. Choose live, results, or both.
  3. Optionally enter a make, model, or phrase in searchQuery.
  4. Optionally select sold or reserve-not-met results.
  5. Set maxItems to bound the dataset record count.
  6. Click Start.
  7. Open the default dataset to download JSON, CSV, Excel, XML, or RSS.

For a first test, use mode: "live" and maxItems: 10.

For recurring market analysis, schedule mode: "both" and store each run's dataset in your own historical table.

Input parameters

mode

Choose which public records to extract:

  • live for currently active auctions;
  • results for displayed completed results;
  • both for a balanced live-and-results snapshot.

Default: both.

startUrls

Optional public Bring a Trailer URLs.

Supported URL types include:

  • https://bringatrailer.com/auctions/;
  • https://bringatrailer.com/auctions/results/;
  • public https://bringatrailer.com/listing/.../ pages.

Leave the field empty for normal mode-based discovery. Entries can be strings or objects with a url string. Explicit URLs select sources; mode and all applicable filters still apply. HTTP/www/query aliases normalize to canonical HTTPS and save/charge once. Unsupported paths (including account, blog, model and contact pages) fail before the start charge.

searchQuery

A trimmed, case-insensitive substring such as Porsche, E46 M3, or Land Cruiser, matched against title plus the available public excerpt on every route. This is not whole-field equality or linguistic matching. includeDescription: false affects output projection only, not matching.

For completed results, the query is sent to the public results filter.

The Actor also applies the filter before saving output.

resultStatus

For completed auctions, choose:

  • all;
  • sold;
  • unsold for reserve-not-met results.

countryCode

Optional two-letter filter such as US, CA, or GB.

Some historical completed records do not expose a country and will not match a country filter.

minPrice

Keep records whose numeric displayed bid or result is at least this value.

The number is interpreted in each record's displayed currency; the Actor does not convert currencies.

maxItems

Global maximum unique matching records after filtering and deduplication across all sources. Default 100; allowed range: 1 to 10,000. Both-mode discovery allocates up to half to live records, then results. Runtime, source availability and charge limits can return fewer records. This is not a request/page cap.

maxPages

Optional global maximum completed-results pages fetched, from 1 to 10,000 (36 source records/page before filters). Omit to paginate until output/source/runtime/no-progress limits. Live/direct/detail requests do not count toward this limit.

includeDetails

Default false. Add source-exact public vehicle essentials, qualified mileage, chassis, city/region, lot number and bid count. Discovery fetches one detail page per accepted candidate within remaining output/charge capacity; direct pages are reused. This is slower than summary-only discovery, with no extra item charge. Missing values remain null. Chassis and mileage are source claims, not independently verified VIN/odometer history. A detail failure fails the run rather than silently claiming complete enrichment.

includeDescription

Include or omit the public auction excerpt.

Disable it when you need a smaller export.

Example input: live auctions

{
"mode": "live",
"maxItems": 50,
"minPrice": 10000,
"includeDescription": true
}

Example input: sold Porsche results

{
"mode": "results",
"searchQuery": "Porsche",
"resultStatus": "sold",
"maxItems": 25,
"includeDescription": true
}

Example output

Illustrative summary output (not a retained proof run):

{
"auctionId": 121240126,
"title": "West Bend 820-Powered 1965 Model 99 Minibike",
"year": 1965,
"status": "live",
"price": 7600,
"soldPrice": null,
"resultText": "Current Bid: USD $7,600",
"chassis": null,
"mileageText": null,
"listingDetails": null,
"location": null,
"lotNumber": null,
"totalBids": null,
"priceFormatted": "USD $7,600",
"currency": "USD",
"country": "United States",
"countryCode": "US",
"latitude": 33.6184,
"longitude": -111.952,
"endTime": "2026-09-01T20:54:12.000Z",
"noReserve": true,
"premium": false,
"repeatListing": false,
"categories": ["3", "430", "70"],
"description": "This 1965 Model 99 minibike was manufactured by Steen's...",
"imageUrl": "https://bringatrailer.com/wp-content/uploads/2026/08/example.jpg",
"url": "https://bringatrailer.com/listing/1965-steens-manufacturing-model-99-factory-west-bend-820-mini-bike/",
"sourceUrl": "https://bringatrailer.com/auctions/",
"scrapedAt": "2026-09-01T20:55:00.000Z"
}

Source values change continuously, so IDs, prices, and timestamps will differ in later runs.

How much does it cost to extract Bring a Trailer auction records?

The Actor uses pay per event.

Each run has one start event.

Each useful dataset record has one item event.

Rejected, duplicate, or failed records are not charged as items.

The one-time start event is $0.005.

Item prices decrease by Apify plan tier:

Plan tierPrice per auction record
Free$0.0052164
Bronze$0.004536
Silver$0.0035381
Gold$0.0027216
Platinum$0.0018144
Diamond$0.0012701

Use maxItems to set a predictable upper bound.

At Bronze pricing, a 25-record sold-results job is about $0.1184 including the start event.

At Bronze pricing, a 100-record recurring snapshot is about $0.4586 including the start event.

Apify computes the exact amount for your plan tier.

Live and completed result behavior

live mode reads the broad current inventory shown by the public auctions page.

results mode paginates public completed records in batches of 36.

sold means the source displays a sold result.

unsold means the source displays a bid-to or reserve-not-met result.

both reserves part of the requested capacity for each status family, so a small run does not fill entirely with live inventory.

Monitoring auction changes over time

Each Actor run is a point-in-time snapshot.

To monitor changes:

  1. schedule the Actor hourly or daily;
  2. export each run dataset to a durable database;
  3. use auctionId or url as the stable key;
  4. compare price, status, and endTime across snapshots;
  5. trigger your own alerts or dashboard updates.

The Actor does not maintain a hidden cross-run history or send alerts by itself.

Comparable-price research workflow

Use mode: "results" with a specific make or model.

Choose resultStatus: "sold" when you need displayed sales only.

Export the dataset to a spreadsheet or warehouse.

Review source URLs before making valuation decisions.

Displayed auction results are market observations, not formal appraisals.

Tips for reliable runs

Start with a low maxItems while testing filters.

Use specific search phrases for completed-result research.

Avoid combining a very narrow keyword, country, and high minimum price unless an empty result is expected.

Keep canonical source URLs in your downstream table for auditability.

Schedule recurring work at a cadence appropriate for your use case rather than sending unnecessary repeated runs.

Limits and failure behavior

The Actor extracts only public data exposed by Bring a Trailer.

It does not access bidder identities, private seller information, watchlists, messages, or account-only fields.

Some older results omit country, coordinates, year, categories, or description.

Direct pages use listing-owned status, price, identity, currency and timestamps. Summary-only country, coordinates and category flags may still be absent.

Every completed scan writes RUN-SUMMARY in the key-value store with saved count, completed pages, request attempts, invalid-record count and stop reasons. max_pages, no_progress or runtime_deadline marks truncation; max_items and charge_limit explain output bounds. A successful bounded run is not an exhaustive-history claim. The runtime safety deadline leaves time for saving/cleanup; sparse filters may produce fewer or zero matches. Inspect the summary before treating results as complete.

The Actor retries temporary network, HTTP 429, and server failures up to three times.

It does not blindly retry stable invalid URLs or malformed input.

If the source returns an unexpected data shape, the run fails instead of silently claiming a valid empty result.

Bring a Trailer can change its public pages and fields without notice.

Export and integration patterns

Download the default dataset as JSON, CSV, Excel, XML, or RSS.

Send completed run data to Google Sheets for analyst review.

Load records into BigQuery, Snowflake, PostgreSQL, or another warehouse.

Use an Apify webhook to notify Make, Zapier, Slack, or your own API after completion.

Join auction URLs with internal appraisal notes in your own system.

Use auctionId and scrapedAt to build time-series bid observations.

JavaScript API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/bring-a-trailer-auctions-results-scraper').call({
mode: 'results',
searchQuery: 'Porsche 911',
resultStatus: 'sold',
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python API example

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/bring-a-trailer-auctions-results-scraper').call(run_input={
'mode': 'both',
'countryCode': 'US',
'maxItems': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(len(items))

cURL API example

curl -X POST \
'https://api.apify.com/v2/acts/automation-lab~bring-a-trailer-auctions-results-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"mode":"live","maxItems":25}'

Keep your Apify token in a secret or environment variable.

Do not commit it to source control.

MCP usage

Claude Code

Add the Actor to Claude Code through the Apify MCP server:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/bring-a-trailer-auctions-results-scraper"

Claude Desktop, Cursor, and VS Code

Use the following equivalent HTTP MCP configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/bring-a-trailer-auctions-results-scraper"
}
}
}

Example prompt:

Extract 25 sold Porsche results from Bring a Trailer and summarize the median displayed result by model year.

Another prompt:

Capture a 50-record live Bring a Trailer snapshot and list no-reserve auctions ending first.

This independent Actor is not affiliated with or endorsed by Bring a Trailer. It uses no AI models or paid third-party data suppliers at runtime. Apify hosting/storage and our private diagnostics service are operated by us; no off-platform fee is required. Run datasets and logs follow your Apify retention settings and can be deleted through Apify. Page processing is ephemeral; the Actor does not maintain a cross-run cache.

Sanitized failure diagnostics

Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL query strings are removed; reports are retained for 30 days. No bidder/seller identities or raw page bodies are added to diagnostic reports.

Responsible use and legality

The Actor accesses public auction information.

You are responsible for complying with applicable laws, contractual terms, privacy rights, and source rules.

Do not use the data for spam, harassment, unauthorized profiling, or automated bidding.

Use reasonable run frequency and retain only the data needed for your lawful purpose.

Verify important market or valuation decisions against the linked source page.

FAQ

Does this Actor require a Bring a Trailer account?

No. It uses public auction and results surfaces.

Can it extract both sold and reserve-not-met results?

Yes. Use resultStatus: "all", "sold", or "unsold".

Can I scrape a specific listing URL?

Yes. Add a public Bring a Trailer listing URL to startUrls.

A direct listing can contain fewer fields than the live or completed index.

Why are some fields null?

Bring a Trailer does not expose every field for every historical record.

Null values preserve that distinction instead of inventing data.

Why did a filtered run return fewer records?

A keyword, country, result-status, or minimum-price filter can reduce the accepted set.

Increase maxItems only if more matching source records exist.

What happens if Bring a Trailer changes its page?

Recognizable temporary failures are retried.

An incompatible response fails the run with a diagnostic error rather than returning misleading data.

Browse the automation-lab profile on Apify for complementary vehicle-listing, auction, marketplace, and price-research Actors.

Combine them in your own normalized automotive market dataset when the sources and terms fit your use case.

Support

When reporting a problem, include:

  • the Actor run URL;
  • a redacted copy of the input;
  • one public source URL that demonstrates the issue;
  • the expected field or behavior.

Do not include account credentials or private personal data.