Bring a Trailer Auction Results Scraper avatar

Bring a Trailer Auction Results Scraper

Pricing

from $10.00 / 1,000 auction results

Go to Apify Store
Bring a Trailer Auction Results Scraper

Bring a Trailer Auction Results Scraper

Extract Bring a Trailer auction results as structured JSON: realized sale price, sold vs reserve-not-met, year, model and end date. No personal data.

Pricing

from $10.00 / 1,000 auction results

Rating

0.0

(0)

Developer

Jad D.

Jad D.

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Extract Bring a Trailer auction results as clean JSON or CSV: realized sale price, whether it actually sold, year, model, no-reserve flag and end date. Point it at any model for instant comps.

Press Start and it returns 100 recent results immediately — every input field has a working default.

What you get

One flat row per auction.

{
"auctionId": "119497800",
"title": "1999 GMC Yukon SLT",
"year": 1999,
"url": "https://bringatrailer.com/listing/1999-gmc-yukon-24/",
"outcome": "SOLD",
"sold": true,
"priceValue": 8200,
"priceCurrency": "USD",
"priceFormatted": "USD $8,200",
"finalBidValue": 8200,
"priceSource": "sold_text",
"priceDiffersFromBid": false,
"endedAt": "2026-08-11T14:48:51.000Z",
"noReserve": true,
"countryCode": "US",
"commentCount": 0,
"viewCount": 0,
"watcherCount": 0,
"scrapedAt": "2026-08-12T09:41:02.187Z"
}

The two fields that matter, and why

outcome. A completed BaT auction reads either "Sold for USD $8,200" or "Bid to USD $35,000". The second means the reserve was not met and the car did not change hands — but it still carries a bid number. Anyone averaging bids without splitting on outcome computes a market price that includes cars nobody bought. Use soldOnly when you want real transaction prices.

priceValue vs finalBidValue. These are not always the same. On a sample of 36 completed auctions, two disagreed: a final bid of 19,500 against "Sold for USD $20,000", and 18,000 against "Sold for USD $19,000". priceValue reports what it actually sold for; finalBidValue is the last live bid; priceDiffersFromBid flags the rows where they diverge. Most scrapers report the bid and quietly understate ~6% of sales.

FieldNotes
auctionIdStable BaT id — your join key across runs
outcomeSOLD · RESERVE_NOT_MET · LIVE
priceValueThe realized amount, read from the result line
finalBidValueLast bid. Compare against priceValue
yearFrom the record, falling back to the title — BaT leaves the field null in practice
noReserveNo-reserve auctions clear at market rather than at a floor
endedAtISO timestamp, so you can build a time series
commentCount, viewCount, watcherCountEngagement, as integers

Comps for one model

The useful pattern is a model URL rather than the global feed:

WantURL
Porsche 911 compsbringatrailer.com/porsche/911/
Ford Bronco compsbringatrailer.com/ford/bronco/
Everything BMWbringatrailer.com/bmw/
Latest results, all models (default)bringatrailer.com/auctions/results/

Add as many as you like in one run.

Coverage, stated honestly

This returns the most recent auctions per URL, not the full archive. BaT holds 257,297 completed auctions across 7,148 pages, and there is no working way to page through them: /page/2/ returns 404 and ?page=2 silently re-serves page one. Real pagination goes through a private admin-ajax endpoint that rejects every documented parameter combination.

Rather than build on a guessed private endpoint that would break without warning, this actor reads the first feed of each URL you give it — roughly 24 per model page, 36 on the results page, and over 1,200 on the live /auctions/ page. Multiple model URLs are the way to get breadth.

If BaT ever exposes public pagination, this will support it.

Compliance

No personal data. Every person-field probe against BaT's raw feed came back empty — no seller, no bidder, no username, no email. The output schema is a fixed allowlist and rows are constructed from it rather than filtered, so if BaT ever adds bidder handles next to the price they cannot reach your dataset without a deliberate change here. Tests assert it.

robots.txt respected in code: /wp-admin/, /wp-json/ and account paths are refused even if passed as input. No login, ever.

Notes

Data comes from the listing feed BaT embeds in the page, not from CSS selectors, which makes it far more stable than markup scraping — and needs no browser, which is why it is cheap.

Duplicates are removed within a run. Auctions with no resolvable outcome are skipped without charge. You pay for results, not attempts.