AutoTrader.ca Vehicle Listings Scraper avatar

AutoTrader.ca Vehicle Listings Scraper

Pricing

from $0.50 / 1,000 results

Go to Apify Store
AutoTrader.ca Vehicle Listings Scraper

AutoTrader.ca Vehicle Listings Scraper

Extracts Canadian vehicle listings and detail data from AutoTrader.ca search and listing pages.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

Camilo Aguilar

Camilo Aguilar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Fast, reliable scraper for AutoTrader.ca — Canada's largest vehicle marketplace. Give it one or more search URLs (or individual listing URLs) and it returns clean, structured vehicle records: specs, pricing, mileage, dealer contact info, images, equipment, and more. Export as JSON, CSV, Excel, or XML straight from the Apify dataset.

A typical 100-listing search with full detail enrichment completes in well under a minute; fast mode (search results only) can finish in a few seconds when the proxy path is healthy.

How it works

  • Concurrent fetching. Search pages and listing detail pages are fetched in parallel (maxConcurrency, default 100), so even large searches finish in seconds rather than minutes.
  • Optional detail enrichment. Keep scrapeDetailPages enabled for full detail enrichment, or disable it for search-result rows only. Search results give the core fields; each listing's detail page adds equipment lists, coordinates, drivetrain, colors, fuel economy, financing flags, and Carfax links.
  • Runtime logs. Each run reports search, detail-enrichment, dataset-write, and total timings so speed comparisons are easy to verify.
  • Automatic retries. Failed requests are retried (configurable count and delay). A failed detail page never kills the run — you still get the search-level record for that vehicle.
  • Proxy included. Runs go through the actor's own rotating residential proxy — no proxy setup or extra proxy costs on your side. Prefer your own provider? Pass it via the proxyUrl option and the actor uses yours instead.

What you get

Every record always contains the full schema — fields the listing doesn't expose are null, so your downstream pipeline never hits missing columns. listing_url and ad_id are always populated.

  • Vehicle specs: make, model, year, trim, body type, transmission, drivetrain, fuel type, doors, cylinders, seats, displacement, power, colors, upholstery
  • Pricing: formatted price, numeric CAD price, price evaluation, average market price, final/negotiable flags, strike-through/original price and price-drop fields
  • Mileage & fuel: formatted and numeric km, city/highway/combined fuel consumption, CO2 emissions, electric range
  • History & condition: accident-free flag, damage conditions, service history, previous owners, non-smoking, rental history, Carfax URL
  • Location: city, province, postal code, country, latitude/longitude
  • Seller / dealer: name, type (dealer vs private), phone numbers, SMS number, full address, website, Google rating and Maps link, inventory URL, logo, dealer ID
  • Identifiers & links: dealer stock number, deal-builder (online checkout) URLs in English and French
  • Media: image URLs (normalized to 1280x960), image count, header image, video URLs, 360-view flag
  • Metadata: ad ID, listing URL, status, created timestamp, deliverability, search result type, vehicle age, financing/leasing/warranty flags

Sample output

{
"data_source": "AutoTrader.ca",
"ad_id": "c6a245cd-7afe-4cca-aecc-4748747157e3",
"listing_url": "https://www.autotrader.ca/offers/mazda-cx-5-example",
"make": "Mazda",
"model": "CX-5",
"year": 2021,
"vehicle_age": 5,
"trim": "GT Turbo",
"status": "Used",
"vehicle_status": "Used",
"price_formatted": "$ 27,980",
"price_cad": 27980,
"mileage_formatted": "36,999 km",
"mileage_km": 36999,
"transmission": "Automatic",
"drivetrain": "AWD",
"fuel_type": "Gasoline",
"city": "SAINT-HUBERT",
"province": "QC",
"country": "CA",
"latitude": 45.47818,
"longitude": -73.44749,
"seller_name": "Example Auto",
"dealer_phone": "855-587-8248",
"dealer_address_full": "123 Example St, SAINT-HUBERT, J4T 0A1",
"image_urls": ["https://prod.pictures.example.test/listing.jpg/1280x960.webp"],
"image_count": 31,
"comfort_equipment": ["Air conditioning"],
"entertainment_equipment": ["Bluetooth Connection"],
"safety_equipment": ["Adaptive Cruise Control"],
"extras_equipment": ["Alloy wheels"],
"all_equipment": [
"Air conditioning",
"Bluetooth Connection",
"Adaptive Cruise Control",
"Alloy wheels"
],
"listing_status": "Active",
"financing_available": true,
"warranty_exists": true,
"carfax_url": "https://www.example.test/carfax"
}

