# 🇨🇦 🚘UsedCarCanada.ca Scraper(💰0.99) (`mrdoe/usedcarcanada-ca-scraper`) Actor

Extract used car listings from UsedCarCanada.ca across every Canadian province — price, mileage, year, make, model, trim, dealer details, and photos. Handles this site's aggressive Cloudflare protection automatically. Clean JSON, CSV, or Excel output, no code required.

- **URL**: https://apify.com/mrdoe/usedcarcanada-ca-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:** Automation, E-commerce, Lead generation
- **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 UsedCarCanada.ca** — a Canada-wide marketplace for used (and some new) vehicles. Hand it a search page or specific listing URLs, and get back clean, structured data for every matching vehicle: price, mileage, year/make/model/trim, colours, specs, 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 UsedCarCanada.ca Car Data Scraper?

Browsing UsedCarCanada.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 UsedCarCanada.ca data in bulk and on a schedule:

- 🚙 **Car shoppers** — compare price, mileage, and specs across dealers and provinces at once.
- 🏷️ **Dealers & inventory managers** — track competitor pricing and stock by make, model, or region.
- 📊 **Market & pricing researchers** — build datasets of asking prices 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 UsedCarCanada.ca car data

1. Click **Try for free** (or **Start**) to open the Actor.
2. On the **Input** tab, paste one or more UsedCarCanada.ca URLs into **Start URLs**. This can be the main search page (`usedcarcanada.ca/search`), a filtered search (`usedcarcanada.ca/search/make-Honda/model-Civic`, `usedcarcanada.ca/search/province-Ontario`, and so on), or specific listing pages you already have. You can copy any filtered search URL straight from your browser after narrowing results by make, model, body style, or location on UsedCarCanada.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 (full description, complete photo gallery, dealer 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 — see the note on run time below, this site can take a while.
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`            | UsedCarCanada.ca search pages and/or specific listing URLs to scrape directly. Mix and match both 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, complete photo gallery, and dealer address. Turn off for a faster run using only search-result data.                                         |
| `proxyConfiguration`   | Proxy servers used to fetch pages. UsedCarCanada.ca sits behind an aggressive Cloudflare rule that outright blocks most proxy IPs, so a **Residential** proxy group is used by default and required. |

Example input:

```json
{
    "startUrls": [
        { "url": "https://www.usedcarcanada.ca/search" },
        { "url": "https://www.usedcarcanada.ca/search/make-Honda/model-Civic" }
    ],
    "maxItems": 20,
    "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": 2,
    "url": "https://www.usedcarcanada.ca/vehicle/2024-ford-f-250-north-vancouver-british-columbia-2",
    "title": "2024 Ford, F-250 - North Vancouver, British Columbia",
    "year": 2024,
    "make": "Ford",
    "model": "F-250",
    "trim": "XLT FX-4 PREMIUM",
    "bodyType": "Truck",
    "price": 59999,
    "priceFormatted": "$59,999",
    "mileage": 65667,
    "mileageFormatted": "65,667",
    "exteriorColor": "White",
    "interiorColor": "Gray",
    "stockNumber": "W3585",
    "doors": 4,
    "passengers": 5,
    "transmission": "auto",
    "description": "2024 FORD F-250 XLT SPORT FX4 PREFERRED EQUIPMENT PKG...",
    "images": ["https://boostcarimages.blob.core.windows.net/carimages/1807/6629507/..."],
    "imageCount": 15,
    "mainImage": "https://boostcarimages.blob.core.windows.net/carimages/1807/6629507/...",
    "dealer": {
        "name": "National Fleet Disposal",
        "url": "https://www.usedcarcanada.ca/dealer/national-fleet-disposal",
        "website": "https://nationalcarsales.ca/locations/north-vancouver/",
        "phone": "6049241080",
        "address": "195 Pemberton Ave",
        "latitude": 49.31904,
        "longitude": -123.108173
    },
    "specs": { "year": "2024", "make": "Ford", "model": "F-250", "stock": "W3585" },
    "scrapedAt": "2026-08-11T12:00:00.000Z"
}
```

#### Data fields

| Field                                            | Description                                                                                       |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
| `title`, `make`, `model`, `trim`, `year`         | Vehicle identification                                                                            |
| `bodyType`, `doors`, `passengers`                | Vehicle details                                                                                   |
| `price`, `priceFormatted`                        | Numeric asking price in CAD and a display-formatted string                                        |
| `mileage`, `mileageFormatted`                    | Odometer reading in kilometres                                                                    |
| `exteriorColor`, `interiorColor`, `transmission` | Vehicle specs                                                                                     |
| `stockNumber`                                    | Dealer's internal stock number, when shown                                                        |
| `description`                                    | Full listing description, populated when full details are scraped                                 |
| `images`, `imageCount`, `mainImage`              | Photo URLs                                                                                        |
| `dealer`                                         | Seller name, dealer page URL, website, phone, address, and map 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 UsedCarCanada.ca?

This Actor charges based on the Apify platform's standard compute-unit pricing for your plan — there's no separate per-item fee. Because it uses a real browser (see below) plus a large retry budget to get past this site's bot protection, it uses meaningfully more compute per listing than a typical HTTP-based scraper. 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 page loads.
- ✅ Point **Start URLs** at a narrow search (a specific make, model, or province) instead of a broad, unfiltered one.

### A note on run time and reliability

UsedCarCanada.ca sits behind a Cloudflare rule that immediately blocks (HTTP 403) most requests, including a large share of residential proxy IPs and *all* plain HTTP requests — only a real browser on an unflagged IP gets through, and even then only a minority of individual IPs succeed on any given page. This Actor uses a real headless browser with a large per-request retry budget and automatic session/IP rotation to work around it, which is why runs against this site are slower and use more compute than most scrapers. Expect noticeably longer run times than similar Actors for other sites, especially on large jobs — this is a property of the target site's protection, not something a different scraping approach can avoid.

### 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 search pages and specific listing URLs in the same **Start URLs** list.
- Narrow a search on UsedCarCanada.ca in your browser first (make, model, body style, province, city), 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 **Residential** proxy group is required — datacenter proxies and plain HTTP requests are blocked on this site 100% of the time.

### FAQ, disclaimers, and support

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

**Will this get blocked?** UsedCarCanada.ca runs an aggressive Cloudflare rule that blocks most traffic outright rather than presenting a solvable challenge (see the note on run time above). The Actor works around this with browser-based requests, a large retry budget, and automatic IP rotation, but on a shared residential proxy pool a fully clean, fast run isn't guaranteed — occasional slow pages or partial results are a property of the target site. If you notice a sustained drop in results, please open an issue.

🐞 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`):

UsedCarCanada.ca search pages and/or specific listing URLs to scrape. Mix and match both in one list. Search page examples: https://www.usedcarcanada.ca/search or https://www.usedcarcanada.ca/search/make-Honda/model-Civic — you can append the site's own filters (make, model, body style, province, city, and so on) from the UsedCarCanada.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, complete photo gallery, and full specs. 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. UsedCarCanada.ca sits behind an aggressive Cloudflare WAF rule that outright blocks most proxy IPs (including many Apify Residential IPs) on their very first request, so a Residential proxy group is used by default and required — plain datacenter proxies will not work at all.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.usedcarcanada.ca/search"
    }
  ],
  "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.usedcarcanada.ca/search"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/usedcarcanada-ca-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.usedcarcanada.ca/search" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

```

## MCP server setup

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