AutoTrader APIautotrader.ca ↗
Search and retrieve Canadian vehicle listings from AutoTrader.ca. Access pricing, specs, mileage, seller info, and images via 2 structured endpoints.
What is the AutoTrader API?
The AutoTrader.ca API provides access to Canadian vehicle listings through 2 endpoints: search_listings for querying inventory by make, location, and sort order, and get_listing_details for pulling complete specs, seller contact info, pricing, and images for a specific vehicle. Each search result returns up to 14 fields including price, mileage, fuel type, and a listing URL for deeper lookup.
curl -X GET 'https://api.parse.bot/scraper/e23e86fa-16cc-4777-bba6-3b98d9af5a2c/search_listings?make=Honda&sort=3&limit=5&offset=0&location=Toronto%2C+ON' \ -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-ca-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.
"""AutoTrader.ca vehicle search — search, filter, drill into details."""
from parse_apis.autotrader_ca_api import AutoTrader, Sort, ListingNotFound
client = AutoTrader()
# Search Honda vehicles sorted by price (low to high), capped at 5 results.
for listing in client.listings.search(make="Honda", sort=Sort.PRICE_LOW_TO_HIGH, limit=5):
print(listing.year, listing.make, listing.model, listing.price, listing.city)
# Drill into the first result's full details (specs, seller, images).
listing = client.listings.search(make="Toyota", location="Vancouver, BC", limit=1).first()
if listing:
detail = listing.details()
print(detail.make, detail.model, detail.variant, detail.price)
print(detail.specifications.transmission, detail.specifications.drive_train)
print(detail.seller.name, detail.seller.city, detail.seller.phone)
print(f"{len(detail.images)} images available")
# Handle a listing that no longer exists.
try:
bad = client.listings.search(make="Ford", limit=1).first()
if bad:
bad.details()
except ListingNotFound as exc:
print(f"Listing gone: {exc.url}")
print("exercised: listings.search / listing.details / ListingNotFound error handling")
Search vehicle listings on AutoTrader.ca. Filters by make, location, and sort order. Returns paginated results with total count. Each listing includes summary vehicle info (make, model, year, price, mileage, condition, location, transmission, fuel type) plus a URL for drilling into full details via get_listing_details. Pagination is manual via offset/limit.
| Param | Type | Description |
|---|---|---|
| make | string | Filter by vehicle make (e.g. Honda, Toyota, Ford, Mercedes-Benz). Omitting returns all makes. |
| sort | integer | Sort order: 3 = Price High to Low, 4 = Price Low to High |
| limit | integer | Number of results per page |
| offset | integer | Result offset for pagination (0-based item index) |
| location | string | Location for the search in City, Province format (e.g. Toronto, ON; Vancouver, BC) |
{
"type": "object",
"fields": {
"listings": "array of vehicle listing objects with id, make, model, year, price, mileage, condition, city, province, transmission, fuel, url, and seller_name",
"total_found": "integer total number of matching results"
},
"sample": {
"data": {
"listings": [
{
"id": "70422418",
"url": "https://www.autotrader.ca/offers/honda-civic-ex-cvt-no-accidents-one-owner-gasoline-black-cat_ma31gr200622va2411tr11734-3820286c-9525-490c-b32b-d8ba4c9615dd",
"city": "North York",
"fuel": "Gasoline",
"make": "Honda",
"year": 2022,
"model": "Civic",
"price": "$ 22,888",
"mileage": "83,000 km",
"province": "ON",
"condition": "Used",
"seller_name": "LION MOTOR SALES INC.",
"transmission": "Automatic"
}
],
"total_found": 24881
},
"status": "success"
}
}About the AutoTrader API
Search Vehicle Listings
The search_listings endpoint accepts optional filters for make (e.g. Honda, Mercedes-Benz), location in City, Province format (e.g. Vancouver, BC), and sort order — 3 for price high to low, 4 for price low to high. Results are paginated via limit and offset parameters. Each item in the returned listings array includes id, make, model, year, price, mileage, condition, city, province, transmission, fuel, and a url field used to fetch full listing details. The total_found field shows the total number of matching results across all pages.
Listing Details
Passing a listing url from search_listings to get_listing_details returns the complete record for that vehicle. Response fields include make, model, year, variant (trim level), price (formatted with currency symbol), price_raw (integer for arithmetic), specifications (covering mileage, body type, transmission, drivetrain, cylinders, displacement, body color, doors, and seats), description (HTML), images (array of image URLs), and a seller object with name, type, phone, and city. Listings that have expired or been removed return an appropriate status rather than partial data.
Coverage and Filtering Notes
Location filtering uses City, Province format — omitting it returns nationwide Canadian results. Make filtering accepts manufacturer names as strings; omitting it returns all makes. There is currently no endpoint-level filter for model, year range, price range, or body type — those filters would need to be applied client-side after retrieving results. Pagination is controlled entirely by limit and offset, making it straightforward to walk through large result sets.
The AutoTrader API is a managed, monitored endpoint for autotrader.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when autotrader.ca 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.ca 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 price trends for a specific make across Canadian cities using
search_listingswith location and sort filters - Build a vehicle comparison tool by fetching
specificationsandprice_rawfrom multipleget_listing_detailscalls - Aggregate dealer inventory by filtering
seller.typein listing detail responses - Monitor new listings for a target make by polling
search_listingssorted by newest and checkingtotal_found - Display full vehicle photo galleries using the
imagesarray fromget_listing_details - Extract seller phone numbers and city from the
sellerobject for lead generation or market analysis - Cross-reference
mileageandprice_rawacross listings to identify underpriced vehicles in a given market
| 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.ca have an official developer API?+
What does `get_listing_details` return that `search_listings` does not?+
search_listings returns summary-level fields: make, model, year, price, mileage, condition, location, transmission, fuel, and a URL. get_listing_details adds the full specifications object (body type, drivetrain, cylinders, displacement, doors, seats, color), the variant trim level, a description in HTML, an images array, and the seller object with name, type, phone, and city.Can I filter search results by model, year range, or price range directly in the API?+
search_listings supports filtering by make, location, and sort order. Model, year range, price range, and body type filtering are not exposed as parameters. You can fork this API on Parse and revise it to add those filter parameters to the endpoint.How does pagination work in `search_listings`?+
limit (items per page) and offset (zero-based item index). The total_found field in each response tells you how many total results match the query, so you can calculate how many pages exist and iterate through them by incrementing offset by limit each time.Are private seller listings included, or only dealer inventory?+
seller.type field in get_listing_details indicates the seller category for each individual listing, allowing you to distinguish between them in your application.