# Kijiji Scraper (`crawlerbros/kijiji-scraper`) Actor

Scrape listings from Kijiji.ca, Canada's largest classifieds site. Extract titles, prices, descriptions, images, seller info, location, and more from any category or search results page.

- **URL**: https://apify.com/crawlerbros/kijiji-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 structured listing data from [Kijiji.ca](https://www.kijiji.ca) — Canada's largest online classifieds marketplace. Scrape any category, search results page, or individual listing to collect titles, prices, descriptions, images, seller info, location, vehicle attributes, and more.

### Features

- **Any category** — cars & trucks, real estate, jobs, pets, furniture, electronics, and all other Kijiji categories
- **Full listing details** — visit each listing page for complete description, all images, vehicle specs (VIN, transmission, body type, etc.), and seller information
- **Search results & individual listings** — works with both category/search pages and direct listing URLs
- **Newest-first sorting** — optionally sort by most recently posted
- **Pagination** — automatically traverses multiple result pages
- **Structured output** — clean JSON with all key fields populated, ready for analysis or integration

### Input

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `startUrls` | Array | Kijiji.ca category pages, search result pages, or individual listing URLs | Required |
| `maxListings` | Integer | Maximum listings to collect per URL (0 = unlimited) | `50` |
| `fetchDetails` | Boolean | Visit each listing page for full details (description, all images, vehicle specs) | `true` |
| `fetchNewListings` | Boolean | Sort results by newest first | `false` |
| `proxy` | Object | Proxy configuration — residential proxies required for reliable access | Apify Residential |

#### Example Input

```json
{
  "startUrls": [
    { "url": "https://www.kijiji.ca/b-cars-trucks/ontario/c174l9004" },
    { "url": "https://www.kijiji.ca/b-real-estate/city-of-toronto/c34l1700273" }
  ],
  "maxListings": 100,
  "fetchDetails": true,
  "fetchNewListings": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
````

#### URL Examples by Category

| Category | Example URL |
|----------|------------|
| Cars & Trucks (Ontario) | `https://www.kijiji.ca/b-cars-trucks/ontario/c174l9004` |
| Real Estate (Toronto) | `https://www.kijiji.ca/b-real-estate/city-of-toronto/c34l1700273` |
| Electronics (Canada) | `https://www.kijiji.ca/b-electronics/canada/c16l0` |
| Jobs (Vancouver) | `https://www.kijiji.ca/b-jobs/vancouver/c45l1700287` |
| Furniture (Montreal) | `https://www.kijiji.ca/b-furniture/montreal/c246l1700281` |
| Keyword search | `https://www.kijiji.ca/b-cars-trucks/ontario/iphone/k0c174l9004` |

### Output

Each scraped listing produces one record:

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | String | Unique Kijiji listing ID |
| `url` | String | Direct URL of the listing |
| `sourceUrl` | String | Search/category URL the listing was found on |
| `title` | String | Listing title |
| `price` | String | Listed price (numeric) |
| `currency` | String | Currency code (always `CAD`) |
| `priceType` | String | Normalized price type: `FIXED`, `FREE`, `CONTACT`, `NEGOTIABLE`, or `SWAP` |
| `description` | String | Full listing description |
| `location` | String | Location (city/area) |
| `imageUrl` | String | Primary thumbnail image URL |
| `images` | Array | All image URLs |
| `category` | String | Category name (e.g. "Cars & Trucks") |
| `activationDate` | String | Date first posted (ISO 8601) |
| `postedDate` | String | Date posted/refreshed (ISO 8601) |
| `sellerName` | String | Seller's display name |
| `sellerType` | String | Seller type (Private, Dealer, etc.) |
| `sellerId` | String | Kijiji seller/user ID |
| `attributes` | Object | Category-specific attributes (Kilometres, Year, Bedrooms, etc.) |
| `schemaOrgCar` | Object | Vehicle data: model, VIN, bodyType, color, transmission, fuelType, mileageFromOdometer, vehicleModelDate |
| `extractedAt` | String | Extraction timestamp (ISO 8601 UTC) |

#### Example Output Record

```json
{
  "listingId": "1733444522",
  "url": "https://www.kijiji.ca/v-cars-trucks/ontario/2015-nissan-sentra-sv/1733444522",
  "sourceUrl": "https://www.kijiji.ca/b-cars-trucks/ontario/c174l9004",
  "title": "2015 Nissan Sentra SV",
  "price": "9500",
  "currency": "CAD",
  "priceType": "FIXED",
  "description": "Well maintained 2015 Nissan Sentra SV. One owner, no accidents. Regular oil changes done. Safety certified.",
  "location": "Mississauga, Ontario",
  "imageUrl": "https://i.ebayimg.com/images/g/...",
  "images": ["https://i.ebayimg.com/images/g/..."],
  "category": "Cars & Trucks",
  "activationDate": "2026-03-24T13:31:31.000Z",
  "postedDate": "2026-03-24T13:31:31.000Z",
  "sellerName": "John D.",
  "sellerType": "Private Seller",
  "sellerId": "84721035",
  "attributes": {
    "Kilometres": "112,000 km",
    "Status": "Used",
    "Transmission": "Automatic",
    "Fuel Type": "Gasoline",
    "Colour": "Grey",
    "Doors": "4"
  },
  "schemaOrgCar": {
    "model": "Sentra",
    "vehicleIdentificationNumber": "3N1AB7AP7FL678651",
    "vehicleModelDate": "2015",
    "bodyType": "Sedan",
    "color": "Grey",
    "vehicleTransmission": "Automatic",
    "fuelType": "Gasoline"
  },
  "extractedAt": "2026-05-05T12:00:00.000Z"
}
```

