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.
Real implementation: src/parser.py (pure __NEXT_DATA__/Apollo cache
extraction, StandardListing:{id} record walking, price-object
dispatch with NonAmountPrice/null service-ad tolerance),
src/scraper.py (curl-cffi fetch with retry/backoff/impersonation
rotation, path-form pagination, run-wide listing_id dedupe, REQ-14
fair-share term budgeting with rollover), and src/main.py (Apify SDK
wiring — charge-order discipline, batch push + PPE charge, zero-rows-is-
SUCCEEDED per REQ-12).
Prefill now exercises 2 search terms and maxPagesPerTerm: 2 (not the
single-term/1-page default originally planned) so cloud QA drives the
path-form pager onto page 2 and REQ-14's fair-share split, not just page
1 — a sibling Actor shipped a page-2 duplicate-rows defect that this
prefill choice is designed to catch before publish.
64 unit tests, including a pagination-disjoint-id-set regression guard
and a filter-fidelity guard against REAL captured Kijiji fixtures
(tests/fixtures/laptop_page1.html, laptop_page2.html,
bicycle_page1.html).
0.0.0 — 2026-09-20
Scaffolded: .actor/ config, input schema stub, README, tests dir.
src/main.py pushes one placeholder dataset row only — real
search-term-browse scraping (Pydantic ActorInput/ResultRow models,
Apollo/__NEXT_DATA__ parsing, path-form pagination) is not implemented
yet. See docs/specs/kijiji-listings-scraper/tasks.md T02-T11.