Realtor.ca Scraper — Canada Real Estate Agent Leads & Phones avatar

Realtor.ca Scraper — Canada Real Estate Agent Leads & Phones

Pricing

from $45.00 / 1,000 enriched listings

Go to Apify Store
Realtor.ca Scraper — Canada Real Estate Agent Leads & Phones

Realtor.ca Scraper — Canada Real Estate Agent Leads & Phones

Realtor.ca scraper for Canadian real estate leads — listing agent phone, office, and brokerage plus full property data (price, beds, baths, taxes, MLS®). Search by city, postal code, MLS® number, or URL. Lead generation ready. No API key, no run-start fee.

Pricing

from $45.00 / 1,000 enriched listings

Rating

0.0

(0)

Developer

Jura Moshkov

Jura Moshkov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Realtor.ca Scraper — Canada Real Estate Agent Leads & Phones

Realtor.ca scraper for Canadian real estate leads. Extract Realtor.ca (MLS®) property listings plus the listing agent's name, phone, office, and brokerage in one enriched row per property, ready for real estate lead generation, agent prospecting, and CRM enrichment across Canada. Search any Canadian city (2,600+ supported), coordinates, postal code, MLS® number, or a Realtor.ca URL.

Three things set this Canada MLS listing scraper apart from generic property scrapers:

  • Agent contact in every row. You get the listing REALTOR®'s name, office phone, cell phone, office, and brokerage attached to each property, not just the property data.
  • You pay only for results. There is no run-start fee. You are charged per successfully enriched property, so a run that returns nothing costs nothing.
  • It is agent-friendly and reliable. It runs as a callable tool through the Apify MCP server so an AI agent can fill the input from the schema alone, and it is built on a stable data API rather than a fragile browser scraper.

This actor turns Realtor.ca into a clean leads database: property data (price, beds, baths, MLS® number, photos, geo) and contactable REALTORS® (phone, office, brokerage) in the same flat export, as CSV, JSON, or Excel.

What is a Realtor.ca scraper?

Realtor.ca is the Canadian Real Estate Association (CREA) national listing site, showing MLS® property listings from every province and territory. A Realtor.ca scraper searches the site the way you would (a place, a postal code, or a specific listing) and returns each matching property as a structured row instead of a web page.

This actor goes one step further than a plain listing scraper. For every property it finds, it also pulls the listing agent's contact details and attaches them to the same row. So the output is not just a map of what is for sale in a city, it is an outreach-ready list of the REALTORS® behind those listings, with their phone, office, and brokerage. That is the difference between a market-research export and a real lead list.

What you get

One flat row per property. Property and agent fields live side by side, so there is nothing to unwrap.

FieldTypeDescription
mlsNumberstringMLS® listing number.
urlstringListing URL on Realtor.ca.
statusstringListing status (e.g. for_sale).
pricenumberListing price.
currencystringCurrency, usually CAD.
bedsnumberBedrooms.
bathsnumberBathrooms.
sqftnumberInterior square footage.
lotSizestringLot size when available.
yearBuiltnumberYear built.
propertyTypestringProperty type (house, condo, etc.).
streetAddress / city / province / postalCodestringAddress parts.
latitude / longitudenumberCoordinates.
condoFeenumberCondo / maintenance fee when available.
propertyTaxnumberAnnual property tax when available.
daysOnMarketnumberDays on market.
photoUrlsarrayListing photo URLs.
listedDatestringListing date (ISO).
agentNamestringListing REALTOR® name.
agentPhonestringAgent office phone.
agentCellPhonestringAgent cell phone.
officeNamestringReal estate office.
brokerNamestringBrokerage name.
agentProfileUrlstringAgent profile URL.
agentEmailstringAgent email when the source exposes it, otherwise null (see the FAQ).
agentEmailMaskedbooleantrue when the email is masked on the free plan.
mode / searchCity / searchPostalCode / sourceUrlstringWhat produced the row.
scrapedAtstringISO timestamp of the scrape.
errorstringnull on success.

