# AutoTrader.ca \[$0.9💰] Canada · Filter Search + VIN/CarFax (`memo23/autotrader-ca-scraper`) Actor

Scrape AutoTrader.ca (Canada) by make, model, location, price, year, body, fuel, transmission, colour & power — no URL building. Full details per car: mileage, specs, dealer name + phone, all photos, stock #, plus optional VIN & CarFax. New & used, all provinces. JSON/CSV.

- **URL**: https://apify.com/memo23/autotrader-ca-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** E-commerce, AI, Agents
- **Stats:** 17 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.90 / 1,000 vehicle scrapeds

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

## AutoTrader.ca Scraper · Canada

Scrape vehicle listings from **[AutoTrader.ca](https://www.autotrader.ca)** — Canada's largest automotive marketplace. **Search by make, model, location, price, year, body type, fuel, transmission, colour and power — no URL building required** — or paste any AutoTrader.ca URL. Every car comes back fully detailed: price, mileage, specs, dealer name + phone, location, all photos, stock number, and optional **VIN + CarFax**. New and used, every province. One clean row per vehicle, JSON or CSV.

#### How it works

![How the AutoTrader.ca Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-autotrader-ca.png)

#### ✨ Why use this scraper?

- **Search by filters, not URLs** — pick make, model, location, radius, price, year, mileage, condition, body type, fuel, transmission, colour and power right in the input. No hand-building AutoTrader.ca URLs (though you can paste those too).
- **VIN + CarFax** *(optional)* — flip one toggle and every car also carries its VIN and CarFax-availability flag, plus dealer **phone number** and stock number on every row.
- **Full detail, not just the card** — every listing is expanded into a complete record: technical specs, dealer info, location with coordinates, the full description, and all photos.
- **Canada-wide** — every province and territory, new and used, dealer inventory. Search one city with a radius, or all of Canada at once.
- **Clean structured output** — data comes from AutoTrader.ca's own mobile API as JSON, so there are no fragile HTML selectors to break.
- **Smart resolution** — make/model names become category codes and cities become geocoded provinces + radius automatically. You type "Toyota Corolla in Toronto", we handle the rest.
- **Pay per result** — one dataset row per vehicle, no padding.

#### 🎯 Use cases

| Who | What they get |
|---|---|
| **Dealers & resellers** | Live competitor pricing on the exact make/model/trim they stock, by region |
| **Market analysts** | Price-vs-mileage-vs-year datasets across provinces for valuation models |
| **Used-car shoppers & tools** | Every matching car in one place, sortable by price or mileage |
| **Lead-gen & data teams** | Dealer names, websites, and locations tied to live inventory |
| **Researchers** | Supply trends by body type, fuel, drivetrain, or region over time |

#### 📥 Supported inputs

| Input | Example | Notes |
|---|---|---|
| **Search filters** | `Make: Toyota`, `Model: Corolla`, `Location: Toronto` | All optional — combine any of them |
| **Search (SRP) URL** | `https://www.autotrader.ca/cars/toyota/corolla/on/toronto/?prx=100&pRng=10000,25000` | Pasted from the browser address bar |
| **Listing (VDP) URL** | `https://www.autotrader.ca/a/toyota/corolla/.../5_70046900_.../` | Narrows the search to that make/model near that city |

**Not supported:** auction-only listings, private classified sections behind a login, and non-AutoTrader.ca URLs (these are skipped with a warning).

#### 🔄 How it works

1. **Read your input.** Start URLs win if present; otherwise the search filters are used. Leave the location empty to search all of Canada.
2. **Resolve.** Make + model are looked up to AutoTrader's internal category code; the city/postal code is geocoded to a province + radius.
3. **Search.** The actor queries AutoTrader.ca's mobile GraphQL API and walks every results page (100 cars per page) until your `maxItems` cap.
4. **Enrich.** Each result is expanded into a full detail record — specs, dealer, every photo, and the description.
5. **Filter.** Price, mileage, condition, and sort run on the API; the year range is enforced on every row.
6. **Emit.** One flat, self-contained row per vehicle is pushed to the dataset.

#### ⚙️ Input parameters

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | AutoTrader.ca search or listing URLs. When present, URL mode wins. |
| `searchMake` | string | Vehicle make, e.g. `Toyota`. |
| `searchModel` | string | Vehicle model, e.g. `Corolla`. Applied with a make. |
| `searchLocation` | string | City, town, or postal code. Empty = all of Canada. |
| `searchRadiusKm` | integer | Radius in km around the location (default `100`). |
| `priceMin` / `priceMax` | integer | Price range in CAD. |
| `yearMin` / `yearMax` | integer | Model-year range. |
| `minMileageKm` / `maxMileageKm` | integer | Odometer range in km. |
| `condition` | select | `all`, `new`, or `used`. |
| `bodyTypes` | multi-select | SUV, Pickup, Sedan, Hatchback, Minivan, Coupe, Convertible, Wagon, Other. |
| `fuelTypes` | multi-select | Gasoline, Diesel, Electric, Hybrid, Flex Fuel, CNG, Other. |
| `transmission` | select | Automatic or Manual. |
| `colors` | multi-select | Exterior colour (Black, White, Grey, Blue, Red, Silver, …). |
| `powerHpMin` / `powerHpMax` | integer | Engine power range in horsepower. |
| `equipmentIds` | array | Advanced: AutoScout24 equipment codes (car must have all). |
| `keywords` | string | Free-text search, e.g. `sunroof leather`. |
| `sort` | select | `standard`, `price`, `age` (year), or `mileage`. |
| `sortDesc` | boolean | Reverse the sort (price high→low, newest first). |
| `enrichVehicleHistory` | boolean | Add `vin` + `carfaxAvailable` per car (1 extra request each). Off by default. |
| `maxItems` | integer | Max vehicles to collect (default `1000`). |
| `proxy` | object | Proxy configuration (Residential, country `CA` recommended). |

#### 📊 Output overview

Each dataset item is **one vehicle**, fully flattened for easy use in spreadsheets and BI tools, with the most important fields at the top level (`make`, `model`, `year`, `price`, `mileageKm`, `location`, `dealer`, `url`). The complete raw API payload is preserved under `raw` for power users who want every field. Export as JSON, CSV, Excel, or via the API.

#### 📦 Output sample

```json
{
  "guid": "742910bf-b660-4fbb-b949-8fa939b03937",
  "crossReferenceId": "69762117",
  "url": "https://www.autotrader.ca/offers/toyota-corolla-se-...-742910bf-b660-4fbb-b949-8fa939b03937",
  "title": "Toyota Corolla SE | Sunroof | Leather | BSM | ACC | CarPlay",
  "make": "Toyota",
  "model": "Corolla",
  "version": "SE | Sunroof | Leather | BSM | ACC | CarPlay",
  "year": 2019,
  "price": 18850,
  "priceFormatted": "$18,850",
  "priceCurrency": "CAD",
  "mileageKm": 113000,
  "condition": "used",
  "bodyType": "Sedan",
  "bodyColor": "White",
  "doors": 4,
  "seats": 5,
  "fuelType": "Gasoline",
  "transmission": "Automatic",
  "driveTrain": "Front Wheel Drive",
  "cylinders": 4,
  "accidentFree": true,
  "isDamaged": false,
  "location": {
    "city": "TORONTO",
    "province": "ON",
    "postalCode": "M3J2E8",
    "street": "1205 FINCH AVE W",
    "country": "CA",
    "latitude": 43.7643,
    "longitude": -79.4839
  },
  "dealer": {
    "name": "Autorama",
    "id": "47946161",
    "type": "Dealer",
    "website": "https://www.autorama.ca/",
    "region": "ON"
  },
  "images": ["https://prod.pictures.autoscout24.net/listing-images/742910bf-..._...jpg"],
  "imageCount": 32,
  "description": "Clean CarFax. 17-inch alloy wheels | Power moonroof | Heated seats | Toyota Safety Sense P ...",
  "dealBuilderUrlEN": "https://autorama.shop.autotrader.ca/details/6791141",
  "dealBuilderUrlFR": "https://autorama.boutique.autohebdo.net/fr/details/6791141",
  "scrapedAt": "2026-06-23T06:01:06.215Z"
}
```

#### 🗂 Key output fields

| Category | Fields |
|---|---|
| **Identity** | `guid`, `crossReferenceId`, `stockNumber`, `url`, `title` |
| **Vehicle** | `make`, `model`, `version`, `year`, `bodyType`, `bodyColor`, `doors`, `seats` |
| **Price** | `price`, `priceFormatted`, `priceCurrency`, `priceEvaluation` |
| **Condition** | `mileageKm`, `condition`, `accidentFree`, `isDamaged`, `previousOwners`, `firstRegistration` |
| **Drivetrain** | `fuelType`, `transmission`, `driveTrain`, `cylinders`, `engineDisplacementCcm`, `powerHp` |
| **Location** | `location.{city, province, postalCode, street, country, latitude, longitude}` |
| **Dealer** | `dealer.{name, phone, phoneE164, id, type, website, region}` |
| **Media & links** | `images[]`, `imageCount`, `description`, `dealBuilderUrlEN`, `dealBuilderUrlFR` |
| **Enrichment** (opt-in) | `vin`, `carfaxAvailable` — populated when `enrichVehicleHistory` is on |
| **Raw** | `raw` — the complete unflattened API record |

#### ❓ FAQ

**Does it cover all of Canada?**
Yes — every province and territory. Set a city + radius to scope it, or leave the location empty to search nationwide.

**Can I just paste a URL from AutoTrader.ca?**
Yes. Copy any search-results or listing URL from your browser into `startUrls`. The actor reads the make, model, location, price, and year range from the URL.

**New cars, used cars, or both?**
Both by default. Use the `condition` filter to restrict to `new` or `used` only.

**How many results can I get?**
As many as the search returns, up to your `maxItems` cap. The actor paginates through every page automatically.

**Why is `firstRegistration` or `powerHp` sometimes empty?**
Canadian listings don't always populate every field (they're keyed on model year rather than registration date). Those fields are `null` when the source omits them.

