Kijiji Canada Classified Listings Scraper avatar

Kijiji Canada Classified Listings Scraper

Pricing

from $6.80 / 1,000 results

Go to Apify Store
Kijiji Canada Classified Listings Scraper

Kijiji Canada Classified Listings Scraper

Scrape Canadian classified ads with title, price, city and location, category, posting date, listing URL, image, description and poster info. Search cars, real estate, jobs, services and buy & sell across Canada. Export to JSON, CSV or Excel.

Pricing

from $6.80 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Share

Kijiji Canada Classified Listings Scraper

Kijiji Canada Classified Listings Scraper

Here is one real result, with every field the actor returns:

{
"imageUrl": "https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/be/be075c82-487e-4ebc-8c8a-92793393c6ca?rule=kijijica-200-jpg",
"title": "mountain bike",
"url": "https://www.kijiji.ca/v-mountain-bike/city-of-toronto/mountain-bike/1741994818",
"id": "1741994818",
"price": 130,
"priceType": "FIXED",
"priceCurrency": "CAD",
"category": "All Categories",
"categoryId": 647,
"city": "City of Toronto",
"address": "North York, ON M2J",
"latitude": 43.77852,
"longitude": -79.34656,
"postedDate": "2026-08-14T03:58:54.000Z",
"description": "Jamis Trail X mountain bike in good condition. Frame: 21 in durable aluminum hardtail. Brakes: disc brakes. Derailleurs: 3x7, Shimano. Tires: Knobby mountain bike tires",
"posterId": "1010675691",
"posterRating": 4.961538461538462,
"posterVerified": false,
"sellerType": "Private",
"priceDrop": false,
"promoted": false,
"shippingAvailable": null,
"adSource": "ORGANIC",
"imageCount": 2,
"imageUrls": ["https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/be/be075c82-487e-4ebc-8c8a-92793393c6ca?rule=kijijica-200-jpg"],
"searchQuery": "mountain bike",
"searchCity": "Toronto (GTA)",
"searchCategory": "All Categories",
"source": "Kijiji",
"observedAt": "2026-08-14T08:28:33.478Z",
"error": null,
"aiSummary": "A Jamis Trail X mountain bike in good condition is for sale for 130 CAD. It features a 21 inch aluminum hardtail frame, disc brakes, Shimano 3x7 derailleurs, and knobby mountain bike tires.",
"aiAttributes": {
"itemType": "mountain bike",
"condition": "used",
"brand": "Jamis",
"attributes": {"frame_size": "21 inches", "frame_material": "aluminum", "brakes": "disc brakes"},
"tags": ["mountain bike", "Jamis", "used", "aluminum frame", "disc brakes"]
}
}

