# 🚘🇨🇦 Cargurus data scraper🚘 (💰0.99) (`jordan-byte/cargurus-data-scraper-0-99`) Actor

Canada's largest new and used car marketplace. Hand it a used-car search page, a new-car model page, or specific listing URLs, and get back clean, structured data for every matching vehicle: price, mileage, year/make/model/trim, VIN, colours, features, photos, dealer details, and more.

- **URL**: https://apify.com/jordan-byte/cargurus-data-scraper-0-99.md
- **Developed by:** [Jordan Byte](https://apify.com/jordan-byte) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.99 / 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.

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

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

🚗 Extract **structured car listing data from CarGurus.ca** — Canada's largest new and used car marketplace. Hand it a used-car search page, a new-car model page, or specific listing URLs, and get back clean, structured data for every matching vehicle: price, mileage, year/make/model/trim, VIN, colours, features, photos, dealer details, and more.

⚡ Built to run on the Apify platform, so you get scheduled runs, an API, webhooks, and integrations (Zapier, Make, Google Sheets, and 30+ others) out of the box — no server, browser, or proxy management required on your end.

💬 Need a custom scraper or a different Apify Actor built? I build these for a living — see **Support & custom development** below to get in touch.

### Why use the CarGurus.ca Car Data Scraper?

Browsing CarGurus.ca by hand doesn't scale once you need more than a page or two of results, and the site only shows so much inventory per screen. This Actor is built for anyone who needs CarGurus data in bulk and on a schedule:

- 🚙 **Car shoppers** — compare price, mileage, and deal rating across dozens of dealers at once, for both new and used vehicles.
- 🏷️ **Dealers & inventory managers** — track competitor pricing and stock by make, model, or region.
- 📊 **Market & pricing researchers** — build datasets of asking prices, depreciation, and deal ratings across body styles and trims.
- 🤖 **Analysts & data teams** — feed clean vehicle data into pricing models, dashboards, or lead pipelines without writing a scraper.

Because it runs on Apify, you can schedule it to run daily, feed results straight into a spreadsheet or database, and only pay for what you actually scrape.

### How to scrape CarGurus.ca car data

1. Click **Try for free** (or **Start**) to open the Actor.
2. On the **Input** tab, paste one or more CarGurus.ca URLs into **Start URLs**. This can be a used-car search page (e.g. `cargurus.ca/Cars/spt-used-cars-Toronto_L414276`), a new-car model page (e.g. `cargurus.ca/Cars/new/nl-New-Toyota-RAV4-d920`), or specific listing pages (`cargurus.ca/details/...`) you already have.
3. Set **Max items per start URL** (or leave it at the default to run a quick test) — the Actor pages through search results automatically until it hits this limit or runs out of listings.
4. Leave **Scrape full listing details** on for complete data (VIN, full description, complete photo gallery, seller address and rating), or turn it off for a faster, lighter scrape using only what's shown on the search results.
5. Click **Start** and wait for the run to finish.
6. Open the **Dataset** tab to preview, filter, and download your results as JSON, CSV, Excel, HTML, or XML.

No coding required — though everything here is also available through the Apify API if you want to automate it.

### Input

All input options are configured through the **Input** tab in the Apify Console (or as a JSON object via the API).

| Field                  | Description                                                                                                                                                                                                |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`            | CarGurus.ca used-car search pages, new-car search pages, and/or specific listing URLs to scrape directly. Mix and match any of the three in one list.                                                      |
| `maxItems`             | Stop collecting from a given start URL once this many listings have been found. Set to 0 to collect every listing a search page returns.                                                                   |
| `scrapeListingDetails` | Visit each listing's own page for the full description, VIN, complete photo gallery, seller address/rating, and accident history. Turn off for a faster run using only search-result data.                 |
| `proxyConfiguration`   | Proxy servers used to fetch listings. CarGurus.ca actively blocks traffic that doesn't look like a real browser, so a **Residential** proxy group is used by default and recommended for reliable results. |

Example input:

```json
{
    "startUrls": [
        { "url": "https://www.cargurus.ca/Cars/spt-used-cars-Toronto_L414276" },
        { "url": "https://www.cargurus.ca/Cars/new/nl-New-Toyota-RAV4-d920" }
    ],
    "maxItems": 100,
    "scrapeListingDetails": true
}
```

### Output

Each scraped listing is saved as one item in the Actor's dataset. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example output item:

```json
{
    "id": 454496744,
    "url": "https://www.cargurus.ca/details/454496744",
    "title": "2017 BMW 6 Series 650i xDrive Gran Coupe AWD",
    "condition": "USED",
    "make": "BMW",
    "model": "6 Series",
    "trim": "650i xDrive Gran Coupe AWD",
    "year": 2017,
    "bodyType": "Sedan",
    "price": 17898,
    "priceFormatted": "$17,898",
    "mileage": 141503,
    "mileageFormatted": "141,503",
    "exteriorColor": "Black",
    "vin": "WBA6D6C31HG388587",
    "transmission": "Automatic",
    "drivetrain": "All-Wheel Drive",
    "engine": "445 hp 4.4L V8",
    "fuelType": "Gasoline",
    "dealRating": "GREAT_PRICE",
    "daysOnMarket": 14,
    "description": "4.4L TwinPower Turbo V8, 445 hp, xDrive All-Wheel Drive...",
    "features": ["Leather Seats", "Navigation System", "Bluetooth", "Backup Camera"],
    "images": ["https://static.cargurus.com/images/forsale/.../pic-1024x768.jpeg"],
    "imageCount": 47,
    "mainImage": "https://static.cargurus.com/images/forsale/.../pic-1024x768.jpeg",
    "location": { "city": "Vaughan", "region": "ON", "postalCode": "L4L 7H3", "distanceKm": 0 },
    "seller": {
        "name": "Northline Motors",
        "type": "DEALER",
        "phone": "+1 647-492-1647",
        "rating": 4.72,
        "reviewCount": 29
    },
    "scrapedAt": "2026-08-11T12:00:00.000Z"
}
```

#### Data fields

| Field                                                       | Description                                                                                     |
| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `title`, `condition`                                        | Listing headline and vehicle condition (`NEW`, `USED`, or `CERTIFIED_PRE_OWNED`)                |
| `make`, `model`, `trim`, `year`, `bodyType`                 | Vehicle identification                                                                          |
| `price`, `priceFormatted`, `msrp`                           | Numeric asking price in CAD, a display-formatted string, and MSRP/original price when available |
| `mileage`, `mileageFormatted`                               | Odometer reading in kilometres                                                                  |
| `exteriorColor`, `interiorColor`, `vin`, `stockNumber`      | Vehicle details                                                                                 |
| `transmission`, `drivetrain`, `engine`, `fuelType`, `doors` | Specifications                                                                                  |
| `dealRating`, `daysOnMarket`, `accidentReported`            | Market signals                                                                                  |
| `description`, `features`                                   | Full description and equipment list (populated when full details are scraped)                   |
| `images`, `imageCount`, `mainImage`                         | Photo URLs                                                                                      |
| `location`, `seller`                                        | Listing location and seller/dealer name, type, phone, rating, and address                       |
| `scrapedAt`                                                 | Timestamp of when the item was scraped                                                          |

### How much does it cost to scrape CarGurus.ca?

This Actor charges based on the Apify platform's standard compute-unit pricing for your plan — there's no separate per-item fee. A run scraping a few hundred listings with full details enabled uses a modest amount of compute, well within the free tier for occasional use. To control cost:

- ✅ Set a specific **Max items per start URL** instead of leaving it unlimited.
- ✅ Turn off **Scrape full listing details** if you only need what's already shown on search results (title, price, mileage, main photo) — this roughly halves the number of requests.
- ✅ Point **Start URLs** at a narrow search (a specific city, make, or model) instead of a broad, unfiltered one.

### Tips for better results

- Want everything in a category? Point **Start URLs** at that search page and set **Max items** to 0 — the Actor pages through the entire result set until it runs out of listings.
- New-car searches on CarGurus.ca are organized by model rather than location, so a new-car start URL typically covers dealers nationwide.
- You can mix used-car search pages, new-car search pages, and specific listing URLs in the same **Start URLs** list.
- For ongoing price monitoring, schedule this Actor to run daily and compare new runs against previous ones by listing `id`.
- The default **Residential** proxy group is recommended — CarGurus.ca applies stricter checks to traffic that looks automated, and datacenter proxies are more likely to get blocked on large runs.

### FAQ, disclaimers, and support

**Is this legal?** This Actor only accesses data that CarGurus.ca already serves to any visitor's browser. You are responsible for using the scraped data in compliance with CarGurus's own Terms of Service and any applicable laws in your jurisdiction.

**Will this get blocked?** The Actor is built to run reliably against CarGurus.ca's public pages using proxy rotation and realistic browser behaviour. If you notice a drop in results, please open an issue — the site's structure can change over time and reports help it get fixed quickly.

**Can I get a custom version?** Yes — see below. 👇

🐞 Found a bug or missing field? Please report it on the Actor's **Issues** tab so it can be fixed quickly.

#### Support & custom development

Need a different data shape, extra filters, a scraper for another marketplace, or a brand new Apify Actor built from scratch? That's exactly what I do — reach out and let's talk:

📧 Email: <bistasajan681@gmail.com>

# Actor input Schema

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

CarGurus.ca pages to scrape. You can mix three kinds of URLs in the same list: <ul><li>Used car search pages, e.g. <code>https://www.cargurus.ca/Cars/spt-used-cars-Toronto\_L414276</code> or a make/model/body-style search such as <code>https://www.cargurus.ca/Cars/l-Used-Toyota-Toronto-m7\_L414276</code></li><li>New car search pages, e.g. <code>https://www.cargurus.ca/Cars/new/nl-New-Toyota-RAV4-d920</code></li><li>Individual listing pages you already have, e.g. <code>https://www.cargurus.ca/details/454496744</code></li></ul>Search pages are crawled for every matching listing (paging through results automatically); listing pages are scraped directly.

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

Stop collecting listings from a given start URL once this many have been found. Set to 0 to collect every listing a search page returns (the Actor keeps paging until there's nothing left).

## `scrapeListingDetails` (type: `boolean`):

Visit each listing's own page for the full description, VIN, complete photo gallery, seller address/rating and accident history. Turn off for a faster, lighter run using only the data shown on the search results page (title, price, mileage, main photo, dealer name).

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

Proxy servers used to fetch listings.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.cargurus.ca/Cars/spt-used-cars-Toronto_L414276"
    }
  ],
  "maxItems": 5,
  "scrapeListingDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrls": [
        {
            "url": "https://www.cargurus.ca/Cars/spt-used-cars-Toronto_L414276"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jordan-byte/cargurus-data-scraper-0-99").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": [{ "url": "https://www.cargurus.ca/Cars/spt-used-cars-Toronto_L414276" }] }

# Run the Actor and wait for it to finish
run = client.actor("jordan-byte/cargurus-data-scraper-0-99").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": [
    {
      "url": "https://www.cargurus.ca/Cars/spt-used-cars-Toronto_L414276"
    }
  ]
}' |
apify call jordan-byte/cargurus-data-scraper-0-99 --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jordan-byte/cargurus-data-scraper-0-99"
        }
    }
}

```

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/Pr29lNhX5ndxokGPH/builds/bUPvP8TwypilS2RcR/openapi.json