**Can I filter by drivetrain (AWD) or by dealer vs. private seller?**
Those aren't filterable on this API — the marketplace doesn't expose a drivetrain or seller-type search parameter. Both values are still in the output (`driveTrain`, `dealer.type`), so you can filter the results yourself after scraping. For specific equipment (e.g. all-wheel-drive package), use the advanced `equipmentIds` field.

**Is the VIN included?**
Turn on **Add VIN + CarFax availability** (`enrichVehicleHistory`) and each row gets its `vin` and `carfaxAvailable` flag. It's off by default because it adds one extra web request per vehicle. The dealer's phone number (`dealer.phone`) and stock number (`stockNumber`) are always included.

**Do I need a proxy?**
A Residential proxy (country `CA`) is recommended for reliability and is pre-configured by default.

#### 💬 Support

Questions, custom fields, or a tweak to the output shape? Email **muhameddidovic@gmail.com** — happy to help or build a custom solution.

#### 🛠 Additional services

Need a scraper for another car marketplace, a scheduled feed into your database, or enrichment (dealer emails, VIN decode)? Reach out — custom builds and integrations welcome.

#### 🔎 Explore more scrapers

Looking for other vehicle marketplaces? Check out scrapers for AutoScout24, Kijiji Autos, Cars.com, Carsales, and Mobile.de.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by AutoTrader.ca, Trader Corporation, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available vehicle-listing data — no authenticated endpoints, dealer-only features, or content behind an AutoTrader.ca login. Users are responsible for ensuring their use complies with AutoTrader.ca's Terms of Service, applicable data-protection law (PIPEDA, GDPR, CCPA, etc.), and any contractual obligations of their own organisation.

