Multi-Source Car Listing Aggregator Automobile Scraper avatar

Multi-Source Car Listing Aggregator Automobile Scraper

Pricing

from $0.01 / 1,000 results

Go to Apify Store
Multi-Source Car Listing Aggregator Automobile Scraper

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

The Howlers

Maintained by Community

Actor stats

0

Bookmarked

68

Total users

0

Monthly active users

2 days ago

Last modified

Features

Limited permissions

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, within searchRadius.
  • 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

ParameterTypeDefaultRequiredDescription
taskstring"search_vehicles"Nosearch_vehicles to search listings, get_vehicle_details to read one Cars.com or CarMax vehicle page, or decode_vin to look up one VIN
demoModebooleanfalseNoRun with sample vehicle data to test the actor without real scraping
searchQuerystring-NoVehicle search query (e.g., '2023 Toyota Camry', 'Used Honda CR-V')
locationstring-NoZIP code or city/state for search location
searchRadiusinteger50NoSearch radius in miles from location
sourcesarray["cars.com","autotrader","carmax"]NoWhich automotive marketplaces to scrape
conditionstring"all"NoFilter by vehicle condition
minPriceinteger-NoMinimum vehicle price filter
maxPriceinteger-NoMaximum vehicle price filter
minYearinteger-NoMinimum model year filter
maxYearinteger-NoMaximum model year filter
minMileageinteger-NoMinimum mileage filter
maxMileageinteger-NoMaximum mileage filter
makestring-NoFilter by vehicle make (e.g., Toyota, Honda, Ford)
modelstring-NoFilter by vehicle model (e.g., Camry, CR-V, Mustang)
bodyTypestring-NoFilter by body type
fuelTypestring-NoFilter by fuel type
transmissionstring-NoFilter by transmission type
drivetrainstring-NoFilter by drivetrain
exteriorColorstring-NoFilter by exterior color
maxResultsinteger50NoMaximum number of vehicles to return per source
includePhotosbooleanfalseNoOff by default. Turn on to include the listing photo URLs (charged per photo URL)
decodeVINbooleanfalseNoDecode each listing's VIN with the NHTSA vPIC database and add the specs as vinDecoded (charged per VIN decoded)
vinstring-NoThe 17-character VIN to look up when task is decode_vin
vehicleUrlstring-NoThe Cars.com or CarMax vehicle page to read when task is get_vehicle_details
webhookUrlstring-NoURL to send results to when scraping completes (Zapier, Make, n8n, etc.)
proxyConfigurationobject{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}NoProxy settings for web scraping

Pricing

This actor uses pay-per-event billing:

EventWhen it is chargedPrice
Actor startOnce 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 scrapedOnce 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 extractedOnly 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 decodedOnce 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
ResultEach 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