Kijiji Scraper avatar

Kijiji Scraper

Pricing

from $0.90 / 1,000 results

Go to Apify Store
Kijiji Scraper

Kijiji Scraper

[๐Ÿ’ฐ $0.9 / 1K] Extract Canadian classified listings from Kijiji โ€” cars, real estate, jobs, electronics, services, and more. Paste search URLs or just type keywords and a location.

Pricing

from $0.90 / 1,000 results

Rating

0.0

(0)

Developer

SolidCode

SolidCode

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

15 days ago

Last modified

Share

Pull Canadian classified listings from Kijiji.ca at scale โ€” titles, CAD prices, city + address + latitude/longitude, seller names and masked phone numbers, image URLs, category-specific attributes, and posting dates for cars, real estate, electronics, jobs, services, pets, and every other Kijiji category. Built for Canadian retailers, automotive dealers, real estate agents, lead-generation agencies, and market researchers who need fresh Kijiji data without paging through the site one screen at a time.

Why This Scraper?

  • All 13 Canadian provinces and territories โ€” search by city, postal code, or province, or set location: "Canada" to sweep the whole country in one run.
  • Keyword search AND direct URL passthrough โ€” type a phrase like "iPhone 15 Pro", or paste any Kijiji search, category, or pre-filtered URL exactly as it appears in your browser. URL filters (category, location, attributes) are honoured byte-for-byte.
  • 25+ structured fields per listing โ€” listing ID, title, CAD price, price type (fixed / negotiable / contact / free / swap / wanted), seller ID, address, latitude, longitude, neighbourhood intersection, all image URLs, category ID, and a flat attributes array of category-specific label/value pairs.
  • Off-site job ads flagged, never disguised โ€” Kijiji jobs pages blend in roughly 18% ZipRecruiter-syndicated ads; every row is marked isExternalListing, keeps a blank posting date instead of a fabricated one, and can be filtered out entirely with one toggle.
  • Optional deep-fetch mode โ€” toggle fetchFullDetails: true to swap the ~165-character search excerpt for the complete ad text and add view count, masked seller phone, seller website, dealer flag, listing status, and end date from each ad's own page.
  • Smart Canadian location resolver โ€” recognizes major cities ("Toronto", "Montreal, QC", "Calgary"), provinces ("Ontario", "BC"), postal codes ("M5V 2T6"), and free-text inputs. No need to look up Kijiji's internal location IDs.
  • Five-way price filtering in CAD โ€” minimum price, maximum price, sort by newest / price low-to-high / price high-to-low, plus dropdown filters for ad type (Offering / Wanted) and seller type (Private / Business).
  • Automatic deduplication across paginated Top Ads โ€” Kijiji repeats promoted listings on every page; the actor dedupes on listing ID so your dataset never carries the same ad twice.
  • Actionable zero-result feedback โ€” when a query returns nothing, the run status echoes back the exact keywords, location, and filter combination that produced no hits so you know precisely what to broaden.
  • Flat $0.90 per 1,000 results โ€” pay only for listings returned, no compute charges.

Use Cases

Price Monitoring & Competitive Intelligence

  • Track competitor pricing across regional Kijiji markets
  • Build CAD price histories on used-car models by trim and year
  • Detect new listings within a price band the day they post

Lead Generation

  • Build outreach lists with seller names, masked phone numbers, and websites
  • Source private sellers vs. registered dealers with the Seller Type filter
  • Capture every for-sale listing in a target city for sales pipelines

Inventory & Market Research

  • Map automotive inventory by province for dealer network planning
  • Track real-estate listing density and asking-rent shifts across Canadian cities
  • Surface in-demand product categories by counting active listings

Trend Analysis

  • Quantify Wanted-ad volume vs. Offering-ad volume to gauge demand
  • Track average asking price by city and category over time
  • Identify seasonal patterns in classified categories (bikes, snowmobiles, RVs)

Data Enrichment

  • Enrich CRM records with current Kijiji listings tied to a seller name
  • Pull image URLs to populate downstream catalog systems
  • Feed marketplace dashboards with structured Canadian classifieds data

Getting Started

One topic, default location (all of Canada), 100 listings:

{
"searchQueries": ["bikes"]
}

