Bring a Trailer APIbringatrailer.com ↗
Access live auctions, completed sale prices, price trends, and full listing details from Bring a Trailer via a structured JSON API.
What is the Bring a Trailer API?
The Bring a Trailer API covers 8 endpoints that expose live auction listings, completed sale results, make/model price statistics, and full listing detail pages from bringatrailer.com. The get_price_trends endpoint returns count, min, max, average, and median sale prices for any make/model combination filtered by 1, 2, 3, or 5-year windows, while get_current_auctions surfaces every active listing with its current bid, reserve status, and end timestamp.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/0ea2dbf8-cbae-4a6b-90d3-149278f4a294/get_current_auctions' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace bringatrailer-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Bring a Trailer SDK — browse auctions, search, check pricing."""
from parse_apis.bring_a_trailer_api import BringATrailer, Recency, ModelNotFound
bat = BringATrailer()
# Browse currently live auctions (single-page, cap total items)
for auction in bat.auctions.current(limit=3):
print(auction.title, auction.current_bid, auction.url)
# Search for models by keyword
match = bat.modelmatches.search(query="Ferrari", limit=1).first()
if match:
print(match.title, match.url, match.destination)
# Construct a VehicleModel and get price trends for the last year
porsche_911 = bat.vehiclemodel(slug="911")
trends = porsche_911.price_trends(make="porsche", recency=Recency.ONE_YEAR)
print(trends.count, trends.avg, trends.median, trends.min, trends.max)
# Compare year-over-year pricing
comparison = porsche_911.price_comparison(make="porsche")
print(comparison.recent_avg, comparison.older_avg, comparison.percent_change)
# Typed error handling for an invalid model
try:
bad_model = bat.vehiclemodel(slug="nonexistent-xyz-999")
bad_model.price_trends(make="fakemake")
except ModelNotFound as exc:
print(f"Model not found: {exc}")
print("exercised: auctions.current / modelmatches.search / price_trends / price_comparison + ModelNotFound")
Retrieves all currently live auctions on Bring a Trailer. Each auction item includes the current bid amount, title, URL, end timestamp, location, and whether the listing has no reserve. The locations array provides geographic filter options.
No input parameters required.
{
"type": "object",
"fields": {
"items": "array of active auction listing objects",
"locations": "array of location filter groups with country listings"
},
"sample": {
"data": {
"items": [
{
"id": 114965214,
"url": "https://bringatrailer.com/listing/2007-lamborghini-murcielago-lp640-roadster-6/",
"year": "2007",
"title": "2007 Lamborghini Murcielago LP640 Roadster 6-Speed Conversion",
"country": "United States",
"excerpt": "This 2007 Lamborghini...",
"currency": "USD",
"noreserve": true,
"current_bid": 379000,
"country_code": "US",
"timestamp_end": 1781110800,
"current_bid_formatted": "USD $379,000"
}
],
"locations": [
{
"id": "NA",
"title": "North America",
"countries": [
{
"id": "CA",
"title": "Canada"
},
{
"id": "US",
"title": "United States"
}
]
}
]
},
"status": "success"
}
}About the Bring a Trailer API
Live Auctions and Completed Results
get_current_auctions returns all active listings with fields including current bid amount, listing title, URL, end timestamp, location, and a no-reserve flag. A locations array provides geographic groupings you can use for client-side filtering. get_auction_results returns paginated completed auctions sorted by most-recently-closed, including final sale price and sold date text. Note that only page 1 is reliably supported — higher pages may time out, so designs that depend on deep pagination should account for that constraint.
Model-Level Pricing and Comparisons
get_price_trends accepts make, model, and an optional recency parameter (1Y, 2Y, 3Y, or 5Y) and returns avg, median, min, max, and count across closed sales in that window. When no sales exist for a period, all numeric fields return zero rather than an error. get_price_trend_comparison narrows to a fixed two-period view: recent_avg vs older_avg for the most recent 12 months versus the prior 12, plus recent_count, older_count, and a percent_change field useful for spotting appreciation or depreciation trends. get_model_auction_results returns both the paginated listing objects and a stats object containing sold and unsold arrays of price/timestamp data points, suitable for charting a model's auction history.
Listing Detail and Discovery
get_listing_detail accepts either a full URL or a listing slug and returns title, url, a stats object with extracted listing essentials, a json_ld array of structured data objects, and a theme_data object carrying the BaT post ID and configuration. search_listings takes a query string and returns matching make/model pages and listing categories with URL, title, destination, and result type — useful for resolving user input to valid slugs. get_makes_and_models_directory returns the complete list of makes and their associated models with name, URL, and slug fields needed by the pricing endpoints.
Finding Valid Slugs
All pricing and results endpoints require lowercase make and model slug parameters (e.g. porsche, 911). The recommended resolution path is search_listings for keyword-to-slug lookups or get_makes_and_models_directory for a full enumeration of every supported make-model pair, which returns each model's slug directly.
The Bring a Trailer API is a managed, monitored endpoint for bringatrailer.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bringatrailer.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official bringatrailer.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track real-time bidding activity and reserve status across all live BaT auctions for a watchlist app
- Calculate fair-market value ranges for a specific vehicle using median and average sale prices from get_price_trends
- Identify models that have appreciated year-over-year using the percent_change field from get_price_trend_comparison
- Build a historical price chart for a make/model using the sold data points array in get_model_auction_results
- Resolve user-typed vehicle names to valid make/model slugs via search_listings before querying pricing endpoints
- Pull structured listing metadata including JSON-LD product data for a specific auction via get_listing_detail
- Enumerate the complete BaT make/model catalog with get_makes_and_models_directory for a vehicle valuation database
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.