Note: the description and aiSummary are real; the source uses inch (") marks and asterisk bullets, rewritten here as plain text with the same values. The aiAttributes.attributes object is trimmed from 5 real keys to 3 for display.

The most complete Kijiji Canada scraper available. It returns every field a Kijiji classified ad exposes, including price, geolocation, poster reputation and images, plus optional AI enrichment, and gives you keyword, category and city filters to target exactly the listings you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor searches Kijiji Canada for each keyword you pass, across every category and city you select, paginates through the matching classified ads, and writes one normalized record per listing to the run's dataset. Prices are parsed to a number with currency and type, location is returned with city, address and latitude/longitude, poster reputation is captured (posterRating, posterVerified, sellerType), and missing source values are returned as null.

Two optional AI add-ons (paid Apify plans only, off by default) enrich each record: aiSummary writes a plain-English summary of the ad, and aiAttributes extracts a structured item type, condition, brand, attributes and tags. Each is billed per record only when it produces usable output.

Quickstart

Open the actor, paste this into the input, and press Run. It returns 3 mountain bike listings in Toronto with both AI add-ons on.

{
"searchQueries": ["mountain bike"],
"categories": ["all"],
"cities": ["toronto"],
"maxListings": 3,
"withAiListingSummary": true,
"withAiCategorize": true
}

Every keyword is searched in every selected category and city. Leave categories empty for all categories and cities empty to search all of Canada. The AI add-ons stay off unless you turn them on and are ignored on free plans.

Input reference

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no["iphone"]Keywords to search for, one search per keyword, for example iphone, honda civic, apartment for rent. Leave empty to browse a category with no keyword.
categoriesstring[]no["all"]Categories to search: all, buy-sell, cars-vehicles, real-estate, jobs, services, pets.
citiesstring[]no["canada"]Cities/regions: canada, toronto, montreal, vancouver, calgary, ottawa, edmonton, winnipeg, halifax.
maxListingsintegerno10Maximum listings to collect across all keywords, categories and cities.
withAiListingSummarybooleannofalsePaid plans only. Writes a plain-English summary per ad. Billed only when a summary is produced.
withAiCategorizebooleannofalsePaid plans only. Extracts item type, condition, brand, attributes and tags. Billed only when attributes are produced.

Every keyword is combined with every selected category and city.

Output reference

One dataset item per listing. Types: string, integer, number, boolean, string[], object, or null when the source value is absent.

FieldTypeDescription
imageUrlstringPrimary listing image URL.
titlestringListing title.
urlstringListing URL.
idstringKijiji listing ID.
pricenumberListing price, or null if not priced.
priceTypestringPrice type, for example FIXED, FREE, PLEASE_CONTACT.
priceCurrencystringCurrency code, for example CAD.
categorystringCategory label.
categoryIdintegerKijiji category ID.
citystringCity the ad is posted in.
addressstringNeighborhood/address text.
latitudenumberListing latitude.
longitudenumberListing longitude.
postedDatestringPosting timestamp (ISO 8601).
descriptionstringListing description text.
posterIdstringPoster/seller ID.
posterRatingnumberPoster average rating, or null.
posterVerifiedbooleanWhether the poster is verified.
sellerTypestringSeller type, for example Private, Dealer.
priceDropbooleanWhether the ad has a recent price drop.
promotedbooleanWhether the ad is promoted/featured.
shippingAvailablebooleanWhether shipping is offered, or null.
adSourcestringAd source, for example ORGANIC.
attributesobjectStructured ad attributes from the source, when present.
attributesCountintegerNumber of source attributes.
imageCountintegerNumber of images on the ad.
imageUrlsstring[]All listing image URLs.
searchQuerystringKeyword that produced this record.
searchCitystringCity filter that produced this record.
searchCategorystringCategory filter that produced this record.
sourcestringData source. Always Kijiji.
observedAtstringISO 8601 timestamp of when the record was collected.
aiSummarystringAI English ad summary. null unless the AI add-on is on.
aiAttributesobjectAI item type, condition, brand, attributes and tags. null unless the AI add-on is on.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a live run (input {"searchQueries":["mountain bike"],"cities":["toronto"],"maxListings":3,"withAiListingSummary":true,"withAiCategorize":true}):

{
"imageUrl": "https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/be/be075c82-487e-4ebc-8c8a-92793393c6ca?rule=kijijica-200-jpg",
"title": "mountain bike",
"url": "https://www.kijiji.ca/v-mountain-bike/city-of-toronto/mountain-bike/1741994818",
"id": "1741994818",
"price": 130,
"priceType": "FIXED",
"priceCurrency": "CAD",
"category": "All Categories",
"categoryId": 647,
"city": "City of Toronto",
"address": "North York, ON M2J",
"latitude": 43.77852,
"longitude": -79.34656,
"postedDate": "2026-08-14T03:58:54.000Z",
"description": "Jamis Trail X mountain bike in good condition. Frame: 21 in durable aluminum hardtail. Brakes: disc brakes. Derailleurs: 3x7, Shimano. Tires: Knobby mountain bike tires",
"posterId": "1010675691",
"posterRating": 4.961538461538462,
"posterVerified": false,
"sellerType": "Private",
"priceDrop": false,
"promoted": false,
"shippingAvailable": null,
"adSource": "ORGANIC",
"imageCount": 2,
"imageUrls": ["https://media.kijiji.ca/api/v1/ca-prod-fsbo-ads/images/be/be075c82-487e-4ebc-8c8a-92793393c6ca?rule=kijijica-200-jpg"],
"searchQuery": "mountain bike",
"searchCity": "Toronto (GTA)",
"searchCategory": "All Categories",
"source": "Kijiji",
"observedAt": "2026-08-14T08:28:33.478Z",
"error": null,
"aiSummary": "A Jamis Trail X mountain bike in good condition is for sale for 130 CAD. It features a 21 inch aluminum hardtail frame, disc brakes, Shimano 3x7 derailleurs, and knobby mountain bike tires.",
"aiAttributes": {
"itemType": "mountain bike",
"condition": "used",
"brand": "Jamis",
"attributes": {"frame_size": "21 inches", "frame_material": "aluminum", "brakes": "disc brakes", "derailleurs": "3x7 Shimano", "tires": "knobby mountain bike tires"},
"tags": ["mountain bike", "Jamis", "used", "aluminum frame", "disc brakes"]
}
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~kijiji-canada-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["honda civic"],"categories":["cars-vehicles"],"cities":["toronto"],"maxListings":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~kijiji-canada-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["apartment for rent"],"categories":["real-estate"],"cities":["vancouver"],"maxListings":100}'

Apify CLI:

apify call scrapers_lat/kijiji-canada-scraper \
--input '{"searchQueries":["iphone"],"cities":["montreal"],"maxListings":10}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per listing record returned (result event). See the pricing tab for the current per-result price.
  • AI add-ons billed separately. withAiListingSummary and withAiCategorize are charged per record only when they produce usable output, and only on paid plans.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run, and AI add-ons are ignored. Upgrade for higher maxListings and AI enrichment.

FAQ and troubleshooting

A run returned 0 records. Why? The keyword and filter combination matched nothing. Broaden the keyword, set categories to all, or widen cities to canada. Zero-result runs are not charged.

Can I scrape a whole category with no keyword? Yes. Leave searchQueries empty and select the category and city you want.

Why are aiSummary and aiAttributes null? The AI add-ons are off by default and ignored on free plans. Turn on withAiListingSummary and withAiCategorize on a paid plan to populate them.

How do I search several cities at once? List them in cities. Each keyword is searched in every selected city and category, and results are combined up to maxListings.

Do I get seller contact details? The actor returns the poster ID, rating, verified flag and seller type that Kijiji exposes publicly. It does not bypass any login or reveal private contact info.

Is this an official Kijiji tool? No. This actor is independent and has no affiliation with Kijiji. It reads only data that is publicly available on Kijiji. Use it in accordance with Kijiji's terms of service.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Kijiji. Accesses only publicly available Kijiji data. Use in accordance with Kijiji's terms of service.