# Kijiji Scraper — Canada Classifieds, Cars & Rentals, No Phones (`highbrow_fame/kijiji-listings`) Actor

Kijiji.ca listings from any category — buy & sell, cars, rentals, homes, jobs, pets: price, place, seller type, car and property details, optional full description. No phones.

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

## Pricing

$0.90 / 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

## Kijiji Scraper — Canada Classifieds, Cars & Rentals, No Phones

Get listings from Kijiji, Canada's largest classifieds site, in any category — buy & sell, cars & vehicles, rentals, real estate, jobs, services, pets: title, price, place and postal area, seller type, posting date, pictures, the rental details (bedrooms, bathrooms, size, unit type, furnished, pets) and the car details (make, model, year, kilometres, transmission, fuel, body type) — and, if you want, the full description, views, every detail with its readable label and the dealer's name. Paste your Kijiji search links — or just type a keyword and a place.

**Why this one**

- 🔗 **Your search, as you set it up.** Set every filter you like on kijiji.ca and paste the link. Or type keywords (`iphone 15`, `honda civic`) and places (`Calgary`, `Montréal`, `M5V`) here, and choose the category, price, radius and order below.
- ⚡ **Fast.** A live test run read three searches of 1,500 — Toronto apartments at $1,500–2,500, private sellers' cars in Ontario, jobs in Toronto — plus every sofa in Vancouver: 4,638 listings in 145 seconds.
- 📍 **A radius that holds.** Kijiji searches cars & trucks at least 150 km wide, whatever radius you ask for. The Actor keeps only the listings within yours: for Honda Civics within 25 km of Ottawa, Kijiji also sent cars from Kingston, Cornwall and Laval — 69 of them were left out, and the 80 delivered came from Ottawa, Gatineau, Gloucester and Nepean.
- 📄 **Details when you need them.** Tick **Open every listing for its details** for the full description, views, all pictures and every detail. A live run read 320 listings from four searches with details in 266 seconds.
- 🔒 **No phone numbers, no private names.** Private sellers get no name, and their street address, nearest intersection and map point are left out — only the place and the postal area (M5R) stay. Businesses keep their address; dealers and employers are named by their company. Phone numbers and e-mail addresses written into titles and descriptions are replaced with `[phone removed]` / `[e-mail removed]`.
- 💸 **You pay only for listings delivered.** A link that is not a Kijiji search, or a place Kijiji does not know, comes back as a free record with the reason.

### What you get

For every listing:

| Field | What it is |
|---|---|
| `title`, `description` | the ad's title and its text as the search page gives it — mostly the first 200 characters (the full text with details) |
| `price`, `priceType`, `currency`, `originalPrice`, `priceDrop` | the price in CAD; fixed, contact, swap_trade or give_away; the price before a drop |
| `category`, `categoryId` | e.g. `apartments-condos`, `cars-trucks`, `couch-futon` |
| `location`, `neighbourhood`, `postalArea` | where it is: the place, the neighbourhood when given, the first three characters of the postal code |
| `address`, `nearestIntersection`, `latitude`, `longitude` | for businesses only (dealers, property managers, employers) |
| `sellerType`, `seller`, `verifiedSeller` | private / business (none when Kijiji does not say); an employer's company name |
| `postedAt`, `refreshedAt` | first posted, and last posted or bumped |
| `isTopAd`, `isHighlighted`, `isShowcase` | paid placements |
| `image`, `imageCount`, `url`, `listingId`, `externalSite` | the listing; `externalSite` for partner ads that link to another site (ziprecruiter.com in jobs) |
| `attributes` | every detail Kijiji gives, by its code (`numberbedrooms`, `petsallowed`, `carmileageinkms`, `jobtype`, …) |
| `input`, `place`, `position`, `scrapedAt`, `status`, `error` | which search it came from, and why a search gave nothing |

Rentals and homes also: `bedrooms`, `den`, `bathrooms`, `areaSqft`, `unitType`, `furnished`, `petsAllowed`, `parkingSpots`, `hasVirtualTour`.

