# Cargurus.ca Cars Search Scraper (`stealth_mode/cargurus-ca-cars-search-scraper`) Actor

Scrape used car listings from CarGurus.ca and extract 20+ fields including price, mileage, VIN, engine specs, fuel type, and more. Perfect for dealers, analysts, and automotive researchers needing structured vehicle data fast.

- **URL**: https://apify.com/stealth\_mode/cargurus-ca-cars-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## CarGurus.ca Car Search Scraper: Extract Used Car Listings at Scale
---

### What Is CarGurus.ca?

CarGurus.ca is one of Canada's most visited automotive marketplaces, aggregating hundreds of thousands of used and new vehicle listings from dealerships and private sellers nationwide. For automotive professionals, researchers, and data teams, manually collecting this data is impractical at scale. The **CarGurus.ca Car Search Scraper** automates extraction from search result pages, returning clean, structured records for every listing found.

---

### Overview

The **CarGurus.ca Scraper** targets car search/listing pages and extracts comprehensive vehicle data per listing. It is built for:

- **Dealerships** monitoring competitor pricing and inventory
- **Automotive analysts** tracking market trends by make, model, or region
- **Data aggregators** building or enriching vehicle databases
- **Researchers** studying used car pricing, availability, or spec patterns

The scraper handles paginated search results, respects configurable item limits, and can gracefully skip failed URLs to keep bulk runs uninterrupted.

---

### Input Format

