DEV Community

Devil Scrapes
Devil Scrapes

Posted on

How to Scrape Bring a Trailer Auction Data (2026 Guide)

TL;DR ⚡ Bring a Trailer publishes no data API and no export, so building a collector-car comps dataset means scraping the auction pages — bid histories and all. The Bring a Trailer Auctions Scraper returns typed rows (make, model, sold price, VIN, mileage, bid history) for $1.50 per 1,000 results. Point it at a listing or category; get back structured JSON.

Bring a Trailer (BaT) has become the reference marketplace for enthusiast and collector cars — final sale prices there genuinely move the market. If you appraise, insure, or trade classics, those closed-auction numbers are the comps everyone wants.

Does Bring a Trailer have an API? 🔌

No. BaT offers no public data API and no bulk download. Everything — the sold price, the VIN, the mileage, the full bid-by-bid history — lives inside rendered auction pages. Collecting it at scale means crawling those pages reliably while the site actively discourages bots.

The Actor absorbs that: browser-grade TLS fingerprints, residential proxy rotation, retries on transient blocks, and per-item fault isolation so one bad listing never sinks the whole run.

What data can you pull from a BaT auction?

Each result is a validated auction record:

Field Example
make Porsche
model 911 Carrera (964)
year 1990
sold_price 78500
currency USD
vin WP0AB2965LS...
mileage 62400
bid_count 41
sold_date 2026-07-22
status Sold

The bid history matters: it tells you not just the closing number but how demand built toward it.

Who buys Bring a Trailer data?

  • Appraisers — build comps from real closed auctions, not asking prices.
  • Insurers — set agreed values on defensible market evidence.
  • Classic-car dealers — spot which models and years are heating up before they buy.

How do I run the Bring a Trailer scraper?

Point it at an auction listing or a make/model category:

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run_input = {
    "startUrls": [
        {"url": "https://bringatrailer.com/porsche/964-911/"}
    ],
    "maxResults": 300,
}

run = client.actor("DevilScrapes/bring-a-trailer-auctions-scraper").call(run_input=run_input)

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["year"], row["make"], row["model"], row["sold_price"], row["mileage"])
Enter fullscreen mode Exit fullscreen mode

Pay-per-result keeps a comps pull for one model predictable — cents, not a subscription.

FAQ

Is scraping Bring a Trailer legal?
Publicly visible auction results are generally collectible, but you're responsible for how you use them — follow the site's terms and applicable law, and don't republish copyrighted media. Not legal advice.

Does it include the full bid history?
Yes — the Actor captures bid count and closing details so you can see how each sale developed.

Will I get blocked?
Blocks are the Actor's job: browser fingerprints, residential proxies, and automatic retries run under the hood.

What does it cost?
$1.50 per 1,000 results, pay-per-result. No monthly fee.

Can I collect one model across years?
Yes — pass the make/model category URL and raise maxResults to sweep the archive.


Ready to turn BaT into a comps table? 🏁 Run the Bring a Trailer Auctions Scraper on Apify →

More scrapers from Devil Scrapes: apify.com/DevilScrapes

Top comments (0)