# Cars.com Scraper (`scraptivo/cars-scraper`) Actor

Scrape car listings from Cars.com, including price, MSRP, vehicle specifications, images, dealer details, and financing breakdown. Provide a Cars.com search URL and optional result limit.

- **URL**: https://apify.com/scraptivo/cars-scraper.md
- **Developed by:** [Scraptivo](https://apify.com/scraptivo) (community)
- **Categories:** E-commerce, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 cars

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

**Cars.com Scraper** collects vehicle listings from [Cars.com](https://www.cars.com) and turns them into structured data for market research, price monitoring, and inventory analysis. Provide a Cars.com search results URL, run the Actor, and export price, MSRP, specifications, images, dealer details, and financing breakdowns to JSON, CSV, Excel, or your preferred integration. Use it to track pricing trends, analyze dealer inventory, and feed automotive data pipelines. Pricing starts at **$1 per 1,000 listings**.

### What can you automate with Cars.com Scraper?

- **Build vehicle databases** — Collect new, used, and certified pre-owned listings with full specifications from any Cars.com search URL.
- **Monitor pricing trends** — Track list prices, MSRP, and monthly payment estimates over time for specific makes, models, and trims.
- **Analyze dealer inventory** — See which dealers stock which vehicles, at what prices, and across which regions.
- **Schedule recurring collection** — Run daily or weekly on the Apify Scheduler to keep market data current.
- **Feed analytics pipelines** — Push structured listing data through the Apify API or a webhook into dashboards and databases.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Automotive market researchers | Analyzing price distributions, model availability, and inventory levels across the US. |
| Dealers and sales teams | Benchmarking competitor pricing and stock composition by make and region. |
| Data analysts | Building normalized vehicle datasets for BI tools and custom applications. |
| Lead-generation teams | Enriching prospect lists with dealer location and listing details. |

### What data can you collect from Cars.com?

| Data group | Example fields | How it helps |
|---|---|---|
| Vehicle identity | `listingId`, `listingUrl`, `title`, `year`, `make`, `model`, `trim`, `vin` | Identify and deduplicate records with the stable `listingId`. |
| Pricing | `price`, `listPrice`, `msrp`, `calc_*` financing fields | Compare list price against MSRP and estimate payments. |
| Specifications | `fuelType`, `engine`, `transmission`, `drivetrain`, `mileage`, `exteriorColor`, `interiorColor` | Filter and compare vehicles by hardware and condition. |
| Seller | `dealerName`, `dealerCity`, `dealerState`, `stockType`, `certifiedPreowned` | Understand who is selling and the stock type. |
| Media | `imageUrl`, `imageUrls` | Grab primary and gallery images for each listing. |

### How to use Cars.com Scraper

1. Open the [Cars.com Scraper](https://apify.com/scraptivo/cars-scraper) on Apify.
2. Paste one or more Cars.com search result URLs into **Search URLs**.
3. Set **Max Items** to limit the number of listings (0 = unlimited).
4. Optionally adjust the proxy configuration for larger runs.
5. Run the Actor and export the dataset or connect it to your workflow.

```json
{
    "searchUrls": [
        {
            "url": "https://www.cars.com/shopping/results/?stock_type=new&makes[]=honda&models[]=accord&zip=72076&maximum_distance=all"
        }
    ],
    "maxItems": 1000,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Example workflow

#### Track new Honda Accord pricing across the US

1. Run the Actor with a Cars.com search URL filtered to `stock_type=new`, make `honda`, model `accord`, and `maximum_distance=all`.
2. Export the dataset and keep `year`, `trim`, `price`, `msrp`, `dealerCity`, and `dealerState`.
3. Compare `price` against `msrp` to spot regional discounts and dealer markups.
4. Deduplicate user-side against the stable `listingId`.

### Automate and integrate your results

- **Schedules** — Pricing and inventory turn over quickly. Run **weekly** for market research or **daily** for close price monitoring. Create separate scheduled tasks per search URL so each keeps its own dataset.
- **Webhooks** — Enable a webhook on run completion to push fresh listings into a CRM, database, or Slack pipeline.
- **Exports and API** — Download results as JSON, CSV, or Excel from the Apify Console, or call the Actor from the API:

```shell
curl "https://api.apify.com/v2/acts/scraptivo/cars-scraper/runs?token=YOUR-APIFY-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchUrls": [
        {"url": "https://www.cars.com/shopping/results/?stock_type=new&makes[]=honda&zip=72076"}
    ],
    "maxItems": 1000,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
  }'
```

- **Deduplication** — The Actor appends new results on every run and does not deduplicate across runs. Use the stable `listingId` when merging results.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---:|---|---|---|
| `searchUrls` | Array of URLs | Yes | — | Cars.com search result URLs to scrape. |
| `maxItems` | Integer | No | `0` | Maximum listings to scrape (`0` = unlimited). |
| `proxyConfiguration` | Proxy object | No | Apify proxy, RESIDENTIAL | Proxy settings for the run. |

### Output example

Each dataset item is one vehicle listing:

```json
{
    "listingId": "926ec45f-5f2e-4758-9869-4496095498db",
    "listingUrl": "https://www.cars.com/vehicledetail/926ec45f-5f2e-4758-9869-4496095498db/",
    "year": 2026,
    "make": "Lotus",
    "model": "Emira",
    "trim": "V6 SE",
    "title": "2026 Lotus Emira V6 SE",
    "price": 124200.0,
    "listPrice": "$124,200",
    "mileage": 5,
    "stockType": "New",
    "exteriorColor": "Magma Red",
    "interiorColor": "Black",
    "fuelType": "Gasoline",
    "engine": "3.5L V6 24V MPFI DOHC Supercharged",
    "transmission": "6-Speed Manual",
    "drivetrain": "Rear-wheel Drive",
    "dealerName": "Star Motor Cars",
    "dealerCity": "Houston",
    "dealerState": "TX",
    "vin": "SCCLEJAX1THB10627",
    "certifiedPreowned": false,
    "imageUrl": "https://platform.cstatic-images.com/large/in/v2/45426ca6-b9ca-5b1b-8938-d0f00735b86a/kfJxUXOTCMiKKRp3g7cpBd6eLGo.jpg"
}
```

### How much does it cost to scrape Cars.com?

The Actor uses pay-per-event pricing. Each listing record pushed to the dataset counts as one `cars` event, billed at **$0.001 per listing** — that is **$1 per 1,000 listings**. A one-time actor-start event is also charged per run (one event per GB of memory, minimum one). Compute units consumed are deducted from your Apify plan, and volume discounts on paid Apify plans reduce the per-1,000 rate. When your event spending limit is reached, the run stops gracefully.

### Reliability and responsible use

- **Proxy requirement** — The Actor defaults to the Apify proxy with the RESIDENTIAL group. Residential IPs are recommended for consistent access to Cars.com.
- **Retries and rate limits** — The Actor includes built-in retry logic and handles rate limiting gracefully.
- **Conditional fields** — `msrp` and financing fields appear only when the platform exposes them for a listing; some fields are nullable.
- **Public data** — The Actor collects publicly visible listing information from Cars.com.
- **Responsible use** — Only use the data in ways that comply with Cars.com's terms of service and applicable law.

### Frequently asked questions

#### Can I scrape Cars.com by make, model, or location?

Yes. Paste a Cars.com search results URL that already contains your filters — make, model, price range, year, mileage, body style, and location — and the Actor scrapes exactly those results.

#### Can I schedule the Cars.com Scraper to run automatically?

Yes. Open the **Scheduler** tab in Apify Console and set a recurring schedule. Weekly suits market research; daily suits close price monitoring of specific makes and models.

#### What counts as one result?

A listing record pushed to the dataset counts as one `cars` result ($1 per 1,000 listings). A small one-time actor-start event is also charged at the start of each run.

#### Why are some fields empty?

Fields such as `msrp` and the financing breakdown are only populated when the platform provides them for a given listing. A null value usually means Cars.com has no data for that field.

#### How do I avoid duplicate records?

The Actor appends results on every run and does not deduplicate across runs. Use the stable `listingId` as the key when merging a fresh run into existing data.

#### Do I need a proxy?

The Actor works out of the box with the default Apify residential proxy, which is recommended for reliable access to Cars.com.

### Related Scraptivo automations

- **[AutoScout24 Scraper](https://apify.com/scraptivo/autoscout24-scraper)** — Scrape European car listings with full filter support.
- **[Kleinanzeigen Scraper](https://apify.com/scraptivo/kleinanzeigen-scraper)** — Collect classifieds listings from Kleinanzeigen for market research.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, sample URL, required fields, and expected volume so we can assess the request.

# Actor input Schema

## `searchUrls` (type: `array`):

Cars.com search result URLs to scrape (e.g. https://www.cars.com/shopping/results/?stock\_type=new\&zip=72076\&maximum\_distance=all)

## `maxItems` (type: `integer`):

Maximum number of listings to scrape (0 = unlimited)

## `proxyConfiguration` (type: `object`):

Proxy settings for anti-bot protection

## Actor input object example

```json
{
  "searchUrls": [
    {
      "url": "https://www.cars.com/shopping/results/?stock_type=new&makes[]=honda&models[]=accord&zip=72076&maximum_distance=all"
    }
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing scraped car listings

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchUrls": [
        {
            "url": "https://www.cars.com/shopping/results/?stock_type=new&makes[]=honda&models[]=accord&zip=72076&maximum_distance=all"
        }
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/cars-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchUrls": [{ "url": "https://www.cars.com/shopping/results/?stock_type=new&makes[]=honda&models[]=accord&zip=72076&maximum_distance=all" }],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/cars-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrls": [
    {
      "url": "https://www.cars.com/shopping/results/?stock_type=new&makes[]=honda&models[]=accord&zip=72076&maximum_distance=all"
    }
  ],
  "maxItems": 20
}' |
apify call scraptivo/cars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraptivo/cars-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eggTQwRJJBPslnqhP/builds/5xpjlsUs9EdNfoFZY/openapi.json
