# Carvana Scraper (`nickgardner829/carvana-scraper`) Actor

Scrape vehicle listings from Carvana.com. Extracts price, mileage, VIN, year, make, model, trim, color, photos, and availability status. Supports full inventory scrape, filtered search by make/model, or direct URL input. Uses Playwright with residential proxies to bypass bot detection.

- **URL**: https://apify.com/nickgardner829/carvana-scraper.md
- **Developed by:** [Nick Gardner](https://apify.com/nickgardner829) (community)
- **Categories:** Automation, E-commerce
- **Stats:** 7 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Carvana Scraper

Scrape Carvana.com car listings at scale. Extract 29 fields per vehicle including price, MSRP, KBB value, market adjustment, mileage, VIN, trim, body style, colors, fuel type, MPG, seating capacity, purchase status, price history, tags, and 6+ interior/exterior photos. Filter by make, model, or URL.

### Features

- **Full inventory scrape** — crawl Carvana's entire inventory
- **Filter by make/model** — target specific vehicle types
- **URL mode** — scrape specific search result or vehicle detail pages
- **29 data fields** per vehicle
- **Price history tracking** — see how prices changed over time
- **Photo URLs** — 6+ interior/exterior photos per vehicle
- **Proxy support** — residential proxy rotation for reliable scraping

### Input

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `mode` | string | `full`, `filter`, or `url` | `full` |
| `make` | string | Car manufacturer (filter mode) | — |
| `model` | string | Car model (filter mode) | — |
| `startUrls` | array | Carvana URLs (url mode) | — |
| `maxItems` | integer | Max vehicles to scrape (0 = unlimited) | `100` |
| `proxyConfig` | object | Proxy settings | Apify residential |

### Output

Each vehicle record contains:

```json
{
    "id": 12345,
    "url": "https://www.carvana.com/vehicle/12345",
    "year": 2022,
    "make": "Toyota",
    "model": "Camry",
    "trim": "SE",
    "vin": "4T1G11AK3NU000001",
    "bodyStyle": "Sedan",
    "price": 25999,
    "msrp": 28500,
    "kbbValue": 26500,
    "marketAdjustment": -500,
    "mileage": 31200,
    "fuelType": "Gasoline",
    "mpgCity": 28,
    "mpgHighway": 39,
    "seatingCapacity": 5,
    "exteriorColor": "Midnight Black",
    "interiorColor": "Ash",
    "purchaseStatus": "Available",
    "tags": ["Great Price", "Low Mileage"],
    "priceHistory": [
        { "date": "2026-01-15", "price": 27999 },
        { "date": "2026-02-01", "price": 25999 }
    ],
    "photos": [
        "https://img.carvana.com/1.jpg",
        "https://img.carvana.com/2.jpg"
    ],
    "scrapedAt": "2026-03-20T12:00:00.000Z"
}
```

### Usage

#### Full inventory

```json
{ "mode": "full", "maxItems": 1000 }
```

#### Filtered by make/model

```json
{ "mode": "filter", "make": "Toyota", "model": "Camry", "maxItems": 200 }
```

#### Specific URLs

```json
{
    "mode": "url",
    "startUrls": [
        { "url": "https://www.carvana.com/vehicle/12345" }
    ]
}
```

### Cost Estimate

- \~$0.05-0.10 per 100 vehicles (with Apify residential proxy)
- Full inventory (~30,000+ vehicles) ≈ $15-30 per run

### Tips

- Use **residential proxies** for best reliability
- Start with a small `maxItems` (10-50) to test
- For market research, run on a schedule (daily/weekly) to track price trends

# Actor input Schema

## `mode` (type: `string`):

Select how to scrape Carvana inventory. Use 'full' to scrape all available vehicles across the entire site. Use 'filter' to narrow results by make and model (e.g., only Toyota Camry). Use 'url' to scrape specific Carvana search or vehicle detail page URLs that you provide.

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

The car manufacturer to filter by when using 'filter' mode. Enter the brand name exactly as shown on Carvana (e.g., 'Toyota', 'Honda', 'BMW', 'Tesla'). This field is ignored in 'full' and 'url' modes.

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

The car model to filter by when using 'filter' mode. Enter the model name exactly as shown on Carvana (e.g., 'Camry', 'Civic', 'Model 3'). Leave empty to get all models from the selected make. This field is ignored in 'full' and 'url' modes.

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

A list of Carvana URLs to scrape when using 'url' mode. You can provide search result page URLs (e.g., https://www.carvana.com/cars/filters) or individual vehicle detail page URLs (e.g., https://www.carvana.com/vehicle/1234567). This field is ignored in 'full' and 'filter' modes.

## `enrichDetails` (type: `boolean`):

When enabled, the scraper visits each vehicle's individual detail page to extract additional fields like body style, fuel type, and interior color. This produces more complete data but runs significantly slower because it loads a separate page for every vehicle. Keep disabled for faster runs when basic listing data (price, mileage, VIN, color, photos) is sufficient.

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

The maximum number of vehicles to scrape before stopping. Useful for controlling run time and cost. For example, set to 50 to get 50 vehicles. Set to 0 for unlimited (scrapes all matching vehicles). Higher values require more compute time and proxy usage.

## `proxyConfig` (type: `object`):

Proxy server settings for accessing Carvana. Residential proxies are strongly recommended because Carvana uses bot detection (PerimeterX) that blocks datacenter IPs. The default Apify residential proxy group works well. You can also provide your own proxy URLs if you have a preferred provider.

## Actor input object example

```json
{
  "mode": "full",
  "make": "Toyota",
  "model": "Camry",
  "enrichDetails": false,
  "maxItems": 5,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Each item contains vehicle details: id, url, year, make, model, trim, vin, price, mileage, exteriorColor, purchaseStatus, photos, and scrapedAt timestamp.

# 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 = {
    "mode": "full",
    "make": "Toyota",
    "model": "Camry",
    "enrichDetails": false,
    "maxItems": 5,
    "proxyConfig": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nickgardner829/carvana-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 = {
    "mode": "full",
    "make": "Toyota",
    "model": "Camry",
    "enrichDetails": False,
    "maxItems": 5,
    "proxyConfig": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("nickgardner829/carvana-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 '{
  "mode": "full",
  "make": "Toyota",
  "model": "Camry",
  "enrichDetails": false,
  "maxItems": 5,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call nickgardner829/carvana-scraper --silent --output-dataset

```

## MCP server setup

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