Kijiji.ca Scraper avatar

Kijiji.ca Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Kijiji.ca Scraper

Kijiji.ca Scraper

Scrape Kijiji.ca — Canada's #1 classifieds — with a vertical-aware structured schema across all 5 verticals: Autos, Real Estate, Jobs, Services, Marketplace. Per-vertical fields (make/model/VIN, bedrooms/rent/utilities), FSBO vs dealer detection, bilingual EN/FR. Pure HTTP, no browser.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

1

Monthly active users

17 days ago

Last modified

Share

Kijiji.ca Scraper — Canada Classifieds Data Extractor for Cars, Apartments, Jobs, Services & Marketplace Listings

The most complete Kijiji.ca classifieds extraction tool on Apify. Pull live listings from Canada's #1 marketplace — Kijiji — across all five verticals (Autos, Real Estate, Jobs, Services, Buy & Sell) with a vertical-aware structured schema, FSBO vs dealer detection, bilingual EN/FR handling, and pure HTTP performance. Built for resellers, car flippers, rental researchers, recruiters, and brand-monitoring teams across Toronto, Montreal, Vancouver, Calgary, Ottawa and every Canadian metro.

Apify Actor


What This Actor Does

The Kijiji.ca Scraper is a production-ready Apify Actor that extracts live classified listings from Kijiji.ca — the dominant general-purpose marketplace in Canada, owned by Adevinta, with tens of millions of monthly visits across English Canada and Quebec. Kijiji is the country's go-to destination for used cars, apartment rentals, household items, freelance services, garage sales, side-hustle jobs, and second-hand everything in every province from Newfoundland to British Columbia.

This actor turns any Kijiji search URL or keyword query into a clean, structured JSON dataset — no headless browser, no CAPTCHA solving, no fragile DOM scraping. It uses pure HTTP fetching with intelligent JSON hydration parsing (__NEXT_DATA__), automatic vertical detection, and per-vertical schema enrichment so cars come with VIN/mileage/transmission, apartments come with bedrooms/rent/utilities, and services come with hourly-rate and licensed flags — all from the same actor.

In one run you can pull:

  • Autos — used cars, trucks, motorcycles, ATVs, RVs, boats, snowmobiles, classic cars, heavy equipment
  • Real Estate — apartments for rent, condos for sale, houses, rooms for rent, vacation rentals, parking spots, land, commercial
  • Jobs — full-time, part-time, casual, contract, internship, restaurant, healthcare, trades, IT, sales, customer service
  • Services — moving, cleaning, tutoring, contractors, beauty, automotive repair, pet care, financial, legal
  • Marketplace (Buy & Sell) — furniture, electronics, baby gear, clothing, sporting goods, tools, musical instruments, free stuff, collectibles

Every listing record includes a normalized price (CAD), location with city + province + lat/long, poster type (FSBO vs dealer/professional), top-ad/showcase flags, full image gallery URLs, and the original Kijiji URL — plus dozens of vertical-specific fields when applicable.

Why scrape Kijiji yourself when this exists?

Kijiji looks like a "simple" classifieds site, but engineering a stable scraper from scratch surfaces nine annoying problems within the first day:

  • Kijiji.ca is a React/Next.js SPA — no clean HTML; data is buried inside <script id="__NEXT_DATA__"> JSON blobs that change shape periodically (resultslistingsmainListings)
  • Non-standard paginationpage-{N} URL segment inserted in the middle of the path, not a ?page=N query
  • FSBO vs dealer distinction lives in the image-CDN URL pattern (ca-prod-fsbo-ads vs ca-prod-dealer-ads), not an obvious flag — most scrapers miss it entirely
  • Bilingual content — Quebec listings in French; auto vertical mixes "Berline"/"Sedan", "Manuelle"/"Manual" — requires language detection + normalization
  • Vertical-specific fields aren't flat: cars have VIN/mileage/Carfax, apartments have bedrooms/utilities/pets, jobs have salary/remote — a generic scraper produces useless lowest-common-denominator rows
  • Moderate anti-bot — datacenter IPs work intermittently; sustained scraping triggers 403/503 from Akamai. Canadian residential proxies are strongly recommended
  • Top-ads, showcase, highlighted, repost flags pollute results — without filtering you double-count sponsored items
  • VIP (View Item Page) detail enrichment requires a second HTTP request per listing with the right Referer header and respectful pacing — or you get throttled

This actor solves all of that: tolerant deep-search JSON parser, vertical-aware extraction, FSBO/dealer CDN detection, EN/FR language handling, page-based pagination, optional VIP enrichment, pacing controls, and full Apify proxy integration with CA residential defaults.


Quick Start

One-Click Run

  1. Open the Kijiji.ca Scraper on the Apify Store and click "Try for free"
  2. Paste a Kijiji search URL — for example https://www.kijiji.ca/b-cars-trucks/gta-greater-toronto-area/c174l1700272
  3. Hit Start — listings stream into the dataset within seconds
  4. Download as JSON, CSV, Excel, HTML, XML, or RSS directly from the dataset view

