Kijiji Property Scraper
Pricing
from $1.32 / 1,000 listing searches
Kijiji Property Scraper
Scrape Kijiji real estate across Canada: apartments, basement suites, rooms, houses and land, for rent or for sale. Price, beds, baths, sqft, utilities, move-in date and whether an owner or an agent posted it.
Pricing
from $1.32 / 1,000 listing searches
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Kijiji Property Scraper — Canadian Rentals & Real Estate Data 🍁
🍁 Around 22,000 of Kijiji's 48,000 long-term rentals are posted by the owner, not a management company
Every row tells you which is which — plus rent, bedrooms, bathrooms, square feet, move-in date and what the rent covers
🔎 What is the Kijiji Property Scraper — and when should you use it?
The Kijiji Property Scraper turns any Kijiji real-estate search in Canada into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: Canadian rentals and homes for sale with rent or asking price, bedrooms (dens counted as a half), bathrooms, square feet and unit type. Rows also carry the lease term, move-in date, pet and smoking rules, which utilities the rent covers, amenities, accessibility features, city, neighbourhood, coordinates and photos. Every row states whether an owner or a professional posted the ad, which is the half of the Canadian rental market the brokerage portals never carry. A detail pass adds the untruncated ad text, the view counter and the poster's profile.
Use something else when: you need brokerage data rather than classifieds. Use Realtor.ca Property Scraper for Canadian MLS listings with brokerage detail and market KPIs. Use Centris.ca Property Scraper for Quebec brokerage listings and MLS data. This actor covers Kijiji's Canadian real-estate section only — no sold history and no listing-agent data.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/kijiji-property-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want Canadian property listings from Kijiji, split by who posted them using the Apify Actor `sian.agency/kijiji-property-scraper`.Use it when I need: Canadian rentals and homes for sale with rent or asking price, bedrooms (dens counted as a half), bathrooms, square feet and unit type. Rows also carry the lease term, move-in date, pet and smoking rules, which utilities the rent covers, amenities, accessibility features, city, neighbourhood, coordinates and photos. Every row states whether an owner or a professional posted the ad, which is the half of the Canadian rental market the brokerage portals never carry. A detail pass adds the untruncated ad text, the view counter and the poster's profile.Don't use it when: you need brokerage data rather than classifieds — use realtor-ca-property-scraper or centris-ca-property-scraper instead.How to call it: pick an `operation` — `search` sweeps a Kijiji search, `detail` reads named ads. For a search, either paste addresses into `searchUrls` or build one with `category` and `location`. Categories are 37 long-term rentals, 36 rooms, 35 houses for sale, 643 condos, 641 land, 42 short-term and 40 commercial; location 0 is all of Canada. Narrow with `keywords`, `listedBy` (`owner` or `professional`), `bedrooms`, `minPrice`/`maxPrice` and `sortBy`. Cap the run with `maxItems`, and switch on `enrichWithDetails` for the full ad text, the view count and the poster.Start with this input:{"operation": "search","category": "37","location": "1700273","listedBy": "owner","maxItems": 100}Ask me which Canadian city or province, and whether you want rentals, rooms or property for sale, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Pull every two-bedroom rental in Toronto posted by an owner under $2,500 and rank them by price per square foot.
- Watch Calgary rentals every morning and tell me which ads are new since yesterday.
- Compare average asking rent for a one-bedroom across Vancouver, Montreal and Ottawa, split by owner-posted versus agency-posted.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/kijiji-property-scraper.md.
📋 Overview
Kijiji is where Canadian landlords post when they do not want an agent. That is a large slice of the market and it does not appear on the brokerage portals. Twenty-four of the twenty-five Kijiji Actors on the Store scrape cars, sofas and apartments into one shapeless row.
What you get instead:
- ✅ Owner or professional, stated on every row: Kijiji asks posters to declare it. Around 22,000 of 48,000 long-term rentals say owner. You get
listedByand a plainisPrivateLandlordflag, filterable before the run or after it. - 🏘️ 63 typed fields, not a raw attribute dump: bedrooms with dens split out, bathrooms at the half, square feet, unit type, lease term, move-in date, pet and smoking rules, utilities, amenities, accessibility.
- 🇨🇦 Every branch of Kijiji real estate: long-term rentals, short-term rentals, rooms and roommates, storage and parking, commercial space, houses, condos, land. Roughly 243,000 live ads.
- ⚜️ English and French: Québec is served under
/b-immobilier/addresses with the same ids and the same data. A Montréal sweep returns the same columns as a Toronto one. - 💰 $1.50 per 1,000 listings, dropping to $1.32 at the deepest volume tier. Four of the six priced rivals charge more, one of them more than four times as much.
- 🔗 Paste the search you already built: set up any filter combination on kijiji.ca, copy the address, and the site resolves it — including facets added after this Actor shipped.
✨ Features
- 🔍 Two ways in: paste Kijiji search addresses, or fill in category, place, keyword, price band and posted-by.
- 👤 Private-landlord filter: narrow the run to owner-posted ads before a single row is billed.
- 🛏️ Real bedroom and bathroom numbers: Kijiji sends bathrooms multiplied by ten and dens as halves. Both arrive fixed.
- 🔌 Utilities and amenities as clean lists: which of hydro, heat, water, cable and internet the rent covers, and what the building has.
- 📅 Move-in dates and lease terms: the two fields a renter search actually turns on.
- 🌐 Coordinates and neighbourhood on every ad: map it, cluster it, or join it to your own geography.
- 🔬 Optional depth pass: opens each ad for the untruncated text, the view counter and the poster's profile.
- 📄 Read named ads directly: paste ad addresses or bare numeric ids to re-check listings you already track.
- ⚜️ Bilingual addresses:
/b-real-estate/and/b-immobilier/both work and return the same rows. - 📊 HTML run report: every run writes a summary with the listings, the failures and exactly what you were charged.
🎬 Quick Start
Pick a category and a place, press Start, and the first hundred listings land in your dataset about fifteen seconds later. Nothing to install and no key to configure. When you want a specific slice, build the search on kijiji.ca and paste the address instead.
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~kijiji-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"operation":"search","category":"37","location":"1700273","listedBy":"owner","maxItems":100}'
🚀 Getting Started (3 Simple Steps)
Step 1: Choose what to read
Pick a 🗂️ Property category and a 📍 Province or metro. Or open kijiji.ca, filter the search however you like, and paste that address into 🌐 Kijiji search URLs.
Step 2: Narrow it, or do not
👤 Posted by, 🛏️ Bedrooms, a price band and 🔢 Maximum results are all optional. Leave them alone and you get the section newest-first.
Step 3: Press Start
Results arrive in the dataset as they are found. Export to JSON, CSV or Excel, or read them over the API.
That's it! In under a minute, you'll have:
- A structured table of live Canadian listings with prices and property attributes
- The owner-versus-professional split for every one of them
- Map coordinates, photos and a link back to each ad
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
operation | string | No | search (default) or detail |
searchUrls | array | No | Kijiji search addresses, pasted as-is |
keywords | string | No | Words that must appear in the ad |
category | string | No | Kijiji real-estate category id — 37 is long-term rentals |
location | string | No | Province or metro id — 0 is all of Canada |
listedBy | string | No | any, owner or professional |
bedrooms | string | No | any, 0 for a bachelor, up to 5 |
minPrice / maxPrice | integer | No | Price band in Canadian dollars, 0 for no bound |
sortBy | string | No | dateDesc, dateAsc, priceAsc or priceDesc |
maxItems | integer | No | Cap per search address, up to 5000 |
enrichWithDetails | boolean | No | Open each ad for the full record |
listingUrls | array | No | Ad addresses or bare numeric ids, for detail |
Example — owner-posted two-bedrooms in Toronto under $2,500:
{"operation": "search","category": "37","location": "1700273","listedBy": "owner","bedrooms": "2","maxPrice": 2500,"maxItems": 500}
Example — paste the searches you already use:
{"operation": "search","searchUrls": ["https://www.kijiji.ca/b-apartments-condos/city-of-toronto/c37l1700273?for-rent-by=ownr","https://www.kijiji.ca/b-immobilier/grand-montreal/c37l80002"],"maxItems": 1000}
Example — read specific ads:
{"operation": "detail","listingUrls": ["1742889268", "https://www.kijiji.ca/v-apartments-condos/city-of-toronto/main-floor/1742579694"]}
📤 Output
Every run writes flat rows to the Apify dataset — 63 fields, all nullable, ready for a spreadsheet or a database. The most useful ones:
| Field | Type | Description |
|---|---|---|
listingTitle | string | The headline the poster wrote |
price | number | Monthly rent or asking price in Canadian dollars |
dealType | string | rent or sale, from the ad's own category |
listedBy | string | owner, professional or agent, as declared on the ad |
isPrivateLandlord | boolean | true when an owner posted it |
bedrooms | number | Dens count as a half — 1.5 is one bedroom plus a den |
bathrooms | number | Whole and half bathrooms |
areaSqFt | number | Floor area in square feet |
propertyType | string | Apartment, Basement apartment, Condo, House, Townhouse, Duplex / triplex |
availableFrom | string | The move-in date the poster gave |
utilitiesIncluded | array | Which of Hydro, Heat, Water, Cable / TV, Internet the rent covers |
amenities | array | Laundry, dishwasher, air conditioning, balcony, yard, gym, pool, elevator and more |
petsAllowed | string | yes, no or limited |
city / neighbourhood | string | Where Kijiji files the ad |
latitude / longitude | number | Map coordinates |
views | number | How many times the ad has been opened (depth pass) |
posterName | string | The name on the account (depth pass) |
imageUrls | array | Photos — thumbnails on a search row, full resolution on a depth row |
Example row:
{"itemId": "1742510102","listingTitle": "2Br 1 Bath, House for Rent, Parking & Laundry, Util Included","url": "https://www.kijiji.ca/v-apartments-condos/city-of-toronto/2br-1-bath-house-for-rent/1742510102","price": 2850,"priceText": "$2,850","currency": "CAD","dealType": "rent","listedBy": "owner","isPrivateLandlord": true,"propertyType": "House","bedrooms": 2,"bathrooms": 1,"areaSqFt": 972,"petsAllowed": "yes","smokingPermitted": "no","parkingSpots": 1,"agreementType": "1 year","availableFrom": "2026-10-01T00:00:00Z","utilitiesIncluded": ["Hydro", "Heat", "Water"],"amenities": ["Yard", "Laundry in building", "Dishwasher", "Fridge / freezer", "Air conditioning"],"city": "East York","neighbourhood": "O'Connor-Parkview","latitude": 43.70719,"longitude": -79.31047,"categoryName": "Long Term Rentals","postedAt": "2026-08-24T23:36:44.000Z","imageCount": 13}
💼 Use Cases & Examples
1. Private-Landlord Rental Sourcing
Relocation services and tenant-placement agencies need the inventory that never reaches a brokerage portal.
Input: category 37, a metro, 👤 Posted by set to owner
Output: owner-posted rentals with rent, rooms, move-in date and what the rent includes
Use: build a shortlist for a client in one pass instead of refreshing the site all week
2. Rent Benchmarking by Bedroom Count
Property managers and analysts setting a price need the real spread, not a headline average.
Input: a city, no price bound, 🔢 Maximum results at 1,000 Output: asking rent against bedrooms, bathrooms, square feet and utilities on every row Use: price a unit against the market it actually competes in, and see how much of the gap is bundled utilities
3. New-Listing Monitoring
Agents and investors who want to be first need to know what appeared overnight.
Input: a saved search, ↕️ Order set to newest first, run on a schedule Output: the posted timestamp on every row, so a diff against yesterday is trivial Use: a daily watch on one neighbourhood costs pennies and lands before the market wakes up
4. Basement Suites, Rooms and Shared Housing
Student-housing operators and roommate platforms need a market that barely exists anywhere else.
Input: category 36 for rooms and roommates, or unit type filtering on basement-apartment
Output: 11,000 room ads nationally, plus basement suites named as their own unit type
Use: the only reliable read on the shared-housing end of the Canadian market
5. Investor Deal Screening
Buyers hunting owner-sold property want the ads where the negotiating room is.
Input: category 35 or 643, a region, a price band
Output: asking price against floor area and lot size, with owner or brokerage stated
Use: flag private sales in a target region without opening 200 tabs
6. Property-Manager and Agency Lead Lists
Suppliers selling into property management need to know who is actually active.
Input: commercial or long-term rentals in a region, 🔬 depth on Output: poster name, account type and how many ads they currently carry Use: rank a region's active managers by live inventory instead of guessing
7. Cross-Border and Bilingual Market Research
Analysts covering Canada need Québec on the same axes as everywhere else.
Input: /b-immobilier/ addresses, or location 9001 for Québec
Output: the same 63 columns, because the fields are machine keys rather than display labels
Use: one dataset that covers both official languages without a translation step
🔗 Integration Examples
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/kijiji-property-scraper').call({operation: 'search',category: '37',location: '1700273',listedBy: 'owner',maxItems: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((i) => i.bedrooms >= 2).length, 'two-bed-plus owner rentals');
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/kijiji-property-scraper').call(run_input={'operation': 'search','category': '37','location': '1700199','maxPrice': 2000,'maxItems': 500,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['price'], item['bedrooms'], item['city'], item['listedBy'])
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~kijiji-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"operation":"search","category":"36","location":"1700272","maxItems":300}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: a daily schedule, or a webhook from your own system
- HTTP Request: call the Actor with your saved search
- Process: filter on
isPrivateLandlord,bedroomsorprice - Action: append new ads to a sheet, post them to Slack, or alert on a price drop
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 listings per run — every field, every mode, same data
- No credit card required
- Enough to see the columns and decide
PAID Tier (Production Ready)
- Unlimited listings per run, up to Kijiji's own 5,000-per-search ceiling
- 46 listings per page read, and a page read takes about a second
- Pay per listing returned: a search that matched nothing, an ad that was taken down, and any address we could not read all cost you nothing
💰 $1.50 per 1,000 listings at the entry tier, falling to $1.32 at the deepest volume tier. Of the six priced Kijiji Actors on the Store, four charge more — one charges $6.50.
❓ Frequently Asked Questions
Q: How many listings can I get? A: FREE tier gives 25 per run. PAID is unlimited per run, and one search reaches about 5,000 listings before Kijiji stops paging. Past that, split the search by city or price band.
Q: Does it work on French Kijiji addresses?
A: Yes. Québec is served under /b-immobilier/ with the same category and location ids, and the same listings come back. Paste either form.
Q: Can I get a landlord's phone number? A: Only what the ad itself shows. Kijiji routes contact through its own inbox and masks most digits, so a depth row returns the masked line when there is one. There is no email on the platform to return.
Q: Why is the price blank on some rows?
A: The poster chose "Please Contact" instead of entering a number — about 7% of the board. Those rows carry the words in priceText and nothing in price, so a numeric filter drops them.
Q: Does it return sold or rented prices? A: No. Ads come down when they go and Kijiji publishes no archive, so you get live asking prices. Build history by running on a schedule and diffing your own snapshots.
Q: Do I need a proxy or an account? A: Neither. These are the pages any visitor sees, so there is no proxy line on your bill and nothing to log in to.
Q: What output formats are available? A: JSON, CSV, Excel and XML, straight from the Apify dataset or over the API.
Q: Is this legal? A: We read only what posters chose to publish. See the note below on personal data.
🐛 Troubleshooting
The run returned no listings
- Check the address opens in a browser and shows ads. An empty search here is an empty search there.
- A bedroom filter on the for-sale categories narrows things to almost nothing — sale ads rarely carry a bedroom count.
- A price band drops every "Please Contact" ad, which is roughly 7% of the board.
I pasted an address and got "no usable search addresses"
- A Kijiji search address ends in the category and location code, like
.../c37l1700273. An ad address (/v-...) belongs in 📄 Ad addresses or IDs instead.
Fewer rows than I asked for
- On the FREE tier every run stops at 25 rows.
- Kijiji stops paging a single search at about 5,000 results, whatever tool is asking.
A specific ad came back as an error
- It was taken down between the search and the read. Re-run the search to pick up what is live now.
The run is slower than expected
- 🔬 depth opens every ad on its own page, so a 1,000-ad sweep becomes 1,001 page reads. Turn it off unless you need the full text or the poster.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
Kijiji is a trademark of its respective owner. This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Kijiji.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools