Realtor.ca Listings Scraper
Pricing
Pay per event
Realtor.ca Listings Scraper
Search Realtor.ca, Canada's national real-estate listing site from CREA, by city or bounding box and get normalized listing rows: price, address, beds, baths, and agent or brokerage contact details, with photos, for investment and lead-gen pipelines.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Realtor.ca Listings Scraper
$3.20 / 1,000 results — pay only for results, no credit card to try.
Normalized Canadian residential listings from Realtor.ca, CREA's national listing site — price, address, beds/baths, agent and brokerage contact, and photos, ready for a spreadsheet or a pipeline, not a scroll-and-read map search.
🎯 What this scrapes
Give it a curated Canadian city or an explicit bounding box, plus a
transaction type (sale or rent), and it returns one normalized record per
listing: MLS number, price, street address, latitude/longitude, property
type, beds/baths, interior size, amenities, agent name and
phone, brokerage name and address, photo URLs, and the listing's own
detail-page URL — deduplicated by listing ID across every page fetched in
the run. Canada's #1 residential portal already draws serious scraping
demand — the category's current leader alone runs over 16,000 times every
30 days — and this Actor targets the same api2.realtor.ca search
endpoint the site's own map search calls.
🔥 Features
- Curated 10-city convenience input (
Toronto,Vancouver,Montreal, and more) or an explicit bounding box for precise areas. - Sale and rent transaction types in one Actor.
- Price parsed from the listing's own numeric field, not scraped off formatted display text — with a formatted-text fallback if the numeric field is ever missing.
- Agent name, phone, and brokerage name/address normalized per row.
- Deduplicated by listing ID across pages within a run.
- English and French response modes (
cultureId).
💡 Use cases
- Investment deal screening — pull normalized for-sale listings across any curated city or bounding box, with price/beds/baths ready for comparables analysis.
- Rental market research — switch transaction type to rent to track asking rents across a city or micro-area.
- Agent/brokerage lead-gen — collect agent name, phone, and brokerage contact per listing without visiting each detail page by hand.
- Cross-city market monitoring — run the curated city list on a schedule to track new listings and price movement over time.
⚙️ How to use it
- Click Try for free.
- Set
searchAreato{"city": "Toronto"}(or any curated city), or pass an explicit{"latitudeMax","latitudeMin","longitudeMax","longitudeMin"}bounding box. - Pick
transactionType(saleorrent) andmaxResults. - Run. Results land in the default dataset — export to JSON or CSV.
📥 Input
| Field | Type | Default | Description |
|---|---|---|---|
searchArea | object | {"city": "Toronto"} | Either {"city": "<curated city>"} or an explicit bounding box. Exactly one form |
transactionType | string | "sale" | sale or rent |
cultureId | string | "1" | 1 = English, 2 = French |
maxResults | integer | 48 | Cap on rows returned for this run (server page size 12, server max 600) |
proxyConfiguration | object | {"useApifyProxy": true} | Apify Proxy configuration |
{"searchArea": {"city": "Toronto"},"transactionType": "sale","cultureId": "1","maxResults": 48,"proxyConfiguration": {"useApifyProxy": true}}
Curated cities in v1: Toronto, Vancouver, Montreal, Calgary, Edmonton, Ottawa, Winnipeg, Quebec City, Halifax, Victoria. Need somewhere else? Pass an explicit bounding box instead.
📤 Output
One row per listing, deduplicated by id:
{"id": "30320779","mlsNumber": "C13821958","price": 699000.0,"currency": "CAD","transactionType": "sale","streetAddress": "3703 - 35 MARINER TERRACE|Toronto (Waterfront Communities), Ontario M5V3V9","latitude": 43.6398435,"longitude": -79.3920963,"propertyType": "Single Family","bedrooms": "1 + 1","bathroomTotal": 1,"sizeInterior": "65.0316 m2","storiesTotal": "","amenities": ["Security/Concierge", "Exercise Centre", "Visitor Parking", "Storage - Locker"],"floorAreaMeasurements": ["700+ sqft"],"agentName": "ROY WANG","agentPhone": "905-909-0101","brokerageName": "BAY STREET GROUP INC.","brokerageAddress": "8300 WOODBINE AVE STE 500|MARKHAM, Ontario L3R9Y7","photoUrls": ["https://cdn.realtor.ca/listings/TS639258083800500000/reb82/highres/8/c13821958_1.jpg"],"listingDetailUrl": "https://www.realtor.ca/real-estate/30320779/3703-35-mariner-terrace-toronto-waterfront-communities-waterfront-communities-c1","searchCity": "Toronto","page": 1,"scrapedAt": "2026-09-24T00:00:00Z"}
💰 Pricing
| Event | Price |
|---|---|
| Actor start | $0.20 |
| Result row emitted | $0.003 |
Pay-per-event: 1,000 listings = $3.20 per run ($0.20 start + 1000 x $0.003). No data → no charge (only the small actor-start warm-up fee).
🚧 Limitations
- v1 covers one search (one city or bounding box, one transaction type) per run, capped at the server's own 600-result ceiling.
- Only residential listings — commercial and land property groups are out of scope for v1.
- Listing-detail-page-only data (full photo galleries, open-house schedules, tax history, school ratings) isn't part of this search payload and isn't returned.
- No agent email and no listing description text: Realtor.ca's search results carry neither (emails are contact-form references, remarks are blank), so we don't emit empty columns for them.
- Curated city list covers 10 major Canadian cities; anywhere else needs an explicit bounding box.
❓ FAQ
Do I need a Realtor.ca account or API key? No. This Actor reads Realtor.ca's own publicly listed search-result data — no login, no API key.
Can I search a custom area instead of a city?
Yes — pass an explicit bounding box (latitudeMax/latitudeMin/
longitudeMax/longitudeMin) instead of a city name.
What happens if my search matches nothing? The run finishes successfully with zero rows and a status message naming what was searched — no charge beyond the small actor-start fee.
💬 Your feedback
Found a field that's off, or a city that needs adding to the curated list? Open an issue via the Actor's Apify Store page or reach out at apify.com/DevilScrapes — we read every report.