Filtered Search with Location and Price Range

Newest Toyota Camry listings in the GTA between $5,000 and $15,000:

{
"searchQueries": ["Toyota Camry"],
"location": "Toronto, ON",
"minPrice": 5000,
"maxPrice": 15000,
"sortBy": "dateDesc",
"maxResults": 200
}

URL Passthrough with Full Detail Enrichment

Paste a pre-filtered Kijiji URL (filters already encoded in the URL) and turn on detail mode to pull view counts, full descriptions, and seller contact info:

{
"searchUrls": [
"https://www.kijiji.ca/b-real-estate/city-of-toronto/c34l1700273?ad=offering"
],
"fetchFullDetails": true,
"maxResults": 500
}

Multi-Source Batch Run

Mix keyword searches and URLs in a single run โ€” results are combined and deduplicated:

{
"searchQueries": ["iPhone 15 Pro", "MacBook Air M2"],
"searchUrls": [
"https://www.kijiji.ca/b-cars-vehicles/calgary/c27l1700199"
],
"location": "Canada",
"sellerType": "private",
"maxResults": 1000
}

Input Reference

What to Scrape

ParameterTypeDefaultDescription
searchUrlsstring[]["https://www.kijiji.ca/b-cars-vehicles/canada/c27l0"]One or more Kijiji search, category, or browse URLs. Paste exactly as copied from kijiji.ca โ€” URL filters are honoured.
searchQueriesstring[][]Plain-text search terms (e.g. "iPhone 15 Pro"). Each query is combined with the Location field below.
locationstring"Canada"City ("Toronto, ON"), province ("Alberta"), or postal code ("M5V 2T6"). Use "Canada" to search nationwide. Only applies to keyword searches.

Filters

Filters apply only to keyword searches โ€” URLs carry their own filters from the URL itself.

ParameterTypeDefaultDescription
sortByselectNewest FirstSort order: Newest First, Price: Low to High, or Price: High to Low.
minPriceintegernoneMinimum price in CAD. Leave empty for no minimum.
maxPriceintegernoneMaximum price in CAD. Leave empty for no maximum.
adTypeselectAnyAd type filter: Any, Offering (people selling), or Wanted (people buying).
sellerTypeselectAnySeller filter: Any, Private (individual), or Business (registered dealer). Applies to listings that expose this attribute (most common on cars and electronics).

Output Options

ParameterTypeDefaultDescription
maxResultsinteger100Maximum total listings to collect across all URLs and queries. It is one shared budget, spent in the order your searches are listed, so a broad first URL can use all of it โ€” the run names any search it had no room for. Set to 0 for no limit. Start with 50โ€“100 to test.
excludeExternalListingsbooleanfalseKijiji's job pages mix in ads syndicated from another job site (ZipRecruiter), whose links open that site instead. Turn this on to keep only ads posted on Kijiji itself.
fetchFullDetailsbooleanfalseWhen on, visits each listing's detail page to replace the search excerpt with the full ad text and add view count, masked seller phone, seller website, dealer flag, status, and end date. Roughly doubles run cost.

Output

Every row represents one Kijiji listing. Here's a typical result with full details enabled:

{
"listingId": "1741234567",
"url": "https://www.kijiji.ca/v-cars-trucks/city-of-toronto/2019-toyota-camry-le/1741234567",
"title": "2019 Toyota Camry LE โ€” Low Km, Certified",
"description": "Beautifully maintained 2019 Toyota Camry LE with only 48,000 km...",
"descriptionHtml": null,
"price": 22500.00,
"priceType": "negotiable",
"currency": "CAD",
"categoryId": "174",
"categoryName": "Cars & Trucks",
"adType": "offering",
"status": "active",
"postedAt": "2026-05-12T14:32:11Z",
"sortingDate": "2026-05-12T14:32:11Z",
"endDate": "2026-07-11T14:32:11Z",
"location": "Toronto (GTA)",
"locationId": "1700273",
"address": "Yonge & Eglinton, Toronto, ON",
"latitude": 43.7064,
"longitude": -79.3982,
"neighbourhood": "Yonge & Eglinton",
"sellerId": "u12345678",
"sellerName": "Maple Leaf Auto Sales",
"sellerType": "business",
"sellerPhone": "416-555-xxxx",
"sellerWebsite": "https://mapleleafautosales.ca",
"sellerRating": 4.7,
"sellerVerified": true,
"imageCount": 12,
"totalImageCount": 12,
"imageUrls": ["https://i.kijiji.ca/abc.jpg", "https://i.kijiji.ca/def.jpg"],
"views": 287,
"adSource": "ORGANIC",
"isExternalListing": false,
"attributes": [
{ "label": "carmake", "value": "toyota" },
{ "label": "carmodel", "value": "camry" },
{ "label": "carbodytype", "value": "sedan" },
{ "label": "numberofdoors", "value": "4" }
],
"flags": {
"topAd": false,
"highlight": false,
"priceDrop": true,
"isFromDealer": true,
"showcase": false
}
}

