# Cargurus.com Scraper (`lexis-solutions/cargurus-com`) Actor

Scrape car listings from CarGurus - including makes, models, prices, mileage, dealer info, and reviews. Ideal for automotive market analysis, price comparison, and lead generation. Fast, structured, and customizable extraction from a top vehicle marketplace.

- **URL**: https://apify.com/lexis-solutions/cargurus-com.md
- **Developed by:** [Lexis Solutions](https://apify.com/lexis-solutions) (community)
- **Categories:** Automation, E-commerce, AI
- **Stats:** 141 total users, 0 monthly users, 100.0% runs succeeded, 14 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$29.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period. You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

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

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

### What does CarGurus Scraper do

CarGurus Scraper helps you extract vehicle listings data from CarGurus across three supported domains: **cargurus.com** (United States), **cargurus.ca** (Canada), and **cargurus.co.uk** (United Kingdom).

You can extract detailed vehicle information including prices, mileage, dealer ratings, market value analysis, and other key details from the website. The extracted dataset can be downloaded in various formats and used in other applications.

### What data can I extract from CarGurus with a web scraper

With this web scraping tool, you can extract the following data from CarGurus:

<table>
<tr>
<td>🚗 Vehicle name & brand</td>
<td>💰 Price & availability</td>
</tr>
<tr>
<td>📍 Body type</td>
<td>🔢 ID (VIN)</td>
</tr>
<tr>
<td>📝 Description</td>
<td>⚙️ Engine details</td>
</tr>
<tr>
<td>🛣️ Drive configuration</td>
<td>⛽ Fuel efficiency & type</td>
</tr>
<tr>
<td>🎨 Exterior & interior colors</td>
<td>🖼️ Vehicle images</td>
</tr>
<tr>
<td>📅 Model year</td>
<td>⚡ Transmission</td>
</tr>
<tr>
<td>🏷️ Deal rating & deal score</td>
<td>📉 IMV price & price differential</td>
</tr>
<tr>
<td>📏 Mileage & unit mileage</td>
<td>🗂️ Stock number & listing type</td>
</tr>
<tr>
<td>📡 Listing source & IDs (make/model/entity)</td>
<td>🧩 Trim & body group IDs</td>
</tr>
<tr>
<td>🏪 Dealer name, type & franchise</td>
<td>⭐ Dealer rating & reviews</td>
</tr>
<tr>
<td>📞 Contact info (phone/SMS)</td>
<td>🗺️ Distance, city, state, ZIP & map link</td>
</tr>
<tr>
<td>💳 Financing options</td>
<td>🛍️ How to shop (pickup/transfer)</td>
</tr>
<tr>
<td>⛽ City/Highway/Combined MPG</td>
<td>🛡️ Safety rating</td>
</tr>
</table>

### Why scrape CarGurus

CarGurus is a leading automotive marketplace known for its deal rating system and price analysis. Scraping CarGurus across the US, Canada, and UK domains can help you:

- Compare vehicle prices and deal ratings
- Monitor dealer inventory and ratings
- Research market values in specific regions and countries
- Track price drops and market trends
- Identify the best deals in your area

### How to use CarGurus Scraper

CarGurus Scraper is designed for easy and fast start even if you've never extracted data from websites before. Here's how you can extract data from CarGurus:

1. Create a free Apify account using your email
2. Open CarGurus Scraper on the Apify platform
3. Click on the **Try for free** button
4. Enter your search parameters or start URLs
5. Click on the **Start** button and wait for the data to be extracted
6. Download your data in JSON, XML, CSV, Excel, or HTML

### Input

The actor accepts either `startUrls` or search parameters:

- `startUrls` (array, optional) - CarGurus search URLs. Detail URLs are skipped because complete listing data is extracted from search results. The actor detects the country domain (`cargurus.com`, `cargurus.ca`, or `cargurus.co.uk`).
- `zipcode` (string, optional) - Zip code or postal code to search in. Required when `startUrls` is not provided
- `country` (string, optional) - CarGurus domain to scrape. Use `US` for `cargurus.com`, `CA` for `cargurus.ca`, or `UK` for `cargurus.co.uk`. Defaults to `US`
- `make` (string, optional) - Vehicle make to search for. Required when `startUrls` is not provided
- `model` (string, optional) - Vehicle model to search for
- `condition` (string, optional) - Car type (`used` or `new`). Defaults to `used`. This selector is only used for `cargurus.com` and `cargurus.ca`; the UK site does not use this input
- `maxItems` (integer, required) - Maximum number of listings to scrape

Note: `startUrls` only supports CarGurus search/listing URLs. Detail listing URLs will be skipped.

Note: For `startUrls` on `cargurus.com` and `cargurus.ca`, the actor keeps the original search variation. If the URL contains `srpVariation=NEW_CAR_SEARCH`, it will be preserved when the URL is converted for scraping.

Start URLs example:

```json
{
  "startUrls": [
    {
      "url": "https://www.cargurus.ca/search?sourceContext=carGurusHomePageModel&zip=M5V+3L9&makeModelTrimPaths=m7&distance=50&nonShippableBaseline=5335&sortDirection=ASC&sortType=PRICE"
    },
    {
      "url": "https://www.cargurus.co.uk/search?zip=SW1A+1AA&sortType=DEAL_SCORE&sortDirection=ASC&distance=50&entityId=m201&makeModelTrimPaths=m201&isDeliveryEnabled=true&searchId=6f117b8d-ebb2-4d64-8227-6c2fe5e48091&srpVariation=DEFAULT_SEARCH&sourceContext=carGurusHomePageModel&nonShippableBaseline=0"
    },
    {
      "url": "https://www.cargurus.com/Cars/inventorylisting/viewDetailsFilterViewInventoryListing.action?zip=M5V+3L9&sourceContext=carGurusHomePageModel&distance=50&entitySelectingHelper.selectedEntity=m7&sortDir=ASC&sortType=BEST_MATCH"
    }
  ],
  "maxItems": 10
}
```

US example:

```json
{
  "zipcode": "90210",
  "country": "US",
  "make": "Toyota",
  "model": "Camry",
  "condition": "used",
  "maxItems": 10
}
```

Canada example:

```json
{
  "zipcode": "M5V 3L9",
  "country": "CA",
  "make": "Toyota",
  "model": "Camry",
  "condition": "used",
  "maxItems": 10
}
```

New cars example for US/Canada:

```json
{
  "zipcode": "90210",
  "country": "US",
  "make": "Toyota",
  "model": "Camry",
  "condition": "new",
  "maxItems": 10
}
```

UK example:

```json
{
  "zipcode": "SW1A 1AA",
  "country": "UK",
  "make": "Toyota",
  "model": "Camry",
  "condition": "used",
  "maxItems": 10
}
```

### Output

The scraped data will be saved as a dataset. Each item will represent a vehicle listing. You can download your data in various formats: JSON, JSONL, HTML table, CSV, Excel spreadsheet, or NDJSON.

Example of the output format:

```json
{
  "id": "4T1G11AKXMU488241",
  "sku": 422018236,
  "name": "2021 Toyota Camry SE FWD",
  "url": "https://www.cargurus.com/Cars/inventorylisting/vdp.action?listingId=422018236#listing=422018236",
  "price": "18890",
  "mpn": "2021 Toyota Camry SE FWD",
  "bodyType": "Sedan",
  "brand": "Toyota",
  "color": "Predawn Gray Mica",
  "model": "Camry",
  "fuelEfficiency": "33 MPG",
  "fuelType": "Gasoline",
  "driveWheelConfiguration": "Front-Wheel Drive",
  "primaryImage": "https://static.cargurus.com/images/forsale/2025/09/19/00/17/2021_toyota_camry-pic-6720801422722802888-1024x768.jpeg",
  "engine": "2.5L I4",
  "vehicleInteriorColor": "Black",
  "vehicleTransmission": "8-Speed Automatic",
  "vehicleModelDate": 2021,
  "availability": "InStock",
  "priceCurrency": "USD",
  "priceValidUntil": "2025-10-02T19:24:49.813Z",
  "description": "Used 2021 Toyota Camry SE FWD for sale - $18,890, 79,016 mi with Adaptive Cruise Control, Alloy Wheels, Bluetooth, Backup Camera, Android Auto, CarPlay",
  "condition": "UsedCondition",
  "inclusionType": "DEFAULT",
  "listingSource": "vAuto-1",
  "makeId": "m7",
  "modelId": "d292",
  "entityId": "t95569",
  "trimName": "SE FWD",
  "bodyTypeGroupId": "bg6",
  "salesStatus": "PAYING",
  "sortScore": 989,
  "mileage": 79016,
  "unitMileage": {
    "value": 79016,
    "unit": "MILES"
  },
  "normalizedExteriorColor": "GRAY",
  "expectedPrice": 20892,
  "expectedPriceString": "$20,892",
  "priceDifferential": 2002,
  "priceDifferentialString": "$2,002",
  "dealScore": 0.83223253,
  "daysOnMarket": 75,
  "dealRating": "GREAT_PRICE",
  "imvPrice": 20892,
  "pictureCount": 0,
  "sellerId": 1410440,
  "listingPartnerId": 52,
  "sellerType": "DEALER",
  "dealerName": "Nissan of Costa Mesa",
  "sellerCity": "Costa Mesa, CA",
  "sellerRegion": "CA",
  "sellerPostalCode": "92626",
  "distance": 41.081974,
  "googleStaticMapUrl": "https://www.google.com/maps/dir/?api=1&destination=Nissan+of+Costa+Mesa+2850+Harbor+Blvd%2CCosta+Mesa+CA%2C+92626%2CUS",
  "serviceProviderId": 64843,
  "isFranchiseDealer": true,
  "franchiseMake": "Nissan",
  "debugInfo": " / rank #: 0 / sellerId: 1410440 / spId: 64843 / Paid Dealer: true / active partners: 52",
  "serviceProviderName": "Nissan of Costa Mesa",
  "phoneNumber": "+1 714-930-1539",
  "phoneNumberString": "(714) 930-1539",
  "phoneNumberSMS": "+18883346545",
  "supportsSms": true,
  "buyingOption": "CONVERT",
  "localizedExteriorColor": "Predawn Gray Mica",
  "sellerRating": 4.2,
  "reviewCount": 66,
  "howToShop": "PICK_UP_ONLY",
  "dealerLogoUrl": "https://static.cargurus.com/images/site/2025/02/13/15/55/nissan_of_costa_mesa-pic-9119583813368691419-200x200.jpeg",
  "financeDto": {
    "financingEligibilityLookup": ["CHASE", "GLS", "WESTLAKE", "CAPITAL_ONE"]
  },
  "offset": 0,
  "cityFuelEconomy": {
    "value": 28,
    "unit": "MPG"
  },
  "highwayFuelEconomy": {
    "value": 39,
    "unit": "MPG"
  },
  "combinedFuelEconomy": {
    "value": 32.95,
    "unit": "MPG"
  },
  "localizedFuelEconomy": ["28.0", "MPG"],
  "evBatteryDto": {},
  "ncapOverallSafetyRating": "5",
  "stockNumber": "P488241",
  "itemType": "LISTING_USED_STANDARD"
}
```

#### Additional fields you may see

- **deliveryPriceString**: Delivery or transfer fee shown as a formatted string
- **transferCost / transferCity / transferState / transferDistance**: Store transfer details when applicable
- **itemType**: Listing type identifier (e.g., `LISTING_USED_STANDARD`, `LISTING_NEW_STANDARD`)
- **financeDto.financingEligibilityLookup**: List of supported financing providers
- **expectedPrice / priceDifferential / dealScore / dealRating / imvPrice**: Price analysis metrics from CarGurus
- **normalizedExteriorColor / localizedExteriorColor**: Standardized and localized exterior color values
- **cityFuelEconomy / highwayFuelEconomy / combinedFuelEconomy / localizedFuelEconomy**: MPG values and localized display
- **ncapOverallSafetyRating**: NHTSA overall safety rating when available

### Notes and Limitations

- This actor is not affiliated with, endorsed by, or associated with CarGurus
- The actor relies on the structure of the CarGurus website. If the website structure changes, the actor may need to be updated
- Supported domains are `cargurus.com`, `cargurus.ca`, and `cargurus.co.uk`
- The `country` input controls the target domain, locale, proxy country, and output currency (`USD`, `CAD`, or `GBP`)
- The `condition` input for Used cars/New cars applies only to `cargurus.com` and `cargurus.ca`
- Ensure you comply with the terms of service of the relevant CarGurus domain when using this actor
- For large-scale scraping, use Apify's proxy services to avoid IP blocking

### Need to scrape other automotive websites

Check out our other automotive scrapers:

- [CARFAX Scraper](https://apify.com/lexis-solutions/carfax-com) - Extract vehicle listings from America's trusted vehicle history platform
- [Mobile.de Scraper](https://apify.com/lexis-solutions/mobile-de-auto-scraper) - Extract vehicle listings from Germany's largest vehicle marketplace

### Want something custom-built

This CarGurus Scraper doesn't exactly do what you need? You can always build your own! Lexis Solutions is a [certified Apify Partner](https://apify.com/partners/find). We can help you with custom solutions or data extraction projects.

Contact us over [Email](mailto:scraping@lexis.solutions) or [LinkedIn](https://www.linkedin.com/company/lexis-solutions)

### Support Our Work 💝

If you're happy with our work and scrapers, you're welcome to leave us a company review [here](https://apify.com/partners/find/lexis-solutions/review) and leave a review for the scrapers you're subscribed to. It will take you less than a minute but it will mean a lot to us!

# Actor input Schema

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

CarGurus search URLs to scrape. You can use search result URLs from cargurus.com, cargurus.ca, or cargurus.co.uk. Detail listing URLs are skipped.

## `zipcode` (type: `string`):

Zipcode or postal code to search in. Required when startUrls is not provided.

## `country` (type: `string`):

CarGurus country site to scrape.

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

Vehicle make to search for. Required when startUrls is not provided.

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

Vehicle model to search for.

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

Condition of the vehicle. Required when startUrls is not provided.

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

Maximum number of listings that will be extracted.

## Actor input object example

```json
{
  "zipcode": "10001",
  "country": "US",
  "make": "Toyota",
  "condition": "used",
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("lexis-solutions/cargurus-com").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("lexis-solutions/cargurus-com").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 '{}' |
apify call lexis-solutions/cargurus-com --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lexis-solutions/cargurus-com"
        }
    }
}

```

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/UUj5ATFEKYIQmW885/builds/vlVjsMBZZqwBOtD5f/openapi.json
