AutoTrader.ca Vehicle Listings Scraper
Pricing
from $0.50 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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
scrapeDetailPagesenabled 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
proxyUrloption 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
| Option | Type | Default | Description |
|---|---|---|---|
startUrls | array | — (required) | AutoTrader.ca search URLs or /offers/... listing URLs |
maxListings | integer | 200 | Hard cap on saved listings across all start URLs |
scrapeDetailPages | boolean | true | Fetch each listing's detail page for the full field set. Disable it for faster search-result-only runs |
maxConcurrency | integer | 100 | Parallel page fetches (1–100). The default is tuned for speed; lower it only if you see rate limiting in the run log |
startPage | integer | 1 | First search-results page to scrape |
endPage | integer | all | Last search-results page to scrape (inclusive) |
proxyUrl | string | built-in | Your own proxy URL (http://user:pass@host:port); leave empty to use the actor's built-in residential proxy |
requestDelayMillis | integer | 0 | Optional politeness delay per request; raise only if rate-limited |
requestRetries | integer | 2 | Retries per failed request |
retryDelayMillis | integer | 1000 | Delay between retries |
requestTimeoutSecs | integer | 30 | Per-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:
| Mode | Input difference | Runtime | Records |
|---|---|---|---|
| Search only | scrapeDetailPages: false | 5.6s | 100 |
| Complete | scrapeDetailPages: true, retries 1, timeout 20s | 7.5s | 100 |
| Complete default | scrapeDetailPages: true, default retries/timeouts | 9.9s | 100 |
Recent benchmark, same CX-5 search with rcp=200&size=200 and maxListings=200:
| Mode | Input difference | Runtime | Records |
|---|---|---|---|
| Search only | scrapeDetailPages: false | 9.4s | 200 |
| Complete | scrapeDetailPages: true, retries 1, timeout 20s | 11.2s | 200 |
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.