Kijiji Scraper
Kijiji carries most of Canada's secondhand supply and it turns over fast, good listings gone by evening.
Kijiji carries most of Canada's secondhand supply and it turns over fast, good listings gone by evening. Rows give price in cents, posting time, city and a flag for organic versus promoted top ads; 'please contact' listings stay honestly null-priced. No seller names or coordinates collected.
$3.00 / 1,000 · 100.0% success over 26 public runs in the last 30 days.
Run it on Apify → Free to try - runs bill per result on your own account.
What you give it
Every field is optional unless marked; sensible defaults do the rest.
| Field | Type | What it does | Default |
|---|---|---|---|
searchQuery |
string | What to search for on Kijiji, exactly as you would type it in the site's search box, e.g. "bike" or "iphone 15". Searches all of Canada. Leave it out when you only re-check ads through listingIds. | bike |
listingIds |
array | Re-check ads you already know instead of searching: one ad ID per line (the number at the end of every Kijiji ad address, and the listingId of every dataset item), the ad's full address, or its adId= link. Each one is read from its own page with the full description and the site's own status, whether or not Fetch full descriptions is on. An ad that is gone from the site is skipped, named in the log and not billed. When given, the search fields of this form are ignored and the run status says which. Up to 50. |
[] |
priceMinCad |
integer | Only include listings costing at least this many Canadian dollars. | - |
priceMaxCad |
integer | Only include listings costing at most this many Canadian dollars. | - |
sortBy |
string | Order of results: date (newest first, best for monitoring), price_asc, price_desc, or relevance. | date |
postedAfter |
string | Only include listings posted on or after this date. With newest-first sorting the run stops early once older listings are reached. Format: YYYY-MM-DD (for example 2026-09-08) or a full ISO timestamp such as 2026-09-08T14:30:00Z. Slash dates like 08/09/2026 are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant. |
- |
postedBefore |
string | Only include listings posted on or before this date. Format: YYYY-MM-DD (for example 2026-09-08) or a full ISO timestamp such as 2026-09-08T14:30:00Z. Slash dates like 08/09/2026 are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant. |
- |
maxItems |
integer | Stop after this many listings. Free-plan runs are capped at 5 items. The form starts at 25 for a cheap first run - that is the form's prefill, not a cap on your plan; clear it to use the default of 1000. | 1000 |
scrapeDetails |
boolean | The search truncates the description to about 203 characters. Turn this on to read each ad's own page for the seller's full description. This makes one extra request per listing, so a run is slower and costs one more page fetch each. Only the description text reaches the output; the seller's name, phone and profile are never read. Leave off for a fast search-only sweep. | False |
reportFailures |
boolean | When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. | True |
What you get back
One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.
A real result row from a recent run:
{
"categoryId": 37,
"city": "City of Montréal",
"currency": "CAD",
"description": "rental apartment for rent-logement locatif a louer-Studio-2 1/2-metro Papineau-ville-marie-quartier des spectacles-vieux old montreal-pont j...",
"imageUrls": [
"https://media.kijiji.ca/api/v1/ca-prod-dealer-ads/images/07/07e8ea75-cdf0-4b59-b12e-ab0599376405?rule=kijijica-200-jpg",
"https://media.kijiji.ca/api/v1/ca-prod-dealer-ads/images/d2/d2f772dd-a1bf-4fb8-8b65-8ba3c9bf99b1?rule=kijijica-200-jpg",
"https://media.kijiji.ca/api/v1/ca-prod-dealer-ads/images/b9/b9b98a63-d136-47db-a5db-5cb201c6bf55?rule=kijijica-200-jpg",
"https://media.kijiji.ca/api/v1/ca-prod-dealer-ads/images/ea/eafeaaf8-b537-4899-b7ed-2941c9fb1d2a?rule=kijijica-200-jpg",
"https://media.kijiji.ca/api/v1/ca-prod-dealer-ads/images/ba/bad651b3-aa5c-4e64-8883-a5d563cf96a4?rule=kijijica-200-jpg",
"https://media.kijiji.ca/api/v1/ca-prod-dealer-ads/images/19/197fdd12-2cd5-4711-85fb-58c1800e51bd?rule=kijijica-200-jpg",
"https://media.kijiji.ca/api/v1/ca-prod-dealer-ads/images/93/93acdc3d-27ee-4f7c-8e34-2c35b38f5c2d?rule=kijijica-200-jpg",
"https://media.kijiji.ca/api/v1/ca-prod-dealer-ads/images/66/664a92d9-75ed-462e-930f-476c2e2939f9?rule=kijijica-200-jpg"
],
"listingId": "1713521512",
"organic": false,
"postedAt": "2025-03-20T17:16:10.000Z",
"priceCents": 137500,
"priceType": "FIXED",
"title": "PROMO-2.5 condo appartement neuf locatif Ville-Marie-Jacques",
"url": "https://www.kijiji.ca/v-apartments-condos/ville-de-montreal/promo-2-5-condo-appartement-neuf-locatif-ville-marie-jacques/1713521512"
}
| Field | Type | Meaning |
|---|---|---|
listingId |
string | Kijiji listing ID. |
url |
string | Direct link to the listing. |
title |
string | Listing title as posted. |
description |
string | Listing description. The ~203-character search snippet by default, or the seller's full free-text description when Fetch full descriptions is on (read from the ad's own page; seller name, phone and profile are never read). |
priceCents |
['integer', 'null'] | Asking price in Canadian cents. Null for 'please contact' or swap listings - see priceType. |
currency |
string | Always CAD when a price is present. |
priceType |
['string', 'null'] | The site's price kind, e.g. FIXED, PLEASE_CONTACT, SWAP_TRADE. |
city |
['string', 'null'] | Listing locality. Locality-level only - exact coordinates and street addresses are never collected. |
postedAt |
['string', 'null'] | When the listing was activated (ISO timestamp). |
categoryId |
['integer', 'null'] | Numeric Kijiji category ID. |
organic |
boolean | True for organic results; false for paid placements (top ads). |
imageUrls |
array | Listing photo URLs (up to 8). |
status |
string | The site's own ad status as it reports it (ACTIVE, ...). Present on ads read through listingIds; the search response does not carry it. |
Health
100.0% success over 26 public runs in the last 30 days. Live record, failures included: status page.
Full documentation, examples and the AI-assistant prompt live on the store page.