```json
{
  "urls": [
    "https://www.cargurus.ca/Cars/l-Used-SUV-Crossover-bg7?page=2&pageAlignment=eyJmaXJzdFBhZ2UiOjI0LCJwYWdlTiI6MjR9"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 50
}
````

| Field | Type | Description |
|---|---|---|
| `urls` | `array` | One or more CarGurus.ca search/listing page URLs to scrape. Add URLs one by one or via bulk edit. Example: a filtered search for Used SUV/Crossover listings. |
| `max_items_per_url` | `integer` | Maximum number of vehicle listings to collect per URL. Default: `20`. Set higher (e.g., `50`) for larger result sets. |
| `ignore_url_failures` | `boolean` | If `true`, the scraper continues running even when individual URLs fail. Recommended for bulk runs. Default: `true`. |

> **Tip:** Use CarGurus.ca's built-in filters (body type, price range, year, province) before copying the URL — the scraper will respect all active filters in the query string.

***

### Output Format

#### Sample Record

```json
{
  "id": "https://sd.cargurus.com/#listing-443470419",
  "body_type": "SUV / Crossover",
  "brand": {
    "@type": "Brand",
    "@id": "https://sd.cargurus.com/#mkrm42",
    "name": "Mazda"
  },
  "description": "Used 2025 Mazda CX-70 GT-P AWD for sale - $43,593, 51812 km with Sunroof/Moonroof, Navigation System, Alloy Wheels, Bluetooth, Backup Camera, Blind Spot Monitoring, Heated Seats, Android Auto, CarPlay, Multi Zone Climate Control",
  "model": "CX-70",
  "name": "2025 Mazda CX-70 GT-P AWD",
  "sku": "443470419",
  "vehicle_model_date": "2025",
  "item_condition": "https://schema.org/UsedCondition",
  "image": "https://static.cargurus.com/images/forsale/2026/03/27/08/53/2025_mazda_cx-70-pic-2228884840901981038-1024x768.jpeg",
  "color": "White",
  "mileage_from_odometer": {
    "@type": "QuantitativeValue",
    "value": 51812,
    "unit_code": "KMT"
  },
  "vehicle_identification_number": "JM3KJDHCXS1102647",
  "vehicle_transmission": "8-Speed Automatic",
  "vehicle_interior_color": "Black",
  "vehicle_configuration": "GT-P AWD",
  "offers": {
    "@type": "Offer",
    "@id": "https://sd.cargurus.com/#offer-443470419",
    "availability": "https://schema.org/InStock",
    "price": 43593,
    "price_currency": "CAD",
    "price_valid_until": "2026-05-14",
    "url": "https://www.cargurus.ca/details/443470419",
    "seller": {
      "@type": "AutoDealer",
      "name": "Chatham Mazda",
      "address": {
        "@type": "PostalAddress",
        "address_locality": "Chatham",
        "address_region": "ON",
        "postal_code": "N7M 1P5",
        "address_country": "CA"
      },
      "telephone": "+1 877-413-3397",
      "logo": {
        "@type": "ImageObject",
        "url": "https://static.cargurus.com/images/site/2026/03/02/13/30/chatham_mazda-pic-10029909166035715722-200x200.jpeg"
      }
    }
  },
  "vehicle_engine": null,
  "fuel_type": null,
  "fuel_efficiency": null,
  "drive_wheel_configuration": null
}
```

Each vehicle listing returns a structured record with 21 fields:

#### Identity & Listing Info

| Field | Meaning |
|---|---|
| `ID` | Unique internal identifier for the listing |
| `Name` | Full listing name (e.g., "2019 Toyota RAV4 XLE AWD") |
| `SKU` | Stock-keeping unit or dealer inventory code |
| `Description` | Seller-provided listing description |
| `Item Condition` | Condition of the vehicle (e.g., used, certified pre-owned) |
| `Image` | Primary listing image URL |

#### Vehicle Specifications

| Field | Meaning |
|---|---|
| `Brand` | Manufacturer/make (e.g., Toyota, Ford, Honda) |
| `Model` | Vehicle model name (e.g., RAV4, F-150, CR-V) |
| `Body Type` | Vehicle category (e.g., SUV, Sedan, Crossover) |
| `Vehicle Model Date` | Model year of the vehicle |
| `Vehicle Configuration` | Trim level or package (e.g., XLE, Sport, Limited) |
| `Vehicle Engine` | Engine specs (e.g., 2.5L 4-cylinder) |
| `Vehicle Transmission` | Transmission type (e.g., Automatic, CVT, Manual) |
| `Drive Wheel Configuration` | Drivetrain (e.g., AWD, FWD, 4WD) |
| `Fuel Type` | Fuel category (e.g., Gasoline, Hybrid, Electric) |
| `Fuel Efficiency` | Fuel consumption rating (L/100km or MPG) |
| `Color` | Exterior colour |
| `Vehicle Interior Color` | Interior colour or trim |

#### Condition & Identification

| Field | Meaning |
|---|---|
| `Mileage From Odometer` | Current odometer reading (km) |
| `Vehicle Identification Number` | Unique 17-character VIN for vehicle history lookups |

#### Pricing

| Field | Meaning |
|---|---|
| `Offers` | Pricing data including listed price and deal rating metadata |

***

### How to Use

1. **Build your search URL** — Go to CarGurus.ca, apply filters (body type, year, price, province), then copy the results page URL.
2. **Configure the input** — Paste URLs into the `urls` array. Adjust `max_items_per_url` to match how many results you need.
3. **Run the scraper** — Start the actor and monitor progress in the run log.
4. **Export results** — Download as JSON, CSV, or Excel for use in spreadsheets, databases, or BI tools.

**Best practices:**

- For large datasets, paginate manually (e.g., `?page=1`, `?page=2`) and add multiple URLs to one run.
- Keep `ignore_url_failures: true` for multi-URL jobs to avoid full-run failures from a single bad page.
- The `VIN` field can be used with third-party services (e.g., CarFax, CARPROOF) for history lookups.

***

### Use Cases & Business Value

- **Price intelligence:** Track asking prices by make/model/region over time
- **Inventory research:** Identify supply gaps or high-demand segments in the Canadian used car market
- **Lead generation:** Build prospect lists of specific vehicle types for dealership outreach
- **Academic/policy research:** Analyze EV adoption rates or regional pricing disparities

The scraper replaces hours of manual data collection with a single automated run, giving teams consistent, structured records ready for analysis.

***

### Conclusion

The **CarGurus.ca Car Search Scraper** is a practical tool for anyone needing structured Canadian automotive listing data at scale. With 21 output fields covering specs, pricing, condition, and identification, it delivers everything needed for pricing analysis, market research, or inventory intelligence. Configure a URL, set your limits, and let the scraper do the work.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Cars list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.cargurus.ca/Cars/l-Used-SUV-Crossover-bg7?page=2&pageAlignment=eyJmaXJzdFBhZ2UiOjI0LCJwYWdlTiI6MjR9"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.cargurus.ca/Cars/l-Used-SUV-Crossover-bg7?page=2&pageAlignment=eyJmaXJzdFBhZ2UiOjI0LCJwYWdlTiI6MjR9"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/cargurus-ca-cars-search-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 = {
    "urls": ["https://www.cargurus.ca/Cars/l-Used-SUV-Crossover-bg7?page=2&pageAlignment=eyJmaXJzdFBhZ2UiOjI0LCJwYWdlTiI6MjR9"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/cargurus-ca-cars-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.cargurus.ca/Cars/l-Used-SUV-Crossover-bg7?page=2&pageAlignment=eyJmaXJzdFBhZ2UiOjI0LCJwYWdlTiI6MjR9"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/cargurus-ca-cars-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/cargurus-ca-cars-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Cargurus.ca Cars Search Scraper",
        "description": "Scrape used car listings from CarGurus.ca and extract 20+ fields including price, mileage, VIN, engine specs, fuel type, and more. Perfect for dealers, analysts, and automotive researchers needing structured vehicle data fast.",
        "version": "0.0",
        "x-build-id": "adIlHyajcjhaOu23u"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~cargurus-ca-cars-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-cargurus-ca-cars-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~cargurus-ca-cars-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-cargurus-ca-cars-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~cargurus-ca-cars-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-cargurus-ca-cars-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the Cars list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Cars list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
