# Kijiji Auto & Classifieds Scraper Actor (`fayoussef/kijiji-ca-scraper`) Actor

Kijiji.ca listings scraper. Extracts detailed data including phone number, price, location, specs, and images from search results (with pagination) or direct ad URLs. Ideal for market research and data collection.

- **URL**: https://apify.com/fayoussef/kijiji-ca-scraper.md
- **Developed by:** [youssef farhan](https://apify.com/fayoussef) (community)
- **Categories:** Lead generation, Automation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Kijiji Scraper — Extract Cars, Real Estate & Classifieds from Kijiji.ca

Scrape Kijiji.ca listings at scale — vehicles, real estate, and general classifieds — from both search result pages and individual ad URLs. Built for car dealers, real estate analysts, and lead-generation teams working the Canadian market. Unlike most Kijiji scrapers, it returns the **seller phone number, dealership name, VIN, Carfax link, and GPS coordinates** in one structured record.

### What you get

35+ structured fields per listing, ready for CSV, Excel, or JSON export.

**Listing info**
- `id` — Kijiji listing ID
- `title`, `description` — full ad text
- `kijiji_url` — direct link to the ad
- `ad_source` — Top Ad, Showcase, or standard
- `activation_date`, `sorting_date` — when the ad went live and last sorted

**Pricing**
- `price_amount`, `price_original_amount` — current and original price
- `price_type` — Fixed, Please Contact, Free, etc.
- `price_surcharges` — e.g. `PLUS_GST`
- `price_classification_rating` — deal rating for dealer ads

**Location**
- `location_name`, `location_address` — city and street address
- `latitude`, `longitude` — GPS coordinates for geospatial analysis

**Seller**
- `phone_number` — seller's revealed phone number
- `dealership_name` — dealer/business name for commercial posters
- `poster_id` — unique seller ID
- `for_sale_by` — Dealer or Owner
- `is_top_ad`, `is_showcase`, `is_highlighted` — promotion flags

**Vehicle-specific fields**
- `make`, `model`, `year`, `trim`, `vin`
- `mileage_km`, `transmission`, `fuel_type`, `drivetrain`
- `body_type`, `color`, `condition`, `seats`, `doors`
- `carfax_link` — direct Carfax vehicle history URL
- `features` — A/C, alloy wheels, Bluetooth, sunroof, and more boolean flags

**Media & meta**
- `image_urls` — array of photo URLs
- `source_search_url` — the search that surfaced the listing
- `listing_url` — input URL for product-page runs

### Sample output

```json
{
  "id": "m10661116",
  "title": "2024 BMW M4",
  "description": "Presenting the 2024 BMW M4 Competition M xDrive, sold by St. Albert Exotics...",
  "phone_number": "+1-833-870-0000",
  "kijiji_url": "https://kijiji.ca/v-cars-trucks/edmonton/2024-bmw-m4/m10661116",
  "ad_source": "TOP_AD",
  "activation_date": "2025-04-15T23:45:28.000Z",
  "dealership_name": "St. Albert Exotics",
  "location_name": "Edmonton",
  "location_address": "Saint Albert Trail Northwest, Edmonton, AB, T5L 4H5",
  "latitude": 53.5910375,
  "longitude": -113.5649788,
  "price_amount": 99888,
  "price_type": "FIXED",
  "price_surcharges": "PLUS_GST",
  "make": "bmw",
  "model": "m4",
  "year": 2024,
  "mileage_km": 30160,
  "fuel_type": "Gas",
  "drivetrain": "AWD",
  "body_type": "coupe",
  "color": "Black",
  "condition": "Used",
  "for_sale_by": "Dealer",
  "vin": "WBS43AZ04RCP39930",
  "trim": "Competition M xDrive",
  "carfax_link": "https://vhr.carfax.ca/?id=rx6WB4G84rojC55NbLR4s1",
  "seats": 4,
  "doors": 2,
  "features/airconditioning": true,
  "features/sunroof": true,
  "image_urls": [
    "https://media.kijiji.ca/api/v1/autos-prod-ads/images/35/351e0ce4.jpg"
  ],
  "source_search_url": "https://www.kijiji.ca/b-cars-vehicles/edmonton/bmw/k0c27l1700203"
}
````

### Use cases

- ✓ Used car dealers monitoring competitor and private-seller pricing across Canadian provinces
- ✓ Lead-gen agencies building seller call lists with `phone_number` and `dealership_name`
- ✓ Real estate analysts tracking listing activity by neighborhood with GPS precision
- ✓ Automotive wholesalers sourcing inventory leads from dealer and private ads
- ✓ Insurance and finance firms cross-referencing `vin` and `carfax_link` data
- ✓ Market researchers studying classified volumes and price trends across categories

### How it works

- Input one or more Kijiji.ca URLs — search result pages or direct ad URLs.
- Set `type_url` to `"listing page"` for paginated search results, or `"product page"` for single ads.
- `max_pages` controls how many result pages to crawl per search URL — leave it out to scrape every page.
- The actor fetches pages concurrently, then enriches each listing with phone number, dealership name, and full vehicle specs.
- Canadian residential proxies rotate automatically, with retries on transient errors.
- Results land in the Apify dataset — export as JSON, CSV, Excel, XML, or JSONL.

### Why this scraper

- **Seller contact data included** — `phone_number` and `dealership_name` are resolved per listing, which most Kijiji scrapers skip entirely.
- **Vehicle history built in** — `vin` and `carfax_link` come standard on car ads.
- **Geospatial ready** — every listing carries `latitude`/`longitude`, not just a city name.
- **Search and product URLs in one actor** — handle paginated search pages and direct ad links without switching tools.
- **Canadian residential proxies by default** — higher success rates on geo-restricted Kijiji content.

### Input example

```json
{
  "start_urls": [
    { "url": "https://www.kijiji.ca/b-cars-trucks/gta-greater-toronto-area/c174l1700272" }
  ],
  "type_url": "listing page",
  "max_pages": 5,
  "max_concurrent_searches": 20
}
```

Omit `max_pages` to crawl every available result page.

### FAQ

**Can I scrape both vehicles and real estate?**
Yes. Provide any Kijiji.ca search URL — vehicles, real estate, jobs, or general classifieds.

**Does it return seller phone numbers?**
Yes. The actor resolves `phone_number` and `dealership_name` per listing when Kijiji exposes them.

**Can I scrape a single ad instead of a search page?**
Yes. Set `type_url` to `"product page"` and pass direct ad URLs — no pagination needed.

**How do I apply filters?**
Filter directly in the Kijiji URL (make, price, location, year), then paste that URL as a start URL.

**What proxy setup is used?**
Canadian residential proxies by default. You can supply your own proxy URL for cheaper or custom routing.

**What output formats are available?**
JSON, CSV, Excel, XML, and JSONL — downloadable from the Apify platform.

**Is the data live?**
Yes. Every run fetches current data straight from Kijiji.ca — nothing is cached.

**Does it support scheduling and webhooks?**
Yes. Use Apify schedules to run on any cron, and webhooks to push results downstream.

### Use via API or MCP

Call this actor via the Apify REST API or as an MCP server for AI agents (Claude, ChatGPT, Cursor):

```
POST https://api.apify.com/v2/acts/fayoussef~kijiji-scraper/runs?token=YOUR_TOKEN
```

```
https://mcp.apify.com/actors/fayoussef~kijiji-scraper
```

Full API docs: <https://docs.apify.com/api/v2>

### Need a custom scraper?

Need different fields, another Canadian source, or a fully managed data pipeline? Visit [automationbyexperts.com](https://automationbyexperts.com) for custom builds and data-as-a-service.

# Actor input Schema

## `start_urls` (type: `array`):

URLs to start with

## `max_pages` (type: `integer`):

Maximum number of result pages to crawl per start URL (40 listings per page). Leave empty to scrape all available pages.

## `proxy_configuration` (type: `string`):

Use your own proxy URL for better results and cheaper usage. Leave it empty to use Apify proxies

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.kijiji.ca/b-cars-trucks/city-of-toronto/bmw/aston+martin__audi__bentley__bricklin__dodge__eagle__bmw-2020__/k0c174l1700273a54a68?search=true&view=list"
    }
  ]
}
```

# Actor output Schema

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

Kijiji.ca scraper

# 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 = {
    "start_urls": [
        {
            "url": "https://www.kijiji.ca/b-cars-trucks/city-of-toronto/bmw/aston+martin__audi__bentley__bricklin__dodge__eagle__bmw-2020__/k0c174l1700273a54a68?search=true&view=list"
        }
    ],
    "proxy_configuration": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("fayoussef/kijiji-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 = {
    "start_urls": [{ "url": "https://www.kijiji.ca/b-cars-trucks/city-of-toronto/bmw/aston+martin__audi__bentley__bricklin__dodge__eagle__bmw-2020__/k0c174l1700273a54a68?search=true&view=list" }],
    "proxy_configuration": "",
}

# Run the Actor and wait for it to finish
run = client.actor("fayoussef/kijiji-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 '{
  "start_urls": [
    {
      "url": "https://www.kijiji.ca/b-cars-trucks/city-of-toronto/bmw/aston+martin__audi__bentley__bricklin__dodge__eagle__bmw-2020__/k0c174l1700273a54a68?search=true&view=list"
    }
  ],
  "proxy_configuration": ""
}' |
apify call fayoussef/kijiji-ca-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Kijiji Auto & Classifieds Scraper Actor",
        "description": "Kijiji.ca listings scraper. Extracts detailed data including phone number, price, location, specs, and images from search results (with pagination) or direct ad URLs. Ideal for market research and data collection.",
        "version": "1.0",
        "x-build-id": "tnh9vJKoHpPxqD5Lc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fayoussef~kijiji-ca-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fayoussef-kijiji-ca-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fayoussef~kijiji-ca-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fayoussef-kijiji-ca-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fayoussef~kijiji-ca-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fayoussef-kijiji-ca-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "start_urls"
                ],
                "properties": {
                    "start_urls": {
                        "title": "Kijiji Search URLs",
                        "type": "array",
                        "description": "URLs to start with",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "max_pages": {
                        "title": "Maximum pages",
                        "type": "integer",
                        "description": "Maximum number of result pages to crawl per start URL (40 listings per page). Leave empty to scrape all available pages."
                    },
                    "proxy_configuration": {
                        "title": "Custom Proxy URL",
                        "type": "string",
                        "description": "Use your own proxy URL for better results and cheaper usage. Leave it empty to use Apify proxies"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
