Back to blog
· 4 min read

Bring a Trailer Scraper: Sold Prices & VINs in 2026

web scrapingautomotiveauction datadata extractionprice monitoring

Where enthusiast cars get a real price

Bring a Trailer (BaT) is the enthusiast car auction site: Porsche 911s, BMW E30 M3s and classic Mustangs, each sold in a public online auction with a detailed listing and dozens of photos. When an auction ends, the final bid becomes a public data point: what one specific car, with its mileage, spec and history, actually sold for.

For dealers, insurers, appraisers and collectors, those results are the comps that matter. But BaT has no public API, the classic case where scraping stands in for an API, and its archive of 230,000+ completed auctions is read one listing at a time.

What you can extract

One row per completed auction:

  • Result: final price (the hammer price), currency and formatted price, and status (sold or reserve not met)
  • Auction: end date, total bids and whether it ran with no reserve
  • Identity: VIN and mileage, when the seller listed them
  • Spec: engine, transmission, exterior and interior colors
  • Essentials: the listed highlights, such as clean title or service records
  • Seller and location
  • Media: main image, every gallery photo URL and the listing excerpt
  • Listing URL

Live auctions are out of scope: they require a BaT account, while completed results are public.

The technical challenge

  • Two levels of data: search and model pages give the title and price; VIN, mileage, specs and photos sit on each listing page, one request per car.
  • Uneven listings: not every seller provides a VIN or mileage, so those fields must come back empty rather than guessed.
  • Mileage as text: “64,200” arrives as a string to normalize before you filter or chart.
  • Results that didn’t sell: a reserve-not-met auction carries a final bid, not a sale; mixing it with sold results distorts your comps.

DIY or a ready-made Actor?

Our Bring a Trailer Scraper on Apify takes search keywords (“Porsche 911”, “BMW E30 M3”, “1967 Mustang”), BaT listing URLs or model browse pages such as /porsche/911/, up to 10,000 results per run. Leave detail enrichment on for VIN, specs, seller and photos; turn it off when prices and titles are enough. Pay-per-result at about $0.006 per listing.

A practical workflow

  1. Define the model: “BMW E30 M3” returns that car, “BMW” returns everything. A model browse page lists the most recent completed auctions first.
  2. Scan, then enrich: run with details off to size the market on price and bids, then rerun the listings that matter with details on.
  3. Clean the comps: keep sold results for price analysis, normalize mileage, and pull features such as a manual gearbox or service records out of the excerpt and essentials with LLM-powered extraction.
  4. Schedule the model page: rerun it weekly and deduplicate on the listing URL, so new results extend your price curve.

Use cases that pay off

  • Dealer pricing: price inventory on real auction comps for the same model and spec.
  • Collector car research: track which models are appreciating and which look undervalued.
  • Insurance and appraisals: back valuations of specialty vehicles with actual transactions, not estimates.
  • Cross-market comparison: set BaT auction results against European asking prices from mobile.de for the same model.
  • Public data only: the scraper reads completed auctions any visitor can see; live auctions behind a BaT account stay out.
  • Sellers are people: seller usernames and locations can be personal data under GDPR or CCPA once stored; keep only what your analysis needs.
  • VINs identify cars: use them for valuation and vehicle history, not to profile owners.
  • Terms and verification: BaT’s terms of service apply, and scraped prices are informational; check them before contractual or insurance use.

Launch your scraping project

Need to automate data collection? Tell us what you need, we'll get back to you within 24 hours.

Send message