# CarGurus Scraper — Car Listings, Prices, IMV & Dealer Leads (`haketa/cargurus-scraper`) Actor

Scrape CarGurus used & new car listings: price, Instant Market Value (IMV), deal rating, mileage, make/model/year/trim, VIN, color, price drops, and dealer name & phone for lead-gen. Paste a CarGurus search URL and get every listing across all pages.

- **URL**: https://apify.com/haketa/cargurus-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** E-commerce, Lead generation
- **Features:** Limited permissions
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.75 / 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

## CarGurus Scraper — Car Listings, Prices, IMV, Deal Ratings & Dealer Leads 🚗💨

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-orange?style=flat-square\&logo=apify)](https://apify.com/haketa/cargurus-scraper)
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-brightgreen.svg?style=flat-square)]()
[![Data Export](https://img.shields.io/badge/Data%20Export-JSON%20%7C%20CSV%20%7C%20Excel-blue?style=flat-square)]()
[![Proxy Support](https://img.shields.io/badge/Proxy-US%20Residential-success?style=flat-square)]()
[![Deep Pagination](https://img.shields.io/badge/Pagination-1%2C000%2B%20Unlocked-blueviolet?style=flat-square)]()

**Extract vehicle inventory from [CarGurus](https://www.cargurus.com) at scale — with listed price, total price, Instant Market Value (IMV), algorithmic deal ratings, mileage, make/model/year/trim, VIN, exterior color, transmission, engine, price drops, and verified dealer contact leads (name, phone & location).**

Paste any CarGurus search URL, and this **CarGurus scraper** automatically walks every result page into clean, structured records — no login, no cookies, and no coding required. Use it to **scrape CarGurus** inventory, pricing intelligence, and dealership leads in minutes.

Export directly to **JSON, CSV, Excel, XML, or connect via API**.

> Built for **car dealerships** benchmarking local competitors, **used-car pricing analysts**, **automotive B2B sales teams** generating dealer leads, and **car shoppers & deal hunters** tracking below-market bargains.

***

### ⚡ At a glance

| Feature | Specification |
|---|---|
| **Target Website** | [CarGurus.com](https://www.cargurus.com) (US Automotive Marketplace) |
| **Data Scope** | Used, new, and certified pre-owned (CPO) vehicles across all makes & models |
| **Deal Intelligence** | Instant Market Value (IMV), Deal Rating (Great/Good/Fair), Deal Score, Price Drops |
| **Lead Generation** | Dealer name, direct telephone number, city, state, postal code, and dealer ID |
| **Pagination Depth** | Unlocked for **1,000+ listings** per run across all multi-page result sets |
| **Proxy Architecture** | US Residential Proxy pre-configured out of the box (bypasses DataDome) |
| **Authentication** | Zero credentials needed (no login, no session cookies) |
| **Export Formats** | JSON, CSV, Excel (XLSX), XML, HTML Table, RSS |

***

### 🔎 Why scrape CarGurus?

[CarGurus](https://www.cargurus.com) is the highest-trafficked automotive marketplace in the United States, listing millions of cars from franchise dealerships, independent lots, and private parties. What differentiates CarGurus from simple classified boards is its algorithmic pricing intelligence: every listing includes a proprietary **Instant Market Value (IMV)**, a categorized **deal rating** (`GREAT_PRICE`, `GOOD_PRICE`, `FAIR_PRICE`, `HIGH_PRICE`, `OVERPRICED`), a granular numeric **deal score**, total **days on market**, and complete historical **price drop alerts**.

Capturing this data manually across multiple zip codes or competing dealerships is practically impossible. Modern automotive portals utilize heavy anti-bot protections and complex client-side rendering. Furthermore, CarGurus splits pricing, IMV, seller information, and technical specifications across disparate JSON payloads.

This **CarGurus scraper** resolves these bottlenecks:

1. Emulates realistic browser TLS sessions over residential proxies to navigate anti-bot protections seamlessly.
2. Unpacks nested vehicle objects, mileage metrics, dealer credentials, and savings calculations into a flattened, typed dataset.
3. Automatically paginates through multi-page result listings, deduplicating records by CarGurus listing ID.

#### High-Value Business Applications:

- 🎯 **Automotive B2B Lead Generation**: Build hyper-targeted prospect lists of car dealership owners, sales managers, and inventory directors (dealership name, verified phone, city, region, zip code) for software vendors, warranty providers, and parts suppliers.
- 📊 **Competitive Price Monitoring**: Monitor local rival dealerships' real-time pricing, days on lot, and markdown frequency to price your inventory competitively.
- 🏷️ **Used Car Deal Arbitrage**: Filter inventory by `GREAT_PRICE` and sort by `savingsVsImv` to source below-market vehicles for wholesale flipping or private purchase.
- 🚗 **Appraisal & Valuation Models**: Feed real-world transaction comps and IMV differential data into proprietary algorithmic trade-in and pricing models.
- 📉 **Inventory Aging & Price Cut Surveillance**: Detect aged inventory (high `daysOnMarket`) with aggressive price drops to negotiate acquisition discounts.
- 🗺️ **National Inventory Aggregation**: Sweep dozens of metropolitan ZIP codes in a single scheduled run to monitor nation-wide supply and demand shifts.

***

### ✨ Key Features & Capabilities

- 🚗 **Comprehensive Vehicle Attributes**: Full year, make, model, trim, VIN, exterior color, transmission, drivetrain, engine, and CPO/new status flags.
- 💰 **Complete Pricing & Savings Analytics**: Listed current price, total price with fees, expected price, CarGurus Instant Market Value (IMV), and exact dollar savings vs IMV.
- 📈 **Deal Intelligence Signals**: Algorithmic deal rating, deal score, days on market, original pre-drop price, and price drop amount.
- 📞 **Direct Dealership Contact Details**: Dealership name, phone number, location, city, state, postal code, and unique CarGurus dealer ID.
- 🔁 **Deep 1,000+ Result Pagination**: Automatically reads `pageCount` from embedded search manifests and iterates through all available pages up to your `maxItems` target.
- 🛡️ **Built-in US Residential Proxy Routing**: Pre-configured with Apify US residential proxies to overcome DataDome security checkpoints without session resets.
- 📦 **Automated Deduplication**: Keeps a memory set of unique listing IDs, ensuring that broad overlapping search regions never produce duplicate records.

***

### 🎯 Target Use Cases

| Persona / Sector | Primary Business Need | Key Extracted Fields |
|---|---|---|
| **Dealership Inventory Managers** | Benchmark local rival pricing and days on lot | `price`, `imv`, `dealRating`, `daysOnMarket`, `dealerName` |
| **Automotive SaaS & Marketing Teams** | Source B2B dealership prospect contact lists | `dealerName`, `dealerPhone`, `dealerCity`, `dealerRegion`, `dealerPostalCode` |
| **Wholesale Car Buyers & Flippers** | Spot deep below-market bargains instantly | `savingsVsImv`, `priceDropAmount`, `dealRating`, `vin` |
| **Fintech & Auto Loan Lenders** | Verify collateral vehicle values and dealer identity | `vin`, `imv`, `pricePlusFees`, `mileage`, `dealerId` |
| **Automotive Market Researchers** | Analyze national supply and depreciation curves | `year`, `make`, `model`, `mileage`, `price`, `scrapedAt` |
| **Car Buying Agents** | Locate specific vehicle trims and configurations | `trim`, `exteriorColor`, `transmission`, `drivetrain`, `engine` |

***

### 📥 Input Configuration

Configure the scraper with CarGurus search URLs and your desired item limit.

| Parameter | Type | Default | Prefill | Description |
|---|---|---|---|---|
| `startUrls` | Array | `[]` | *Toyota Camry in 90210* | One or more CarGurus search result URLs. Apply filters on cargurus.com and copy the browser URL. |
| `maxItems` | Integer | `0` | `100` | Maximum listings to collect across all search URLs. Set to `0` for auto / unlimited. |
| `proxyConfiguration` | Object | US Residential | US Residential | Proxy settings. US Residential proxy is pre-configured and required by CarGurus. |

#### Sample Input (JSON)

```json
{
  "startUrls": [
    "https://www.cargurus.com/Cars/l-Used-Toyota-Camry-d586?zip=90210",
    "https://www.cargurus.com/Cars/l-Used-Honda-Civic-d586?zip=10001"
  ],
  "maxItems": 250,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

> **Important URL Tip**: Always search CarGurus with a specific ZIP code (or location set) before copying the URL. Without a `?zip=` parameter, CarGurus may display a restricted nationwide shipping fallback list instead of the full regional inventory.

***

### 📤 Output Data Structure

The actor outputs clean, flat records. Every vehicle is de-duplicated by its unique `listingId`.

#### Sample Output Record (JSON)

```json
{
  "listingId": "462870440",
  "title": "2026 Honda Civic",
  "year": "2026",
  "make": "Honda",
  "model": "Civic",
  "trim": "Si FWD",
  "vin": "2HGFE1E51TH474188",
  "price": 31965,
  "totalPrice": 33023.97,
  "pricePlusFees": 33023.97,
  "imv": 32069,
  "expectedPrice": 32069,
  "savingsVsImv": 104,
  "savingsLabel": "$104",
  "dealRating": "FAIR_PRICE",
  "dealScore": 2.186,
  "mileage": 6585,
  "mileageUnit": "MILES",
  "exteriorColor": "Crystal Black Pearl",
  "transmission": "6-Speed Manual",
  "drivetrain": "Front-Wheel Drive",
  "engine": "200 hp 1.5L I4",
  "isCpo": false,
  "isNew": false,
  "daysOnMarket": 3,
  "priceDropOriginal": null,
  "priceDropAmount": null,
  "dealerName": "Morris Smith Ford of Leavenworth",
  "dealerPhone": "+1 913-404-4874",
  "dealerLocation": "Leavenworth, KS",
  "dealerCity": "Leavenworth",
  "dealerRegion": "KS",
  "dealerPostalCode": "66048",
  "dealerId": "430173",
  "imageUrl": "https://static.cargurus.com/images/forsale/sample.jpeg",
  "listingUrl": "https://www.cargurus.com/Cars/link/462870440",
  "scrapedAt": "2026-11-10T14:30:00.000Z"
}
```

***

### 📊 Complete Field Dictionary & Coverage

#### 🚘 Vehicle Identity & Technical Specs

| Field Name | Data Type | Description | Coverage |
|---|---|---|---|
| `listingId` | String | Unique CarGurus listing record identifier | 🟢 High (100%) |
| `title` | String | Marketing title (e.g. `2024 Toyota RAV4 Hybrid XLE`) | 🟢 High (100%) |
| `year` | String | Model year of the vehicle | 🟢 High (100%) |
| `make` | String | Vehicle manufacturer (e.g., `Toyota`, `Ford`, `BMW`) | 🟢 High (100%) |
| `model` | String | Vehicle model name (e.g., `Camry`, `F-150`, `Civic`) | 🟢 High (100%) |
| `trim` | String | Specific trim line (e.g., `SE FWD`, `Lariat 4WD`) | 🟢 High (95%) |
| `vin` | String | 17-character vehicle identification number | 🟢 High (100%) |
| `mileage` | Number | Odometer reading | 🟢 High (100%) |
| `mileageUnit` | String | Unit of mileage measurement (`MILES` or `KM`) | 🟢 High (100%) |
| `exteriorColor` | String | Factory or localized exterior paint color | 🟢 High (95%) |
| `transmission` | String | Gearbox type (e.g. `Automatic`, `6-Speed Manual`) | 🟢 High (95%) |
| `drivetrain` | String | Drive wheel configuration (`AWD`, `FWD`, `4WD`, `RWD`) | 🟢 High (95%) |
| `engine` | String | Engine displacement and cylinder layout | 🟢 High (95%) |
| `isCpo` | Boolean | True if tagged as Certified Pre-Owned | 🟢 High (100%) |
| `isNew` | Boolean | True if brand-new zero-mileage inventory | 🟢 High (100%) |

#### 💰 Pricing & Algorithmic Deal Analytics

| Field Name | Data Type | Description | Coverage |
|---|---|---|---|
| `price` | Number | Listed advertised sticker price in USD | 🟢 High (100%) |
| `totalPrice` | Number | Estimated out-the-door price | 🟢 High (90%) |
| `pricePlusFees` | Number | Advertised price plus mandatory dealer documentation fees | 🟢 High (90%) |
| `imv` | Number | CarGurus Instant Market Value algorithm estimate | 🟢 High (95%) |
| `expectedPrice` | Number | Baseline fair market price for this vehicle configuration | 🟢 High (95%) |
| `savingsVsImv` | Number | Dollar difference between price and IMV (positive = discount) | 🟢 High (95%) |
| `savingsLabel` | String | Formatted savings label (e.g., `$1,250`) | 🟢 High (95%) |
| `dealRating` | String | Deal classification (`GREAT_PRICE`, `GOOD_PRICE`, `FAIR_PRICE`) | 🟢 High (95%) |
| `dealScore` | Number | Granular numeric score representing deal quality | 🟢 High (95%) |
| `daysOnMarket` | Number | Consecutive days listed on CarGurus | 🟢 High (98%) |
| `priceDropOriginal`| Number | Previous price prior to recent markdowns | 🟡 Conditional (30%) |
| `priceDropAmount` | Number | Value of recent price cut | 🟡 Conditional (30%) |

#### 🏢 Dealership Lead Generation & Contact Data

| Field Name | Data Type | Description | Coverage |
|---|---|---|---|
| `dealerName` | String | Legal name of franchise or independent dealer | 🟢 High (100%) |
| `dealerPhone` | String | Direct dealership sales telephone number | 🟢 High (95%) |
| `dealerLocation` | String | Combined City, State string | 🟢 High (100%) |
| `dealerCity` | String | City where dealership lot is located | 🟢 High (100%) |
| `dealerRegion` | String | Two-letter US state code (e.g. `CA`, `TX`, `FL`) | 🟢 High (100%) |
| `dealerPostalCode`| String | Five-digit US ZIP code | 🟢 High (98%) |
| `dealerId` | String | CarGurus dealership directory account ID | 🟢 High (100%) |
| `imageUrl` | String | Primary high-resolution exterior photo URL | 🟢 High (98%) |
| `listingUrl` | String | Direct canonical URL to the listing on CarGurus | 🟢 High (100%) |
| `scrapedAt` | String | ISO 8601 extraction timestamp | 🟢 High (100%) |

***

### 🔁 Deep Pagination & Scaling Architecture

- **Manifest-Driven Navigation**: Rather than guessing page limits, the actor parses the internal `pageCount` attribute embedded directly inside the CarGurus Remix SSR state.
- **DataDome Resilience**: CarGurus employs DataDome anti-bot detection. The actor pairs browser-grade TLS headers with session-rotated US residential proxies, ensuring that multi-page sweeps do not get blocked halfway through.
- **Empty-Streak Protection**: If three consecutive empty pages are encountered (indicating end of inventory), pagination halts cleanly to conserve proxy data.
- **In-Memory De-duplication**: Tracks all previously pushed `listingId` values so multiple overlapping search radii or make/model searches never duplicate entries.

***

### 🚀 How to Use & Code Examples

#### Step 1: Search on CarGurus

1. Go to [cargurus.com](https://www.cargurus.com) and search for your vehicle of interest.
2. Filter by location (enter your target ZIP code), price range, mileage, trim, and deal rating.
3. Copy the URL from your browser address bar.

#### Step 2: Configure & Execute

1. Paste the URL into **CarGurus search URLs**.
2. Set **Max listings** (e.g., 200 for a quick snapshot, or 0 for everything).
3. Click **Start**.

#### Python Integration Example

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "startUrls": [
        "https://www.cargurus.com/Cars/l-Used-Toyota-Camry-d586?zip=90210"
    ],
    "maxItems": 150
}

run = client.actor("haketa/cargurus-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item.get('title')} | ${item.get('price')} (IMV: ${item.get('imv')}) | Dealer: {item.get('dealerName')} ({item.get('dealerPhone')})")
```

#### Node.js Integration Example

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('haketa/cargurus-scraper').call({
    startUrls: ['https://www.cargurus.com/Cars/l-Used-Honda-Civic-d586?zip=10001'],
    maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Fetched ${items.length} CarGurus vehicle listings.`);
```

#### cURL / REST API Integration

```bash
curl "https://api.apify.com/v2/acts/haketa~cargurus-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "startUrls": ["https://www.cargurus.com/Cars/l-Used-Toyota-Camry-d586?zip=90210"],
    "maxItems": 100
  }'
```

***

### 🔄 Webhook & Automated Pipeline Integration

Automate your lead-generation and inventory surveillance pipelines by connecting this actor to your existing CRM and data warehouse:

- **HubSpot & Salesforce**: Route new dealership phone numbers and inventory leads into your sales pipeline via Zapier or Make webhooks.
- **Google Sheets & Airtable**: Automatically append daily vehicle comps, IMV margins, and price drops to your tracking spreadsheets.
- **PostgreSQL / Snowflake / BigQuery**: Ingest raw JSON listing objects directly into your analytical data warehouse using Apify Integrations.
- **Slack & Discord Alerts**: Trigger instant notifications whenever a rare vehicle trim or a `GREAT_PRICE` bargain is listed below market value.

***

### ⚡ Performance & Sizing Reference

| Metric | Typical Performance | Notes |
|---|---|---|
| **Speed (listings/sec)** | 10 – 18 listings / sec | High-yield SSR tile extraction |
| **Memory Footprint** | ~280 MB peak | Safely executes on default 1024 MB allocation |
| **Proxy Requirement** | US Residential Proxy | Pre-configured to bypass DataDome |
| **Batch Size** | ~15 – 24 cars per search page | Dependent on CarGurus viewport defaults |
| **Deduplication Rate** | 100% unique per listing ID | Across all pages and start URLs |

***

### ❓ Frequently Asked Questions

##### Do I need to provide proxy credentials?

No. The actor includes pre-configured settings that leverage Apify's US Residential Proxy group automatically.

##### How do I scrape nationwide inventory?

You can pass multiple regional search URLs (e.g., covering Los Angeles, Dallas, Chicago, New York, and Miami) in the `startUrls` array. The scraper will process each metro and combine them into a single de-duplicated dataset.

##### Does this scraper extract certified pre-owned (CPO) vehicles?

Yes. Both certified pre-owned (`isCpo: true`) and brand-new (`isNew: true`) vehicles are fully supported alongside standard used inventory.

##### Can I track price drops over time?

Yes. The actor captures `priceDropAmount`, `priceDropOriginal`, and `daysOnMarket`. Furthermore, by running the actor on a daily schedule, you can diff consecutive datasets by `listingId` to track continuous price revisions.

##### Why are some dealer phone numbers missing?

In approximately 5% of listings, the dealer does not provide a direct telephone number to CarGurus or routes leads exclusively through an on-platform messaging form. In all other cases (~95%), the direct phone number is extracted.

##### How fresh is the inventory data?

Every execution scrapes CarGurus live in real time. Unlike cached databases or static feeds, you receive current on-lot availability, today's sticker prices, and the latest price cuts.

##### Can I export to Google Drive or AWS S3?

Yes. Using Apify Cloud integrations or standard webhooks, you can automatically deliver CSV or JSON exports into Amazon S3, Google Cloud Storage, or Google Drive after every scheduled run.

***

### 🔗 Related Automotive Actors

- [AutoScout24 Scraper](https://apify.com/haketa/autoscout24-scraper) — European car listings, specs, and dealership contacts.
- [AutoTrader Scraper](https://apify.com/haketa/autotrader-scraper) — UK vehicle marketplace listings and seller intelligence.
- [Otomoto Scraper](https://apify.com/haketa/otomoto-scraper) — Polish automotive marketplace listings and dealer data.
- [YallaMotor Scraper](https://apify.com/haketa/yallamotor-scraper) — Middle Eastern new and used vehicle marketplace listings.
- [Mobile.de Scraper](https://apify.com/haketa/mobile-de-scraper) — German & EU automotive marketplace inventory.

***

### 📋 Changelog

#### Version 1.2 (2026-11)

- **Deep Pagination Unlock**: Unlocked 1,000+ deep result pagination by setting `maxItems: 0` as auto/unlimited governed directly by search result page manifests.
- **Fast Execution Prefill**: Streamlined default prefill parameters to complete initial test runs in under 90 seconds while returning rich sample data.
- **Field Normalization**: Enhanced dealer location parsing from fallback DTO objects and stabilized price-drop delta calculations.
- **DataDome Resilience**: Updated TLS fingerprint rotation and exponential backoff retry intervals to handle transient anti-bot challenges.

#### Version 1.1 (2026-09)

- Added support for new CarGurus `*Dto` schema containers alongside legacy `*Data` objects.
- Added extraction of total out-the-door price and fee-inclusive estimates.
- Integrated automated fallback search URLs for empty input runs.

#### Version 1.0 (2026-08)

- Initial release featuring Remix SSR context extraction.
- Instant Market Value (IMV), deal ratings, and dealer lead capture.
- US residential proxy integration.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/cargurus-scraper/changelog.md

# Actor input Schema

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

CarGurus search result URLs, e.g. https://www.cargurus.com/Cars/l-Used-Toyota-Camry-d586?zip=90210 . Search on cargurus.com, apply filters, and copy the address-bar URL. Tip: include a ?zip= so CarGurus returns full local inventory (without a ZIP it may return only a short nationwide-shipping list).

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

Maximum number of listings to return across all provided URLs. 0 = auto / unlimited.

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

CarGurus is protected by DataDome and requires a US residential proxy. Enabled by default.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.cargurus.com/Cars/l-Used-Toyota-Camry-d586?zip=90210"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

CarGurus listing ID

## `title` (type: `string`):

Year Make Model

## `year` (type: `string`):

Year

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

Make

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

Model

## `trim` (type: `string`):

Trim

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

VIN

## `price` (type: `string`):

Price

## `imv` (type: `string`):

Instant Market Value

## `savingsVsImv` (type: `string`):

Price difference vs IMV

## `dealRating` (type: `string`):

GREAT/GOOD/FAIR price

## `mileage` (type: `string`):

Mileage

## `exteriorColor` (type: `string`):

Exterior color

## `isCpo` (type: `string`):

Certified pre-owned

## `daysOnMarket` (type: `string`):

Days on market

## `priceDropAmount` (type: `string`):

Recent price drop amount

## `dealerName` (type: `string`):

Dealer name

## `dealerPhone` (type: `string`):

Dealer phone

## `dealerLocation` (type: `string`):

Dealer location

## `imageUrl` (type: `string`):

Photo URL

## `listingUrl` (type: `string`):

Listing link

## `scrapedAt` (type: `string`):

ISO 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 = {
    "startUrls": [
        "https://www.cargurus.com/Cars/l-Used-Toyota-Camry-d586?zip=90210"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/cargurus-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 = {
    "startUrls": ["https://www.cargurus.com/Cars/l-Used-Toyota-Camry-d586?zip=90210"],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/cargurus-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 '{
  "startUrls": [
    "https://www.cargurus.com/Cars/l-Used-Toyota-Camry-d586?zip=90210"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call haketa/cargurus-scraper --silent --output-dataset

```

## MCP server setup

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