# Autotrader USA Scraper (`cocoa_kit/autotrader-scraper`) Actor

Scrape Autotrader.com car listings: price, mileage, VIN, specs, photos and dealer contacts. Search by make, model, state or URL. From $1.50 per 1,000.

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

## Pricing

from $0.15 / 1,000 results

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Autotrader Scraper do?

Autotrader Scraper extracts car listings from [Autotrader.com](https://www.autotrader.com), the largest vehicle marketplace in the United States. Enter a make and model, pick a state, or paste any Autotrader search URL, and get every matching listing as clean, structured data: **price, mileage, VIN, specs, photos and dealer contact details**.

Autotrader has no public API. This Actor works as an **unofficial Autotrader API** you can run from your browser, on a schedule, or from your own code.

- 🚗 **Complete listings in one pass.** Price, VIN, mileage, specs, vehicle history, all photos and the dealer's phone and address for every car.
- ⚡ **Fast.** 1,000 to 2,000 listings per minute.
- 💰 **Low, predictable price.** $1.50 per 1,000 listings. Proxies and compute are included, so there are no extra fees.
- 🔓 **No 400-result limit.** Autotrader stops showing results after 400 per search. This scraper keeps going and collects the whole search, without duplicates.
- 🗺️ **Nationwide or state by state.** All 50 states plus DC.
- 🔔 **New-listing monitoring.** Schedule it and receive only the cars that were listed since the last run.
- 📦 **Export anywhere.** JSON, CSV, Excel, HTML, the Apify API, or integrations such as Make, Zapier, n8n and Google Sheets.

### Why scrape Autotrader?

Autotrader lists more than 3 million new and used vehicles from dealers and private sellers across the US. With that data you can:

- **Track used car prices** by make, model, year, trim and region, and see how they move over time.
- **Find underpriced cars** before others do, using price, MSRP, mileage and Autotrader's own price rating.
- **Monitor competitors' inventory** if you run a dealership: what they stock, how they price it and how long it sits.
- **Generate dealer leads** with dealership names, phone numbers, websites, addresses and ratings.
- **Feed pricing models and market research** with VIN-level data that is ready for a spreadsheet or database.
- **Get alerts on new listings** for the exact car you want to buy.

### What data can you extract from Autotrader?

| Group   | Fields                                                                                                       |
| ------- | ------------------------------------------------------------------------------------------------------------ |
| Vehicle | Title, condition (new / used / certified), year, make, model, trim, body style, VIN, stock number            |
| Price   | Price, MSRP, dealer fees, price rating ("Great Price"), price-reduced flag                                   |
| Specs   | Mileage, engine, transmission, drivetrain, fuel type, city / highway MPG, doors, exterior and interior color |
| History | Vehicle history highlights such as `NO_ACCIDENTS_REPORTED` and `ONE_OWNER`                                   |
| Listing | Listing URL, days on site, listed date, description, all photo URLs                                          |
| Seller  | Dealer name, phone, website, rating, review count, street address, city, state, ZIP, coordinates             |

Need more? Turn on **Scrape vehicle pages** to add the full seller description and the complete feature lists (exterior, interior, safety, technology and more).

### How to scrape Autotrader

1. Open the Actor and go to the **Input** tab.
2. Enter one or more **Search keywords** (for example `Toyota Camry` or `2021 Ford F-150`), or paste Autotrader URLs into **Start URLs**.
3. Choose **Nationwide** or a **Specific state**.
4. Set **Max items** to the number of listings you want. Use `0` for no limit.
5. Click **Start**. When the run finishes, download the results from the **Output** tab as JSON, CSV, Excel or HTML, or fetch them through the API.

The default input scrapes 25 Toyota Camry listings in about 10 seconds, so you can see real results for about 4 cents.

### Input

#### Three ways to say what you want

| You enter                      | What happens                                                                                                                                                                                           |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Search keywords**            | Makes, models and years are recognized and turned into exact filters. `2021 Ford F-150` returns only 2021 F-150s. Anything else, such as `electric SUV`, is passed to Autotrader's own keyword search. |
| **Start URLs** (search pages)  | Set up any search on autotrader.com, copy the URL, paste it. Every filter in the URL is kept, including ones this Actor has no field for (color, features, radius around a ZIP code).                  |
| **Start URLs** (vehicle pages) | A URL like `https://www.autotrader.com/cars-for-sale/vehicle/792175500` returns that one vehicle with full details.                                                                                    |
| Nothing                        | All vehicles matching the filters below, for example every new car in Rhode Island.                                                                                                                    |

#### Options

| Field                                   | What it does                                                                                                                             |
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Location** and **State**              | Nationwide, or only listings whose seller is in the chosen state.                                                                        |
| **Max items**                           | Total number of listings to save. `0` means no limit. Default `25`.                                                                      |
| **Max items per search**                | Limit for each keyword or start URL. `0` means no limit.                                                                                 |
| **Condition**, **Seller type**          | New, used or certified. Dealer or private seller.                                                                                        |
| **Min / max price**, **Min / max year** | Price range in USD and model-year range. `0` means no limit.                                                                             |
| **Sort by**                             | Relevance, newest listings, price, mileage or year.                                                                                      |
| **Max listing age (days)**              | Keep only listings added in the last N days. You pay only for those.                                                                     |
| **Scrape vehicle pages**                | Adds the full description and feature lists. Charged per page. See [How much does it cost?](#how-much-does-it-cost-to-scrape-autotrader) |
| **Skip listings saved by earlier runs** | Remembers saved listing IDs for 30 days and skips them next time.                                                                        |
| **Proxy configuration**                 | Already set up for you. No need to change it.                                                                                            |

The filters apply to keyword searches. Start URLs keep the filters and location they already contain.

#### Example input

Used Honda Civics in Texas, at most $20,000, newest first:

```json
{
    "searchKeywords": ["Honda Civic"],
    "locationScope": "state",
    "state": "TX",
    "condition": "used",
    "maxPrice": 20000,
    "sortBy": "newest",
    "maxItems": 500
}
```

### Output

Results are stored in a dataset. One listing looks like this (photo list shortened):

```json
{
    "id": "792322941",
    "url": "https://www.autotrader.com/cars-for-sale/vehicle/792322941",
    "title": "New 2026 Toyota Camry XSE",
    "condition": "new",
    "year": 2026,
    "make": "Toyota",
    "model": "Camry",
    "trim": "XSE",
    "bodyStyle": "Sedan",
    "price": 44726,
    "msrp": 44313,
    "dealerFees": 413,
    "priceRating": null,
    "priceReduced": false,
    "currency": "USD",
    "mileage": 3,
    "vin": "4T1DBADK0TU569596",
    "stockNumber": "N260808",
    "exteriorColor": "Underground",
    "interiorColor": "Cockpit Red",
    "engine": "Hybrid",
    "transmission": "Continuously Variable Automatic",
    "drivetrain": "All wheel drive",
    "fuelType": "Hybrid Gas/Electric",
    "mpgCity": 43,
    "mpgHighway": 43,
    "doors": 4,
    "vehicleHistory": [],
    "daysOnSite": 3,
    "listedDate": "2026-09-29",
    "description": "College Grad and Military rebates are not included in pricing. Tax, title, license and $377.63 doc fee additional. See dealer for complete d...",
    "features": null,
    "imageUrl": "https://images.autotrader.com/hn/c/ab7f45fe3a2c407895d06de8c1f039a8.jpg",
    "images": [
        "https://images.autotrader.com/hn/c/ab7f45fe3a2c407895d06de8c1f039a8.jpg",
        "https://images.autotrader.com/hn/c/93db08556c6a4454890124c3fa5bbd1b.jpg"
    ],
    "location": "Hodgkins, IL",
    "seller": {
        "id": "71891",
        "type": "dealer",
        "name": "Continental Toyota",
        "phone": "6303940030",
        "website": "https://www.continentaltoyota.com",
        "rating": 4.8,
        "reviewCount": 4332,
        "address": "6701 S La Grange Rd",
        "city": "Hodgkins",
        "state": "IL",
        "zip": "60525",
        "latitude": 41.767902,
        "longitude": -87.86754
    },
    "dealerListingUrl": "https://www.continentaltoyota.com/inventory/New-2026-Toyota-Camry-XSE-4T1DBADK0TU569596/",
    "searchTerm": "Toyota Camry",
    "scrapedAt": "2026-10-02T19:59:07.986Z"
}
```

Good to know:

- Prices, mileage and years are real numbers, not text, so you can sort and filter them directly in Excel, Google Sheets or a database.
- `price` is the price shown on Autotrader. Dealer fees included in it are also listed separately in `dealerFees`.
- `listedDate` is calculated from `daysOnSite`.
- Turn on **Scrape vehicle pages** to get the complete `description` and the `features` lists.
- A field is `null` when the seller did not provide it.

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

You pay only for the results you get. Proxies, compute and storage are included.

| What you pay for                                         | Price                               |
| -------------------------------------------------------- | ----------------------------------- |
| Each listing saved                                       | **$1.50 per 1,000** ($0.0015 each)  |
| Each vehicle page, only with **Scrape vehicle pages** on | **+ $2.00 per 1,000** ($0.002 each) |

Listings that are filtered out or that you already received in an earlier run are free.

| Example run                                  | Listings | Time    | Price |
| -------------------------------------------- | -------- | ------- | ----- |
| Default input (25 Toyota Camry)              | 25       | 10 s    | $0.04 |
| Ford F-150 in Colorado                       | 300      | 36 s    | $0.45 |
| Honda Civic nationwide                       | 1,500    | 74 s    | $2.25 |
| Every Toyota Prius in the US                 | 5,473    | 2.5 min | $8.21 |
| 20 listings with **Scrape vehicle pages** on | 20       | 36 s    | $0.07 |

You stay in control of your budget: set **Max items**, or set a **maximum cost per run** in the run options and the Actor stops cleanly when it is reached, keeping everything it has saved.

### Monitor new listings on a schedule

To receive only new listings every day:

1. Set your keywords and filters.
2. Set **Sort by** to **Newest listings**.
3. Turn on **Skip listings saved by earlier runs**.
4. Set **Max items** to `0`.
5. Create a [schedule](https://docs.apify.com/platform/schedules) for the Actor.

Each run saves the listings it has not saved before and stops when it reaches known ones. Listing IDs are remembered for 30 days in a key-value store named `autotrader-seen-listings`. Use a different **Seen-listings store name** for each search you want to track separately.

### FAQ

#### Is it legal to scrape Autotrader?

The scraper collects only publicly visible vehicle listings and business contact details of dealers. It does not collect private sellers' names or phone numbers. You are responsible for how you use the data, including compliance with Autotrader's terms of service and with privacy laws such as GDPR and CCPA. If you are unsure, consult a lawyer. See also Apify's article on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

#### Can I use it through the API or from my own code?

Yes. Use the [Apify API](https://docs.apify.com/api/v2), the `apify-client` package for [JavaScript](https://docs.apify.com/api/client/js) or [Python](https://docs.apify.com/api/client/python), or connect the Actor to tools such as Make, Zapier and n8n through [integrations](https://docs.apify.com/platform/integrations). The **API** button on the Actor page shows ready-made code.

#### Is there an official Autotrader API?

No. Autotrader does not offer a public API for its listings. This Actor gives you the same data in a structured form, and you can call it like an API through the [Apify API](https://docs.apify.com/api/v2).

#### Can I scrape more than 400 results from one search?

Yes. Autotrader itself shows at most 400 results per search, but this scraper automatically divides a large search into smaller ones and merges them. Results beyond the first 400 arrive grouped by model year and price range rather than in your sort order. In the largest searches, a small share of listings that have no price can be left out: in a test that collected every Toyota Prius in the US, 98% of listings were returned.

#### How does the state filter work?

Choose **Specific state** and you get only listings whose seller is located in that state.

#### Does it collect private sellers' contact details?

No. For private-seller listings you get the vehicle and its city, state and ZIP, but not the seller's name, phone number or street address. Dealer contact details are included.

#### I need a field or filter that is missing

Open an issue on the **Issues** tab of the Actor page and describe what you need. Bug reports are welcome there too; include the run ID so it can be reproduced.

# Actor input Schema

## `searchKeywords` (type: `array`):

What to search for, one search per line. Makes, models and years are recognized and turned into exact filters ("Toyota Camry", "2021 Ford F-150"); anything else is used as a free-text search ("electric SUV"). Leave empty to search all vehicles.

## `startUrls` (type: `array`):

Autotrader search-result URLs (all filters in the URL are kept) or single vehicle URLs. Use this when you need a filter that has no field below: set it up on autotrader.com and paste the URL.

## `locationScope` (type: `string`):

Search the whole United States or only one state. Applies to keyword searches; start URLs keep the location they contain.

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

Used when Location is "Specific state". Only listings whose seller is located in this state are saved.

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

Maximum number of listings to save in total. Set to 0 for no limit.

## `maxItemsPerSearch` (type: `integer`):

Maximum number of listings to save for each keyword or start URL. Set to 0 for no limit.

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

New, used or manufacturer-certified vehicles.

## `sellerType` (type: `string`):

Listings from dealers, private sellers, or both.

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

Lowest price to include. Set to 0 for no minimum.

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

Highest price to include. Set to 0 for no maximum.

## `minYear` (type: `integer`):

Oldest model year to include. Set to 0 for no minimum.

## `maxYear` (type: `integer`):

Newest model year to include. Set to 0 for no maximum.

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

Order in which Autotrader returns listings. State searches sorted by relevance are fetched closest-to-state-center first.

## `maxListingAgeDays` (type: `integer`):

Save only listings that have been on Autotrader for at most this many days. Set to 0 for no age limit.

## `scrapeItemDetails` (type: `boolean`):

Open every vehicle page to add the full seller description and the feature lists. Search results already include price, mileage, VIN, specs, photos and seller, so turn this on only when you need those extras. Vehicle pages are charged separately.

## `skipSeenListings` (type: `boolean`):

Remember saved listing IDs in a named key-value store and skip them in later runs. Combine with Sort by "Newest listings" on a schedule to get only new listings each run.

## `seenListingsStoreName` (type: `string`):

Name of the key-value store that remembers listing IDs for 30 days. Use different names to track different searches separately.

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

US residential proxies are preselected and required for reliable results. Proxy usage is included in the price.

## `maxConcurrency` (type: `integer`):

Maximum number of requests running in parallel.

## `maxRequestRetries` (type: `integer`):

How many times a blocked or failed request is retried with a different IP before giving up.

## Actor input object example

```json
{
  "searchKeywords": [
    "Toyota Camry"
  ],
  "locationScope": "nationwide",
  "state": "CA",
  "maxItems": 25,
  "maxItemsPerSearch": 0,
  "condition": "any",
  "sellerType": "any",
  "sortBy": "relevance",
  "scrapeItemDetails": false,
  "skipSeenListings": false,
  "seenListingsStoreName": "autotrader-seen-listings",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "maxConcurrency": 8,
  "maxRequestRetries": 8
}
```

# Actor output Schema

## `listings` (type: `string`):

All saved listings with price, mileage, VIN, specs, photos and seller.

## `allFields` (type: `string`):

The same listings with every field.

# 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 = {
    "searchKeywords": [
        "Toyota Camry"
    ],
    "state": "CA",
    "maxItems": 25,
    "minPrice": 0,
    "maxPrice": 0,
    "minYear": 0,
    "maxYear": 0,
    "maxListingAgeDays": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cocoa_kit/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 = {
    "searchKeywords": ["Toyota Camry"],
    "state": "CA",
    "maxItems": 25,
    "minPrice": 0,
    "maxPrice": 0,
    "minYear": 0,
    "maxYear": 0,
    "maxListingAgeDays": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("cocoa_kit/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 '{
  "searchKeywords": [
    "Toyota Camry"
  ],
  "state": "CA",
  "maxItems": 25,
  "minPrice": 0,
  "maxPrice": 0,
  "minYear": 0,
  "maxYear": 0,
  "maxListingAgeDays": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call cocoa_kit/autotrader-scraper --silent --output-dataset

```

## MCP server setup

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