Kijiji Listings API & Scraper - Monitor New Ads & Price Changes avatar

Kijiji Listings API & Scraper - Monitor New Ads & Price Changes

Pricing

from $0.63 / 1,000 listing returneds

Go to Apify Store
Kijiji Listings API & Scraper - Monitor New Ads & Price Changes

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

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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-change row 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

FieldWhat it does
searchQueriesSearch terms, one per line. Leave empty to list a whole category or location.
categoryIdsKijiji's category numbers: the digits after c at the end of a Kijiji search address. In .../iphone/k0c760l1700273 the category is 760 (Cell Phones).
locationIdsKijiji's location numbers: the digits after l. 1700273 is City of Toronto, 0 (or empty) is all of Canada.
searchUrlsOr paste a Kijiji search address, without the part after ?.
maxResultsPerSearch1 to 1000, default 40 (one page).
minPrice, maxPricePrice range in CAD, applied to the pages read.
includeTopAdsAlso return the paid Top Ads Kijiji puts above each page. Off by default.
onlyNewWatch mode.
includePriceChangesWatch mode: also return price changes. On by default.
watchPagesWatch mode: most pages read per check, 1 to 10, default 3.
watchNameOptional name, to keep two watches of the same search apart.
resetMonitoringStateStart 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"
}
  • price is a number of Canadian dollars, or null when the ad has no amount. priceType is Kijiji's own word (FIXED, CONTACT, GIVE_AWAY, ...), passed through as is.
  • postedAt is when the ad was first posted. sortedAt is the time Kijiji sorts it by; it is later than postedAt when an old ad was bumped back up.
  • attributes are Kijiji's own attribute names and codes for the category (for example forsaleby, condition), passed through as is.
  • description is 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, with previousPrice and priceChange (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 watchPages pages and can miss new ads beyond them. The no-new-listings row 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 watchName to 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.