***

### SEO Keywords

autotrader.ca scraper, autotrader canada scraper, scrape autotrader.ca, autotrader api, canada car listings scraper, used car scraper canada, car price data canada, vehicle listings api, autotrader.ca data export, canadian car marketplace scraper, car dealer inventory scraper, used car market data, vehicle pricing dataset, apify autotrader, scrape car listings canada, autotrader.ca csv export, car scraper json, automotive data canada, kijiji autos alternative scraper, autoscout24 alternative scraper

# Actor input Schema

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

Search pages (<code>/cars/toyota/corolla/on/toronto/…</code>) or listing pages (<code>/a/…</code>). A listing URL narrows the search to that make/model near that city.

## `searchMake` (type: `string`):

Vehicle make, e.g. <strong>Toyota</strong>, <strong>Honda</strong>, <strong>Ford</strong>. Optional.

## `searchModel` (type: `string`):

Vehicle model, e.g. <strong>Corolla</strong>, <strong>Civic</strong>. Only applied when a Make is set.

## `searchLocation` (type: `string`):

City, town, or postal code to centre the search on, e.g. <strong>Toronto</strong>, <strong>Montreal</strong>, <strong>H1S 1A9</strong>. Leave empty to search all of Canada.

## `searchRadiusKm` (type: `integer`):

Distance in km around the location. Ignored when no location is set.

## `priceMin` (type: `integer`):

Lowest asking price. Clear or use 0 for no minimum.

## `priceMax` (type: `integer`):

Highest asking price. Clear for no maximum.

## `yearMin` (type: `integer`):

Oldest model year to include, e.g. 2018. Clear for no minimum.

## `yearMax` (type: `integer`):

