Cars.com Scraper at a glance
Cars.com Scraper is a ready-to-run Apify actor from abotapi for collecting automation data. Its documented output includes id, title, year, make and model, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Automation, Ecommerce, Developer Tools
- Pricing
- $1.80 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 26 options
Scrape cars.com listings by make, ZIP and radius. 90+ fields per car: price, MSRP, monthly payment, mileage, VIN, deal rating, price drop, photos, dealer name, rating and location. Search and URL modes, 11 sort orders, price/year/mileage filters, optional CARFAX flags and dealer phone.
What Cars.com Scraper can do
- Two ways in. Build searches from makes, ZIP and filters, or paste cars.com search and vehicle URLs directly. Filter fields are ignored in URL mode, so pasted links are used exactly as given.
- 90+ fields per vehicle, including deal rating, price versus market explanation, price drop, monthly payment estimate and photo count.
- A normalized contract on every row. Price and currency, mileage and unit, dealer city, state and ZIP, ISO dates, and a NEW, USED or CERTIFIED condition, so you never parse a display string like "$2.6K" or "17,417 mi." yourself.
- Explicit detail status on every row. Every vehicle carries a detailLoaded / detailError pair, so you can tell an enriched row from a base row without guessing from null fields.
- Optional detail enrichment adds full specifications, the equipment list, seller type, price history with the original list price and days on market, ownership, title, accident and recall flags, and the dealer phone number.
- 11 sort orders and price, year, mileage and stock-type filters to narrow a search before you pay for results.
Choose what to collect
These inputs let you configure Cars.com Scraper - Vehicles, Prices, Dealers & Deals. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | How to start the scrape. 'search' builds cars.com searches from your makes, ZIP, radius and filters. 'url' walks the cars.com search or vehicle URLs you paste (filter fields below are ignored in URL mode). |
makesarray | One or more vehicle makes to search for (e.g. 'tesla', 'toyota', 'ford'). Each make is scraped as its own search. Leave empty to search all makes. |
modelsarray | Optional model names to narrow the search (e.g. 'model 3'). Applied across the selected makes. |
zipstring | US ZIP code to center the search on (e.g. '90001'). Combine with Search radius below. Leave empty for a nationwide search. |
maximumDistanceinteger | Radius in miles around the ZIP to include vehicles from. |
stockTypestring | Limit to new, used, or certified pre-owned vehicles. 'all' returns every stock type. |
priceMininteger | Only return vehicles priced at or above this amount. |
Show 19 more inputs
| Input | What it controls |
|---|---|
priceMaxinteger | Only return vehicles priced at or below this amount. |
yearMininteger | Only return vehicles from this model year or newer. |
yearMaxinteger | Only return vehicles from this model year or older. |
mileageMaxinteger | Only return vehicles at or below this odometer reading. |
sortBystring | Order cars.com returns results in. |
urlsarray | Paste cars.com search URLs (https://www.cars.com/shopping/results/?...) category or make pages (https://www.cars.com/shopping/suv/, /shopping/toyota/, /shopping/new/) or vehicle detail URLs (https://www.cars.com/vehicledetail//). Multiple URLs supported; filter-mode fields are ignored. Other cars.com pages (dealer pages, research, the old for-sale search address) are not supported and are skipped with a warning; if none of your links can be scraped the run ends as failed. Leaving this field untouched scrapes the three example links (a search, a make page and a vehicle). |
fetchDetailsboolean | Visit each vehicle page to add interior color, transmission, fuel type, CARFAX flags (one-owner, clean title, no accidents) and the dealer phone number. Slower and adds a small per-item charge; leave off for fast basic listings. |
maxItemsinteger | The single cap on this run: stop after collecting this many vehicles (across all searches/URLs). Set 0 for unlimited. |
maxPagesinteger | Optional safety bound on how many result pages to include per search. Defaults to unlimited (leave empty or set 0) and does NOT cap the run; it defers to Max items, which is the single cap. The run stops at Max items, not here. |
maxResidentialMBinteger | Kept for backward compatibility with saved inputs; it is no longer enforced and does not limit residential traffic. Use Max items to bound the size (and cost) of a run. 0 = unlimited. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large crawl of listings without returning or charging for listings already collected there. Use this after an interrupted run, or when continuing a large search in another run. For recurring daily monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching listings as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED listings. Turn on "Emit unchanged" or "Emit expired" only when you also want those listings returned (and billed). State is kept separately per search/URL and Fetch full details setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. Changes are detected on every returned vehicle field - price, mileage, dealer, badges, photos, price history, features and the rest - and a vehicle is marked UPDATED (with the changed field names in changedFields) when any of them moves. Never compared: scrape timestamps, search-level metadata (total results, search instance id), ad-tracking blobs, days on market (it ticks daily) and the detail-fetch status flags. Add your own noisy fields under "Ignore fields when detecting changes" below. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search/URL and filter settings, different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max items capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Optional. Field names to exclude from UPDATED change detection, in addition to the built-in handling (scrape timestamps, search metadata, ad tracking, days on market and detail-fetch flags never trigger UPDATED). A name matches that field at any depth, e.g. galleryImages or badges; use a dotted path such as dealer.rating for one exact nested field. Use this if a field in your setup turns out to be noisy, e.g. one that rotates without the vehicle itself changing. Ignored fields are still returned in the output; they just never mark a vehicle UPDATED. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
listingIdID (text)titleTitle (text)yearYear (number)makeMake (text)modelModel (text)trimTrim (text)pricePrice (number)msrpMSRP (number)monthlyPaymentMonthly (text)deal_ratingDeal (text)mileageMileage (number)vinVIN (text)Show 67 more fields
stockTypeStock (text)vehicleConditionCondition (text)urlURL (link)imageUrlImage (image)dealerNameDealer (text)dealerRatingRating (number)locationLocation (text)detailLoadedDetail loaded (boolean)changeTypeChange type (incremental mode) (text)changedFieldsChanged fields (incremental mode) (text)firstSeenAtFirst seen (incremental mode) (date)lastSeenAtLast seen (incremental mode) (date)priceAmountPrice (number)priceCurrencyCurrency (text)mileageValueMileage (number)mileageUnitUnit (text)dealerZipDealer ZIP (text)scrapedAtScraped at (date)detailErrorDetail error (text)sellerTypeSeller type (text)dealer_phoneDealer phone (text)stockNumberStock number (text)engineEngine (text)transmissionTransmission (text)interior_colorInterior color (text)doorsDoors (number)cylindersCylinders (number)featuresFeatures (array)listedAtListed at (date)daysOnMarketDays on market (number)originalListPriceOriginal price (number)priceBelowOriginalAmountBelow original (number)priceHistoryPrice history (array)vehicleHistoryVehicle history (object)priceTextPrice text (text)msrpAmountMsrp amount (number)monthlyPaymentAmountMonthly payment amount (number)price_dropPrice drop (text)priceDropAmountPrice drop amount (number)deal_badge_textDeal badge text (text)price_vs_marketPrice vs market (text)marketAverageAmountMarket average amount (number)dealDeltaAmountDeal delta amount (number)carfax_1_ownerCARFAX 1 owner (boolean)carfax_clean_titleCARFAX clean title (boolean)carfax_no_accidentsCARFAX no accidents (boolean)carfax_service_recordsCARFAX service records (boolean)badgesBadges (array)bodyStyleBody style (text)cpoIndicatorCpo indicator (boolean)drivetrainDrivetrain (text)fuelTypeFuel type (text)exterior_colorExterior color (text)mpg_cityMpg city (number)mpg_highwayMpg highway (number)dealer_ratingDealer rating (number)sellerZipSeller zip (text)sellerCustomerIdSeller customer id (text)dealerCityDealer city (text)dealerStateDealer state (text)dealerDistanceMilesDealer distance miles (number)isShippableIs shippable (boolean)shippingNoteShipping note (text)imageCountImage count (number)galleryImagesGallery images (array)searchUrlSearch url (link)sourceSource (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"listingId": "00000000-0000-4000-8000-000000000001",
"vin": "1FAKEVIN000000001",
"url": "https://www.cars.com/vehicledetail/00000000-0000-4000-8000-000000000001/",
"title": "2025 Toyota Crown Limited",
"year": 2025,
"make": "Toyota",
"model": "Crown",
"trim": "Limited",
"bodyStyle": "Sedan",
"mileage": 17417,
"drivetrain": "All-wheel Drive",
"fuelType": "Hybrid",
"exterior_color": "Heavy Metal",
"interior_color": "Black",
"transmission": "Automatic",
"stockType": "Used",
"cpoIndicator": true,
"price": 39298,
"msrp": 40985,
"monthlyPayment": "$599",
"price_drop": "$2.6K",
"deal_rating": "great-deal",
"deal_badge_text": "Great Deal",
"price_vs_market": "This vehicle is priced $805 below the average market price of similar vehicles in the area at $40,103.",
"dealerName": "Example Toyota of Springfield",
"dealerRating": 4.5,
"dealer_phone": "(000) 000-0000",
"location": "Irvine, CA (38 mi)",
"imageUrl": "https://platform.cstatic-images.com/large/in/v2/example.jpg",
"imageCount": 24,
"galleryImages": [
"https://platform.cstatic-images.com/large/in/v2/example.jpg"
],
"carfax_1_owner": true,
"carfax_clean_title": true,
"carfax_no_accidents": true,
"badges": [
{
"label": "Great Deal",
"variant": "great-deal",
"description": "Priced below the average market price."
}
],
"vehicleCondition": "CERTIFIED",
"priceAmount": 39298,
"priceCurrency": "USD",
"msrpAmount": 40985,
"monthlyPaymentAmount": 599,
"priceDropAmount": 2692,
"marketAverageAmount": 40103,
"dealDeltaAmount": -805,
"mileageValue": 17417,
"mileageUnit": "mi",
"dealerCity": "Irvine",
"dealerState": "CA",
"dealerZip": "92618",
"dealerDistanceMiles": 38,
"isShippable": false,
"shippingNote": null,
"sellerType": "DEALER",
"stockNumber": "STK0001",
"engine": "2.5L I-4 port/direct injection",
"doors": 4,
"cylinders": 4,
"features": [
"Apple CarPlay",
"Backup Camera",
"Heated Seats"
],
"listedAt": "2026-09-03",
"daysOnMarket": 10,
"originalListPrice": 40985,
"priceBelowOriginalAmount": 1687,
"priceHistory": [
{
"date": "2026-09-03",
"event": "LISTED",
"changeAmount": null,
"price": 40985
},
{
"date": "2026-09-09",
"event": "PRICE_INCREASE",
"changeAmount": 1005,
"price": 41990
},
{
"date": "2026-09-10",
"event": "PRICE_DROP",
"changeAmount": 2692,
"price": 39298
}
],
"vehicleHistory": {
"oneOwner": true,
"cleanTitle": true,
"noAccidents": true,
"serviceRecords": true,
"openRecall": false,
"personalUseOnly": true,
"reportSource": "autocheck"
},
"detailLoaded": true,
"detailError": null,
"scrapedAt": "2026-09-13T12:00:00+00:00"
}Ways to use this data
- Dealer and inventory monitoring: track price drops, days on market and deal ratings across your own or a competitor's stock.
- Car shopping and deal-finding tools: filter by price, year, mileage and stock type to power a search site or alert bot.
- Market and pricing research: build historical datasets of asking prices, MSRP and market-average deltas across makes, models and regions.
- Lead generation: collect dealer names, ratings, phone numbers and inventory details across a defined market.
- Vehicle history and condition analysis: pull ownership, accident and title flags alongside price and mileage for due diligence.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Cars.com Scraper return?
The documented output for Cars.com Scraper includes id, title, year, make, model, trim, price and msrp. Availability of each field depends on the source page and the selected mode.
How much does Cars.com Scraper cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and changed listings by default, and unchanged ones are suppressed and not billed unless you turn on Emit unchanged.
What is the difference between Resume and Incremental mode?
Resume (resumeFromRunId) continues one specific interrupted run by its run or dataset ID, a one-time action. Incremental mode remembers a recurring search on its own and classifies every listing as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED against its own saved state on every scheduled run. Use Resume once, right after a run got cut off; use Incremental mode for ongoing monitoring of the same search.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the mcpConnectors field to push results into Notion, Linear or Airtable.
