Kijiji Listings Scraper avatar

Kijiji Listings Scraper

Pricing

from $2.20 / 1,000 result emitteds

Go to Apify Store
Kijiji Listings Scraper

Kijiji Listings Scraper

Scrape Kijiji.ca listings by search term — title, price, location, image, and URL from Canada's #1 classifieds marketplace. No login needed. Export clean, deduped JSON rows for resale research or price tracking.

Pricing

from $2.20 / 1,000 result emitteds

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Security

Limited permissions

Share


🎯 What this scrapes

Kijiji is Canada's #1 classifieds marketplace, eBay-family, with no public API. This Actor runs a search-term search, walks every result page, and pulls each listing's title, price (CAD, or a placeholder for service ads with no fixed price), location, image, and URL out of the page's embedded Apollo/NEXT_DATA JSON payload — not scraped HTML tags. Search as many terms as you like in one run — results are merged and deduped by listing ID across pages and terms.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotation — curl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Resale arbitrage — track underpriced secondhand listings by search term across Canada.
  • Market research — benchmark asking prices for a product category over time.
  • Lead generation — build a directory of active listings for a keyword niche.
  • Price-drop alerts — diff successive runs to catch reductions on watched searches.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchTermsarrayyes['laptop', 'bicycle']One or more search terms, e.g. ["laptop", "bicycle"]. The Actor runs one search per entry and merges the…
maxItemsintegerno5Hard cap on dataset rows across all search terms combined.
maxPagesPerTermintegerno3Safety cap on pages fetched per search term (40 listings/page on Kijiji), regardless of max results.
proxyConfigurationobjectno{'useApifyProxy': True, 'apifyProxyGroups': [], 'apifyProxyCountry': 'CA'}Apify Proxy spec. No anti-bot signature has been observed on Kijiji's search pages, so a datacenter group works — but…

Example input

{
"searchTerms": [
"laptop",
"bicycle"
],
"maxItems": 10,
"maxPagesPerTerm": 2,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [],
"apifyProxyCountry": "CA"
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstringKijiji StandardListing Apollo cache key, id part.
titlestringListing headline.
price_amount['number', 'null']Parsed CAD amount. null for service ads with no fixed price — see price_raw.
price_rawstringHuman-readable price text as rendered, or a fixed placeholder when no amount (always populated).
currencystringAlways CAD.
location['string', 'null']Listing location/area text.
image_url['string', 'null']First image URL from the listing record, when present.
urlstringAbsolute URL to the listing detail page.
search_termstringThe input search term that produced this row.
scraped_atstringISO-8601 UTC timestamp when this row was recorded.

Example output

{
"listing_id": "1731050620",
"title": "Laptops, Gaming Laptop, Official Laptop",
"price_amount": 450.0,
"price_raw": "$450.00",
"currency": "CAD",
"location": "City of Toronto",
"image_url": "https://i.ebayimg.com/...",
"url": "https://www.kijiji.ca/v-laptops/city-of-toronto/apple-macbook-air-m2-with-full-applecare-plus/1743623497",
"search_term": "laptop",
"scraped_at": "2026-09-20T12:00:00.000Z"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.2One-off warm-up charge per run
result$0.0025Per dataset item

Example: 1 000 results at the rates above ≈ $2.70. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

  • v1 supports the national /b-canada/ search-term browse only — province-scoped browse is not implemented.
  • No category-ID browse — free-text search-term browse only.
  • Only list-card fields are scraped — no item-detail-page enrichment (full description, seller profile, phone).
  • Data comes from Kijiji's own embedded Apollo/NEXT_DATA JSON payload, not a published public API.

❓ FAQ

Do I need to log in or provide cookies?

No. Kijiji's search-term browse pages and listing cards are public — the Actor needs no account, cookies, or login.

What happens if a search term has no results?

The run finishes successfully with zero rows for that term and moves to the next one — an empty search is not an error.

Can I search multiple terms in one run?

Yes — add as many entries to searchTerms as you like; results are merged and deduped by listing ID across the whole run.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.