### Use Cases

- **Price research** — Track pricing trends for cars, electronics, furniture across Canadian markets
- **Inventory monitoring** — Monitor specific categories for new listings that match your criteria
- **Market analysis** — Analyze supply and demand for products in specific regions
- **Real estate research** — Track rental and sale listings by location and price
- **Competitive intelligence** — Monitor competitor listings and pricing

### Proxy Requirements

Kijiji.ca employs bot detection that blocks datacenter IP addresses. **Residential proxies are required** for reliable scraping. The actor defaults to Apify Residential Proxies, which provide Canadian IP addresses for optimal results.

### FAQ

**How do I find the right URL to use?**\
Navigate to any Kijiji category or search results page in your browser and copy the URL. The actor supports any public Kijiji.ca listing page.

**Can I filter by price, location radius, or other attributes?**\
Yes — apply any filters you need directly in the Kijiji search interface, then copy the filtered URL as your `startUrl`. All URL parameters (price range, radius, sort order, etc.) are preserved.

**How many listings can I scrape?**\
Each Kijiji search page shows up to 40 listings. The actor automatically paginates through all pages. Set `maxListings` to control the total, or set it to `0` for unlimited (scrapes all available pages — increase the actor's run timeout in the Apify UI accordingly).

**Does it work for all categories?**\
Yes — cars, real estate, jobs, pets, electronics, furniture, and all other Kijiji categories are supported.

**Why does it sometimes miss some fields?**\
Enable `fetchDetails: true` to visit each listing page individually for complete data. Without it, only the data visible on the search results page is collected.

# Actor input Schema

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

One or more Kijiji.ca category, search result, or individual listing URLs to scrape. Examples: category page (https://www.kijiji.ca/b-cars-trucks/ontario/c174l9004), search page (https://www.kijiji.ca/b-real-estate/city-of-toronto/c34l1700273), or individual listing URL.

## `maxListings` (type: `integer`):

Maximum number of listings to collect per start URL. Set to 0 for unlimited.

## `fetchDetails` (type: `boolean`):

Visit each individual listing page to collect full details: complete description, all images, seller information, vehicle attributes (VIN, transmission, etc.), and more. Slower but more complete data.

## `fetchNewListings` (type: `boolean`):

Sort search results by newest first (adds sortByName=dateDesc to the URL). Useful for monitoring new listings.

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

Proxy settings. Kijiji.ca requires residential proxies to bypass bot detection. Apify residential proxies are used by default.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.kijiji.ca/b-cars-trucks/ontario/c174l9004"
    }
  ],
  "maxListings": 10,
  "fetchDetails": true,
  "fetchNewListings": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CA"
  }
}
```

# 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.kijiji.ca/b-cars-trucks/ontario/c174l9004"
        }
    ],
    "maxListings": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/kijiji-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.kijiji.ca/b-cars-trucks/ontario/c174l9004" }],
    "maxListings": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/kijiji-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.kijiji.ca/b-cars-trucks/ontario/c174l9004"
    }
  ],
  "maxListings": 10
}' |
apify call crawlerbros/kijiji-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Kijiji Scraper",
        "description": "Scrape listings from Kijiji.ca, Canada's largest classifieds site. Extract titles, prices, descriptions, images, seller info, location, and more from any category or search results page.",
        "version": "1.0",
        "x-build-id": "ystWGWAeyn3zvttbM"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~kijiji-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-kijiji-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/crawlerbros~kijiji-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-kijiji-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/crawlerbros~kijiji-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-kijiji-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": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "One or more Kijiji.ca category, search result, or individual listing URLs to scrape. Examples: category page (https://www.kijiji.ca/b-cars-trucks/ontario/c174l9004), search page (https://www.kijiji.ca/b-real-estate/city-of-toronto/c34l1700273), or individual listing URL.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxListings": {
                        "title": "Max Listings",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of listings to collect per start URL. Set to 0 for unlimited.",
                        "default": 50
                    },
                    "fetchDetails": {
                        "title": "Fetch Full Listing Details",
                        "type": "boolean",
                        "description": "Visit each individual listing page to collect full details: complete description, all images, seller information, vehicle attributes (VIN, transmission, etc.), and more. Slower but more complete data.",
                        "default": true
                    },
                    "fetchNewListings": {
                        "title": "Fetch Newest Listings First",
                        "type": "boolean",
                        "description": "Sort search results by newest first (adds sortByName=dateDesc to the URL). Useful for monitoring new listings.",
                        "default": false
                    },
                    "proxy": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Kijiji.ca requires residential proxies to bypass bot detection. Apify residential proxies are used by default.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "CA"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