API Run (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/kijiji-scraper").call(run_input={
"mode": "search-urls",
"searchUrls": [
"https://www.kijiji.ca/b-cars-trucks/gta-greater-toronto-area/c174l1700272",
"https://www.kijiji.ca/b-apartments-condos/city-of-toronto/c37l1700273"
],
"vertical": "auto",
"adSourceFilter": "fsbo-only",
"fetchDetails": True,
"maxItems": 200,
"maxPages": 5
})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(listing["title"], "—", listing["priceAmount"], "CAD —", listing["locationCity"])

API Run (Node.js / TypeScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/kijiji-scraper').call({
mode: 'keyword-search',
keyword: 'toyota corolla',
categoryCode: 'c174',
provinces: ['ON', 'QC'],
minPrice: 5000,
maxPrice: 15000,
sortBy: 'priceAsc',
adSourceFilter: 'fsbo-only',
maxItems: 500,
fetchDetails: true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} private-seller Corollas across ON + QC`);

API Run (cURL)

curl -X POST "https://api.apify.com/v2/acts/haketa~kijiji-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "search-urls",
"searchUrls": ["https://www.kijiji.ca/b-apartments-condos/city-of-montreal/c37l1700281"],
"vertical": "real-estate",
"fetchDetails": true,
"maxItems": 100,
"maxPages": 3
}'

How It Works

Kijiji.ca is a React/Next.js application that hydrates its full listing payload into the page HTML inside a <script id="__NEXT_DATA__"> JSON blob. This actor exploits that fact instead of fighting it:

  1. HTTP fetch the search/category URL with got-scraping (browser-like headers, TLS fingerprint, automatic redirect handling)
  2. Extract the hydration JSON — primarily from __NEXT_DATA__, with fallbacks to Apollo state and JSON-LD blocks
  3. Deep-search the JSON tree with tolerant field discovery (handles results, listings, mainListings, ads, etc. as Kijiji rotates names)
  4. Detect the vertical from the category code (c174 → autos, c37 → real-estate, c45 → jobs) or fall back to URL pattern inference
  5. Parse with a vertical-aware extractor — cars get make/model/year/mileage/VIN/transmission; rentals get bedrooms/rent/utilities/pets; jobs get salary/employment type
  6. Detect FSBO vs dealer by inspecting image CDN URLs (ca-prod-fsbo-ads/ = private seller, ca-prod-dealer-ads/ = professional)
  7. Optionally visit each VIP (View Item Page) for full description, complete image gallery, VIN, Carfax link, amenities, features
  8. Follow pagination by injecting page-{N} into the URL path (Kijiji's idiosyncratic structure) up to your maxPages limit

Source URL structure

Page TypeURL PatternExample
Category searchkijiji.ca/b-{category}/{location}/c{X}l{Y}kijiji.ca/b-cars-trucks/gta-greater-toronto-area/c174l1700272
Paginatedkijiji.ca/b-{category}/{location}/page-{N}/c{X}l{Y}kijiji.ca/b-apartments-condos/city-of-toronto/page-3/c37l1700273
Listing detail (VIP)kijiji.ca/v-{category}/{city}/{slug}/{listingId}kijiji.ca/v-cars-trucks/toronto/2018-honda-civic-touring/1234567890

Engineering details

  • Pure HTTP — no Puppeteer, Playwright, Chromium, or xvfb. Single Node process; tiny memory footprint
  • Tolerant JSON parser survives Kijiji's quarterly schema rotations via deep recursive field discovery
  • Vertical inference — explicit category-code map + URL-pattern fallback (/b-cars-trucks/, /b-apartments-condos/, /b-services/)
  • FSBO/dealer detection via image-CDN URL pattern matching (ca-prod-fsbo-ads vs ca-prod-dealer-ads vs ca-prod-pro-ads)
  • Bilingual EN/FR language detection on description; province-aware (QC defaults to FR scoring boost)
  • Price normalization — handles $1,200/mo, $15 000, Gratuit, Please contact, Swap/Trade, Free into a clean numeric CAD value
  • Anti-bot pacing — configurable requestDelay + maxConcurrency (default 500 ms / 3 parallel); Canadian residential proxy default
  • Repost detection — listings re-posted within 7 days flagged isRepost: true. Underpriced detection — autos with price < 50% of category median get underpricedFlag: true

Input Parameters

{
"mode": "search-urls",
"searchUrls": ["https://www.kijiji.ca/b-cars-trucks/gta-greater-toronto-area/c174l1700272"],
"vertical": "auto",
"keyword": "", "categoryCode": "", "provinces": ["ON"],
"minPrice": 0, "maxPrice": 0, "sortBy": "dateDesc",
"adSourceFilter": "all", "language": "both",
"fetchDetails": false, "maxItems": 20, "maxPages": 2,
"proxyConfiguration": {
"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "CA"
},
"requestDelay": 500, "maxConcurrency": 3, "maxRetries": 3, "debugMode": false
}

Parameter reference

ParameterTypeDefaultDescription
modestringsearch-urlssearch-urls crawls the exact Kijiji URLs you provide (most reliable). keyword-search auto-builds URLs from a keyword + province + category.
searchUrlsarray<string>[]Kijiji.ca search or category result URLs (used in search-urls mode). Paste any Kijiji search-result page URL.
verticalstringautoDrives vertical-specific field extraction. Options: auto, marketplace, autos, real-estate, jobs, services. Use auto to infer from category code.
keywordstring""Free-text search term for keyword-search mode (e.g. macbook pro, 2 bedroom apartment, toyota camry).
categoryCodestring""Kijiji category code for keyword-search mode (e.g. c174 cars-trucks, c37 apartments-condos, c10 buy-and-sell, c30 motorcycles, c45 jobs, c72 services).
provincesarray<string>[]Canadian province codes for keyword-search mode: ON, QC, BC, AB, MB, SK, NS, NB, NL, PE. Empty = all Canada.
minPriceinteger0Minimum price in CAD. 0 = no minimum.
maxPriceinteger0Maximum price in CAD. 0 = no maximum.
sortBystringdateDescResult ordering: relevance, dateDesc (newest), priceAsc (cheapest), priceDesc (most expensive).
adSourceFilterstringallall keeps everything. fsbo-only = For Sale By Owner (private sellers, ideal for flippers/bargain-hunting). dealer-only = professional/dealer listings. exclude-ebay = drop eBay cross-listings.
languagestringbothFilter by detected description language: both, en (English only), fr (French only). Quebec listings are typically French.
fetchDetailsbooleanfalseVisit each listing's detail page (VIP) for full description, all images, VIN, features, amenities. Slower but much richer.
maxItemsinteger20Max total listings to scrape across all searches. 0 = unlimited.
maxPagesinteger2Max result pages per search URL. Each page returns ~20-40 listings.
proxyConfigurationobjectCA residentialDefaults to Apify RESIDENTIAL group, country CA. Strongly recommended for sustained scraping.
requestDelay / maxConcurrency / maxRetriesinteger500 / 3 / 3Pacing knobs. Kijiji tolerates 3-8 parallel; 500 ms delay; retries on 403/503/429.
debugModebooleanfalseVerbose parser logging — dumps hydration JSON for the first page of each search. Useful when Kijiji changes page structure.

Output Schema

Every listing returns the same flat JSON shape, with vertical-specific fields populated only when relevant. Generic fields apply to every listing; vertical fields populate only for that vertical (e.g. bedrooms is null for car listings).

Common fields (every listing)

FieldTypeDescription
listingIdstringKijiji-internal listing identifier (numeric ID in the URL)
verticalstringOne of autos, real-estate, jobs, services, marketplace
category / categoryCode / subCategorystringHuman-readable category, Kijiji code (c174, c37), and sub-category
title / description / descriptionLangstringTitle, body (full when fetchDetails: true), detected language en or fr
url / searchUrlstringCanonical listing URL + source search URL it was found through
priceRaw / priceAmount / priceCurrency / priceType / isNegotiablemixedOriginal string, numeric CAD value (null for "Please contact"/"Swap"), currency, type (fixed, contact, swap, free), OBO flag
locationRaw / locationCity / locationProvince / locationIdstringRaw, parsed city, two-letter province (ON, QC, BC...), Kijiji location code
latitude / longitudenumberGeo coordinates when published
adSourcestringfsbo, dealer, pro, ebay, or unknown — derived from image CDN
posterId / posterName / posterTypestringSeller identifiers; posterType is OWNER, DEALER, BUSINESS when surfaced
isTopAd / isShowcase / isHighlightedbooleanSponsored placement flags
activationDate / sortingDate / scrapedAtstringISO-8601 timestamps for posted, sort order, and extraction
imageCount / thumbnailUrl / imageUrlsmixedImage count, primary thumbnail, full gallery URLs
hasPhone / phoneNumbermixedPhone availability + value when poster published it
isRepost / priceDroppedbooleanRe-post within 7 days; price decrease vs historical context

Vertical-specific fields

Autos (make, model, trim, year, mileageKm, transmission, fuelType, drivetrain, bodyType, color, condition, seats, doors, vin, carfaxLink, forSaleBy, dealerName, features[], underpricedFlag, categoryMedian, motivatedSeller) — covers Cars, Trucks, Motorcycles, RVs, Boats, ATVs. underpricedFlag fires when price < 50% of make/model/year median; motivatedSeller matches phrases like "must sell", "moving", "quick sale", "déménagement".

Real Estate (listingType, propertyType, bedrooms, bathrooms, rentMonthly, utilitiesIncluded[], furnished, petsAllowed, parkingType, sizeText, availableDate, agreementType, buildingAmenities[], managementCompany) — covers apartments, condos, houses, rooms, sublets, short-term, parking, commercial. bedrooms enum: Bachelor/Studio, 1, 2, 3, 4, 5+.

Jobs (jobTitle, company, jobType, salaryRaw, salaryMin, salaryMax, remote) — jobType enum: Full-time, Part-time, Contract, Casual, Internship, Seasonal. remote enum: On-site, Hybrid, Remote.

Services (serviceType, serviceProvider, serviceArea, hourlyRate, isLicensed) — covers moving, cleaning, tutoring, beauty, automotive, pet care, financial, legal.

Marketplace / Buy & Sell (itemCondition, brand, isFirmPrice, swapAvailable, deliveryAvailable) — itemCondition enum: New, Used, Used - Like New, Refurbished, For Parts.

Example records

Car listing (FSBO, Toronto):

{
"listingId": "1700123456", "vertical": "autos", "categoryCode": "c174",
"title": "2018 Honda Civic Touring — Low KM, Clean Carfax", "descriptionLang": "en",
"url": "https://www.kijiji.ca/v-cars-trucks/toronto/2018-honda-civic-touring/1700123456",
"priceRaw": "$17,500", "priceAmount": 17500, "priceCurrency": "CAD", "priceType": "fixed", "isNegotiable": true,
"locationCity": "Toronto", "locationProvince": "ON", "latitude": 43.7731, "longitude": -79.2578,
"adSource": "fsbo", "posterType": "OWNER", "forSaleBy": "Owner",
"make": "Honda", "model": "Civic", "trim": "Touring", "year": 2018, "mileageKm": 78500,
"transmission": "CVT", "fuelType": "Gasoline", "drivetrain": "FWD", "bodyType": "Sedan",
"vin": "2HGFC2F75JH599999", "carfaxLink": "https://www.carfax.ca/vhr/2HGFC2F75JH599999",
"features": ["Heated seats", "Sunroof", "Backup camera"],
"underpricedFlag": false, "categoryMedian": 19200, "motivatedSeller": true,
"imageCount": 14, "scrapedAt": "2026-05-16T12:00:00.000Z"
}

Apartment rental (Montreal, French):

{
"listingId": "1700987654", "vertical": "real-estate", "categoryCode": "c37",
"title": "Beau 4½ rénové — Plateau Mont-Royal — Disponible 1er juillet", "descriptionLang": "fr",
"url": "https://www.kijiji.ca/v-apartments-condos/ville-de-montreal/4-renove-plateau/1700987654",
"priceRaw": "1 850 $", "priceAmount": 1850, "priceCurrency": "CAD",
"locationCity": "Montreal", "locationProvince": "QC",
"adSource": "fsbo", "listingType": "for-rent", "propertyType": "Apartment",
"bedrooms": "2", "bathrooms": "1", "rentMonthly": 1850,
"utilitiesIncluded": ["Heat", "Hot water"], "furnished": "No", "petsAllowed": "Limited",
"sizeText": "750 sqft", "availableDate": "2026-07-01", "buildingAmenities": ["Laundry"],
"imageCount": 9, "scrapedAt": "2026-05-16T12:00:00.000Z"
}

Category & Vertical Reference

Top Kijiji vertical → category code map

VerticalCategory CodesCoverage
Autosc27 (root), c174 cars/trucks, c30 motorcycles, c171 RVs, c172 ATVs/snowmobiles, c173 boats, c175 partsCars, trucks, SUVs, bikes, powersports, marine, parts
Real Estatec34 (root), c37 apartments-rent, c35 houses-sale, c643 rooms/roommates, c785 short-termRentals, sales, rooms, vacation rentals
Marketplacec10 Buy & Sell (root)Furniture, electronics, baby gear, clothing, tools, free stuff
Jobsc45 Jobs (root)Full-time, part-time, casual, contract, internship
Servicesc72 Services (root)Moving, cleaning, tutoring, beauty, automotive

Ad source values and price types

EnumValuesNotes
adSourcefsbo (private seller via ca-prod-fsbo-ads CDN), dealer (licensed auto dealer), pro (other professional), ebay (cross-posted from eBay Canada), unknownBest filter for flippers (fsbo-only) vs B2B (dealer-only)
priceTypefixed (numeric), contact/please-contact (no number disclosed), swap (swap/trade only), free (À donner), negotiable (OBO)When priceType != "fixed", priceAmount will be null

Use Cases

Reseller Arbitrage & Flipping

Power-resellers and side-hustle flippers use Kijiji data to spot mispriced items every morning before competitors:

  • Pull all FSBO furniture/electronics under $200 in your metro with adSourceFilter: "fsbo-only" and maxPrice: 200
  • Detect underpriced cars via the underpricedFlag (set when price is <50% of make/model/year median)
  • Watch for motivatedSeller language (must sell, moving, quick sale, déménagement) to time low-ball offers
  • Diff today vs yesterday to catch newly-listed items in the first hour, when private-seller deals still exist
  • Cross-reference with eBay, Facebook Marketplace, OfferUp to identify items priced 30%+ below comparable platforms

Used-Car Dealers & Auto Flippers

Independent dealers, wholesalers, and auction buyers use the autos vertical for live market intelligence:

  • Aggregate every FSBO Civic/Camry/F-150 across Toronto, Mississauga, Hamilton, Ottawa — the daily wholesale acquisition pool
  • Track dealer competitor inventory with adSourceFilter: "dealer-only" — see who is listing what, at what price
  • Monitor mileage/price distributions by make/model/year for accurate appraisal benchmarks
  • Pipe Carfax links and flag salvage/rebuilt titles via the carfaxLink and condition fields for risk-aware sourcing

Real Estate, Rental & Property Research

Renters, landlords, PropTech analysts, and immigration relocation consultants use Kijiji for ground-truth rental data:

  • Build a live rent index for Toronto, Montreal, Vancouver, Calgary by bedrooms and propertyType
  • Map utilities-included rentals vs hydro-extra (huge cost difference in Ontario apartments)
  • Track pets-allowed inventory for relocators with pets — a chronic Canadian rental pain point
  • Spot new-build supply by tracking managementCompany and buildingAmenities arrays
  • Cross-promote with our Realtor.ca scraper for the for-sale side of the Canadian market

Brand & Counterfeit Monitoring

Brand-protection teams at consumer-electronics, fashion, sporting-goods, and beauty companies monitor Kijiji for unauthorised resale:

  • Track listings mentioning your brand across all five verticals daily
  • Detect unauthorized refurbishers, grey-market dealers, suspiciously-priced "new in box" inventory
  • Capture poster IDs to identify repeat offenders (one posterId listing 200+ of your products is a red flag)
  • Document evidence with full image galleries for takedown notices

Immigration & Relocation Services

Newcomer-services agencies, settlement workers, and relocation consultants advise on Canadian living costs using fresh Kijiji data:

  • Generate up-to-date "cost of living" briefings with median rents, used-car prices, furniture costs by metro
  • Build neighbourhood comparison reports (Plateau vs Verdun, Yorkville vs Liberty Village, Kitsilano vs Mount Pleasant)
  • Help newcomers source affordable household setup — from beds and dishes to bicycles and winter tires
  • Identify French-only listings in Quebec for francophone newcomers (language: "fr")
  • Monitor sublet & roommate listings (categoryCode: "c643") for short-term arrivals

Market Research & Retail Strategy

Retailers, CPG brands, and market researchers use second-hand pricing as a leading indicator:

  • Resale price index for high-ticket items (mattresses, fridges, sofas, e-bikes) — measures real-world depreciation
  • Trend detection — sudden spike in "Peloton for sale" listings predicts retail demand collapse
  • Inflation tracking — used-good prices respond faster than retail; great proxy for household discretionary spending
  • Geo-pricing analytics — same product, different price in Calgary vs Halifax, reveals regional purchasing power

Recruiting, Services & Workforce Intelligence

Recruiters, home-services aggregators, gig-economy operators, and insurers mine the jobs + services verticals:

  • Find side-hustle, casual, weekend, and under-the-table roles that LinkedIn and Indeed never surface
  • Map blue-collar and trades demand by metro (electricians, drivers, restaurant staff, caregivers, movers)
  • Hourly-rate benchmarking for trades, cleaning, beauty, and tutoring via the hourlyRate field
  • Identify licensed vs unlicensed providers via isLicensed for compliance research

Journalism, Public Interest & Academic Research

Journalists at the Globe and Mail, CBC, Toronto Star, Le Devoir, and academic researchers use Kijiji data to report on:

  • Housing affordability crises — Vancouver rentals over $3,000, Toronto bachelors over $1,800
  • Rental discrimination — pet/income/family-status language patterns across listings
  • Used-vehicle market shifts — EV resale, post-pandemic SUV demand
  • Cost-of-living comparisons across Canadian regions for explanatory journalism

Insurance & Risk Underwriting

Auto and property insurers correlate Kijiji data with policy risk:

  • Detect "for sale" vehicles still appearing on policies (insurance fraud / lapse risk)
  • Benchmark replacement values for total-loss claims using live FSBO prices
  • Identify rental properties misclassified on homeowner policies
  • Monitor stolen-goods aggregation patterns for cargo / commercial property recoveries

Sample Queries & Recipes

Recipe 1: Every FSBO Honda Civic 2015-2019 under $18K across Ontario

{ "mode": "keyword-search", "keyword": "honda civic", "categoryCode": "c174",
"provinces": ["ON"], "minPrice": 5000, "maxPrice": 18000,
"sortBy": "priceAsc", "adSourceFilter": "fsbo-only", "fetchDetails": true, "maxItems": 500 }

Recipe 2: All 2-bedroom apartments under $2,200 in Montreal

{ "mode": "search-urls",
"searchUrls": ["https://www.kijiji.ca/b-apartments-condos/city-of-montreal/c37l1700281"],
"vertical": "real-estate", "maxPrice": 2200, "language": "both",
"fetchDetails": true, "maxPages": 10 }

Recipe 3: Newest Vancouver Buy & Sell listings under $100

{ "mode": "search-urls",
"searchUrls": ["https://www.kijiji.ca/b-buy-sell/city-of-vancouver/c10l1700287"],
"vertical": "marketplace", "maxPrice": 100, "sortBy": "dateDesc",
"maxItems": 200, "maxPages": 5 }

Recipe 4: Dealer truck inventory in GTA (sales prospecting)

{ "mode": "search-urls",
"searchUrls": ["https://www.kijiji.ca/b-cars-trucks/gta-greater-toronto-area/truck/c174l1700272"],
"vertical": "autos", "adSourceFilter": "dealer-only",
"fetchDetails": true, "maxItems": 1000, "maxPages": 25 }

Recipe 5: French-only jobs in Quebec City (immigration / market research)

{ "mode": "search-urls", "searchUrls": ["https://www.kijiji.ca/b-emploi/ville-de-quebec/c45l1700124"], "vertical": "jobs", "language": "fr", "fetchDetails": true, "maxItems": 300 }

Recipe 6: Calgary movers — hourly rate benchmarking

{ "mode": "search-urls", "searchUrls": ["https://www.kijiji.ca/b-moving-storage/calgary/c105l1700199"], "vertical": "services", "fetchDetails": true, "maxItems": 100 }

Recipe 7: Test sample — 25 listings before committing to a full scrape

{ "mode": "search-urls", "searchUrls": ["https://www.kijiji.ca/b-cars-trucks/canada/c174l0"], "maxItems": 25, "maxPages": 1 }

Integration Examples

Google Sheets

Apify schedule + the "Export to Google Sheets" integration delivers a fresh Kijiji dataset to your Sheet every morning — perfect for reseller daily-scan workflows.

Make.com / Zapier / n8n

Use the Apify connector on any major automation platform. Common triggers: new FSBO listings under $X in your category (alert to Telegram/Slack/SMS), price drops (priceDropped: true), dealer competitor adding inventory (auto-CRM record), French Quebec listing spike in a category.

Power BI / Tableau / Looker

Hook the Apify dataset API as a live data source. Common dashboards: used-car median price heat map by metro and make, rent affordability index across provinces, FSBO vs dealer mix by vertical and city, top-poster leaderboard for brand-monitoring, listing churn rate per category per week.

Postgres / Snowflake / BigQuery

Use Apify's webhook integration to POST run results into your warehouse staging tables — clean upsert keyed on listingId.

CRM Enrichment (Salesforce / HubSpot) and Telegram/Discord Bots

Nightly job pulls every dealer/service-provider listing, dedupes on posterId, and upserts as Lead records — Canadian sales-prospect list refreshed daily. For real-time reseller alerts, schedule the actor every 15 minutes with a tight filter (FSBO + max price + city) and POST new listingIds to a Telegram bot via Apify webhook.


Major Canadian Markets at a Glance

Metro AreaProvincePopulationKijiji Significance
Toronto / GTAON6.6MHighest listing volume nationally — every vertical
MontrealQC4.3MLargest French-language vertical, strong rentals + autos
VancouverBC2.6MHighest used-car and rental prices in Canada
CalgaryAB1.6MStrong auto vertical (trucks, RVs, oilfield equipment)
EdmontonAB1.5MHeavy trades-services demand, strong buy-and-sell
OttawaON1.5MFederal-employee rentals; bilingual EN/FR mix
Quebec CityQC0.85MFrench-only rental and jobs market
WinnipegMB0.83MHigh-volume buy & sell, low average prices
Hamilton / MississaugaON1.5M combinedGTA spillover rentals, heavy newcomer demand
Kitchener-Waterloo / LondonON1.1M combinedTech-driven rentals, affordable used-car markets
Halifax / Victoria / Saskatoon / ReginaNS / BC / SK1.4M combinedMaritime, Island, Prairies vertical mix

Top Kijiji search-URL locations (location IDs)

LocationCodeUse in URL
All of Canadal0kijiji.ca/b-cars-trucks/canada/c174l0
Ontariol9004kijiji.ca/b-cars-trucks/ontario/c174l9004
GTA Greater Torontol1700272kijiji.ca/b-cars-trucks/gta-greater-toronto-area/c174l1700272
City of Torontol1700273kijiji.ca/b-apartments-condos/city-of-toronto/c37l1700273
City of Montreall1700281kijiji.ca/b-apartments-condos/city-of-montreal/c37l1700281
Vancouverl1700287kijiji.ca/b-buy-sell/city-of-vancouver/c10l1700287
Calgaryl1700199kijiji.ca/b-cars-trucks/calgary/c174l1700199
Quebec Cityl1700124kijiji.ca/b-emploi/ville-de-quebec/c45l1700124
Edmontonl1700203kijiji.ca/b-cars-trucks/edmonton/c174l1700203
Ottawal1700185kijiji.ca/b-apartments-condos/ottawa/c37l1700185

Cost & Performance

MetricValue
EnginePure HTTP + __NEXT_DATA__ JSON hydration parse (no browser)
Runtime~15-30 s for 50 listings, 2-4 min for 500, 8-15 min for 500 with VIP details
Pricing modelPay-per-event (transparent per-listing pricing)
Data freshnessLive at run time
Auth requiredNone
ProxyRecommended — Apify RESIDENTIAL CA by default; datacenter works partially
Concurrency1-10 parallel (default 3, sweet-spot 5-8 with residential proxy)
Memory footprint256-512 MB for most runs; 1024 MB for >5K items

  • Public data only — every field is published openly by Kijiji on listing pages with no login required
  • No PII beyond what posters voluntarily publish — phone numbers and seller names appear only when the poster chose to display them
  • No scraping of private messages, watch lists, or logged-in seller dashboards
  • Respect robots.txt and Terms of Service — Kijiji permits crawling of public listing pages; the actor honours standard request hygiene (pacing, retries with backoff). Consult Kijiji's ToS and your jurisdiction's data-protection laws (PIPEDA, GDPR, CCPA) before commercial use
  • Image URLs point to Kijiji's media CDN — treat as references, not redistributable assets (copyright belongs to posters)
  • Phone numbers when collected must comply with Canada's Anti-Spam Legislation (CASL) and PIPEDA — unsolicited commercial contact without consent is illegal in Canada
  • Quebec's Bill 96 / Charter of the French Language applies if you republish listing data in commercial Quebec markets
  • This actor is intended for legitimate market research, journalism, lead generation, brand-monitoring, and personal use — not for harassment, fraud, or identity-theft

Important: Kijiji data must not be used for unlawful purposes. Compliance with applicable Canadian and provincial laws (PIPEDA, CASL, Quebec Bill 25, Ontario Consumer Protection Act) is the responsibility of the data consumer. The actor author makes no warranty of fitness for any specific commercial purpose.


Frequently Asked Questions

How fresh is the data?

Live at run time. Every run fetches Kijiji.ca's current listing pages directly — there is no cached intermediate database. A listing that goes up two minutes before your run will appear in the dataset.

How many records will I get per run?

Depends entirely on your inputs. A single search page returns 20-40 listings; pagination scales linearly. Typical configurations: 100-2,000 listings per run. Heavy-duty configurations can pull 10,000+ per run with sufficient maxItems, maxPages, proxy concurrency, and runtime.

Does this scraper require a Kijiji account or API key?

No. Kijiji's public listing pages are scraped without login. You only need an Apify account to run the actor.

Does Kijiji rate-limit or block scraping?

Yes — moderate anti-bot via Akamai. Datacenter IPs work intermittently. The actor's default config uses Apify's Canadian residential proxy group with conservative concurrency (3 parallel) and 500 ms delays — this is sustainable for thousands of listings per run.

Open kijiji.ca in your browser, run the search (category, location, filters), and copy the URL from the address bar. Paste into searchUrls. The actor preserves all of your category, location, and filter parameters.

Does this work for Quebec / French listings?

Yes. The actor handles French listings natively — French price formats (1 200 $), French location names (Ville de Québec, Saguenay), French descriptions. Use language: "fr" to filter to French-only or language: "both" for full coverage.

Can it scrape detail (VIP) pages with full descriptions and image galleries?

Yes — set fetchDetails: true. The actor will visit each listing's VIP page for full description, complete image gallery, VIN/Carfax (autos), full amenities (real estate), and feature lists. Runtime increases proportionally because of the extra HTTP request per listing.

How does FSBO vs dealer detection work?

Kijiji serves listing images from different CDN paths depending on poster type: media.kijiji.ca/api/v1/ca-prod-fsbo-ads/ for private sellers, ca-prod-dealer-ads/ for dealers, ca-prod-pro-ads/ for other professionals. The actor inspects image URLs to set adSource. Use adSourceFilter: "fsbo-only" to keep just private sellers.

Can I scrape only listings posted in the last 24 hours, or apply Kijiji's native filters?

Sort with sortBy: "dateDesc" and cap maxPages low (1-2), then filter downstream on activationDate. For built-in Kijiji filters (price, condition, year, mileage), apply them in the UI and paste the resulting URL into searchUrls — Kijiji's native filter engine is preserved.

How do I export the data and schedule recurring runs?

Standard Apify formats: JSON, CSV, Excel, HTML, XML, RSS, JSON Lines. Apify's built-in Scheduler supports any cron expression — daily 6 AM ET for full inventory, every 15 minutes for hot-deal Telegram alerts, weekly Sunday for market reports.

Does the actor deduplicate?

Yes — within a single run, listings are deduped by listingId. Across runs, persist listingId to your warehouse and upsert.

What happens if Kijiji changes its page structure?

The actor uses a tolerant deep-search JSON parser that survives most schema rotations (resultsmainListingslistings). For larger changes, enable debugMode: true and the actor dumps the full hydration JSON structure so you (or we) can patch field discovery.

Does it work on the Apify Free Plan?

Yes — full functionality on the free tier. A 50-100 listing test run completes in well under a minute and costs a tiny fraction of free monthly credits.

Does this scrape Kijiji Centrale or Kijiji Autos (the new auto-specific portal)?

This actor focuses on the main kijiji.ca classifieds. The new Kijiji Autos portal at kijiji.ca/autos has overlapping data, but for the cleanest auto-only flow use the standard search URLs under the c174 category code.

Are buyer messages, watchlists, or seller email addresses included?

No. The actor only extracts data Kijiji publishes openly on listing pages. Buyer messages, watchlists, and seller emails are private and never scraped.

How does pay-per-event pricing work?

You're charged a small amount per actor start and per listing delivered. No monthly minimums. A 100-listing scrape costs pennies; a 10,000-listing daily job is still well under the cost of comparable paid classifieds APIs.

How do I report a bug or request a feature?

Open an issue on the Apify Store actor page or contact the developer through the Apify Console. Include the exact searchUrls input that failed plus the run ID — fastest path to a fix.


If you need classifieds, marketplace, or Canadian property data from other regions, check these companion actors:


Comparison vs. Alternatives

ApproachSetup timeMaintenanceVertical-awareFSBO/dealer detectionBilingual EN/FRProxy mgmt
This actor< 1 minuteZeroBuilt-in (5 verticals)Built-in via image CDNBuilt-inBuilt-in (CA residential)
Manual Kijiji browsingInstantNoneEyeball onlyNoneNoneN/A
Custom Python + BeautifulSoup4-12 hoursBreaks weeklyDIYDIY (most miss)DIYDIY
Custom Puppeteer/Playwright2-4 daysHighDIYDIYDIYDIY
Paid third-party classifieds APIHours to onboardVendor lock-inLimitedSometimesRarelyIncluded
Browser-extension scrapersMinutesHighNoneNoneNoneNone

Why Pay-Per-Event Pricing?

Most scrapers either lock you into a flat monthly subscription (pay even when idle) or per-Compute-Unit (unpredictable per-run cost). This actor uses pay-per-event:

  • You only pay when the actor runs and produces results
  • Charges scale linearly with how many listings you actually consume
  • Transparent line-item billing inside Apify
  • No monthly minimums — perfect for ad-hoc reseller flips or seasonal research
  • Free to evaluate — sample with maxItems: 25 for a fraction of a cent
  • Combine with Apify's Scheduler to keep daily costs predictable

Changelog

VersionDateNotes
1.0.02026-05Initial public release — pure HTTP architecture, 5 verticals (autos / real-estate / jobs / services / marketplace), FSBO/dealer detection via image-CDN inspection, bilingual EN/FR handling, vertical-aware schema, optional VIP detail enrichment, pay-per-event pricing

Keywords

Kijiji scraper · Kijiji.ca data · Kijiji.ca scraper · Canada classifieds API · Canada classifieds scraper · Toronto Montreal Vancouver classifieds data · Kijiji car listings scraper · Kijiji apartments rentals data · CA marketplace extractor · Kijiji lead generation · Kijiji.ca extraction API · Kijiji FSBO scraper · Kijiji dealer inventory scraper · Kijiji used car data · Kijiji apartment rental data · Kijiji Toronto scraper · Kijiji Montreal scraper · Kijiji Vancouver scraper · Kijiji Calgary scraper · Kijiji Ottawa scraper · Canadian classifieds data extraction · Canada used car prices API · Canadian rental market data · Kijiji autos scraper · Kijiji real estate scraper · Kijiji jobs scraper · Kijiji services scraper · Kijiji buy and sell scraper · Kijiji Quebec scraper · Kijiji bilingual EN FR scraper · Canada marketplace data · Kijiji price monitoring · Kijiji new listing alerts · Canadian classifieds API · Kijiji daily scrape · Apify Kijiji actor · Kijiji JSON export · Kijiji CSV export · Canada reseller arbitrage data · Canada car flipping scraper · Canadian brand monitoring · Kijiji.ca pagination scraper · Kijiji.ca NEXT_DATA parser


Support

  • Bug reports: Open an issue on the Apify Store actor page
  • Feature requests: Same place — describe your use case (vertical, metro, filters) for the fastest turnaround
  • Direct contact: Reach the developer through the Apify Console developer profile

If this actor saves you time, a 5-star rating on the Apify Store helps other Canadian resellers, dealers, recruiters, brand teams, and PropTech analysts discover it. Thank you!