Bring a Trailer Scraper — Live Bids & Sold Prices avatar

Bring a Trailer Scraper — Live Bids & Sold Prices

Pricing

from $10.00 / 1,000 auctions

Go to Apify Store
Bring a Trailer Scraper — Live Bids & Sold Prices

Bring a Trailer Scraper — Live Bids & Sold Prices

Scrape Bring a Trailer live auctions and sold prices. Export the current bid or sale amount, no-reserve flag, mileage, location, VIN, and seller for collector-car comps and auction monitoring.

Pricing

from $10.00 / 1,000 auctions

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by Bring a Trailer or its affiliates. Data is read from publicly accessible auction listing and results pages only. No login and no bidding. You are responsible for complying with applicable law (including GDPR where a seller username appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

Scrape Bring a Trailer live auctions and sold prices. Export current bid, sale amount, reserve-not-met results, no-reserve, and — when you turn on listing details — VIN, mileage, location, and seller. One Bring a Trailer scraper for dealer comps, auction monitoring, and enthusiast-car pricing.

Best for: dealers, brokers, and analysts who want auction rows in JSON or CSV for sheets, databases, and scheduled watches.

Crawloop vehicle pricing suite — enthusiast auction results, then marketplace comps for the same year, make, and model.

Bring a TrailerCars & BidseBay sold compseBay asking prices
Bring a Trailer Scraper ◄── you are hereCars & Bids ScrapereBay Sold Listings ScrapereBay Active Listings Scraper
Live bids, sold prices, reserve not metLive bids and closed sale amountsCompleted marketplace salesLive BIN and auction asking prices

When to use this Actor

  • Live auction watch — current bid, end time, and no-reserve on cars that are still open
  • Sold price comps — completed auctions with the final sale amount
  • Reserve-not-met comps — high bid when the car did not sell
  • Scheduled new-lot monitor — monitorMode on an Apify Schedule so repeat runs only charge new auction ids
  • VIN and spec pull — includeDetails adds chassis/VIN, odometer, engine, transmission, location, and seller
  • Make and model research — search porsche or paste a results URL

When not to use this Actor

Key features

  • Live, sold, and reserve-not-met in one Actor. Cards already include the current bid or the sold price
  • Optional listing detail for VIN, mileage, engine, transmission, location, and seller username
  • Monitor mode stores seen auction ids in a named key-value store and skips them on the next run
  • HTTP listings — no browser. Leave proxy off unless a run starts returning HTTP 403
  • Deduped rows across several searches in the same run

Input

FieldRequiredDescription
searchQueriesNoKeywords such as porsche or 911. Each query is its own search
startUrlsNoListing URL, live auctions page, results page, or make page
auctionStatusNolive (default), sold, or unsold
minimumYear / maximumYearNoModel-year bounds
maximumBidNoDrop rows above this USD bid or sale amount
maxItemsNoCap across the whole run. Default 50. The completed archive is hundreds of thousands of lots
includeDetailsNoOpen each listing for VIN, mileage, and seller. Default off
monitorModeNoCharge only auction ids not seen in the named store
monitorStoreNameNoKey-value store name. One name per watch
resetMonitorStateNoClear seen ids before this run
proxyConfigurationNoLeave off
{
"searchQueries": ["porsche"],
"auctionStatus": "sold",
"maxItems": 25,
"includeDetails": false
}

A single listing:

{
"startUrls": [
{ "url": "https://bringatrailer.com/listing/1992-bmw-325i-e30-9/" }
],
"includeDetails": true,
"maxItems": 1
}

Output

FieldDescription
titleYear, make, and model
statuslive, sold, or unsold
currentBidHigh bid in USD
saleAmountFinal price when the lot sold
soldTextSold-for or bid-to line
noReserveTrue when there is no reserve
yearModel year
auctionEndEnd time
urlListing URL
vinVIN or chassis when details are on
mileage / mileageTextOdometer when details are on
locationSeller location when details are on
sellerUsernamePublic seller name when details are on
engine / transmissionSpec lines when details are on
imageUrlMain photo
scrapedAtWhen the row was saved
{
"auctionId": "120687587",
"title": "1992 BMW 325i Convertible",
"status": "sold",
"year": 1992,
"currentBid": 8692,
"saleAmount": 8692,
"soldText": "Sold for USD $8,692 on 9/28/2026",
"noReserve": true,
"vin": "WBABB2315NEC29545",
"mileage": 131000,
"location": "Hudsonville, Michigan 49426",
"sellerUsername": "isaiaharends",
"url": "https://bringatrailer.com/listing/1992-bmw-325i-e30-9/"
}

Use cases

  • Dealer comps — sold Porsche 911s with sale amount, year, and no-reserve, then the same car on eBay
  • Live book — what is open right now, the current bid, and when it ends
  • Reserve-not-met watch — cars that failed to sell and the high bid they reached
  • Morning monitor — a schedule that only returns auctions you have not already stored

Integration examples

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('crawloop/bring-a-trailer-scraper').call({
searchQueries: ['porsche'],
auctionStatus: 'sold',
maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
console.log(item.title, item.saleAmount || item.currentBid, item.noReserve);
}

Python

from apify_client import ApifyClient
client = ApifyClient(token="YOUR_TOKEN")
run = client.actor("crawloop/bring-a-trailer-scraper").call(run_input={
"searchQueries": ["porsche"],
"auctionStatus": "sold",
"maxItems": 25,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("title"), item.get("saleAmount") or item.get("currentBid"))

cURL

curl -X POST "https://api.apify.com/v2/acts/crawloop~bring-a-trailer-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["porsche"],"auctionStatus":"sold","maxItems":25}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID crawloop/bring-a-trailer-scraper.

Example prompts:

  • "Run Bring a Trailer Scraper for live porsche auctions, max 20, and return title, currentBid, noReserve, auctionEnd as JSON"
  • "Scrape sold Bring a Trailer results for 911 and summarize sale amounts"
  • "Chain Bring a Trailer Scraper then eBay Sold Listings Scraper for the same year, make, and model"

Suite next step

After Bring a Trailer sold prices, run Cars & Bids Scraper for the other enthusiast auction catalog, then eBay Sold Listings Scraper for marketplace comps on the same year, make, and model. For cars that are still listed, use eBay Active Listings Scraper.

FAQ

Is this a Bring a Trailer API? Unofficial. It reads the public auction pages and results feed the website uses. There is no separate buyer API to replace it.

Do result rows include the price? Yes. Live rows include currentBid. Sold rows include saleAmount. Reserve-not-met rows keep currentBid and leave saleAmount empty. includeDetails is for VIN, mileage, and seller, not for the price itself.

How does monitor mode work? The first run saves every auction id it sees. Later runs with the same monitorStoreName skip those ids and only charge new ones. Use one store name per watch, and resetMonitorState when you want a fresh baseline.

Can I pull the whole sold archive? Raise maxItems only as far as you need. The completed archive is hundreds of thousands of lots. Start with a keyword so the run stays inside your cap.

Do I need a proxy? No. Leave proxy off. Enable Apify Proxy only if a run fails with HTTP 403.

Does it log in or bid? No. Public auction fields only.