Kijiji Listings API & Scraper - Monitor New Ads & Price Changes
Pricing
from $0.63 / 1,000 listing returneds
Kijiji Listings API & Scraper - Monitor New Ads & Price Changes
For resellers, deal alerts and price trackers: Kijiji.ca Canada classifieds as an API, by search term, category and location, with price, place, posted time, photos and attributes. Watch mode returns only ads posted since your last check and price changes, never old ads bumped back to the top.
Pricing
from $0.63 / 1,000 listing returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Get listings from Kijiji.ca, Canada's classifieds site, by search term, category and location. One row per listing: title, price in CAD, place, posted time, photos, category, attributes and link. Watch mode turns a search into a feed: run it on a schedule and each run returns only the ads posted since your watch started that you have not received yet, plus ads whose price changed.
No login, no cookies, no API key. It reads the public search result pages only.
What you can do with it
- Deal alerts: watch "iphone 15" in Cell Phones in Toronto every 15 minutes and get only the new ads.
- Reselling and sourcing: list a category in a city, filter by price range, and send the rows to a sheet or a bot.
- Price tracking: watch mode reports a
price-changerow with the previous price when a seller edits the price. - Market research: how many listings Kijiji shows for a search (
listingsInSearch), prices, and seller attributes.
Input
| Field | What it does |
|---|---|
searchQueries | Search terms, one per line. Leave empty to list a whole category or location. |
categoryIds | Kijiji's category numbers: the digits after c at the end of a Kijiji search address. In .../iphone/k0c760l1700273 the category is 760 (Cell Phones). |
locationIds | Kijiji's location numbers: the digits after l. 1700273 is City of Toronto, 0 (or empty) is all of Canada. |
searchUrls | Or paste a Kijiji search address, without the part after ?. |
maxResultsPerSearch | 1 to 1000, default 40 (one page). |
minPrice, maxPrice | Price range in CAD, applied to the pages read. |
includeTopAds | Also return the paid Top Ads Kijiji puts above each page. Off by default. |
onlyNew | Watch mode. |
includePriceChanges | Watch mode: also return price changes. On by default. |
watchPages | Watch mode: most pages read per check, 1 to 10, default 3. |
watchName | Optional name, to keep two watches of the same search apart. |
resetMonitoringState | Start the watch over. |
Every term is combined with every category and every location, up to 10 searches per run.
Example: new iPhone ads in Cell Phones, City of Toronto.
{"searchQueries": ["iphone 15"],"categoryIds": ["760"],"locationIds": ["1700273"],"onlyNew": true}
Output
{"status": "ok","changeType": "new","listingId": "1744224216","title": "Black IPhone 15","price": 650,"priceType": "FIXED","currency": "CAD","previousPrice": null,"priceChange": null,"description": "…","locationName": "City of Toronto","address": "…","categoryId": 760,"postedAt": "2026-10-01T15:44:19.000Z","sortedAt": "2026-10-01T15:44:19.000Z","imageUrl": "https://media.kijiji.ca/…","imageUrls": ["https://media.kijiji.ca/…"],"attributes": { "forsaleby": ["ownr"], "condition": ["usedgood"] },"isTopAd": false,"url": "https://www.kijiji.ca/v-cell-phone/city-of-toronto/black-iphone-15/1744224216","positionInSearch": 3,"sortOrder": "best-match","listingsInSearch": 194,"searchCategoryName": "Cell Phones","searchLocationName": "City of Toronto"}
priceis a number of Canadian dollars, ornullwhen the ad has no amount.priceTypeis Kijiji's own word (FIXED,CONTACT,GIVE_AWAY, ...), passed through as is.postedAtis when the ad was first posted.sortedAtis the time Kijiji sorts it by; it is later thanpostedAtwhen an old ad was bumped back up.attributesare Kijiji's own attribute names and codes for the category (for exampleforsaleby,condition), passed through as is.descriptionis the snippet shown in the list, not the full text. Phone numbers and email addresses written into titles and descriptions are replaced with[phone removed]and[email removed].
Watch mode, and what "new" means here
The first run returns the current first page (rows marked first-check) and remembers it. Each later run returns:
new: an ad you have not received whose posted time is after your watch started. An old ad that was bumped to the top, or that surfaced from a deeper page, is not called new.price-change: an ad you already saw whose price is different now, withpreviousPriceandpriceChange(negative for a drop).
A row is remembered only after it was delivered. If a run hits its maximum charge or maxResultsPerSearch, the rest come back on the next run. If a page could not be read, the watch judges nothing for that search and says so.
When a check finds nothing, you get one free row with status: "no-new-listings" and the check is charged as one search-checked event instead of rows.
The sort order is Kijiji's, and it matters
Kijiji's robots.txt disallows the sort, price, radius and other filter parameters, so this Actor never requests them and reads each search in the order Kijiji serves it. Measured on 2026-10-05:
- A search without a search term (a category and/or a location) is served newest first. A watch on it stops reading as soon as it reaches ads older than the last check. This is the most complete way to watch.
- A search with a search term is served sometimes newest first and sometimes in best-match order, even for the same address. In best-match order a new ad can sit on any page, so a watch reads
watchPagespages and can miss new ads beyond them. Theno-new-listingsrow says so when it happened.
Every row has sortOrder (date or best-match) so you can see which one you got. If you need every new ad for a keyword, watch the category and location without a search term and filter the titles on your side.
Rows that explain instead of data (never charged)
no-results, no-new-listings, none-in-price-range, not-found (an unknown category or location number: Kijiji answers those with an empty page, and this Actor does not pass that off as "no listings"), not-allowed-by-robots-txt, incomplete, unreadable, blocked, budget-reached, more-not-returned, more-new-than-readable, bad-input.
If Kijiji shows a check page (CAPTCHA), the Actor stops and tells you. It does not solve or bypass check pages.
Limits
- Up to 25 pages (1,000 listings) per search and 10 searches per run.
- Fields come from the search result pages. The full description, the seller's name and phone number are not read.
- Two overlapping runs of the same watch can, rarely, deliver the same ad twice. Do not schedule the same search and
watchNameto overlap. - Not affiliated with Kijiji. Use the data in line with Kijiji's terms and the law that applies to you.
Thanks for using this Actor
We build these tools for people who run them every day, and we improve them from what users tell us.
- Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
- Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.
If this Actor saved you time, a short review helps other people find it.