Cars also: `make`, `model`, `trim`, `year`, `mileageKm`, `condition`, `bodyType`, `transmission`, `fuel`, `drivetrain`, `colour`, `priceRating` (Kijiji's great / good / fair / poor), and `vin` from dealers.

With **Open every listing for its details** also: the full `description`, `views`, `adStatus`, `images` (all of them), `features` (every detail with its readable label: "Kilometers", "Drivetrain", "Agreement Type", "Move-In Date", …), `marketAveragePrice` for cars, and `seller` for dealers and companies.

#### Example

A real record from a live run — apartments and condos in the City of Toronto, 25 September 2026. A private landlord: no name, no street, no map point (`attributes` shortened here):

```json
{
  "input": "https://www.kijiji.ca/b-apartments-condos/city-of-toronto/c37l1700273",
  "position": 1,
  "listingId": "1743935368",
  "url": "https://www.kijiji.ca/v-apartments-condos/city-of-toronto/stunning-condo-on-yorkville/1743935368",
  "title": "Stunning condo on Yorkville",
  "description": "This luxurious 1 Bedroom offers floor to ceiling windows, custom-designed kitchen cabinetry with stone counters & built-in, integrated Miele appliances. Less than 1 minute walk to subway. Short walk ...",
  "category": "apartments-condos",
  "categoryId": 37,
  "price": 2600,
  "priceType": "fixed",
  "currency": "CAD",
  "location": "Toronto",
  "neighbourhood": "Yorkville",
  "postalArea": "M5R",
  "address": null,
  "latitude": null,
  "longitude": null,
  "sellerType": "private",
  "seller": null,
  "postedAt": "2026-09-25T03:39:52.000Z",
  "refreshedAt": "2026-09-25T03:39:52.000Z",
  "image": "https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/c5/c5a64065-0063-42c9-a9c1-b8c72f0d262b?rule=kijijica-960-jpg",
  "imageCount": 8,
  "bedrooms": 1,
  "den": false,
  "bathrooms": 1,
  "areaSqft": 500,
  "unitType": "condo",
  "furnished": "no",
  "petsAllowed": "no",
  "parkingSpots": 0,
  "attributes": {
    "dateavailable": "2026-11-15T00:00:00Z",
    "agreementtype": "one-year",
    "forrentbyhousing": "ownr",
    "laundryinunit": "1",
    "gym": "1",
    "concierge": "1"
  },
  "status": "OK",
  "scrapedAt": "2026-09-25T04:08:06.119Z"
}
```

### How to use it

1. Paste **Search links** from kijiji.ca, one per line — or type **Keywords** and **Places** and choose the category and filters.
2. Set **Max listings per search**, and tick **Open every listing for its details** if you need the full text and every detail.
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To follow new listings, save your input as a task and schedule it daily: searches come newest first (unless your link asks for another order), so a small **Max listings per search** gives you the latest ones.

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 Kijiji searches and places Kijiji does not know are free.

### FAQ

**How many listings per search?** Kijiji shows at most 101 pages of 40 — 4,040 listings — for one search. A live run read all 4,040 of the 7,090 Toronto apartment rentals in 390 seconds. For more, split the search by price or by place.

**Why are my keyword searches newest first?** Kijiji's "Best match" order changes from one page request to the next, so its pages overlap and skip listings: in three test runs with it, "sofa" in Vancouver (138 listings) gave 102, 116 and 121 different listings. Newest first gave all 138. A link you paste with price or date order keeps it.

**Why are there fewer results than Kijiji's count when I set a radius?** For cars & trucks Kijiji counts everything within 150 km; the Actor delivers only the listings within your radius.

**Why no phone numbers or names?** They are personal data. Every listing has its `url`; buyers contact the seller on Kijiji. A company's name is kept for dealers and employers, and for business pages whose name is plainly a company (Inc, Ltd, Corp…).

**Are jobs included?** Yes, without logging in. Some job listings are partner ads that open on another site: 283 of 1,500 Toronto jobs in a test run linked to ziprecruiter.com, and say so in `externalSite`.

**Is this affiliated with Kijiji?** No. This is an independent tool that reads public Kijiji 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 kijiji.ca — any category: buy & sell, cars & vehicles, real estate, jobs, pets, services… — with all the filters you want, and paste the address of the results page. One per line.

## `keywords` (type: `array`):

Or search here without a link: words to look for, one search per line — e.g. "iphone 15", "honda civic". Every keyword is searched in every place below (all of Canada when there is none).

## `locations` (type: `array`):

Cities, towns, provinces or postal codes (Calgary, Montréal, Ontario, M5V), one per line. Kijiji searches the region that covers the place; set a radius below to stay closer. Without keywords, a place gives everything listed there in the category below.

## `category` (type: `string`):

For the keywords and places above.

## `minPrice` (type: `integer`):

Optional. For rentals: per month.

## `maxPrice` (type: `integer`):

Optional. For rentals: per month.

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

Optional: only listings within this many km of the place, instead of its whole Kijiji region. Kijiji searches cars & trucks at least 150 km wide; the Actor then keeps only the listings within your radius, by their map point.

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

For the keywords and places above. Kijiji's "Best match" is not offered: it reshuffles between pages, so its pages overlap and miss listings.

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

Stops each search after this many listings. Kijiji shows up to 4,040 listings (101 pages) for one search.

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

Adds the full description (search pages carry the first ~200 characters), views, all pictures, every detail with its readable label, and a dealer's or company's name. One more page per listing, so slower.

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

How many searches to work on at the same time.

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

Kijiji allows one address about one page every two seconds: the first tries go out directly at that pace, and everything else — retries and the overflow — through this proxy.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.kijiji.ca/b-apartments-condos/city-of-toronto/c37l1700273?price=1500__2500"
  ],
  "category": "all",
  "sortBy": "newest",
  "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.kijiji.ca/b-apartments-condos/city-of-toronto/c37l1700273?price=1500__2500"
    ],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/kijiji-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.kijiji.ca/b-apartments-condos/city-of-toronto/c37l1700273?price=1500__2500"],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/kijiji-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.kijiji.ca/b-apartments-condos/city-of-toronto/c37l1700273?price=1500__2500"
  ],
  "maxListingsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/kijiji-listings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,highbrow_fame/kijiji-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/AQi3N2ArAW753CVVI/builds/FE9akPM9MA2BrTKN0/openapi.json
