Realtor.ca Scraper - Canada Real Estate, Agents & Leads
Pricing
from $2.20 / 1,000 property scrapeds
Realtor.ca Scraper - Canada Real Estate, Agents & Leads
Scrape Realtor.ca for-sale & for-rent homes across Canada: price, beds/baths, size, address & geo, photos, remarks, MLS#, plus listing agent & brokerage leads. Search by city, map URL or MLS number. New-listing & price-drop monitoring. No login, key or browser.
Pricing
from $2.20 / 1,000 property scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
3
Monthly active users
11 days ago
Last modified
Categories
Share
Realtor.ca Scraper — Canada Real Estate Listings, Agents & Leads
Extract complete Realtor.ca real-estate data for any Canadian city, neighbourhood or map area — the listings and the people behind them. Pull live for-sale and for-rent homes with price, beds/baths, size, lot, address & geo, photos, full remarks, property type and MLS® number, plus the listing agent and brokerage as ready-to-use leads (name, phone, office). Search a whole metro, a custom map box, a point + radius, or look up exact MLS® numbers — and monitor a market for new listings and price drops.
No login, no API key, no browser — fast JSON extraction straight from Realtor.ca's own public listing data path.
Why this Realtor.ca scraper?
Realtor.ca (operated by CREA) is the national real-estate portal of Canada. Most scrapers return a thin listing grid and stop. This actor ships the richest record in the category and turns every listing into a lead:
| Data | Typical scrapers | This actor |
|---|---|---|
| Price, beds, baths, size, property type, MLS# | ✅ | ✅ |
| Full address, postal code, community, neighbourhood, lat/long | partial | ✅ |
| For sale and for rent | partial | ✅ |
| Ownership type, building type, stories, age, lot size & frontage | ❌ | ✅ |
| Parking, nearby amenities, landscape features | ❌ | ✅ |
| Full public remarks / description | partial | ✅ |
| All listing photos (high-res) | partial | ✅ |
| Listing agent: name, phone, cell, profile | ❌ | ✅ |
| Brokerage: name, phone, fax, office address, website | ❌ | ✅ |
| Deduplicated agent-lead list with active-listing count & lead score | ❌ | ✅ |
| Listed date, time-on-market, price-change date | ❌ | ✅ |
| New-listing & price-drop monitoring | ❌ | ✅ |
| Whole-metro coverage past the 500-result cap (auto map tiling) | ❌ | ✅ |
Use cases
- Real-estate lead generation — every listing carries the listing agent and brokerage with phone numbers and office details. Run
Agentsmode to get a clean, deduplicated agent/brokerage prospect list per market, ranked by a 0-100 lead score and active-listing volume. - Investing & market analysis — pull active inventory or rentals for a city, filter by price, beds and property type, and compare $/listing, rent levels and days-on-market across neighbourhoods.
- Pricing & inventory intelligence — track active counts, new listings, price cuts and rent trends for any Canadian metro over time.
- New-listing & price-drop alerts — run in monitoring mode on a schedule to capture only listings that are new or whose price/status changed since the last run.
- Proptech, CRM & valuation models — feed clean, structured Canadian listings, geo and agent data straight into your own models, dashboards or CRM.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the Realtor.ca Scraper, type one or more cities (e.g.
Toronto,Vancouver,Calgary), pick For sale or For rent, and click Start. - Watch results stream into the dataset table.
- Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.
Input
{"mode": "properties","transactionType": "sale","searchCities": ["Toronto", "Calgary"],"propertyType": "residential","priceMin": 500000,"priceMax": 1200000,"bedsMin": 3,"sort": "newest","subdivideLargeAreas": true,"maxResults": 500}
- mode —
properties(one record per listing, agent embedded) oragents(deduplicated agent/brokerage leads). - transactionType —
sale,rent, orall. - searchCities — Canadian cities; 55+ major metros are built in (Toronto, Vancouver, Calgary, Edmonton, Ottawa, Montreal, Halifax, Winnipeg, Quebec City and many more).
- startUrls — any realtor.ca map URL: search your area on Realtor.ca, copy the
…/map#…URL, and the actor reads the bounding box from it (works for any town or neighbourhood). - boundingBoxes — explicit
latMin,lngMin,latMax,lngMaxrectangles. - centerPoints — a
lat,lng,radiusKmcatchment around a point. - mlsNumbers — look up exact listings by MLS® number (e.g.
A2321763). - propertyType / priceMin / priceMax / bedsMin / bathsMin / sort — listing filters.
- enrichDetails (default false) — fetch each listing's full detail record (complete remarks + extra fields).
- subdivideLargeAreas / maxSubdivisionDepth — Realtor.ca caps any query at 500 results; the actor auto-splits busy areas into map tiles for full coverage.
- maxResults / maxResultsPerArea — global and per-area caps.
- monitorMode (default false) — emit ONLY new or changed (price/status) listings vs. the previous run; pairs with Schedules.
Output
One record per property (agent & brokerage embedded):
{"id": "29913854","mlsNumber": "A2321763","url": "https://www.realtor.ca/real-estate/29913854/487-arlington-drive-se-calgary-acadia","transactionType": "For sale","price": 739900,"priceFormatted": "$739,900","propertyType": "Single Family","ownershipType": "Freehold","address": "487 Arlington Drive SE, Calgary, Alberta T2H1S4","city": "Calgary","province": "Alberta","postalCode": "T2H1S4","latitude": 50.975628,"longitude": -114.057285,"bedrooms": 4,"bedroomsRaw": "2 + 2","bathroomsTotal": 3,"sizeInterior": "1525 sqft","lotSize": "7480 sqft","parkingTotal": 4,"amenitiesNearby": "Playground, Schools, Shopping","status": "Active","timeOnRealtor": "25 min ago","listedDate": "2026-06-17T02:02:23.640Z","photoCount": 32,"primaryPhoto": "https://cdn.realtor.ca/listings/.../highres/...jpg","listingAgentName": "Brandon Cabrera","listingAgentPhone": "(587) 577-3627","brokerageName": "CIR Realty","brokeragePhone": "(403) 271-0600","agents": [{"agentId": 2256996,"name": "Brandon Cabrera","position": "Associate","phone": "(587) 577-3627","profileUrl": "https://www.realtor.ca/agent/2256996/brandon-cabrera-...","brokerage": {"name": "CIR Realty","phone": "(403) 271-0600","fax": "(403) 271-5909","address": "130, 703 - 64 AVENUE SE, CALGARY, Alberta T2H2C3","profileUrl": "https://www.realtor.ca/office/firm/54464/cir-realty-..."}}],"scrapedAt": "2026-06-17T12:00:00.000Z"}
In agents mode each record is a deduplicated agent/brokerage lead with activeListings, cities, sampleMls and a 0-100 leadScore. In monitoring mode each listing also carries changeType (new / price_drop / price_increase / status_change) and previousPrice.
Pricing — pay per result, no start or subscription fee
You pay only for what you pull:
| Event | Charged | Price |
|---|---|---|
| Property scraped | Every listing written to the dataset (full record + agent/brokerage). | $0.004 |
| Property detail enriched | Once per listing whose full detail record is fetched (enrichDetails on). | $0.005 |
| Agent lead scraped | Each unique agent/brokerage lead emitted in agents mode. | $0.008 |
- Listings run → $0.004 / property (grid record already includes the agent & brokerage).
- Full-detail run → $0.009 / property (listing + enrichment).
- Agent-lead run → $0.008 / unique agent.
Example: 1,000 listings = $4.00; 500 deduplicated agent leads = $4.00. Apify platform compute & proxy usage is billed separately by Apify.
Automate & schedule
Run this actor on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it hourly/daily to monitor a market for new listings and price drops.
- Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/realtor-ca-scraper').call({mode: 'properties',transactionType: 'sale',searchCities: ['Toronto'],bedsMin: 3,monitorMode: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} Realtor.ca listings`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new listings or agent leads straight into your CRM.
- Slack — get notified when a monitored market gets new listings or price cuts.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find 3-bed houses under $900k in Calgary and list the agents" and let it run this scraper for you.
Agent-ready: autonomous payments (x402 & Skyfire)
This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:
- x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
- Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.
Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.
More scrapers from scrapesage
Build a complete property & local-market intelligence stack:
- Redfin Scraper — US listings, sold comps, Redfin Estimate & agent leads.
- Rightmove Scraper — UK for-sale & to-rent properties with agent leads.
- Rent.com Scraper — US apartment & rental listings with property-management leads.
- Property Finder Scraper — UAE/GCC real estate, off-plan projects & agent leads.
- FastExpert Scraper — US real-estate agent leads, stats & reviews.
- Craigslist Scraper — FSBO housing, real estate & classifieds with phone/email leads.
- Houzz Scraper — home-improvement pros, contacts and reviews.
Tips
- Whole-metro coverage: Realtor.ca returns at most 500 results per query. Keep
subdivideLargeAreason (default) so the actor auto-tiles busy cities — raisemaxSubdivisionDepthfor exhaustive coverage of a large market. - Any area, any town: not in the built-in city list? Open realtor.ca/map, search your area, and paste the
…/map#…URL intostartUrls— the bounding box is read straight from the URL. - Agent prospecting: switch
modetoagentsfor a deduplicated agent/brokerage lead list with phone, office and a lead score, instead of one row per listing. - Recurring monitoring: combine Schedules with
monitorModeto track only new listings and price drops — the actor's own "seen" memory is separate from the Apify scheduler, so they work together cleanly. - Proxies: keep the default Canadian residential proxy — Realtor.ca's edge (Imperva Incapsula) rate-blocks datacenter and single IPs, so residential is required (and is the default). A fully blocked run fails loudly instead of returning an empty dataset.
FAQ
How do I scrape Realtor.ca for a specific city? Type the city name into searchCities (Toronto, Vancouver, Calgary, …). For a town or neighbourhood that isn't built in, paste a realtor.ca map URL into startUrls, or give a bounding box / center point.
Can I get rentals? Yes — set transactionType to rent (or all for both). Price filters apply to monthly rent for rentals.
Does it include the listing agent's contact? Yes — every listing carries the listing agent (name, phone, cell, profile link) and the brokerage (name, phone, fax, office address). Run agents mode for a deduplicated agent-lead list.
Why is there a 500-result cap per area? That's Realtor.ca's own per-query limit. The actor works around it by automatically splitting busy areas into smaller map tiles — keep subdivideLargeAreas on.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
How do I monitor new listings automatically? Turn on monitorMode and create a Schedule. Each run emits only listings that are new or changed since the last run, tagged with changeType.
Is scraping Realtor.ca legal? This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws and Realtor.ca's terms.
A field is null — why? Some listings genuinely don't publish a lot size, agent cell or amenity list. Fields are null only when the data doesn't exist, not because the scraper skipped them.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.