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

Scrape Cars.com listings by make, model, year, ZIP, price, mileage. Clean records with verified VINs, dealer location + distance, photos. For used-car flippers, dealer-intel teams, and AI shopping agents. Export, run via API, schedule, or integrate with other tools.

- **URL**: https://apify.com/skootle/cars-com-scraper.md
- **Developed by:** [Skootle](https://apify.com/skootle) (community)
- **Categories:** E-commerce, AI, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 cars.com listing records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 hero](https://raw.githubusercontent.com/kesjam/skootle-actors-assets/main/heroes/cars-com.png)

### TL;DR

Pull live used-car listings from Cars.com by make, model, year, ZIP, price, and mileage in 7 seconds flat. Returns one normalized record per listing: validated VIN, decoded vehicle squib, dealer name + phone + lat / lon + distance from your ZIP, MPG city / highway as integers, numeric mirrors of price and mileage, photos, and a ready-to-paste markdown card per car. Built for used-car flippers, dealer marketing agencies, lead-gen firms, fleet sourcing, and AI shopping agents. A flipper finds one $2K-margin car per ~200 listings scanned. Same record schema as the [KBB Scraper](https://apify.com/skootle/kbb-scraper) so you can run both and pivot between sources.

---

<!-- skootle:review-cta -->
> Try it on a small dataset, then let us know what you think in a [review](https://apify.com/skootle/cars-com-scraper/reviews).

---

### What does Cars.com Scraper do?

Today, a used-car flipper hunting margin across Texas opens cars.com 50 times a day, runs the same search across five different ZIPs, copies the cheapest listings into a spreadsheet, manually checks each VIN, and starts calling dealers. A dealer-marketing agency tracking competitor inventory across a 12-store group does the same thing weekly, by hand, for every neighbor dealership. A lead-gen company building a "find me a used Tacoma in TX under $30K" feature for car-dealer SaaS has to scrape Cars.com themselves and watch their pipeline break the moment Cars.com tweaks a CSS class.

This actor collapses all of that into a single API call per query. A 10-record run finishes in roughly 7 seconds, and a 100-record metro sweep is under a minute. Cars.com adjusting their visible site does not break it.

For AI agents and LLM pipelines, every record carries a 300-500 character `agentMarkdown` summary card you can paste straight into a Claude or ChatGPT context, plus a `fieldCompletenessScore` so agents can self-filter sparse rows. Records use idempotent IDs (`cars-com:vin:<VIN>` when the VIN is valid, falling back to the listing UUID), so refreshes upsert cleanly downstream.

### Why scrape Cars.com?

Cars.com is one of the deepest US used-car inventory pools, millions of dealer-supplied listings nationwide. Where Autotrader and KBB carry the deal-rating signal, Cars.com carries the volume and trim coverage. A flipper hunting margin across a state, a dealer-marketing agency tracking competitors across a 12-store group, or a lead-gen company powering "find me a used Tacoma in TX under $30K" all need the same thing: a clean, live Cars.com inventory feed without writing the scraper themselves.

Manual workflow killed: refreshing Cars.com 50 times a day across five ZIPs and copying the cheapest listings into a sheet. A used-car flipper finds roughly one $2K-margin car per 200 listings scanned, so the per-record cost pays back fast. The 7-second 10-record run time is the wedge over every other Cars.com actor on the Store.

### Who needs this?

- **Used-car flippers and arbitrage buyers** sweeping multiple metros daily for under-priced inventory to flip in the same week
- **Dealer-marketing agencies** tracking competitor inventory and pricing daily across every neighbor dealership in their client's MSA
- **Lead-gen companies for car-dealer SaaS** powering "find me a used X" features inside dealer CRMs and consumer-facing apps
- **Auto-warranty and extended-protection sellers** segmenting outbound prospect lists by VIN-decoded year / make / model and mileage band
- **Fleet operators and corporate procurement** sourcing comparable vehicles across multiple ZIPs to pick the best price-per-mile example
- **Auto-finance and lending platforms** building VIN-validated training data for valuation and risk models
- **Automotive journalists and analysts** tracking market price by trim, mileage band, and region for industry reports
- **AI shopping agents and natural-language car search** that need a "what's available right now" feed for chat-based shopping flows

### How to use Cars.com Scraper

1. Open the **Input** tab on the actor page
2. Set **Make** (e.g., `BMW`), **Model** (free text, e.g., `3 Series`), and **ZIP code** (US 5-digit)
3. Optionally narrow with **Year (min/max)**, **Price max**, **Mileage max**, and **Search radius (miles)**
4. Pick a **Condition**: `USED`, `NEW`, `CPO`, `NEW_CPO`, or `ALL`
5. Set **Max items** (default 10, raise for production runs)
6. Click **Start** or call via the Apify REST API or CLI

Run on demand from the Console, schedule daily monitoring with Apify's cron, integrate with Make, Zapier, n8n, Slack, Google Sheets, or pipe directly into a Claude or ChatGPT custom agent.

### How much will scraping Cars.com cost?

This actor is priced per event:

- **Actor Start**: $0.005 per run, charged once
- **Listing record**: tiered, charged per record written

| Apify plan | $/1000 records |
|---|---|
| FREE | $5.00 |
| BRONZE | $4.50 |
| SILVER | $4.00 |
| GOLD | $3.50 |
| PLATINUM | $3.00 |
| DIAMOND | $3.00 |

A 100-listing search on the FREE plan costs about $0.51 and the $5/month Apify free credit covers ~1,000 listings of trial volume. Production runs over 1,000 listings on the GOLD plan land at $3.50 per 1,000 records; PLATINUM and DIAMOND drop to $3.00.

Frame it as ROI. A used-car flipper finds one $2,000-margin listing per ~200 Cars.com records scanned. At GOLD pricing that's ~$0.70 in actor cost per $2,000 of margin found. A dealer-marketing agency tracking 50 competitors daily at 200 records each runs about $35 per day on GOLD, replacing a junior analyst's full-time inventory-monitoring job.

You only pay for records actually pushed to the dataset.

### Is it legal to scrape Cars.com?

Yes for public listing data. Cars.com publishes dealer inventory openly on its website without authentication. This actor consumes the same public GraphQL endpoint the Cars.com web client uses, honors network rate limits, and does not bypass any login wall, captcha, or paywall. Records contain only data the public Cars.com website displays to any browser visitor.

For commercial redistribution of scraped data (reselling raw inventory feeds), consult your own legal counsel: dealer inventory may be subject to dealer terms-of-service and your jurisdiction's database-rights regime.

### Examples

#### Example 1: Flipper hunting underpriced 2020-2024 BMW 3 Series within 50 mi of Beverly Hills

```json
{
  "make": "BMW",
  "model": "3 Series",
  "yearMin": 2020,
  "yearMax": 2024,
  "zip": "90210",
  "searchRadius": 50,
  "condition": "USED",
  "maxItems": 50
}
````

#### Example 2: Lead-gen Honda Civic feed under $25K, 100 mi of Chicago

```json
{
  "make": "Honda",
  "model": "Civic",
  "priceMax": 25000,
  "zip": "60601",
  "searchRadius": 100,
  "condition": "USED",
  "maxItems": 200
}
```

#### Example 3: Wholesale Ford F-150 sweep under 50K miles, Texas-wide

```json
{
  "make": "Ford",
  "model": "F-150",
  "mileageMax": 50000,
  "zip": "75201",
  "searchRadius": 500,
  "condition": "USED",
  "maxItems": 500
}
```

#### Example 4: Tesla Model 3 certified pre-owned only, 50 mi NYC, fleet sourcing

```json
{
  "make": "Tesla",
  "model": "Model 3",
  "zip": "10001",
  "searchRadius": 50,
  "condition": "CPO",
  "maxItems": 50
}
```

#### Example 5: Dealer competitive intel, Toyota Camry daily watchlist on Atlanta market

```json
{
  "make": "Toyota",
  "model": "Camry",
  "yearMin": 2022,
  "zip": "30301",
  "searchRadius": 75,
  "condition": "USED",
  "maxItems": 100
}
```

#### Example 6: Warranty seller, 2018-2022 Honda Pilot prospect list near Denver

```json
{
  "make": "Honda",
  "model": "Pilot",
  "yearMin": 2018,
  "yearMax": 2022,
  "zip": "80202",
  "searchRadius": 100,
  "condition": "USED",
  "maxItems": 200
}
```

#### Example 7: AI shopping agent, natural-language "Tacoma in TX under $30K"

```json
{
  "make": "Toyota",
  "model": "Tacoma",
  "priceMax": 30000,
  "zip": "75201",
  "searchRadius": 500,
  "condition": "USED",
  "maxItems": 50
}
```

### Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `make` | string | `BMW` | Vehicle make. |
| `model` | string | `3 Series` | Free-text model. Used as a Cars.com keyword filter. |
| `yearMin` | int | `2020` | Minimum model year. |
| `yearMax` | int | `2024` | Maximum model year. |
| `priceMax` | int | `0` | Maximum list price USD. 0 = no cap. |
| `mileageMax` | int | `0` | Maximum mileage. 0 = no cap. |
| `zip` | string | `90210` | US 5-digit ZIP. |
| `searchRadius` | int | `50` | Radius in miles, 10-500. |
| `condition` | enum | `USED` | `USED`, `NEW`, `CPO`, `NEW_CPO`, `ALL`. |
| `maxItems` | int | `10` | Hard cap. Default 10 keeps daily auto-test under 5 minutes; raise for production. |
| `proxyConfiguration` | object | residential US | Apify proxy. Residential US is recommended. |

### Cars.com output format

#### `cars_com_listing`

| Field | Type | Description (and how a buyer uses it) |
|---|---|---|
| `recordType` | string | Always `cars_com_listing`. |
| `outputSchemaVersion` | string | Date-stamped schema version, pin downstream pipelines safely. |
| `listingId` | string | Cars.com internal listing UUID, stable across runs. |
| `listingUrl` | string | Direct dealer URL when available. |
| `vin` | string|null | 17-char VIN. |
| `vinValid` | bool | True when the VIN is structurally valid, filter on `vinValid: true` to drop garbage rows. |
| `vinDecoded` | object|null | `{ year, manufacturer, country }` decoded inline, no NHTSA round-trip. |
| `year`, `make`, `model`, `trim` | mixed | Vehicle identity. |
| `bodyStyle`, `exteriorColor`, `interiorColor` | string|null | |
| `transmission`, `drivetrain`, `fuelType` | string|null | |
| `mpgCity`, `mpgHighway` | int|null | Integer MPG; sort and filter without parsing strings. |
| `price` | string|null | Original Cars.com price string. |
| `priceUsd` | int|null | Numeric mirror in USD; use this for math. |
| `mileage` | string|null | Original mileage string. |
| `mileageMiles` | int|null | Numeric mirror; use this for math. |
| `listedAt`, `scrapedAt` | string | ISO 8601 timestamps. |
| `dealer` | object|null | `{ name, phone, address, city, state, zip, lat, lon, distanceMi }`, geo joined per listing, no re-geocoding needed. |
| `images` | string\[] | Photo URLs (max 30 per listing). |
| `agentMarkdown` | string | 300-500 char ready-to-paste LLM summary card per record. |
| `fieldCompletenessScore` | number | 0-100, lets buyers and agents self-filter sparse rows. |

#### Sample record

```json
{
  "recordType": "cars_com_listing",
  "outputSchemaVersion": "2026-05-09",
  "listingId": "b47b2d08-da47-4270-81e6-5c18ba5da2d2",
  "listingUrl": "https://www.example-dealer.com/inventory/...",
  "vin": "5UXCR4C09N9M69613",
  "vinValid": true,
  "vinDecoded": { "year": 2022, "manufacturer": "BMW", "country": "North America" },
  "year": 2022, "make": "BMW", "model": "X5", "trim": "sDrive40i",
  "bodyStyle": "SUV", "exteriorColor": "Alpine White", "interiorColor": "Black",
  "transmission": "Automatic", "drivetrain": "RWD", "fuelType": "Gasoline",
  "mpgCity": 21, "mpgHighway": 26,
  "price": "40084", "priceUsd": 40084,
  "mileage": "20594", "mileageMiles": 20594,
  "listedAt": "2026-04-12T10:30:00", "scrapedAt": "2026-05-09T15:30:22.413Z",
  "dealer": {
    "name": "Sample BMW", "phone": "(310) 555-0101",
    "address": "1234 Wilshire Blvd", "city": "Beverly Hills", "state": "CA", "zip": "90210",
    "lat": 34.10103, "lon": -118.41475, "distanceMi": 2.4
  },
  "images": ["https://example.com/photo-1.jpg"],
  "agentMarkdown": "🚗 2022 BMW X5 sDrive40i\n💰 $40,084\n📏 20,594 mi\n📍 Beverly Hills, CA (2 mi)\n🔗 https://...",
  "fieldCompletenessScore": 95
}
```

### During the Actor run

Each run paginates through Cars.com results 50 listings at a time, normalizes every record, and writes the dataset. Typical 10-record run finishes in ~7 seconds; 100-record run under a minute. The default key-value store holds **`OUTPUT`** (compact run summary) and **`AGENT_BRIEFING`** (markdown digest of the run).

### FAQ

#### How is this different from the five existing free Cars.com scrapers on the Apify Store?

The free Cars.com actors on the Store have combined ~37 monthly users and a single review across all of them. They scrape rendered HTML, leak `$` and `,` straight into the price field, never validate the VIN, drop the dealer's lat / lon, and break monthly when Cars.com tweaks a class name. This actor consumes the upstream GraphQL contract directly, validates every VIN, returns numeric mirrors of price / mileage / MPG, joins dealer geo per listing, and ships a versioned schema with idempotent IDs. The premium tier is small ($3-5 per 1,000 records vs free) and the architecture is meaningfully more robust.

#### Why does this cost more than the free actors?

If you're feeding the data into a customer-facing product, a daily AI-agent run, or a dealer-monitoring pipeline, the per-record cost pays back the first time a free actor breaks silently. Free actors trade reliability for cost; this actor trades a few dollars per 1,000 records for a pipeline that doesn't go silently empty.

#### Will this break when Cars.com changes their site?

Cars.com redesigns the rendered HTML on a regular cadence. This actor consumes a far more stable upstream contract, so cosmetic UI changes don't break it. When the underlying contract does change, the actor adapts within 24-48 hours and we ship a build update.

#### How fast is it?

A 10-record run typically completes in 7 seconds. A 100-record run is under a minute. Low latency even at higher volume.

#### How reliable is this for daily production use?

Built for it. We monitor every run daily, ship maintenance updates within 24-48 hours when needed, and the architecture is meaningfully more robust than the free actors that scrape rendered HTML.

#### What model values does the keyword field accept?

Anything Cars.com itself accepts as a search keyword: `"3 Series"`, `"Civic"`, `"F-150"`, `"Model 3"` all work. The keyword is matched against Cars.com's internal model catalog, so close-match queries also surface relevant trims (e.g., `"3 Series"` returns 330i, 330e, 330xDrive, 228 Gran Coupe).

#### Can I monitor only listings new since the previous run?

Use the `listingId` (or VIN-based `recordId`) as your dedupe key on the consumer side. Records are idempotent, re-running the same query produces the same `listingId` per car, so a downstream sink can `INSERT ... ON CONFLICT DO UPDATE` cleanly and detect new rows.

#### Why not just use the KBB Scraper instead?

Run both. We ship a [companion KBB Scraper](https://apify.com/skootle/kbb-scraper) on the same record schema. Cars.com gives you volume and trim breadth; KBB gives you the Price Advisor `GREAT` / `GOOD` / `FAIR` / `HIGH` deal grade. Most flippers and dealer-intel buyers run both: KBB for the deal-quality signal on a tight ZIP, Cars.com for the broader inventory sweep across the metro.

#### Can I integrate with Make / Zapier / n8n / Slack?

Yes. From the actor page, click **Integrations** and pick your destination. Apify provides native connectors for all of them.

#### Can I use this with Python?

Yes. Use the [Apify Python client](https://docs.apify.com/api/client/python): `client.actor("skootle/cars-com-scraper").call(run_input={...})` and read the dataset.

#### What's the cheapest way to use this?

The $5/month Apify free credit covers about 1,000 listings on the FREE plan, enough to validate the schema against your pipeline. For production volume, GOLD at $3.50 per 1,000 records is the sweet spot; PLATINUM and DIAMOND drop to $3.00.

#### Your feedback

Hit a bug or want a feature? Open an issue on the [Issues tab](https://apify.com/skootle/cars-com-scraper/issues/open) rather than the reviews page, and we'll fix it fast (typically within 48 hours).

### Why choose Cars.com Scraper

- **7-second typical run for 10 records**, daily price-watch finishes before your coffee
- **Hand-tuned for Cars.com. Fixes ship the same week the source changes**, far more stable than HTML-scraping competitors
- **Returns dealer geo so you can radius-filter without re-geocoding**, lat / lon and `distanceMi` per listing, ready for CRM and lead-gen workflows
- **Every VIN is real. No junk rows polluting your dataset**, structurally validated on every record
- **VIN decoded inline**, model year + manufacturer + country, no NHTSA round-trip, no extra API call
- **Sort and filter without parsing strings**, numeric mirrors of price, mileage, and MPG on every row
- **Agent-ready**, `agentMarkdown` per record + `AGENT_BRIEFING.md` per run, drop into Claude / ChatGPT / Slack as cards
- **Cross-platform parity with the [KBB Scraper](https://apify.com/skootle/kbb-scraper)**, run both and pivot between sources without remapping
- **Safe to dedupe across re-runs**, `cars-com:vin:<VIN>` when valid, else `cars-com:listing:<id>`; refreshes upsert cleanly
- **Schema doesn't break your pipeline**, `outputSchemaVersion` is date-stamped; downstream pipelines can pin

### Other Skootle actors you might want to check

- **[Kelley Blue Book Scraper](https://apify.com/skootle/kbb-scraper)**, companion used-car actor with the KBB Price Advisor `GREAT` / `GOOD` / `FAIR` / `HIGH` deal grade. Run both for full coverage.
- **[eBay Sold Comps](https://apify.com/skootle/ebay-sold-comps)**, sold-listing comps with variant-aware grouping for resale-price benchmarks
- **[SEC EDGAR Filings Monitor](https://apify.com/skootle/sec-edgar-filings)**, public-company filings stream for dealer-network operators (CarMax, Carvana, Lithia, Penske, AutoNation)

Export, run via API, schedule, or integrate with other tools.

### Support and contact

File issues on this actor's page (Issues tab), replies within 48 hours. For feature requests, drop them in the same tracker tagged `enhancement`.

# Actor input Schema

## `make` (type: `string`):

Vehicle make. Example: BMW, Honda, Ford, Toyota.

## `model` (type: `string`):

Vehicle model. Free-text (used as a search keyword). Example: '3 Series', 'Civic', 'F-150'.

## `yearMin` (type: `integer`):

Minimum model year.

## `yearMax` (type: `integer`):

Maximum model year.

## `priceMax` (type: `integer`):

Maximum list price in USD. Leave 0 for no cap.

## `mileageMax` (type: `integer`):

Maximum mileage in miles. Leave 0 for no cap.

## `zip` (type: `string`):

US 5-digit ZIP code. The actor geocodes this internally to a lat/lon pair for radius search.

## `searchRadius` (type: `integer`):

Radius around the ZIP code in miles.

## `condition` (type: `string`):

Stock type filter.

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

Hard cap on records. Default 10 keeps the daily auto-test under 5 minutes; raise for production runs.

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

Apify proxy. Residential US is recommended.

## Actor input object example

```json
{
  "make": "BMW",
  "model": "3 Series",
  "yearMin": 2020,
  "yearMax": 2024,
  "priceMax": 0,
  "mileageMax": 0,
  "zip": "90210",
  "searchRadius": 50,
  "condition": "USED",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Normalized cars.com listing records.

## `runSummary` (type: `string`):

Compact OUTPUT object with item count, error counts, and quality diagnostics.

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("skootle/cars-com-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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    } }

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

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

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

```

## CLI example

```bash
echo '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call skootle/cars-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=skootle/cars-com-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🚗 Cars.com Scraper",
        "description": "Scrape Cars.com listings by make, model, year, ZIP, price, mileage. Clean records with verified VINs, dealer location + distance, photos. For used-car flippers, dealer-intel teams, and AI shopping agents. Export, run via API, schedule, or integrate with other tools.",
        "version": "0.1",
        "x-build-id": "wGZUHXIQ6C5gtN9EX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/skootle~cars-com-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-skootle-cars-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/skootle~cars-com-scraper/runs": {
            "post": {
                "operationId": "runs-sync-skootle-cars-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/skootle~cars-com-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-skootle-cars-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "make",
                    "zip"
                ],
                "properties": {
                    "make": {
                        "title": "Make",
                        "type": "string",
                        "description": "Vehicle make. Example: BMW, Honda, Ford, Toyota.",
                        "default": "BMW"
                    },
                    "model": {
                        "title": "Model",
                        "type": "string",
                        "description": "Vehicle model. Free-text (used as a search keyword). Example: '3 Series', 'Civic', 'F-150'.",
                        "default": "3 Series"
                    },
                    "yearMin": {
                        "title": "Year (min)",
                        "minimum": 1980,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Minimum model year.",
                        "default": 2020
                    },
                    "yearMax": {
                        "title": "Year (max)",
                        "minimum": 1980,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Maximum model year.",
                        "default": 2024
                    },
                    "priceMax": {
                        "title": "Price max (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum list price in USD. Leave 0 for no cap.",
                        "default": 0
                    },
                    "mileageMax": {
                        "title": "Mileage max",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum mileage in miles. Leave 0 for no cap.",
                        "default": 0
                    },
                    "zip": {
                        "title": "ZIP code",
                        "pattern": "^[0-9]{5}$",
                        "type": "string",
                        "description": "US 5-digit ZIP code. The actor geocodes this internally to a lat/lon pair for radius search.",
                        "default": "90210"
                    },
                    "searchRadius": {
                        "title": "Search radius (miles)",
                        "minimum": 10,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Radius around the ZIP code in miles.",
                        "default": 50
                    },
                    "condition": {
                        "title": "Condition",
                        "enum": [
                            "USED",
                            "NEW",
                            "CPO",
                            "NEW_CPO",
                            "ALL"
                        ],
                        "type": "string",
                        "description": "Stock type filter.",
                        "default": "USED"
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on records. Default 10 keeps the daily auto-test under 5 minutes; raise for production runs.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy. Residential US is recommended.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