Example output row

One property comes back as one flat JSON object:

{
"mode": "citySearch",
"mlsNumber": "W1234567",
"url": "https://www.realtor.ca/real-estate/29916164/130-example-street-toronto",
"status": "for_sale",
"price": 899000,
"currency": "CAD",
"beds": 3,
"baths": 2,
"sqft": 1450,
"propertyType": "House",
"streetAddress": "130 Example Street",
"city": "Toronto",
"province": "Ontario",
"postalCode": "M6K 1X9",
"latitude": 43.6412,
"longitude": -79.4201,
"condoFee": null,
"propertyTax": 4820,
"daysOnMarket": 12,
"photoUrls": ["https://cdn.realtor.ca/listing/.../1.jpg"],
"listedDate": "2026-09-08T00:00:00.000Z",
"agentName": "Jane Doe",
"agentPhone": "+1 416-555-0100",
"agentCellPhone": "+1 416-555-0142",
"officeName": "Example Realty",
"brokerName": "Example Realty Brokerage",
"agentProfileUrl": "https://www.realtor.ca/agent/...",
"agentEmail": null,
"agentEmailMasked": false,
"searchCity": "Toronto, ON",
"searchPostalCode": null,
"sourceUrl": null,
"scrapedAt": "2026-09-20T14:03:11.000Z",
"error": null
}

How do I use it? (input modes)

Pick one of four input modes. If you fill in a field that belongs to a different mode (for example you paste a Realtor.ca URL while "Search by city" is selected), the actor detects it and runs the matching mode instead of failing the run.

ModeUse it toRequires
citySearchDiscover all listings + agents in a city, or by latitude,longitude (main mode)cities
postalSearchDiscover listings + agents by postal code, or a bare FSA like M5VpostalCodes
mlsNumbersEnrich a known list of MLS® numbersmlsNumbers
urlScrape a Realtor.ca search/map URL, or a single listing URLstartUrls

Search by city (main mode). List several cities; each entry can be a city name or exact latitude,longitude:

{
"mode": "citySearch",
"cities": ["Toronto, ON", "Vancouver, BC", "43.65,-79.38"],
"listingStatus": "forSale",
"minPrice": 400000,
"maxPrice": 1200000,
"beds": 2,
"maxResults": 100
}

Search by postal code — a full code like M5V 2T6 or a bare FSA like M5V (1,600+ Canadian FSAs are resolved offline):

{
"mode": "postalSearch",
"postalCodes": ["M5V", "V6B 1A1"],
"listingStatus": "forSale",
"maxResults": 50
}

Enrich known MLS® numbers:

{
"mode": "mlsNumbers",
"mlsNumbers": ["W1234567", "C9876543"],
"maxResults": 2
}

Scrape a Realtor.ca URL — a search/map URL returns every listing in that area, and a single listing URL returns just that property (English /real-estate/ and French /immobilier/ links both work):

{
"mode": "url",
"startUrls": [
"https://www.realtor.ca/map#view=list&Sort=6-D&GeoName=Toronto%2C+ON",
"https://www.realtor.ca/real-estate/29916164/130-example-street-toronto"
],
"listingStatus": "forSale",
"maxResults": 100
}

You can narrow any search with the optional filters: minPrice, maxPrice, beds (minimum bedrooms), baths (minimum bathrooms), and listingStatus (forSale or forRent). maxResults caps how many enriched properties a run returns, and requestDelayMs slows down very large runs.

How do I use it with an AI agent?

This actor is available as a callable tool through the Apify MCP server. Because every input field carries a description, an agent can fill the input straight from the schema and run it with a plain payload:

{ "mode": "citySearch", "cities": ["Calgary, AB"], "maxResults": 20 }

The output is one flat JSON object per property, with the agent contact already attached, so there is no nesting for the agent to unwrap before it can act on a lead.

