Kijiji Scraper
Pricing
from $1.59 / 1,000 results
Kijiji Scraper
Extract Kijiji.ca listings as clean JSON with zero seller personal data - prices in CAD cents, descriptions, localities, organic-vs-promoted flag. Newest-first monitoring, price bands, pay per result. Built for deal watching, market research and AI pipelines.
Pricing
from $1.59 / 1,000 results
Rating
0.0
(0)
Developer
Lowland Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Kijiji Scraper — privacy-safe listings data
Extract listings from Kijiji.ca — Canada's largest classifieds marketplace — as clean, structured JSON. Prices in cents, descriptions, localities, posting dates, photos and the organic-vs-promoted flag, ready for price monitoring, market research and data pipelines.
No seller personal data, ever. This scraper is built privacy-first: seller names, profiles, street addresses and exact map coordinates never appear in the output — not as an option you have to remember to switch off, but by design.
Quick start (30 seconds)
- Put what you'd type in the Kijiji search box into searchQuery — e.g.
bike. - Click Start. That's the whole minimum setup.
- When the run finishes, open the dataset's Overview tab for a clean table, or Export it as CSV/Excel/JSON.
Optional knobs: a price band in CAD and newest-first sorting for monitoring — and any input works on a daily Schedule.
What you can build with it
- Watch a niche for underpriced listings. Run
searchQuery: "e-bike"withpriceMaxCad: 800andsortBy: "date"hourly — every new listing arrives withpriceCentsparsed and "please contact" listings honestly null-priced viapriceType. - Filter paid placements out. The
organicflag separates real listings from promoted top-ads — analysis without advertising noise. - Map second-hand prices by city. Every listing carries its locality — compare what the same bike costs in Montréal versus Toronto without touching a coordinate.
- Feed an AI agent clean data. Every field is structured, predictable and free of personal data, so an assistant or pipeline can consume it directly — no scrubbing, no compliance review before you store it.
What you get
Each listing is one dataset item:
{"listingId": "1742290001","url": "https://www.kijiji.ca/v-mountain-bike/ville-de-montreal/norco-scorcher-mtb/1742290001","title": "Norco Scorcher MTB","description": "Old but good everyday bike.","priceCents": 35000,"currency": "CAD","priceType": "FIXED","city": "Montréal","postedAt": "2026-08-20T14:31:33.000Z","categoryId": 647,"organic": true,"imageUrls": ["https://media.kijiji.ca/api/v1/img/example"]}
Field notes, so you know exactly what you are buying:
priceCentsis in Canadian cents, so35000= $350. "Please contact" and swap listings carrynullwith the reason inpriceType.cityis locality-level. Kijiji's data contains exact coordinates and street addresses — they are deliberately never collected.organic: falsemarks paid top-ad placements.descriptionis the search-page text of the listing, as the seller wrote it.
How much does it cost to scrape Kijiji?
$1.99 per 1,000 listings delivered, pay-as-you-go — no subscription, no charge for empty or failed runs. In plain dollars:
- 100 listings ≈ $0.20 — a daily niche watch.
- 500 listings ≈ $1.00 — a solid market snapshot.
The price is all-inclusive — your runs' platform usage is covered by it, with no separate compute or proxy charges. Runs are fast — a scoped few-hundred-item run typically finishes in under ten seconds. Datacenter proxies are sufficient — no residential proxy surcharge needed.
Free-plan runs are limited to a sample of 25 items, enough to evaluate the output format against your real query.
Not technical? Let your AI assistant set it up
Copy this into ChatGPT, Claude or any AI assistant, fill in the one line, and follow the conversation:
Help me set up the "Kijiji Scraper" actor on Apify(https://apify.com/lowlanddata/kijiji-ca-scraper). Guide me one step at a time.What I want to watch: [E.G. "electric bikes under 800 dollars"]Guide me to:1. Propose my input values: searchQuery (what I'd type in the Kijiji search box),an optional priceMinCad/priceMaxCad band, sortBy "date" for newest-firstmonitoring, and maxItems.2. Create a free Apify account (apify.com), open the actor page, paste the valuesinto the Input form, and start a run.3. Set up a daily Schedule in the Apify Console with the same input, plus an emailor Slack integration so new results reach me automatically.4. Show me how to export results as CSV/Excel, or read them from the API if I code.5. If the results are what I wanted, remind me at the end to leave a quick rating on the actor page, and to report anything broken or missing on its Issues tab.
Input
| Field | Description |
|---|---|
searchQuery | What you'd type in the Kijiji search box. Required. Searches all of Canada. |
priceMinCad | Only listings costing at least this many dollars. |
priceMaxCad | Only listings costing at most this many dollars. |
sortBy | date (newest first, default), price_asc, price_desc, or relevance. |
postedAfter | Only listings posted on or after this date (YYYY-MM-DD). Stops early with newest-first sorting. |
postedBefore | Only listings posted on or before this date (YYYY-MM-DD). |
maxItems | Stop after this many listings (default 1000). |
proxyConfiguration | Proxy settings; keep Apify proxy enabled. |
A run minimally needs a searchQuery; invalid combinations (like an inverted price band) fail immediately with the reason in the run's status message.
Use it from your code
Run the actor and get items straight back with one HTTP call (fine for scoped runs up to ~5 minutes):
curl "https://api.apify.com/v2/acts/lowlanddata~kijiji-ca-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-X POST -H "Content-Type: application/json" \-d '{"searchQuery": "bike", "maxItems": 100}'
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('lowlanddata/kijiji-ca-scraper').call({searchQuery: 'bike',maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("lowlanddata/kijiji-ca-scraper").call(run_input={"searchQuery": "bike", "maxItems": 100})items = client.dataset(run["defaultDatasetId"]).list_items().items
Schedules, webhooks and the Make/Zapier/n8n integrations all work out of the box — this is a standard Apify actor.
Use it with AI agents (MCP)
Claude, Cursor and other MCP-capable agents can run this scraper as a tool through Apify's hosted MCP server: the agent fills in the search itself, starts the run and reads the results — no glue code.
Claude Code:
$claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/kijiji-ca-scraper"
Cursor or Claude Desktop (add a custom connector / MCP server with this URL):
https://mcp.apify.com?actors=lowlanddata/kijiji-ca-scraper
Sign in with your Apify account when prompted — runs are billed to it. Setup details per client: Apify MCP docs.
Prompts that work once connected:
- "Search Kijiji for 'e-bike' under 800 dollars and summarize the price distribution by city."
- "Get the 100 newest 'iphone 15' listings from Kijiji and flag anything below the median price."
- "Watch Kijiji for 'canoe' and tell me when something under 300 dollars appears."
Is it legal to scrape Kijiji?
Public listing data — prices, descriptions, localities — is public commercial information, and this scraper is built so that the hard part of the question never arises: no personal data enters your dataset in the first place. Canada's PIPEDA and Québec's Law 25 set strict rules on personal information; an output that carries none of the seller's personal data is the point of this actor, not an afterthought.
Structurally, the extractor maps a fixed whitelist of fields out of the page's data. Seller profiles, street addresses and exact coordinates are never read into the output. Requests are paced, load on the site is kept negligible, and no anti-bot protection is bypassed.
One honest limit: titles and descriptions are the seller's own words, delivered as-is. If a seller chooses to type contact details into their listing text, that text is not rewritten — the guarantee covers the data fields, not the content sellers publish about themselves.
Is there a Kijiji API alternative?
Kijiji publishes no public API for listings. This actor is the practical alternative: the same listings as structured JSON through one HTTP call (run-sync-get-dataset-items), on a schedule, or as an MCP tool for AI agents — with the privacy question already answered in the data itself.
Does Kijiji block scrapers?
Kijiji serves its listings openly to ordinary requests — and this actor stays inside that welcome: paced requests, standard datacenter proxies, load kept negligible. No CAPTCHA fights, no bot-wall cat-and-mouse — which is also why runs are fast and reliable enough for daily schedules.
How do I monitor Kijiji prices?
Set sortBy: "date" with your query, cap maxItems to a page or two, and add a daily (or hourly) Schedule in the Apify Console with an email/Slack integration on the runs — every new listing lands in your inbox with the price already parsed to cents. The AI-assistant prompt above walks a non-technical user through exactly this setup. Even tighter: set postedAfter to yesterday's date — the dataset then contains only the new listings, nothing to dedupe on your side.
FAQ
Can I get seller names or phone numbers? No — by design. That is the product: data you can store, share and process without a privacy review.
Can I search one city only? v1 searches all of Canada; every listing carries its city, so filter the dataset. Location-scoped search is a planned refinement.
Can I get only the newest listings? Yes — set postedAfter to a date (yesterday, say) and the dataset contains only listings posted since then. With newest-first sorting the run stops paging as soon as it provably reaches older listings, so a daily watch stays fast and cheap.
How fresh is the data? Live at run time — every run queries Kijiji directly. For continuous freshness, schedule the actor.
Can I export to Excel or CSV? Yes — every dataset exports as CSV, Excel, JSON or XML from the Apify Console or API.
Does it work with Make, Zapier or n8n? Yes — it is a standard Apify actor; all platform integrations, webhooks and schedules apply.
Do I need an API key to scrape Kijiji? No — Kijiji has no public listings API at all. The actor runs on an Apify account; a free one is enough to try it on your real query.
How much does Kijiji scraping cost? $1.99 per 1,000 delivered listings, with no subscription. A run that fails or finds nothing costs nothing, and the price covers platform usage — there is no separate compute charge.
Why did my first run stop at 25 listings? Free Apify plans get a 25-item sample from this actor. Move to any paid plan and runs go up to your maxItems (default 1,000).
How do I filter out promoted top ads? Keep only items where organic is true. Paid placements are flagged organic: false, so one filter removes advertising noise from your price analysis.
Why is the price null on some listings? The seller chose "please contact" or a swap. priceCents is honestly null in that case, with the reason spelled out in priceType — no fake zeros in your averages.
What currency are the prices in? Canadian cents: priceCents: 35000 means CAD $350. The currency field says CAD on every item.
Does the output show where a seller lives? No. You get the locality (city) only — Kijiji's data contains street addresses and exact coordinates, and this actor deliberately never collects them.
Can I scrape Kijiji listings by posting date? Yes — postedAfter and postedBefore accept YYYY-MM-DD or a full ISO timestamp. Combined with newest-first sorting, postedAfter stops the run early once older listings are reached.
Which proxy setup does Kijiji need? Just the default Apify datacenter proxies. Kijiji serves listings openly to ordinary requests, so there is no residential-proxy cost.
What happens if Kijiji blocks a run? A block on the first request is usually temporary — retry a few minutes later and it typically lands on a clean proxy session. Blocked runs that deliver nothing are never billed.
Can I automate a daily Kijiji search? Yes: put your input on a Schedule in the Apify Console, set postedAfter to yesterday, and wire an email or Slack integration — each morning brings only the listings posted since.
Can an AI agent use this scraper? Yes — add Apify's hosted MCP server and agents like Claude or Cursor can run Kijiji searches as a tool, from search terms to results, with no glue code.
Is it legal to scrape Kijiji in Canada? Listing prices, descriptions and localities are public commercial information, and this actor keeps every category of personal information PIPEDA and Québec's Law 25 care about out of the output entirely.
Do you cover marketplaces outside Canada? Yes — the Kleinanzeigen.de, Marktplaats.nl and FINN.no scrapers below apply the same clean-output rules to Germany, the Netherlands and Norway.
Related scrapers
The same clean-output guarantee across Europe's biggest marketplaces:
- Kleinanzeigen.de Scraper — Germany's biggest classifieds site.
- Marktplaats.nl Scraper — the Netherlands' biggest marketplace.
- FINN.no Scraper — Norway's largest marketplace.
Troubleshooting
The actor fails fast with the reason in the run's status message:
- "priceMinCad must not be higher than priceMaxCad." — swap the two values.
- "Kijiji blocked the run before any results could be fetched. This is usually temporary - retry in a few minutes." — a temporary block on the first request; a retry usually lands on a clean proxy session.
- Fewer items than requested on a free plan — the 25-item free sample cap; run on a paid Apify plan for full results.
Support
Found an issue or missing a field you need? Open an issue on the actor's Issues tab — reports get fixed, this actor is actively maintained.
Working well for you? A rating on this page takes ten seconds and helps other buyers find a privacy-clean option among the lookalikes — it is also the clearest signal of what we should build next.