# AutoTrader.ca Scraper — Canada Car Listings & Prices, No Phones (`highbrow_fame/autotrader-ca-listings`) Actor

AutoTrader.ca car listings from any search link or a make, model and place: price, mileage, model year, trim, fuel, gearbox, place and dealer; body, colour and drivetrain on request. No phone numbers.

- **URL**: https://apify.com/highbrow_fame/autotrader-ca-listings.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.80 / 1,000 listing delivereds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## AutoTrader.ca Scraper — Canada Car Listings & Prices, No Phones

Get new and used car listings from AutoTrader.ca, Canada's largest car marketplace: price in CAD and the site's price rating, model year, mileage, make, model and trim, fuel, gearbox, engine, the town, province and postal code, and the dealer. If you want, it also opens every listing for the body type, colours, drivetrain, doors, seats, equipment and the date listed. Paste your AutoTrader.ca search links — or type a make, model and postal code or town.

**Why this one**

- 🔗 **Your search, as you set it up.** Set every filter you like on autotrader.ca and paste the link. Or fill in make, model, new/used, a postal code or town with a radius (or a province), price, model year, mileage, seller type, gearbox and sort order here.
- ⚡ **Fast.** A live test run read four searches — 2,683 cars — in 77 seconds. The daily test input (30 RAV4s within 50 km of M5V 2T6) takes about 4 seconds.
- 🚙 **Details when you need them.** Tick **Open every listing for its details** for body type, colours, drivetrain, doors, seats, cylinders, equipment and the date listed. A live run read 375 cars with details in 38 seconds.
- 🧭 **No silent surprises.** AutoTrader.ca quietly widens a search when it does not know a place or a model (all of Canada instead of "Nowhereville"). This actor notices and tells you, instead of charging you for cars you did not ask for.
- 🔒 **No phone numbers, no contact names.** Dealers are named by their company; private sellers by nothing but their town and the first half of their postal code. Phone numbers and e-mail addresses written into titles and descriptions are replaced with `[phone removed]` / `[e-mail removed]` — in a live run of 2,683 cars, 42 numbers came out of 32 listings and none were left.
- 💸 **You pay only for cars delivered.** A link that is not an AutoTrader.ca search, a place or model the site does not know, or an old-style link comes back as a free record with the reason.

### What you get

For every car:

| Field | What it is |
|---|---|
| `title`, `make`, `model`, `variant`, `trim`, `year` | the car and its model year |
| `condition` | `new` or `used` |
| `price`, `currency`, `priceFormatted`, `priceRating` | the asking price in CAD and the site's rating of it (`top-price`, `good-price`, `fair-price`, …) |
| `mileageKm`, `fuel`, `transmission`, `engineCc`, `powerKw`, `powerHp` | as listed (power when the seller gave it) |
| `city`, `province`, `postalCode`, `street` | where the car is (street and full postal code for dealers only) |
| `sellerType`, `dealerName` | dealer or private seller; for dealers, the company |
| `description` | the seller's text, as plain text, with phone numbers and e-mail addresses taken out |
| `image`, `imageCount`, `url`, `listingId` | the listing |
| `input`, `place`, `position`, `scrapedAt`, `status`, `error` | which search it came from, the place the site searched around, and why a search gave nothing |

With **Open every listing for its details** also: `bodyType`, `exteriorColour`, `interiorColour`, `drivetrain`, `doors`, `seats`, `cylinders`, `engineLitres`, `previousOwners`, `hadAccident`, `fullServiceHistory`, `features`, `listedAt`, and for dealers `latitude` / `longitude`.

#### Example

A real record from a live run with details — Subaru Outback, British Columbia, 25 September 2026:

```json
{
  "title": "Subaru OUTBACK Limited Gray",
  "make": "Subaru",
  "model": "OUTBACK",
  "trim": "Limited Gray",
  "year": 2024,
  "condition": "used",
  "price": 37988,
  "currency": "CAD",
  "priceRating": "top-price",
  "mileageKm": 21100,
  "fuel": "Gasoline",
  "transmission": "Automatic",
  "engineCc": 2500,
  "city": "RICHMOND",
  "province": "BC",
  "postalCode": "V6V 1W8",
  "sellerType": "dealer",
  "dealerName": "Richmond Hyundai",
  "description": "Enjoy a haggle and hassle-free buying experience! We provide our best price up front, so you just need to pick the right car! All used vehicles have been throug…",
  "imageCount": 22,
  "url": "https://www.autotrader.ca/offers/subaru-outback-limited-gray-gasoline-grey-cat_ma67gr201387va3697tr15159-6c091a68-d1b6-4031-9b32-a91ece039034",
  "bodyType": "SUV",
  "exteriorColour": "Grey",
  "drivetrain": "All Wheel Drive",
  "doors": 4,
  "seats": 5,
  "cylinders": 4,
  "features": ["Air conditioning", "Automatic climate control", "Cruise control", "Heated steering wheel", "Leather steering wheel"],
  "listedAt": "2026-08-18T20:55:45.336Z",
  "status": "OK"
}
```