Input

OptionTypeDefaultDescription
startUrlsarray— (required)AutoTrader.ca search URLs or /offers/... listing URLs
maxListingsinteger200Hard cap on saved listings across all start URLs
scrapeDetailPagesbooleantrueFetch each listing's detail page for the full field set. Disable it for faster search-result-only runs
maxConcurrencyinteger100Parallel page fetches (1–100). The default is tuned for speed; lower it only if you see rate limiting in the run log
startPageinteger1First search-results page to scrape
endPageintegerallLast search-results page to scrape (inclusive)
proxyUrlstringbuilt-inYour own proxy URL (http://user:pass@host:port); leave empty to use the actor's built-in residential proxy
requestDelayMillisinteger0Optional politeness delay per request; raise only if rate-limited
requestRetriesinteger2Retries per failed request
retryDelayMillisinteger1000Delay between retries
requestTimeoutSecsinteger30Per-request HTTP timeout

Example:

{
"startUrls": [
{ "url": "https://www.autotrader.ca/lst/mazda/mazda3?loc=K1T1M9" }
],
"maxListings": 200,
"scrapeDetailPages": true
}

Need faster (and cheaper) runs?

Set "scrapeDetailPages": false and the actor only reads search-result pages — one page fetch can produce up to 100 records, which also means lower compute cost.

You keep: make/model/year/trim, prices, mileage, fuel type, displacement, transmission, city/province/postal code, seller name and phone numbers, full dealer address, images, description, and listing metadata.

You lose (these come from detail pages only): equipment lists, latitude/longitude, drivetrain, body type, exterior/interior color, doors, cylinders, seats, CO2 emissions, accident-free flag, market-price comparison, stock number, dealer website, dealer Google rating and Maps link, header image, and created timestamp.

If your pipeline only needs pricing, mileage, and dealer contact data, fast mode is the better deal.

Recent benchmark, exact 100-result CX-5 URL:

ModeInput differenceRuntimeRecords
Search onlyscrapeDetailPages: false5.6s100
CompletescrapeDetailPages: true, retries 1, timeout 20s7.5s100
Complete defaultscrapeDetailPages: true, default retries/timeouts9.9s100

Recent benchmark, same CX-5 search with rcp=200&size=200 and maxListings=200:

ModeInput differenceRuntimeRecords
Search onlyscrapeDetailPages: false9.4s200
CompletescrapeDetailPages: true, retries 1, timeout 20s11.2s200

Full-detail runs can be slower when AutoTrader.ca or the proxy path has a bad tail, but the run summary logs show where the time went.

Migrating from other AutoTrader.ca actors

The actor also accepts snake_case input keys used by other AutoTrader Canada scrapers — start_urls (plain strings or {url} objects), start_page, end_page, and proxy_url — so existing run configurations work unchanged. If both spellings are present, the camelCase option wins.

Older saved tasks that include a proxyConfiguration field should remove that key — proxy choice is now just proxyUrl.

Use cases

  • Dealer inventory monitoring — track competitor stock, pricing moves, and days-on-lot
  • Market research & price analytics — build pricing models from live Canadian listing data
  • Lead generation — surface private-seller and dealer listings matching your criteria
  • Aggregators & apps — feed normalized vehicle data into search products and alerts

FAQ

Do I need a proxy? No — runs use the actor's built-in rotating residential proxy automatically. To route through your own provider instead, set proxyUrl.

Can it scrape a single listing? Yes — put the /offers/... URL in startUrls and you get one fully enriched record.

What export formats are supported? Anything the Apify dataset supports: JSON, JSONL, CSV, Excel, XML, RSS.

What happens when AutoTrader.ca changes its site? The actor is built to tolerate site changes and is actively maintained. If a field stops populating, report it and it gets fixed quickly.

Missing something? Need another scraper?

If a field you need is missing, something looks off, or you want a scraper built for another website, please reach out — open an issue on this actor's Apify page (Issues tab) and I'll get back to you. Custom scraper requests are welcome.