Realtor.ca API Canada | Search | Page Details | Agents Scraper
Pricing
from $1.00 / 1,000 listing records
Realtor.ca API Canada | Search | Page Details | Agents Scraper
Canadian real estate agents and Realtor.ca listings in one actor. Get 89,000+ agents by province, city or brokerage with phone, brokerage and website, and email on 10,800+ when you turn emails on. Or pull sale, sold and rental listings from any Realtor.ca search link. JSON or CSV.
Pricing
from $1.00 / 1,000 listing records
Rating
5.0
(10)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
8
Bookmarked
264
Total users
11
Monthly active users
2.1 days
Issues response
3 days ago
Last modified
Categories
Features
Share
Realtor.ca Scraper - Listings + Agents (Phone & Email)
Pull Canadian real-estate agent contacts instantly for 89,000+ Realtor.ca agents in all 10 provinces, Yukon and the Northwest Territories - phone, brokerage, website, areas served, and email on 10,800+ agents - or live-scrape listings anywhere in Canada. No login, no setup, no per-search cap.
Most Realtor.ca actors on Apify return property listings. This one also hands you the agents directly, with email on 10,800+ of them.
⚡ Instant Realtor.ca Agents - 89,000+ agents, all of Canada
The fastest way to get Realtor.ca agent contacts: skip scraping and get 89,000+ agents straight away - results in seconds, uncapped.
How to use it: in the ⚡ Instant Agents section of the input, set a Province (2-letter code, e.g. ON, BC, AB) - optionally narrow by City or Brokerage, or filter to only agents with a phone, email or website on file - and run. Leave the live-scraping Start URLs empty. You're billed per agent delivered, plus per email when you turn emails on (see Pricing).
Each agent includes: name, phone, brokerage (name + address), position (Salesperson / Broker), personal website, areas served, board, photo, and the Realtor.ca profile URL. Turn on dbHasEmail or enrichEmails to add the email where an agent has one.
Coverage: 89,000+ agents - 99.6% with a phone number, 50% with a personal website, 100% with a brokerage, 10,800+ with an email (about 12%). Covers all 1,657 Canadian postal-code areas (FSAs, the first 3 characters of a postal code). Top provinces: Ontario (46,000+), British Columbia (13,500+), Quebec (12,600+), Alberta (9,900+), plus every other province down to the Northwest Territories. Emails by province: Ontario 3,800+, British Columbia 2,700+, Quebec 1,900+, Alberta 1,400+.
Need a whole province as a clean CSV, or pushed to your CRM via API? Reach out via the Support section below.
Why Use This Scraper?
- ✅ Agent contacts without scraping - 89,000+ agents with phone, 10,800+ with email, results in seconds
- ✅ All 10 provinces, Yukon and the Northwest Territories covered, filterable by province / city / brokerage
- ✅ 99.6% phone coverage — phone is the strongest single lead-gen field
- ✅ Reliable live scraping - no login, no cookies, no setup
- ✅ Live-scrape listings too — search any Realtor.ca map/search URL for property data
- ✅ Emails when you want them - 10,800+ agent emails ready to deliver, billed only per email delivered
- ✅ No login or API key needed - JSON or CSV out
Overview
This actor serves two audiences from one tool: lead-gen teams and brokerages who want Canadian agent contacts without scraping, and analysts and proptech teams who want Realtor.ca listing data.
Instant Agents runs (set a Province) return one flat row per agent, in seconds. Live-scrape runs (a Realtor.ca map/search URL) return property listings with their agents.
Supported Inputs
Instant Agents filters (no URL needed)
| Field | Example | Notes |
|---|---|---|
dbProvince | ON | 2-letter province code - turns on Instant Agents mode |
dbCity | Toronto | optional: agents whose brokerage office is in this city (capitals, accents and dots don't matter, St = Saint; Montreal covers the whole island) |
dbBrokerage | RE/MAX | optional brokerage-name substring |
dbHasPhone | true | only agents with a phone (99.6% do) |
dbHasEmail | true | only agents with an email, and delivers it (billed per email) |
dbHasWebsite | true | only agents with a personal website |
instantDatabase | true | force Instant Agents mode |
Provinces: ON QC BC AB MB SK NS NB NL PE YT NT NU
Live-scrape URL
| URL type | Example |
|---|---|
| Realtor.ca map / search | https://www.realtor.ca/map#ZoomLevel=11&Center=43.65,-79.38&...&TransactionTypeId=2 |
Unsupported inputs
- ❌ Realtor.ca content behind a login (saved searches, messaging)
Use Cases
| Audience | Use case |
|---|---|
| Lead-gen teams / brokerages | Pull thousands of Canadian agent phone contacts instantly by province or city |
| Recruiters | Build brokerage rosters filtered by province, city, or brokerage name |
| Proptech / CRM | Seed a Canadian agent directory with phone + brokerage + website |
| Market analysts | Live-scrape Realtor.ca listings for pricing and inventory data |
| Marketing agencies | Deliver client-ready Canadian real-estate agent lists without writing scrapers |
How It Works

- Choose a mode - Instant Agents (province/city/brokerage filters) for agent contacts, or live scrape (a Realtor.ca map/search URL) for listings
- Instant Agents - matching agents come back in seconds, nothing to set up
- Live scrape - a map or search link returns every listing in that search, with its agent
- Output - one row per agent or listing, JSON or CSV
Input Configuration
Input fields
| Field | Type | Default | Notes |
|---|---|---|---|
dbProvince | string | — | Instant Agents: 2-letter province code |
dbCity | string | — | Instant Agents: brokerage office city, optional |
dbBrokerage | string | — | Instant Agents: brokerage-name contains, optional |
dbHasPhone / dbHasEmail / dbHasWebsite | boolean | false | Instant Agents filters |
instantDatabase | boolean | false | Force Instant Agents mode |
startUrls | array | — | Realtor.ca map/search URLs (live scrape) |
includeListingDetails | boolean | false | Fetch full detail per listing on a live scrape |
enrichEmails | boolean | false | Deliver emails: adds the email to agent rows where one exists, and looks up a contact email for live-scraped listings. Billed per email delivered (see Pricing) |
maxItems | integer | 100 | Cap on delivered rows |
maxConcurrency / minConcurrency / maxRequestRetries | integer | 10 / 1 / 3 | Live-scrape throughput |
proxy | object | Residential | Proxy configuration (live scrape only) |
Common scenarios
1. Instant Agents - every agent in a province
{ "dbProvince": "BC", "maxItems": 1000 }
2. Instant Agents - narrow by city and brokerage
{ "dbProvince": "ON", "dbCity": "Toronto", "dbBrokerage": "RE/MAX", "maxItems": 200 }
3. Live-scrape listings
{"startUrls": [{ "url": "https://www.realtor.ca/map#ZoomLevel=11&Center=45.50,-73.57&LatitudeMax=45.80&LongitudeMax=-73.27&LatitudeMin=45.20&LongitudeMin=-73.87&TransactionTypeId=2&PropertySearchTypeId=0&Currency=CAD" }],"includeListingDetails": false,"maxItems": 200}
Pricing
This actor uses Apify's pay-per-event pricing — you're billed only for what's delivered:
| Event | Price | Charged when |
|---|---|---|
| Agent record | $2.90 / 1k | Per agent delivered |
| Listing record | $1.00 / 1k | Per property listing delivered on a live scrape |
| Contact email | $0.052 / email | Per email delivered, only when dbHasEmail or enrichEmails is on - never charged when there is no email |
| Actor start | $0.01 | Standard per-GB run-start charge |
A run with neither email option on pays only for agents and listings. Example: 1,000 agents with dbHasEmail on cost $2.90 + $52.00 = $54.90.
Instant Agents runs report the total number of matching agents alongside the delivered rows, so you can see how many match your filters before raising maxItems.
Output Overview
- Agent (Instant Agents mode) - a flat agent row: name, phone, brokerage, website, position, areas, photo, profile URL, and the email when you turn emails on.
- Live-scraped listing — a Realtor.ca property listing with its embedded agent.
Free-tier users receive the first 2 Instant Agents records in full as proof of data quality; every record after that has its phone/email masked with an upgrade prompt. Paying users always receive full contact info.
Output Samples
Instant Agents row:
{"agent_id": "1970829","name": "MELISSA JOAN PERRY","first_name": "MELISSA JOAN","last_name": "PERRY","position": "Salesperson","phone": "416-494-7653","website": "http://www.facebook.com/melissaperryhomes","has_website": true,"brokerage_name": "RE/MAX HALLMARK REALTY LTD.","brokerage_address": "685 SHEPPARD AVE E #401 | TORONTO, Ontario M2K1B6","province": "ON","city": "Toronto","profile_url": "https://www.realtor.ca/agent/1970829/melissa-joan-perry-..."}
Key Output Fields
| Group | Fields |
|---|---|
| Identity | agent_id, name, first_name, last_name, position, profile_url, photo_url |
| Contact | phone, phone_area, phone_number, website, has_website, email (when dbHasEmail or enrichEmails is on) |
| Brokerage | brokerage_name, brokerage_id, brokerage_address, brokerage_phone, board |
| Location | province, city (brokerage office city), areas_served, languages |
FAQ
What's the difference between Instant Agents mode and live scraping?
Instant Agents mode (dbProvince/dbCity/dbBrokerage) returns agents in seconds, with nothing to set up. Live scraping (startUrls) returns the current listings in a Realtor.ca search, each with its agent.
Do I get agent email addresses?
Yes, for 10,800+ agents (about 12%). Turn on dbHasEmail to get only agents with an email, or enrichEmails to keep every agent and add the email where there is one. Each delivered email costs $0.052; an agent with no email costs nothing extra.
Do I need a URL for Instant Agents mode?
No — just set a Province (and optionally city/brokerage) and leave startUrls empty.
Which provinces are covered?
All 10 provinces, plus Yukon and the Northwest Territories. Ontario, BC, Quebec and Alberta are the deepest; the territories are naturally sparse.
Do I need an account, cookies or my own proxies?
No. No login, cookies or API key needed, and the default proxy setup works out of the box.
Can I scrape private or login-gated content?
No. The actor only accesses publicly available Realtor.ca data.
JSON or CSV?
Both — export from your Apify dataset in whichever format you need.
Support
Found a bug or want a field added? Open an issue on the actor's Issues tab and we'll take a look.
Additional Services
Need a custom Canadian real-estate feed (full-province CSV, scheduled monitoring, a webhook/Sheets/DB push, or a tailored schema)? Reach out — custom scraping and data-pipeline work is available.
Explore More Scrapers
- Realtor.com Scraper - 500,000+ US agents in seconds
- Redfin Scraper - US agents in seconds (email & phone)
- Zillow Agents & Leads Scraper - 1.2M+ US agents
- Realtor.ca Scraper (rental) — Canadian listings, flat monthly pricing
See the full memo23 actor catalog →
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/realtor-canada-search-cheerio-ppe).
Purpose: Deliver Canadian real-estate agent contacts in seconds (Instant Agents mode) or live-scrape Realtor.ca listings with their agents.
Minimal input:
{ "dbProvince": "BC", "maxItems": 50 }
For live listing scraping instead, pass "startUrls": [{ "url": "https://www.realtor.ca/map#ZoomLevel=11&Center=43.65,-79.38&TransactionTypeId=2&PropertySearchTypeId=0&Currency=CAD" }] and leave the db* fields empty. Optional filters: dbCity, dbBrokerage, dbHasPhone, dbHasEmail, dbHasWebsite, includeListingDetails, monitoringMode, enrichEmails.
Output: one row per agent (Instant Agents) or per listing (live scrape) — agent_id, name, first_name, last_name, position, profile_url, photo_url, phone, phone_area, phone_number, website, has_website, email (when dbHasEmail or enrichEmails is on), brokerage_name, brokerage_id, brokerage_address, brokerage_phone, board, province, city, areas_served, languages.
Behaviors an agent should know:
- Two modes: Instant Agents (set
dbProvince, leavestartUrlsempty) returns agents in seconds; live scrape (startUrlsmap/search URL) returns listings with their agents. Setting a province turns on Instant Agents. maxItemscaps delivered rows (default 100); Instant Agents runs report the total matching count so you can sizemaxItemsbefore a full pull.monitoringMode(live scrape) delivers only listings unseen in a prior run, deduped viamonitoringStoreName; recognised-and-skipped listings bill at $0.20/1k vs $1.00/1k for a delivered listing.- Emails are opt-in:
dbHasEmailreturns only agents with an email and includes it,enrichEmailskeeps every agent and adds the email where one exists. Each delivered email is billed; an agent without one costs nothing extra. - Free-tier accounts get the first 2 Instant Agents records in full, then phone/email masked; paying accounts always get full contact info.
- Billing (pay-per-event): agent record $2.90/1k, listing record $1.00/1k, contact email $0.052/email, plus the $0.01 actor-start charge.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by The Canadian Real Estate Association (CREA), Realtor.ca, or any of their subsidiaries. All trademarks mentioned — including REALTOR® and Realtor.ca — are the property of their respective owners.
The scraper accesses only publicly available Realtor.ca pages and public agent profile data — no authenticated endpoints, paid features, or content behind a login wall. Users are responsible for ensuring their use complies with Realtor.ca's Terms of Use, applicable data-protection law (PIPEDA, GDPR, CCPA, etc.), and any contractual obligations of their own organization.
SEO Keywords
realtor.ca scraper, realtor.ca api, realtor.ca agent scraper, canadian real estate agent list, realtor.ca agent phone numbers, canada real estate leads, real estate agent contacts canada, realtor.ca listings scraper, canadian mls scraper, ontario real estate agents, bc real estate agents, real estate lead generation canada, brokerage roster scraper, realtor.ca bulk export, canada property data, realtor.ca json csv export