Multi-Source Car Listing Aggregator Automobile Scraper
Pricing
from $0.01 / 1,000 results
Multi-Source Car Listing Aggregator Automobile Scraper
Scrape vehicle listings from 5 major automotive marketplaces: Cars.com, Autotrader, Edmunds, TrueCar, and CarMax. Get pricing, mileage, VIN, dealer info, photos, and specs. Perfect for dealerships, auto analytics, and market research.
Pricing
from $0.01 / 1,000 results
Rating
0.0
(0)
Developer
The Howlers
Maintained by CommunityActor stats
0
Bookmarked
68
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Features
Share
Automobile Scraper
Scrape vehicle listings from 5 major automotive marketplaces: Cars.com, Autotrader, Edmunds, TrueCar, and CarMax. Get pricing, mileage, VIN, dealer info, photos, and specs. Perfect for dealerships, auto industry analytics, and market research.
Note: Demo Mode is off by default, so runs fetch real data. Set demoMode to true to get free sample data instead.
Quick Start
Test with Demo Mode (free, no API key needed)
{"demoMode": true,"searchQuery": "Toyota Camry","location": "90210"}
Run with real data
{"demoMode": false,"searchQuery": "Toyota Camry","location": "90210","searchRadius": 50,"sources": ["cars.com","autotrader","carmax"],"condition": "all","maxResults": 50,"includePhotos": false,"decodeVIN": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Photos are off by default. Set includePhotos to true to get the listing photo URLs (charged per photo URL, see Pricing).
Get one vehicle page
{"task": "get_vehicle_details","vehicleUrl": "https://www.carmax.com/car/12345678"}
Reads one Cars.com vehicle page (https://www.cars.com/vehicledetail/...) or CarMax car page (https://www.carmax.com/car/...) and writes that vehicle to the dataset. The search filters do not apply. Pages from Autotrader, Edmunds and TrueCar are not supported for this task yet; such a URL ends the run without scraping or charging anything.
Decode one VIN
{"task": "decode_vin","vin": "1HGCM82633A004352"}
The result is saved as OUTPUT in the run's key-value store.
How it works
Each marketplace is opened in a real Firefox browser, one marketplace at a time: Camoufox (a stealth build of Firefox) on a US residential proxy for most sites, and a direct connection first for Autotrader. The actor reads the listing data each site already puts on its search results page (price, mileage, VIN, dealer, photos and specs), skips listings that do not match your filters (for example sponsored listings for other models), and writes each matching vehicle to the dataset as soon as it is read.
- Cars.com and Autotrader: listings near the ZIP code in
location, withinsearchRadius. - CarMax: CarMax's own search near the ZIP code, with the CarMax store for each car.
- TrueCar: the listings TrueCar returns for the ZIP code. TrueCar can include dealers farther away that deliver.
- Edmunds: Edmunds shows listings near its own guess of the visitor's location and ignores a ZIP code in the search. When you set
location, Edmunds listings are left out (and not charged) unless Edmunds used that ZIP code.
The same car on two marketplaces is delivered once. Dealers often list one car on both Cars.com and Autotrader. The actor keeps the first copy it reads (marketplaces are read in the order of sources) and leaves later copies with the same VIN out of the dataset, uncharged. A listing without a VIN is matched by its own listing page. The OUTPUT record lists the copies that were left out under duplicates, with the marketplace and listing that was kept.
When a site blocks the connection, the actor closes that connection and tries a new one (a new IP address and browser fingerprint), up to a few times, then moves on to the next site. Cars.com gets up to five tries for its first page because its bot check does not clear on every connection. A later results page that does not load is retried on up to two new connections; if it still does not load, it is skipped and counted in pagesSkipped for that site, and after two skipped pages in a row the actor moves on. Nothing is charged for a page or a site that returned no listings.
Input Parameters
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
task | string | "search_vehicles" | No | search_vehicles to search listings, get_vehicle_details to read one Cars.com or CarMax vehicle page, or decode_vin to look up one VIN |
demoMode | boolean | false | No | Run with sample vehicle data to test the actor without real scraping |
searchQuery | string | - | No | Vehicle search query (e.g., '2023 Toyota Camry', 'Used Honda CR-V') |
location | string | - | No | ZIP code or city/state for search location |
searchRadius | integer | 50 | No | Search radius in miles from location |
sources | array | ["cars.com","autotrader","carmax"] | No | Which automotive marketplaces to scrape |
condition | string | "all" | No | Filter by vehicle condition |
minPrice | integer | - | No | Minimum vehicle price filter |
maxPrice | integer | - | No | Maximum vehicle price filter |
minYear | integer | - | No | Minimum model year filter |
maxYear | integer | - | No | Maximum model year filter |
minMileage | integer | - | No | Minimum mileage filter |
maxMileage | integer | - | No | Maximum mileage filter |
make | string | - | No | Filter by vehicle make (e.g., Toyota, Honda, Ford) |
model | string | - | No | Filter by vehicle model (e.g., Camry, CR-V, Mustang) |
bodyType | string | - | No | Filter by body type |
fuelType | string | - | No | Filter by fuel type |
transmission | string | - | No | Filter by transmission type |
drivetrain | string | - | No | Filter by drivetrain |
exteriorColor | string | - | No | Filter by exterior color |
maxResults | integer | 50 | No | Maximum number of vehicles to return per source |
includePhotos | boolean | false | No | Off by default. Turn on to include the listing photo URLs (charged per photo URL) |
decodeVIN | boolean | false | No | Decode each listing's VIN with the NHTSA vPIC database and add the specs as vinDecoded (charged per VIN decoded) |
vin | string | - | No | The 17-character VIN to look up when task is decode_vin |
vehicleUrl | string | - | No | The Cars.com or CarMax vehicle page to read when task is get_vehicle_details |
webhookUrl | string | - | No | URL to send results to when scraping completes (Zapier, Make, n8n, etc.) |
proxyConfiguration | object | {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]} | No | Proxy settings for web scraping |
Pricing
This actor uses pay-per-event billing:
| Event | When it is charged | Price |
|---|---|---|
| Actor start | Once when the run starts, one event per GB of memory (minimum one). At the default 4 GB of memory a run starts at $0.40 | $0.10 per GB |
| Vehicle scraped | Once per vehicle written to the dataset, at the moment it is written. A car listed on more than one marketplace (same VIN) is written and charged once | $0.02 |
| Photo extracted | Only when you turn includePhotos on (it is off by default): once per photo URL included in a listing. Cars.com search results show up to about 6 photos per listing, CarMax, TrueCar and Edmunds show 1, and a Cars.com vehicle page can show about 20 | $0.005 |
| VIN decoded | Once per VIN that NHTSA decodes cleanly: the VIN lookup (task set to decode_vin), or each listing's VIN when decodeVIN is on. A VIN that NHTSA reports as invalid, incomplete, with a wrong check digit or with no data is not charged | $0.01 |
| Result | Each item written to the default dataset | $0.00001 |
Demo mode is free: no task events are charged for sample data.
The actor respects the maximum total charge you set for a run: it stops adding listings, photos and VIN decodes once the next one would go over it.
Troubleshooting
"API error 429" or "Rate limit"
Too many requests. Wait a minute and try again, or reduce the number of items per run.
No results or empty dataset
Check the run log and the sourceSummary in the OUTPUT record. It lists, for each marketplace, how many listings were read, how many matched your filters, how many were left out because another marketplace already had the same car (duplicates), how many results pages were skipped after retries (pagesSkipped), how many connections were replaced (sessionsRetired), and whether the site blocked the connection. Common causes:
- Invalid input format (check the examples above)
- No listings match the filters near that ZIP code
- The site blocked every connection attempt for this run; try again later
How do I test without an API key?
Enable Demo Mode in the input. This returns realistic sample data so you can verify the output format works for your workflow.
Built by John Rippy | Actor Arsenal