Core Fields

FieldTypeDescription
listingIdstringUnique Kijiji listing ID
titlestringListing title
descriptionstringAd description as plain text, always. Search results carry an excerpt of roughly 165 characters; fetchFullDetails: true replaces it with the complete text, line breaks and all.
descriptionHtmlstringThe ad description with its original formatting (bold, bullet lists, links) left intact. Only filled when fetchFullDetails: true.
urlstringDirect listing URL. Points to kijiji.ca unless isExternalListing is true.
categoryIdstringKijiji category ID
categoryNamestringHuman-readable category name (populated with fetchFullDetails)
adTypestringoffering (someone selling) or wanted (someone buying)
postedAtstringISO-8601 timestamp the ad was posted. Kijiji's search results carry it on private-seller ads but leave it off most dealer ads; fetchFullDetails: true reads it from each ad's own page and fills the column.
sortingDatestringISO-8601 timestamp Kijiji uses for sort ranking. Blank on ads hosted on another site, which carry no date of their own.

Pricing

FieldTypeDescription
pricenumberListing price in CAD (null when seller asks for contact-for-price)
priceTypestringfixed, negotiable, contact, free, swap, or wanted
currencystringAlways CAD

Location

FieldTypeDescription
locationstringCity or region name as shown on Kijiji
locationIdstringKijiji internal location ID
addressstringStreet address when the seller chose to share their location (populated reliably with fetchFullDetails; often null on search results alone)
latitudenumberListing latitude
longitudenumberListing longitude
neighbourhoodstringNearest cross-streets (e.g. "Yonge & Bloor")

Seller

FieldTypeDescription
sellerIdstringKijiji poster ID
sellerNamestringSeller display name (populated with fetchFullDetails)
sellerTypestringprivate or business when exposed by the listing
sellerRatingnumberSeller's Kijiji rating when available
sellerVerifiedbooleanWhether Kijiji marks this seller as verified
sellerPhonestringMasked phone number, last 4 digits as xxxx (populated with fetchFullDetails)
sellerWebsitestringSeller's website URL (populated with fetchFullDetails)

Images, Attributes & Flags

FieldTypeDescription
imageUrlsstring[]Photo URLs delivered for this ad. Search mode returns the first few thumbnails; fetchFullDetails: true returns the ad's complete gallery
imageCountnumberHow many URLs imageUrls actually holds โ€” always matches the array length
totalImageCountnumberHow many photos the ad has in total. Use this to filter for well-photographed ads without paying for full details
attributesobject[]Category-specific attributes as flat {label, value} pairs (e.g. carmake, carmodel, bedrooms, condition)
flagsobjectListing flags: topAd, highlight, priceDrop, isFromDealer, showcase
adSourcestringORGANIC, TOP_AD, or ZIP for an ad syndicated from another job site
isExternalListingbooleantrue when the ad is hosted on another site rather than on Kijiji. These rows have no posting date, no map coordinates and no price.
virtualTourUrlstringVirtual tour link, on real-estate ads that publish one. Requires fetchFullDetails: true; blank on every other kind of ad
youtubeVideoIdstringEmbedded YouTube ID when the listing has a video

Detail-Mode Fields

Populated only when fetchFullDetails: true.

