# Autotrader Scraper (`scraptivo/autotrader-scraper`) Actor

Collect Autotrader.com car listings by ZIP, search URL, or make and model filters. Export price, mileage, specs, dealer details, and listing URLs.

- **URL**: https://apify.com/scraptivo/autotrader-scraper.md
- **Developed by:** [Scraptivo](https://apify.com/scraptivo) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 car listings

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/actors/running/actors-in-store.md#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

**Autotrader Scraper** collects car listings from [Autotrader.com](https://www.autotrader.com) and turns them into structured data for inventory monitoring, price comparison, and dealership research. Provide a ZIP code, paste an Autotrader search URL, or set make and model filters, then export year, make, model, price, mileage, dealer, and listing URL to JSON, CSV, or Excel. Use it to compare used-car prices, watch local inventory, and schedule recurring collection. Pricing is **$1.00 per 1,000 car listings**.

### What can you automate with Autotrader Scraper?

- **Build local inventory databases** — Search a ZIP and radius, then export price, mileage, trim, and dealer on every row.
- **Compare asking prices** — Filter by make, model, year, price, and mileage, then sort by price or newest listings.
- **Watch dealership stock** — Re-run the same ZIP and make list on a schedule and keep the first row for each `listingId` or `vin`.
- **Reuse a browser search** — Paste an Autotrader search URL; individual fields override matching URL parameters when both are set.
- **Schedule recurring collection** — Run daily or weekly and push new listings into Sheets, a CRM, or an alert workflow.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Used-car dealers and buyers | Compare nearby asking prices, mileage, and deal indicators for target makes. |
| Market researchers | Track listing mix (new, used, certified) and days on site in a metro area. |
| Lead-generation teams | Collect dealer names and listing URLs for outreach or inventory feeds. |
| Pricing analysts | Pair Autotrader price with KBB fair-purchase amounts when Autotrader publishes them. |

### What data can you collect from Autotrader?

| Data group | Example fields | How it helps |
|---|---|---|
| Vehicle identity | `listingId`, `vin`, `title`, `year`, `make`, `model`, `trim`, `url` | Identify each listing and deduplicate across runs with `listingId` or `vin`. |
| Price and deal | `price`, `kbbFppAmount`, `dealIndicator`, `daysOnSite` | Compare asking price with Autotrader's published KBB range when present. |
| Specs | `mileage`, `engine`, `transmission`, `driveType`, `fuelType`, `bodyStyle`, `mpgCity` | Filter inventory by mechanical and body attributes. |
| Dealer | `dealerName`, `dealerPhone`, `dealerCity`, `dealerState`, `distance` | See who is selling and how far the listing is from the search ZIP. |
| Media | `imageUrl`, `listingType` | Preview the listing and distinguish NEW / USED / CERTIFIED. |

Autotrader returns at most about **330 listings per search query**, regardless of `maxItems` or the site's total result count. Use narrower filters or multiple ZIP / make runs for more coverage. Some KBB and dealer fields are empty when Autotrader does not publish them.

### How to use Autotrader Scraper

1. Open the [Autotrader Scraper](https://apify.com/scraptivo/autotrader-scraper) on Apify.
2. Enter a ZIP code such as `72076`, or paste an Autotrader search URL from your browser.
3. Optionally set makes, price, year, mileage, and **Max items** (`0` means all listings this search can return, up to Autotrader's per-search cap).
4. Run the Actor — it writes one dataset row per car listing.
5. Export the dataset or connect it to your workflow.

```json
{
    "zip": "72076",
    "searchRadius": 50,
    "maxItems": 5,
    "sortBy": "relevance",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Example workflow

#### Compare used Toyota and BMW prices near a ZIP

1. Schedule a weekly run with `zip` = `"72076"`, `searchRadius` = `50`, `makeCodes` = `["TOYOTA", "BMW"]`, `listingTypes` = `["USED"]`, and `sortBy` = `"price_asc"`.
2. Keep rows inside your price and mileage band using `price` and `mileage`.
3. Use `dealIndicator` and `kbbFppAmount` when present to flag listings priced below the published KBB range.
4. Send new records to Google Sheets or a CRM through a webhook after each run.
5. Deduplicate user-side against `listingId` (or `vin` when you need vehicle-level uniqueness).

The Actor does not merge results across runs — those steps happen in your pipeline.

### Automate and integrate your results

- **Schedules** — Run **daily** for fast-moving used inventory, or **weekly** for a market snapshot. Create a separate scheduled task per ZIP and make list.
- **Webhooks** — Push completed runs into Google Sheets, Make, Zapier, Slack, or a CRM.
- **Exports and API** — Download JSON, CSV, Excel, or HTML from the Apify Console, or start a run from the API:

```shell
curl -X POST "https://api.apify.com/v2/acts/scraptivo~autotrader-scraper/runs?token=YOUR-APIFY-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "zip": "72076",
    "searchRadius": 50,
    "makeCodes": ["TOYOTA", "BMW"],
    "maxItems": 100
  }'
```

Deduplicate user-side with `listingId`.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---|---:|---|---|
| `searchUrl` | string | No | — | Autotrader search URL. Query params merge with fields below; fields win on conflict. |
| `allListingType` | string | No | `all-cars` | Listing category path (`all-cars`). |
| `zip` | string | No | — | ZIP for location search. Required unless `searchUrl` already includes a zip. |
| `city` | string | No | — | Optional city override. Usually resolved from ZIP. |
| `state` | string | No | — | Optional state override, e.g. `AR`. |
| `dmaCode` | string | No | — | Optional designated market area code. |
| `searchRadius` | integer | No | `50` | Radius in miles (0–500). |
| `makeCodes` | array | No | — | Makes such as `BMW`, `TOYOTA`, `FORD`. |
| `modelCodes` | array | No | — | Models such as `3-Series`, `Camry`. |
| `minPrice` / `maxPrice` | integer | No | — | Price band in USD. |
| `maxMileage` | integer | No | — | Maximum mileage. |
| `startYear` / `endYear` | integer | No | — | Model-year band (1980–2030). |
| `listingTypes` | array | No | — | `NEW`, `USED`, `CERTIFIED`, `3P_CERT`. |
| `sellerTypes` | array | No | — | `d` dealer, `p` private. |
| `transmissionCodes` | array | No | — | `AUT`, `MAN`. |
| `driveGroups` | array | No | — | `AWD4WD`, `FWD`, `RWD`. |
| `vehicleStyleCodes` | array | No | — | `CONVERT`, `COUPE`, `HATCH`, `SEDAN`, `SUVCROSS`, `TRUCKS`, `VANMV`, `WAGON`. |
| `engineCodes` | array | No | — | Cylinder codes such as `4CLDR`, `6CLDR`, `8CLDR`. |
| `fuelTypeGroups` | array | No | — | `DSL`, `ELE`, `GSL`, `HYB`, `PIH`. |
| `doorCodes` | array | No | — | `2`, `3`, `4`, `5`. |
| `exteriorColors` / `interiorColors` | array | No | — | Color names such as `BLACK`, `WHITE`. |
| `mpgRanges` | array | No | — | `0`, `10-MPG`, `20-MPG`, `30-MPG`, `40-MPG`. |
| `featureCodes` | array | No | — | Feature codes copied from an Autotrader search URL. |
| `dealType` | string | No | — | Deal filter such as `greatprice`. |
| `dateRange` | string | No | — | Listing age from a search URL, e.g. `last-7-days`. |
| `vin` | string | No | — | Filter to one VIN. |
| `listingId` | string | No | — | Filter to one Autotrader listing ID. |
| `newSearch` | boolean | No | `true` | Start a new Autotrader search session. |
| `sortBy` | string | No | `relevance` | `relevance`, `price_desc`, `price_asc`, `newest`, `mileage_asc`, `year_desc`, `year_asc`. |
| `maxItems` | integer | No | `0` | Cap listings; `0` means all available from this search (still capped near 330). |
| `proxyConfiguration` | object | No | Residential | Apify proxy settings. |

Provide a `searchUrl`, a `zip`, or at least one `makeCodes` value.

#### Why does a run stop around 330 listings?

Autotrader returns at most about 330 listings per search query. Narrow the ZIP, radius, make, price, or year, or split the work across multiple runs.

### Output example

```json
{
    "listingId": 782603846,
    "vin": "5N1AZ2MG7JN124151",
    "year": 2018,
    "title": "Used 2018 Nissan Murano Platinum",
    "make": "Nissan",
    "makeCode": "NISSAN",
    "model": "Murano",
    "modelCode": "MURANO",
    "trim": "Platinum",
    "price": 18875,
    "kbbFppAmount": 19470.0,
    "dealIndicator": "Great",
    "mileage": "69,189",
    "engine": "6-Cylinder",
    "transmission": "Automatic",
    "driveType": "FWD",
    "fuelType": "Gasoline",
    "exteriorColor": "Pearl White",
    "bodyStyle": "Sport Utility",
    "daysOnSite": 13,
    "dealerName": "McLarty Nissan of North Little Rock",
    "dealerPhone": "5014877573",
    "listingType": "USED",
    "url": "https://www.autotrader.com/cars-for-sale/vehicle/782603846"
}
```

### How much does it cost to scrape Autotrader?

Billing is pay-per-event. A one-time **Actor Start** fee of **$0.00005** applies per run. Each car listing is one `apify-default-dataset-item` event at **$1.00 per 1,000 listings**.

A 100-listing test costs about **$0.10** plus Actor Start. A 1,000-listing run costs about **$1.00** plus Actor Start. Apify plan discounts may reduce these prices. Platform compute and proxy usage are billed separately on your Apify plan.

### Reliability and responsible use

- **Proxy** — Residential proxies are recommended and are the Console prefill.
- **Search cap** — About 330 listings per search query is an Autotrader limit, not an Actor setting.
- **Conditional fields** — KBB amounts, deal indicators, and some dealer fields are empty when Autotrader does not publish them.
- **Public data** — The Actor collects publicly visible listing information from Autotrader.com.
- **Responsible use** — Only use the data in ways that comply with Autotrader's terms of service and applicable law.

### Frequently asked questions

#### Can I scrape Autotrader listings by ZIP and make?

Yes. Set `zip` and optional `makeCodes`, or paste a filtered Autotrader search URL in `searchUrl`. Individual fields override matching URL parameters when both are provided.

#### Can I schedule Autotrader Scraper to run automatically?

Yes. Open the **Scheduler** tab in Apify Console and set a daily or weekly cadence. Create separate schedules per ZIP and make list so each run stays under Autotrader's per-search cap.

#### What counts as one result?

One car listing written to the dataset is one billable result at **$1.00 per 1,000 listings**, plus Actor Start.

#### Why are some fields empty?

KBB fair-purchase amounts, deal indicators, and some dealer phone or city fields are omitted when Autotrader does not publish them on that listing.

#### How do I avoid duplicate records?

Within one run, listings are unique by `listingId`. Across runs the Actor appends results and does not merge them. When you combine datasets, keep the first row for each `listingId` (or `vin` for vehicle-level uniqueness).

#### Do I need a proxy?

Yes. Use Apify residential proxies. If a run returns unusually few listings or fails, confirm that `proxyConfiguration` uses the RESIDENTIAL group.

#### Can I collect more than 330 listings?

Not in a single search. Split the work by ZIP, radius, make, year, or price band and combine the datasets user-side.

### Related Scraptivo automations

- [Cars Scraper](https://apify.com/scraptivo/cars-scraper) — collect vehicle listings from additional automotive marketplaces.
- [AutoScout24 Scraper](https://apify.com/scraptivo/autoscout24-scraper) — cover European used-car inventory with the same workflow.
- [Kleinanzeigen Scraper](https://apify.com/scraptivo/kleinanzeigen-scraper) — add German classified vehicle and goods listings.
- [Dubizzle UAE Scraper](https://apify.com/scraptivo/dubizzle-scraper) — collect UAE motors listings when you need Gulf coverage.

### 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

## `searchUrl` (type: `string`):

Optional Autotrader search URL from your browser. Query params from this URL are merged with the individual filter fields below — individual fields override matching URL params when both are provided.

## `allListingType` (type: `string`):

Autotrader listing category path segment (usually all-cars)

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

ZIP code for location-based search. Required unless searchUrl includes a zip.

## `city` (type: `string`):

Optional city override. Normally resolved automatically from ZIP via Autotrader markets API.

## `state` (type: `string`):

Optional state override (e.g., AR). Normally resolved automatically from ZIP.

## `dmaCode` (type: `string`):

Optional designated market area code. Normally resolved automatically from ZIP.

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

Search radius in miles from the ZIP code

## `makeCodes` (type: `array`):

Car makes to include (e.g., BMW, TOYOTA, FORD). Leave empty for all makes.

## `modelCodes` (type: `array`):

Car models to include (e.g., 3-Series, Camry). Leave empty for all models.

## `minPrice` (type: `integer`):

Minimum price in USD

## `maxPrice` (type: `integer`):

Maximum price in USD

## `maxMileage` (type: `integer`):

Maximum mileage (e.g., 50000 for 50k miles)

## `startYear` (type: `integer`):

Earliest model year (e.g., 2020)

## `endYear` (type: `integer`):

Latest model year (e.g., 2025)

## `listingTypes` (type: `array`):

Types of listings: NEW, USED, CERTIFIED, 3P\_CERT

## `sellerTypes` (type: `array`):

Seller types: d (dealer), p (private)

## `transmissionCodes` (type: `array`):

Transmission types: AUT (Automatic), MAN (Manual)

## `driveGroups` (type: `array`):

Drivetrain: AWD4WD, FWD, RWD

## `vehicleStyleCodes` (type: `array`):

Body styles: CONVERT, COUPE, HATCH, SEDAN, SUVCROSS, TRUCKS, VANMV, WAGON

## `engineCodes` (type: `array`):

Engine codes: 3CLDR, 4CLDR, 6CLDR, 8CLDR, etc.

## `fuelTypeGroups` (type: `array`):

Fuel types: DSL, ELE, GSL, HYB, PIH

## `doorCodes` (type: `array`):

Number of doors: 2, 3, 4, 5

## `exteriorColors` (type: `array`):

Exterior colors: BLACK, WHITE, BLUE, RED, SILVER, etc.

## `interiorColors` (type: `array`):

Interior colors: BLACK, BEIGE, GRAY, etc.

## `mpgRanges` (type: `array`):

Fuel economy: 0, 10-MPG, 20-MPG, 30-MPG, 40-MPG

## `featureCodes` (type: `array`):

Feature/option codes from Autotrader (e.g., 1013, 1033, AT0001). Copy from a filtered search URL on autotrader.com.

## `dealType` (type: `string`):

Deal indicator filter such as greatprice

## `dateRange` (type: `string`):

Listing age filter from Autotrader (copy from a filtered search URL, e.g. last-7-days)

## `vin` (type: `string`):

Optional filter for a specific vehicle VIN

## `listingId` (type: `string`):

Optional filter for a specific Autotrader listing ID

## `newSearch` (type: `boolean`):

Send newSearch=true on the first listing API request (Autotrader default behavior)

## `sortBy` (type: `string`):

Sort order for results

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

Maximum number of listings to scrape (0 = all available from this search). Autotrader's API returns at most ~330 listings per search query regardless of totalResultCount — use narrower filters or multiple runs for more data.

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

Proxy settings for anti-bot protection. Use Apify Residential proxies for best results.

## Actor input object example

```json
{
  "searchUrl": "https://www.autotrader.com/cars-for-sale/all-cars?zip=72076&searchRadius=50",
  "allListingType": "all-cars",
  "zip": "72076",
  "searchRadius": 50,
  "makeCodes": [
    "BMW",
    "TOYOTA"
  ],
  "listingTypes": [
    "USED",
    "NEW",
    "CERTIFIED",
    "3P_CERT"
  ],
  "sellerTypes": [
    "d",
    "p"
  ],
  "newSearch": true,
  "sortBy": "relevance",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset containing scraped vehicle listings with full details

# 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 = {
    "searchUrl": "https://www.autotrader.com/cars-for-sale/all-cars?zip=72076&searchRadius=50",
    "allListingType": "all-cars",
    "zip": "72076",
    "searchRadius": 50,
    "makeCodes": [
        "BMW",
        "TOYOTA"
    ],
    "listingTypes": [
        "USED",
        "NEW",
        "CERTIFIED",
        "3P_CERT"
    ],
    "sellerTypes": [
        "d",
        "p"
    ],
    "newSearch": true,
    "sortBy": "relevance",
    "maxItems": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/autotrader-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 = {
    "searchUrl": "https://www.autotrader.com/cars-for-sale/all-cars?zip=72076&searchRadius=50",
    "allListingType": "all-cars",
    "zip": "72076",
    "searchRadius": 50,
    "makeCodes": [
        "BMW",
        "TOYOTA",
    ],
    "listingTypes": [
        "USED",
        "NEW",
        "CERTIFIED",
        "3P_CERT",
    ],
    "sellerTypes": [
        "d",
        "p",
    ],
    "newSearch": True,
    "sortBy": "relevance",
    "maxItems": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/autotrader-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 '{
  "searchUrl": "https://www.autotrader.com/cars-for-sale/all-cars?zip=72076&searchRadius=50",
  "allListingType": "all-cars",
  "zip": "72076",
  "searchRadius": 50,
  "makeCodes": [
    "BMW",
    "TOYOTA"
  ],
  "listingTypes": [
    "USED",
    "NEW",
    "CERTIFIED",
    "3P_CERT"
  ],
  "sellerTypes": [
    "d",
    "p"
  ],
  "newSearch": true,
  "sortBy": "relevance",
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scraptivo/autotrader-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraptivo/autotrader-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/3OO4aLzdqJA5WkCd9/builds/s8PC5W85wBOONcjKa/openapi.json
