# 🚘🇨🇦Carpages.ca Car Scraper(💰0.99) (`mrdoe/carpages-ca-car-scraper`) Actor

Extract car listings from Carpages.ca — price, mileage, year, make, model, VIN, specs, photos, and dealer details. Scrape new and used car search pages or specific listings and get clean, structured JSON, CSV, or Excel data, no code required.

- **URL**: https://apify.com/mrdoe/carpages-ca-car-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:** E-commerce, Automation
- **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 Carpages.ca** — one of Canada's largest new and used car marketplaces. Hand it a used-car search page, a new-car search page, or specific listing URLs, and get back clean, structured data for every matching vehicle: price, mileage, year/make/model/trim, VIN, colours, specs, features, photos, and dealer details.

⚡ 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.

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

Browsing Carpages.ca by hand doesn't scale once you need more than a page or two of results. This Actor is built for anyone who needs Carpages.ca data in bulk and on a schedule:

- 🚙 **Car shoppers** — compare price, mileage, and specs 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 and depreciation 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 Carpages.ca car data

1. Click **Try for free** (or **Start**) to open the Actor.
2. On the **Input** tab, paste one or more Carpages.ca URLs into **Start URLs**. This can be a used-car search page (`carpages.ca/used-cars/search/`), a new-car search page (`carpages.ca/new-cars/search/`), or specific listing pages you already have. You can copy any filtered search URL straight from your browser after narrowing results by make, model, city, or price on Carpages.ca itself — the Actor follows whatever filters are already in the URL.
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, features, seller address), 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`            | Carpages.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. Doesn't limit direct listing URLs.               |
| `scrapeListingDetails` | Visit each listing's own page for the full description, VIN, complete photo gallery, features, and seller address. Turn off for a faster run using only search-result data.               |
| `proxyConfiguration`   | Proxy servers used to fetch listings. Carpages.ca actively challenges traffic that doesn't look like a real browser, so a **Residential** proxy group is used by default and recommended. |

Example input:

```json
{
    "startUrls": [
        { "url": "https://www.carpages.ca/used-cars/search/?num_results=50" },
        { "url": "https://www.carpages.ca/new-cars/search/?num_results=50" }
    ],
    "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": 14587404,
    "url": "https://www.carpages.ca/used-cars/ontario/north-bay/2023-kia-sportage-14587404/",
    "condition": "USED",
    "title": "2023 Kia Sportage",
    "year": 2023,
    "make": "Kia",
    "model": "Sportage",
    "trim": null,
    "bodyType": "SUV / Crossover",
    "price": 30995,
    "priceFormatted": "$30,995",
    "mileage": 54914,
    "mileageFormatted": "54,914",
    "exteriorColor": "Grey",
    "interiorColor": null,
    "vin": "KNDPVCAFXP7075391",
    "stockNumber": "260607",
    "transmission": "Automatic",
    "drivetrain": "All Wheel Drive",
    "engine": "4-cylinder",
    "fuelType": "Other / Unsure",
    "description": "2.5L 4CYL All Wheel Drive KIA SPORTAGE EX 2023...",
    "features": ["AWD", "8 speed automatic"],
    "images": ["https://images.carpages.ca/inventory/14587404.828176109.jpg?w=1280&h=960..."],
    "imageCount": 30,
    "mainImage": "https://images.carpages.ca/inventory/14587404.828176109.jpg?w=640&h=480...",
    "location": { "city": "North Bay", "region": "ON", "postalCode": "P1A 2B2" },
    "seller": {
        "name": "MyCar.ca North Bay",
        "type": "AutoDealer",
        "phone": "866-385-7304",
        "address": "157 Lakeshore Dr",
        "latitude": 46.28944,
        "longitude": -79.451707
    },
    "specs": { "exteriorColour": "Grey", "bodyStyle": "SUV / Crossover", "mileage": "54,914 KM" },
    "scrapedAt": "2026-08-11T12:00:00.000Z"
}
```

#### Data fields

| Field                                                  | Description                                                                                       |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
| `title`, `condition`                                   | Listing headline and vehicle condition (`NEW` or `USED`)                                          |
| `make`, `model`, `trim`, `year`, `bodyType`            | Vehicle identification                                                                            |
| `price`, `priceFormatted`                              | Numeric asking price in CAD and a display-formatted string                                        |
| `mileage`, `mileageFormatted`                          | Odometer reading in kilometres                                                                    |
| `exteriorColor`, `interiorColor`, `vin`, `stockNumber` | Vehicle details                                                                                   |
| `transmission`, `drivetrain`, `engine`, `fuelType`     | Specifications                                                                                    |
| `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, address, and coordinates                    |
| `specs`                                                | Every spec row shown on the listing page, as key/value pairs, for anything not already broken out |
| `scrapedAt`                                            | Timestamp of when the item was scraped                                                            |

### How much does it cost to scrape Carpages.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.
- You can mix used-car search pages, new-car search pages, and specific listing URLs in the same **Start URLs** list.
- Narrow a search on Carpages.ca in your browser first (make, model, city, price range), then copy that URL into **Start URLs** — the Actor respects any filters already present in the URL.
- 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 — Carpages.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 Carpages.ca already serves to any visitor's browser. You are responsible for using the scraped data in compliance with Carpages.ca's own Terms of Service and any applicable laws in your jurisdiction.

**Will this get blocked?** The Actor is built to run reliably against Carpages.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.

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

# Actor input Schema

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

Carpages.ca used-car search pages, new-car search pages, and/or specific listing (VDP) URLs to scrape. Mix and match any of the three in one list. Search page examples: https://www.carpages.ca/used-cars/search/ or https://www.carpages.ca/new-cars/search/ — you can append the site's own filters (make, model, city, price range, and so on) from the Carpages.ca search UI, and the Actor will follow them as-is.

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

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. Does not limit direct listing URLs, which are always scraped individually.

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

Visit each listing's own page for the full description, VIN, complete photo gallery, features, and seller address. Turn off for a faster run using only the data already shown on search-result pages (title, price, mileage, colour, dealer, main photo).

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

Proxy servers used to fetch pages. Carpages.ca actively challenges traffic that doesn't look like it's coming from a real residential connection, so a Residential proxy group is used by default and recommended for reliable results.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.carpages.ca/used-cars/search/?num_results=50"
    }
  ],
  "maxItems": 5,
  "scrapeListingDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.carpages.ca/used-cars/search/?num_results=50"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/carpages-ca-car-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": [{ "url": "https://www.carpages.ca/used-cars/search/?num_results=50" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/carpages-ca-car-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": [
    {
      "url": "https://www.carpages.ca/used-cars/search/?num_results=50"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call mrdoe/carpages-ca-car-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/carpages-ca-car-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/K5vqdGnG5bbdXzoFc/builds/cRKwUSkyGU9uqaFnA/openapi.json