Newest model year to include, e.g. 2023. Clear for no maximum.

## `maxMileageKm` (type: `integer`):

Highest odometer reading in kilometres, e.g. 100000. Clear for no maximum.

## `minMileageKm` (type: `integer`):

Lowest odometer reading in kilometres. Clear for no minimum.

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

Filter by new, used, or both.

## `bodyTypes` (type: `array`):

Restrict to one or more body styles. Leave empty for all.

## `fuelTypes` (type: `array`):

Restrict to one or more fuel types. Leave empty for all.

## `transmission` (type: `string`):

Gearbox type.

## `colors` (type: `array`):

Restrict to one or more exterior colours. Leave empty for all.

## `powerHpMin` (type: `integer`):

Lowest engine power in horsepower. Clear for no minimum.

## `powerHpMax` (type: `integer`):

Highest engine power in horsepower. Clear for no maximum.

## `equipmentIds` (type: `array`):

Advanced: AutoScout24 equipment codes — a car must have ALL listed. E.g. 38, 13, 5. Leave empty unless you know the codes.

## `keywords` (type: `string`):

Free-text search across listings, e.g. <strong>sunroof leather</strong>. Optional.

## `sort` (type: `string`):

Result ordering. Combine with 'Sort descending' for price high→low or newest first.

## `sortDesc` (type: `boolean`):

Reverse the sort order (e.g. price high→low, newest year first).

## `enrichVehicleHistory` (type: `boolean`):

Fetch each car's AutoTrader.ca page to add its <code>vin</code> and <code>carfaxAvailable</code> flag. Off by default. Adds one HTTP request per vehicle.

## `enrichEmails` (type: `boolean`):

If enabled, finds a contact email for each result from its own website (or by discovering it from the name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.

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

Maximum number of vehicle detail records to collect.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests.

## `minConcurrency` (type: `integer`):

Minimum parallel requests.

## `maxRequestRetries` (type: `integer`):

Retries per failed request before giving up.

## `proxy` (type: `object`):

Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.autotrader.ca/cars/toyota/corolla/on/toronto/?prx=100&prv=Ontario&loc=toronto&pRng=10000%2C25000&yRng=2018%2C2023&srt=35"
    }
  ],
  "searchMake": "Toyota",
  "searchModel": "Corolla",
  "searchLocation": "Toronto",
  "searchRadiusKm": 100,
  "priceMin": 10000,
  "priceMax": 25000,
  "yearMin": 2018,
  "yearMax": 2023,
  "condition": "all",
  "transmission": "",
  "equipmentIds": [],
  "sort": "standard",
  "sortDesc": false,
  "enrichVehicleHistory": false,
  "enrichEmails": false,
  "maxItems": 1000,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 8
}
```

# Actor output Schema

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

No description

## `allItems` (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.autotrader.ca/cars/toyota/corolla/on/toronto/?prx=100&prv=Ontario&loc=toronto&pRng=10000%2C25000&yRng=2018%2C2023&srt=35"
        }
    ],
    "searchMake": "Toyota",
    "searchModel": "Corolla",
    "searchLocation": "Toronto",
    "searchRadiusKm": 100,
    "priceMin": 10000,
    "priceMax": 25000,
    "yearMin": 2018,
    "yearMax": 2023,
    "equipmentIds": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/autotrader-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.autotrader.ca/cars/toyota/corolla/on/toronto/?prx=100&prv=Ontario&loc=toronto&pRng=10000%2C25000&yRng=2018%2C2023&srt=35" }],
    "searchMake": "Toyota",
    "searchModel": "Corolla",
    "searchLocation": "Toronto",
    "searchRadiusKm": 100,
    "priceMin": 10000,
    "priceMax": 25000,
    "yearMin": 2018,
    "yearMax": 2023,
    "equipmentIds": [],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/autotrader-ca-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 '{
  "startUrls": [
    {
      "url": "https://www.autotrader.ca/cars/toyota/corolla/on/toronto/?prx=100&prv=Ontario&loc=toronto&pRng=10000%2C25000&yRng=2018%2C2023&srt=35"
    }
  ],
  "searchMake": "Toyota",
  "searchModel": "Corolla",
  "searchLocation": "Toronto",
  "searchRadiusKm": 100,
  "priceMin": 10000,
  "priceMax": 25000,
  "yearMin": 2018,
  "yearMax": 2023,
  "equipmentIds": []
}' |
apify call memo23/autotrader-ca-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Bqn5zodNWjIfmOXMS/builds/j2kYmWlZUeYn2HGxf/openapi.json