How much does it cost?

No run-start fee. You are charged only for successfully enriched properties. A property that fails to enrich is not billed.

Apify planPrice per enriched property
Free$0.07
Bronze$0.06
Silver$0.05
Gold$0.045
Platinum$0.04
Diamond$0.04

Free-plan runs are capped at 15 enriched properties and mask the agent email so you can preview the output before upgrading. Agent name, phone, cell, office, brokerage, and all property fields are returned on every plan. Set maxResults to cap how much a run can spend. Upgrade your Apify plan for uncapped runs.

The actor returns publicly available listing data from Realtor.ca, the same information any visitor can see on the public listing pages. It does not log in, access private data, or bypass paywalls.

As with any data tool, you are responsible for how you use the results. Follow Canadian privacy law (PIPEDA) and Canada's Anti-Spam Legislation (CASL) for any outreach, respect Realtor.ca's terms of service and MLS® rules, honour opt-outs, and get the consent your marketing requires. The REALTOR® and MLS® trademarks are owned by CREA; this actor is not affiliated with or endorsed by CREA or Realtor.ca.

Why is it reliable?

It is built on a stable Realtor.ca data API rather than a headless-browser page scraper, so it is not broken by front-end layout changes or anti-bot walls the way page-scraping actors are. There is no run-start fee to waste, results land in the dataset as they are enriched, and the four input modes fall back to whichever field you actually filled in, so a mismatched mode does not fail the run. That combination is what makes it safe to run on a daily schedule or inside an automated agent pipeline.

Use cases

  • Canadian real estate lead generation — build lists of contactable REALTORS® by city, postal code, or area.
  • Agent prospecting and recruiting — reach agents with their phone, office, and brokerage, alongside live listing context.
  • Real estate market research — price, property type, days-on-market, and geo analysis across Canada.
  • CRM and spreadsheet enrichment — push Realtor.ca property and agent data into your sales stack via Apify integrations, or export to CSV / JSON / Excel.

Example searches

  • Cities: Toronto, ON, Vancouver, BC, Calgary, AB, Montreal, QC, Ottawa, ON, Edmonton, AB, Halifax, NS, Winnipeg, MB
  • Coordinates: 43.65,-79.38 (any point in Canada)
  • Postal / FSA: M5V, V6B 1A1, T2P, H3B
  • URLs: a Realtor.ca map/search link, or a single realtor.ca/real-estate/… or realtor.ca/immobilier/… listing

FAQ

How do I get Canadian real estate agent leads by city?

Use citySearch mode with one or more cities (e.g. Toronto, ON, Vancouver, BC, Calgary, AB). 2,600+ Canadian cities are resolved offline, and you can also pass exact latitude,longitude. Each search returns listings with the agent's name, phone, cell, office, and brokerage attached.

Can I search by postal code?

Yes. Use postalSearch mode with one or more postalCodes — a full code like M5V 2T6 or a bare FSA like M5V. 1,600+ Canadian FSAs are supported.

Does it include the REALTOR® email?

Usually not. Realtor.ca rarely publishes agent email addresses, so agentEmail is null on most rows. When the source does expose an email it is returned on paid plans and masked on the free plan (agentEmailMasked tells you which). Treat email as "found where available"; the reliable, contactable lead is the agent's name, phone, cell, office, and brokerage, which come back on every listing.

Can I get REALTOR® contact details in bulk?

Yes. Run citySearch or postalSearch across several areas and export agentName, agentPhone, agentCellPhone, officeName, and brokerName to CSV or Google Sheets.

Do I need an API key?

No. Set your input and run — the actor handles everything.

How much does it cost per lead?

You are billed per successfully enriched property, with no run-start fee. Free-plan runs are capped at 15 properties and mask the email. Use maxResults to put a ceiling on any run.

Does it cover all of Canada?

Yes. It returns Canada listings only, across every province and territory, for both English and French listings.