FieldTypeDescription
viewsnumberTotal view count on the listing detail page
statusstringListing status (active, expired, removed, etc.)
endDatestringISO-8601 timestamp the listing is scheduled to expire. Empty when the ad has no expiry date
fullDetailsLoadedbooleantrue when the ad's own page was read for this row, false when it could not be reached. Lets you tell an ad with no phone number from one whose page didn't load.

Tips for Best Results

  • Paste pre-filtered URLs whenever possible. Apply your filters (category, location, attribute) directly on kijiji.ca, copy the URL, and drop it into searchUrls โ€” every URL parameter is respected exactly as the site interprets it.
  • Start small to test, then scale up. A maxResults: 50 first run takes under a minute and confirms the data matches your needs before you spend on a 10,000-listing pull.
  • Turn on fetchFullDetails: true when the posting date matters. Kijiji publishes a posting date on private-seller ads in search results but omits it on most dealer ads, so a "cars posted this week" pull comes back with a patchy postedAt column. Detail mode reads the real date off each ad's page and fills it in. It adds one visit per listing and roughly doubles run cost, so skip it for broad inventory sweeps and use it for date-sensitive or lead-quality lists where you also want seller phone, website, and view counts.
  • Combine keyword queries and URLs in one run. Mix searchQueries with searchUrls to consolidate multiple monitoring sources into a single dataset and dedupe budget. maxResults is one shared budget across all of them, spent in the order they are listed โ€” so give a big city and a whole province their own runs, or raise the limit, if you want a guaranteed share from each. Any search the limit left no room for is named in the run summary.
  • The Seller Type filter is best-effort. Kijiji exposes private vs. business on cars, electronics, and a few other categories; listings without this attribute pass through unfiltered so you don't end up with an empty dataset. Toggle fetchFullDetails: true for stricter seller-type enforcement.
  • For Wanted-ad research, use adType: "wanted" on keyword searches. URL-based runs respect whatever ?ad= parameter the URL already carries โ€” verify it's in the URL before relying on it.
  • Use city names over postal codes when you can. The location resolver knows every major Canadian city by name and maps postal-code prefixes to their nearest big city โ€” names are more predictable.
  • Do not read sortingDate as a posting date. It's Kijiji's ranking key and it moves every time an ad is bumped or renewed, so it can sit months or even a year after the ad first went live. postedAt is the posting date; leave date filtering to that column.
  • Job searches include ads from another job site, clearly marked. Roughly one job result in five on a Kijiji jobs page is syndicated from ZipRecruiter, and those links open there instead. Every row carries isExternalListing, and their postedAt, coordinates and salary are blank because the ad does not carry them. Set excludeExternalListings: true for Kijiji-only jobs.
  • Sorted runs stay sorted end to end, promoted ads included. Kijiji pins its promoted Top Ads to the head of every results page whatever sort you picked, so this actor puts them back where their price or date belongs โ€” a Price: Low to High export really does open at the lowest price. Promoted ads still ship, and every one of them carries flags.topAd: true (the ads Kijiji serves from its promoted block also carry adSource: "TOP_AD"), so you can skip them if you want organic results only. Listings with no price at all (Please contact) sit at the end of a price-sorted export, and off-site job ads โ€” which carry no posting date โ€” sit at the end of a Newest First export for the same reason, in the order Kijiji listed them. The run tells you how many landed there. Each search in a multi-search run is sorted within its own block of results.

Pricing

$0.90 per 1,000 results โ€” flat, competitive pricing for Canadian classifieds at scale. No compute charges โ€” you only pay per result returned.

ResultsEstimated Cost
100$0.09
1,000$0.90
10,000$9.00
100,000$90.00

A "result" is any listing row in the output dataset. Platform fees (compute, storage) are additional and depend on your Apify plan.

Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

  • Zapier / Make / n8n โ€” Workflow automation
  • Google Sheets โ€” Direct spreadsheet export
  • Slack / Email โ€” Notifications on new results
  • Webhooks โ€” Trigger custom APIs on run completion
  • Apify API โ€” Full programmatic access

This actor is designed for legitimate market research, competitive intelligence, lead generation, and inventory analysis on publicly accessible Kijiji listings. Users are responsible for complying with applicable Canadian laws (including PIPEDA), Kijiji's Terms of Service, and CASL for any subsequent outreach. Do not use extracted contact information for spam, harassment, or any unlawful purpose.