### How to use it

1. Paste **Search links** from autotrader.ca, one per line — or fill in **Make**, **Model**, **Postal code or town** (with a **Radius**) or **Province**, and the optional filters.
2. Set **Max listings per search**, and tick **Open every listing for its details** if you need body type, colours and drivetrain.
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To watch prices for a model in your area, save your input as a task, set **Sort** to **Newest listings first** and schedule it daily.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per listing delivered** — see the price on this page. Opening listings for their details costs nothing extra, only time. Links that are not AutoTrader.ca searches, places or models the site does not know, and old-style links are free.

### FAQ

**How many cars per search?** AutoTrader.ca shows up to 4,000 cars (200 pages of 20) for one search. For more, split it — by province, model year or price band.

**My old AutoTrader.ca link is refused.** Links from before the site's 2026 redesign (with `rcp=`, `srt=`, `loc=`, `prx=` in them) are still forwarded by autotrader.ca, but without their place and sort order. Rather than hand you all of Canada, the actor returns a free record saying so. Open the link on autotrader.ca, check the place, and copy the new address.

**Why do a few cars cost $1?** Some dealers put $1 in the price field instead of a price (12 of 2,683 cars in a test run). The actor keeps the price as listed; filter them out with `price > 1`.

**Why is there no VIN?** AutoTrader.ca's search results do not show it, so the actor leaves it out.

**Why no seller phone numbers?** They are personal data. Every listing has its `url`; buyers contact the seller on AutoTrader.ca.

**Is this affiliated with AutoTrader.ca?** No. This is an independent tool that reads public AutoTrader.ca listings.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

## `searchUrls` (type: `array`):

Set up a search on autotrader.ca with all the filters you want (make, model, place, price, year…) and paste the address of the results page. One per line.

## `make` (type: `string`):

Or search here without a link: the make (Toyota, Ford, Mercedes-Benz). The filters below apply.

## `model` (type: `string`):

Optional: the model as AutoTrader.ca writes it (RAV4, F-150, CR-V, Model 3).

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

For the form search.

## `location` (type: `string`):

Optional: search around a Canadian postal code (M5V 2T6) or a town (Toronto, Montréal, Red Deer). Without it: all of Canada.

## `radiusKm` (type: `integer`):

Optional: how far around the postal code or town. AutoTrader.ca uses 100 km when none is given.

## `province` (type: `string`):

Optional, instead of a postal code or town.

## `priceFrom` (type: `integer`):

Optional.

## `priceTo` (type: `integer`):

Optional.

## `yearFrom` (type: `integer`):

Optional.

## `yearTo` (type: `integer`):

Optional.

## `mileageTo` (type: `integer`):

Optional.

## `sellerType` (type: `string`):

Dealers, private sellers, or both.

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

Optional.

## `sortBy` (type: `string`):

For the form search. With a link, the link's own sort order is used.

## `maxListingsPerSearch` (type: `integer`):

Stops each search after this many cars. AutoTrader.ca shows up to 4,000 cars (200 pages) per search.

## `includeDetails` (type: `boolean`):

Adds body type, exterior and interior colour, drivetrain, doors, seats, cylinders, previous owners, accident flag, service history, equipment and the date listed. One more page per car, so slower.

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

How many searches to work on at the same time.

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

Used only to try again after a network error: the first try goes out directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.autotrader.ca/cars/toyota/rav4?zip=M5V%202T6&zipr=50&modelyearfrom=2020"
  ],
  "condition": "any",
  "province": "all",
  "sellerType": "any",
  "transmission": "any",
  "sortBy": "relevance",
  "maxListingsPerSearch": 30,
  "includeDetails": false,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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 = {
    "searchUrls": [
        "https://www.autotrader.ca/cars/toyota/rav4?zip=M5V%202T6&zipr=50&modelyearfrom=2020"
    ],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/autotrader-ca-listings").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 = {
    "searchUrls": ["https://www.autotrader.ca/cars/toyota/rav4?zip=M5V%202T6&zipr=50&modelyearfrom=2020"],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/autotrader-ca-listings").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 '{
  "searchUrls": [
    "https://www.autotrader.ca/cars/toyota/rav4?zip=M5V%202T6&zipr=50&modelyearfrom=2020"
  ],
  "maxListingsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/autotrader-ca-listings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,highbrow_fame/autotrader-ca-listings"
        }
    }
}
```

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/cWdz5ndE55Rl0tI7C/builds/EepiFcOqV0qFQVypA/openapi.json
