Autotrader APIautotrader.com ↗
Search Autotrader vehicle listings by make, model, ZIP, and price. Retrieve specs, VIN, pricing details, images, and dealer info via 4 structured endpoints.
What is the Autotrader API?
The Autotrader API exposes 4 endpoints for querying the Autotrader.com vehicle marketplace, covering listing search with location and model filters, full listing detail retrieval, and make/model taxonomy lookups. The search_listings endpoint returns arrays of vehicle objects with pricing, mileage, specifications, images, and dealer info alongside filter facets and a total result count, making it straightforward to build inventory search or price-comparison tools.
curl -X GET 'https://api.parse.bot/scraper/39cfc061-a8fd-42e7-af55-7a6b8c8bc7a3/search_listings?zip=90001&make=ACURA&limit=5&model=ACUADX&offset=0&radius=200&sort_by=relevance&end_year=2026&zip_code=90210&dealer_id=75813159&fuel_type=GSL&max_price=100000&min_price=1000&body_style=SUVCROSS&start_year=2015&seller_type=d&listing_type=USED' \ -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 autotrader-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: Autotrader SDK — search listings, browse makes/models, drill into details."""
from parse_apis.autotrader_api import Autotrader, Sort, ListingType, FuelType, BodyStyle, ListingNotFound
client = Autotrader()
# Browse all available makes, capped to 10 for display
for make in client.makes.list(limit=10):
print(make.label, make.value)
# Construct a Make by code and list its models
toyota = client.make("TOYOTA")
for model in toyota.models.list(limit=5):
print(model.label, model.value)
# Search used SUVs sorted by lowest price, limited to 3 results
for listing in client.listings.search(
make="TOYOTA",
listing_type=ListingType.USED,
body_style=BodyStyle.SUV_CROSSOVER,
sort_by=Sort.PRICE_ASC,
zip="90001",
limit=3,
):
print(listing.title, listing.year, listing.sale_price, listing.deal_indicator)
# Drill into a specific listing by ID for full detail
try:
detail = client.listings.get(listing_id="780556632")
print(detail.title, detail.vin, detail.owner_name, detail.city, detail.state)
except ListingNotFound as exc:
print(f"Listing not found: {exc.listing_id}")
print("exercised: makes.list / make.models.list / listings.search / listings.get")Search for vehicle listings with comprehensive filters. Returns listings with pricing, specifications, images, and seller info, plus available filter options and total count. Pagination is offset-based via the offset parameter. Each listing carries the same shape as get_vehicle_listing_detail.
| Param | Type | Description |
|---|---|---|
| zip | string | 5-digit US ZIP code for location-based search. |
| make | string | Vehicle make code (e.g., TOYOTA, FORD). Obtainable from get_all_makes. |
| limit | integer | Number of results per page (max records returned). |
| model | string | Vehicle model code (e.g., CAMRY, RAV4). Obtainable from get_models_for_make for a given make. |
| offset | integer | Pagination offset (zero-based first record index). |
| radius | integer | Search radius in miles from the ZIP code. Common values: 10, 25, 50, 75, 100, 200, 500. |
| sort_by | string | Sort order for results. |
| end_year | integer | Filter by maximum model year. |
| dealer_id | string | Filter by specific dealer/owner ID. |
| fuel_type | string | Filter by fuel type group. |
| max_price | integer | Maximum price filter in dollars. |
| min_price | integer | Minimum price filter in dollars. |
| body_style | string | Filter by vehicle body style. |
| start_year | integer | Filter by minimum model year. |
| seller_type | string | Filter by seller type. |
| listing_type | string | Filter by listing condition type. |
{
"type": "object",
"fields": {
"filters": "object containing available filter options with counts for refining searches",
"listings": "array of vehicle listing objects with id, title, year, make, model, vin, pricingDetail, specifications, images, owner, mileage",
"total_count": "integer total number of matching results"
}
}About the Autotrader API
Searching Listings
The search_listings endpoint accepts up to eight filter parameters: zip (5-digit US ZIP), make, model, radius (miles from ZIP, e.g. 10, 25, 100, 500), end_year, sort_by, limit, and offset for pagination. Each listing in the response contains an id, title, year, make, model, vin, mileage, images, owner, and a pricingDetail object. The filters field in the response carries faceted filter options with counts so you can surface refinement UI without a separate call. The total_count field tells you how many matching results exist across all pages.
Listing Detail
The get_vehicle_listing_detail endpoint accepts a single required listing_id (the numeric ID from search_listings) and returns the full record for that vehicle. The pricingDetail object includes salePrice, a deal indicator, and KBB fair purchase price data. The owner object carries dealer or private-seller information and location. The images object provides a primary index and a sources array. The make and model fields are returned as objects with both a code and a human-readable name.
Make and Model Lookup
get_all_makes takes no parameters and returns every make available on Autotrader as an array of {label, value} objects — where value is the make code (e.g. TOYOTA) you pass to search_listings and get_models_for_make. get_models_for_make accepts a make code and returns the corresponding model list in the same {label, value} shape, giving you the model codes (e.g. CAMRY) needed to filter searches precisely.
Pagination and Coverage
Pagination in search_listings is offset-based: use offset to advance through result pages and limit to control page size. All ZIP-based radius searches are US-only; the radius parameter supports common values including 10, 25, 50, 75, 100, 200, and 500 miles. Listings cover both dealer and private-seller inventory as indexed on Autotrader.com.
The Autotrader API is a managed, monitored endpoint for autotrader.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when autotrader.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 autotrader.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?+
- Build a used-car search UI filtered by make, model, ZIP radius, and year using
search_listings. - Track price trends for a specific VIN or model over time using
pricingDetail.salePriceandpricingDetailKBB fair purchase data. - Populate make/model dropdowns in an automotive app from
get_all_makesandget_models_for_makewith accurate Autotrader codes. - Generate dealer inventory reports by querying
ownerlocation data fromget_vehicle_listing_detail. - Compare deal quality across listings using the
dealIndicatorfield returned inpricingDetail. - Build a mileage-vs-price scatter plot for a given model by paginating
search_listingsand extractingmileage.valueandpricingDetail.salePrice. - Alert users to new listings in a specific ZIP radius by polling
search_listingsand diffing returned listingidvalues.
| 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.
Does Autotrader have an official developer API?+
What does the `pricingDetail` object contain?+
pricingDetail object includes salePrice (the listed asking price), a dealIndicator field rating the deal quality, and KBB (Kelley Blue Book) fair purchase price data. This lets you compare the asking price against a market reference value in the same response.Is the listing search limited to the United States?+
zip parameter accepts 5-digit US ZIP codes and the radius filter measures miles from that ZIP. Autotrader.com lists US inventory, so geographic filtering is US-only.Does the API return seller contact details such as phone numbers or email addresses?+
owner object in both search_listings and get_vehicle_listing_detail returns dealer or seller identity and location information, but direct contact fields like phone numbers and email addresses are not currently included in the response shape. You can fork this API on Parse and revise it to add an endpoint that retrieves those contact fields if they are available on the listing page.Can I filter listings by price range or trim level?+
search_listings parameters cover make, model, year, ZIP, radius, sort order, and pagination. Price-range and trim-level filter parameters are not currently exposed. The filters object in the response does show available filter options with counts. You can fork this API on Parse and revise it to add those filter parameters to the search endpoint.