Realtor.ca Property Scraper avatar

Realtor.ca Property Scraper

Pricing

from $0.39 / 1,000 property listings

Go to Apify Store
Realtor.ca Property Scraper

Realtor.ca Property Scraper

Scrape REALTOR.ca property listings and real estate agents across Canada: price, address, beds, baths, size, photos, listing agent and phone, plus REALTOR contact details, brokerage and social links.

Pricing

from $0.39 / 1,000 property listings

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Realtor.ca Scraper

Realtor.ca Scraper extracts property listings and real estate agents from REALTOR.ca, Canada's MLS®-powered real estate portal run by the Canadian Real Estate Association. Enter a city like "Toronto, ON" or paste a REALTOR.ca map URL and get the price, address, beds, baths, size, parking, photos, MLS® number and listing agent's phone for every home, or the phone, brokerage, website and social links of every REALTOR® in the area, as clean JSON, CSV or Excel.

Search any Canadian city, neighbourhood or postal code area for homes for sale or rent, with price, bedroom, bathroom and property type filters, or pull REALTOR® contact lists, and go past REALTOR.ca's 600-result limit automatically.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Apify Actor: parsebird/realtor-ca-scraper. Scrapes property listings and real estate agents (REALTORS) from REALTOR.ca (Canada). Call via ApifyClient: client.actor("parsebird/realtor-ca-scraper").call(run_input={"mode": "properties", "location": "Vancouver, BC", "transactionType": "buy", "priceMin": 500000, "priceMax": 1500000, "bedroomsMin": 3, "maxResults": 200}). Inputs: mode ("properties" or "agents", default "properties"), location (string, city and province like "Toronto, ON", neighbourhood or postal code area like "M5V"; default Toronto, ON when no startUrls), startUrls (array of strings: REALTOR.ca map URLs https://www.realtor.ca/map#..., listing URLs https://www.realtor.ca/real-estate/<id>/..., agent URLs https://www.realtor.ca/agent/<id>/..., REALTOR directory URLs https://www.realtor.ca/realtors/on/toronto; overrides location), maxResults (integer, default 200, 0 = all), transactionType ("buy" or "rent"), propertyType ("residential", "condo", "multi-family", "vacant-land", "recreational", "agriculture", "parking", "commercial"), priceMin / priceMax (integer CAD; monthly rent for rentals), bedroomsMin, bathroomsMin (integer 0-10), sortBy ("newest", "oldest", "price-low", "price-high"), proxyConfiguration (object, optional). Property output: listingId, mlsNumber, listingUrl, price, priceNumeric, priceType (sale/rent), address, addressHidden, city, province, postalCode, latitude, longitude, propertyType, buildingType, ownershipType, zoningType, businessType, bedrooms, bedroomsText, bathrooms, halfBathrooms, sizeInterior, floorArea, stories, landSize, landFrontage, parkingSpaces, parkingType, amenities, amenitiesNearby, description, coverPhoto, photos, virtualTourUrl, openHouses, agentName, agentPhone, agentOffice, agentOfficePhone, agentProfileUrl, agents[], timeOnMarket, listedDate, source. Agent output: individualId, name, firstName, lastName, position, phone, phones[], office, officeId, officeDesignation, officeType, corporationName, officeAddress, officePhone, officeWebsite, officeLogo, officeProfileUrl, photo, website, profileUrl, facebook, instagram, linkedin, twitter, youtube, hasListings, cccMember, source. Pricing: pay per result (listing or agent). Full API spec: https://apify.com/parsebird/realtor-ca-scraper/api. Get your token: https://console.apify.com/settings/integrations.

What is Realtor.ca Scraper?

Realtor.ca Scraper turns REALTOR.ca into a structured dataset. Give it a location, set your filters, and it collects the matching property listings for sale or rent. Switch the mode to real estate agents and it collects REALTORS® in that area with their phone numbers, brokerages, websites and social profiles.

It works as a REALTOR.ca API alternative: no account, no API key and no browser needed. REALTOR.ca shows at most 600 results per search; the scraper splits big searches into smaller ones on its own, so you can collect every listing in a city.

What can Realtor.ca Scraper do?

  • 🏠 Property listings. Homes, condos, multi-family, vacant land, recreational, farms, parking and commercial properties, for sale or for rent.
  • 🔎 REALTOR.ca's own filters. Price (or monthly rent), minimum bedrooms and bathrooms, property type and sort order are sent to REALTOR.ca's search, so you only collect matching rows.
  • 🗺️ Any area. Cities ("Calgary, AB"), neighbourhoods, postal code areas ("M5V"), or a custom map area: zoom in on REALTOR.ca's map and paste the URL.
  • 🧑‍💼 Real estate agents. REALTORS® by city or from a REALTOR.ca directory page, with direct phone, brokerage, office address, website, photo and Facebook, Instagram, LinkedIn, X and YouTube links.
  • 🔗 Single listings and agents. Paste listing URLs or agent profile URLs to collect exactly those.
  • 📈 No 600-result ceiling. Large property searches are split by price, then by map area; large agent searches are split by name.
  • 📅 Scheduling and monitoring. Run daily with Apify Schedules and sort by newest to catch new listings.
  • 🔌 API and integrations. Use the Apify API, or send results to Google Sheets, Zapier, Make, Slack or webhooks with Apify integrations. Export as JSON, CSV, Excel, XML or HTML.

What data can you extract from REALTOR.ca?

Property listings

FieldDescription
listingId / mlsNumber / listingUrlREALTOR.ca listing ID, MLS® number and listing page
price / priceNumeric / priceTypePrice as shown (rentals keep "/Monthly"), as a number, and sale or rent
address / city / province / postalCodeStreet address with unit, city (Ontario and Quebec boards often add the neighbourhood, like "Toronto (Riverdale)"), province and postal code
latitude / longitudeMap position
propertyType / buildingType / ownershipType"Single Family", "Vacant Land", "Retail"…; "House", "Apartment", "Row / Townhouse"…; "Freehold", "Condominium/Strata"…
bedrooms / bedroomsText / bathrooms / halfBathroomsBedroom total ("2 + 1" counts as 3) and the original text, bathrooms and half baths
sizeInterior / floorArea / storiesInterior size (sqft or m², as the board publishes it), floor area range, storeys
landSize / landFrontage / zoningType / businessTypeLot size and frontage, zoning, and business type for commercial listings
parkingSpaces / parkingTypeParking spaces and types, like "Underground, Garage"
amenities / amenitiesNearbyBuilding amenities and nearby amenities, as the board publishes them
coverPhoto / photosCover photo at full resolution (search results carry the cover photo)
virtualTourUrl / openHousesVirtual tour link and upcoming open houses, when listed
agentName / agentPhone / agentOffice / agentOfficePhone / agentProfileUrlListing agent, phone, brokerage, brokerage phone and REALTOR.ca profile
agentsEvery agent on the listing, with phone and brokerage
timeOnMarket / listedDate"3 hours ago" as REALTOR.ca phrases it, and the listed date and time (UTC)

Real estate agents

FieldDescription
individualId / name / position / profileUrlREALTOR.ca agent ID, name, role like "Salesperson" or "Broker", and profile page
phone / phonesMain phone and every published number with its type
office / officeDesignation / officeAddress / officePhoneBrokerage name, designation (like "Brokerage"), address and phone
officeWebsite / officeLogo / officeProfileUrlBrokerage website, logo and REALTOR.ca office page
photo / websiteAgent headshot and personal website, where published
facebook / instagram / linkedin / twitter / youtubeSocial profiles, where published

Fill rates depend on what each real estate board publishes. In our Toronto test, 72% of listings had building amenities, 78% an interior size and 97% a parking count; in Calgary, 55% of agents had a photo, 37% a personal website and about 1 in 5 a Facebook or Instagram link.

How to scrape REALTOR.ca

  1. Open Realtor.ca Scraper on Apify Store and click Try for free.
  2. Choose Property listings or Real estate agents.
  3. Type a Location, like "Montreal, QC". Or paste REALTOR.ca URLs into Start URLs: a map URL after zooming into a neighbourhood, listing URLs, agent URLs or a REALTOR directory page like https://www.realtor.ca/realtors/on/toronto.
  4. For properties, pick For sale or For rent and set price, bedroom, bathroom and property type filters.
  5. Set Max results, or 0 for everything.
  6. Click Start, then download the results as JSON, CSV, Excel, XML or HTML from the Output tab, or read them with the API.

How much does it cost to scrape REALTOR.ca?

Realtor.ca Scraper uses pay-per-event pricing: you pay for each property listing or REALTOR® saved. Compute and proxy costs are included in the price.

EventFreeBronzeSilverGold
result (per listing or agent)$0.00069$0.00059$0.00049$0.00039
Per 1,000 results$0.69$0.59$0.49$0.39

For example, 1,000 Toronto listings cost $0.69 on the Free plan. You can set a maximum cost per run in Apify Console, and the Actor stops when it's reached.

Input

See the Input tab for the full form.

ParameterTypeDefaultDescription
modestringpropertiesproperties or agents
locationstringToronto, ONCity and province, neighbourhood, or postal code area. Used when there are no start URLs
startUrlsarray—REALTOR.ca map, listing, agent or REALTOR directory URLs. Overrides location
maxResultsinteger200Results per location or URL. 0 = everything available
transactionTypestringbuybuy or rent
propertyTypestringresidentialresidential, condo, multi-family, vacant-land, recreational, agriculture, parking, commercial
priceMin / priceMaxinteger—Price in CAD; monthly rent for rentals
bedroomsMin / bathroomsMininteger—Minimum bedrooms / bathrooms (0–10)
sortBystringnewestnewest, oldest, price-low, price-high
proxyConfigurationobjectnoneNot needed; see the FAQ

Homes in a city

{
"mode": "properties",
"location": "Toronto, ON",
"maxResults": 100
}

Filtered search for sale

{
"mode": "properties",
"location": "Vancouver, BC",
"transactionType": "buy",
"propertyType": "residential",
"priceMin": 500000,
"priceMax": 1500000,
"bedroomsMin": 3,
"bathroomsMin": 2,
"maxResults": 200
}

Rentals up to $2,500 a month

{
"mode": "properties",
"location": "Montreal, QC",
"transactionType": "rent",
"priceMax": 2500,
"bedroomsMin": 2,
"maxResults": 100
}

Real estate agents

{
"mode": "agents",
"location": "Calgary, AB",
"maxResults": 50
}

Custom map area

{
"mode": "properties",
"startUrls": [
"https://www.realtor.ca/map#ZoomLevel=13&LatitudeMax=43.7&LongitudeMax=-79.3&LatitudeMin=43.6&LongitudeMin=-79.5"
],
"maxResults": 500
}

Output example

Property listing (from a Toronto search; the second agent is left out)

{
"listingId": "30416755",
"mlsNumber": "C14092020",
"listingUrl": "https://www.realtor.ca/real-estate/30416755/b211-1680-victoria-park-avenue-toronto-victoria-village",
"price": "$799,900",
"priceNumeric": 799900,
"priceType": "sale",
"address": "B211 - 1680 VICTORIA PARK AVENUE",
"addressHidden": false,
"city": "Toronto (Victoria Village)",
"province": "Ontario",
"postalCode": "M1R0G8",
"latitude": 43.7321374,
"longitude": -79.306048,
"propertyType": "Single Family",
"buildingType": "Row / Townhouse",
"ownershipType": "Condominium/Strata",
"bedrooms": 3,
"bedroomsText": "2 + 1",
"bathrooms": 3,
"halfBathrooms": 1,
"sizeInterior": "111.4827 m2",
"floorArea": "1200+ sqft",
"stories": "2",
"parkingSpaces": 1,
"parkingType": "Underground, Garage",
"amenities": "Storage - Locker",
"coverPhoto": "https://cdn.realtor.ca/listings/TS639279557678500000/reb82/highres/0/c14092020_1.jpg",
"photos": ["https://cdn.realtor.ca/listings/TS639279557678500000/reb82/highres/0/c14092020_1.jpg"],
"openHouses": [],
"agentName": "LORENA SCHIRRIPA",
"agentPhone": "(647) 338-8106",
"agentOffice": "NORDALE REALTY & ASSOCIATES INC.",
"agentOfficePhone": "(416) 744-3311",
"agentProfileUrl": "https://www.realtor.ca/agent/2194103/lorena-schirripa-3850-steeles-ave-west-2-woodbridge-ontario-l4l4y6",
"agents": [
{
"individualId": "2194103",
"name": "LORENA SCHIRRIPA",
"position": "Salesperson",
"phone": "(647) 338-8106",
"office": "NORDALE REALTY & ASSOCIATES INC.",
"officePhone": "(416) 744-3311",
"profileUrl": "https://www.realtor.ca/agent/2194103/lorena-schirripa-3850-steeles-ave-west-2-woodbridge-ontario-l4l4y6"
}
],
"timeOnMarket": "1 hour ago",
"listedDate": "2026-10-19T01:29:27Z",
"source": {"type": "location", "value": "Toronto, ON", "resolvedLocation": "Toronto, ON, Canada"}
}

Real estate agent (from a Calgary search)

{
"individualId": "1446472",
"name": "Max Fernandez",
"firstName": "Max",
"lastName": "Fernandez",
"position": "Associate",
"phone": "403-370-8776",
"phones": [{"type": "Telephone", "number": "403-370-8776"}],
"office": "Royal LePage Blue Sky",
"officeId": "300215",
"officeType": "Firm",
"officeAddress": "5211 4th Street NE, Calgary, Alberta T2K6J5",
"officePhone": "403-338-2200",
"officeLogo": "https://cdn.realtor.ca/organizations/en-CA/TS639104751000000000/lowres/1484381.jpg",
"officeProfileUrl": "https://www.realtor.ca/office/firm/300215/royal-lepage-blue-sky-5211-4th-street-ne-calgary-alberta-t2k6j5",
"website": "https://maxfernandez.royallepage.ca/",
"profileUrl": "https://www.realtor.ca/agent/1446472/max-fernandez-5211-4th-street-ne-calgary-alberta-t2k6j5",
"instagram": "https://www.instagram.com/sweetpad4u",
"hasListings": true,
"source": {"type": "location", "value": "Calgary, AB", "resolvedLocation": "Calgary, AB, Canada"}
}

Empty fields are left out of these examples. A run's main results go to the default dataset. If your start URLs also bring in the other kind of record (for example an agent URL in a property run), those records go to a second dataset in the run's Storage tab, so each table keeps its own columns.

Use the Realtor.ca Scraper API

Call the Actor from your own code with the Apify API client. Find your token in Apify Console → Settings → Integrations.

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("parsebird/realtor-ca-scraper").call(run_input={
"mode": "properties",
"location": "Ottawa, ON",
"priceMax": 700000,
"bedroomsMin": 3,
"maxResults": 300,
})
for home in client.dataset(run["defaultDatasetId"]).iterate_items():
print(home["price"], home["address"], home["city"], home["agentName"], home["agentPhone"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('parsebird/realtor-ca-scraper').call({
mode: 'agents',
location: 'Halifax, NS',
maxResults: 0,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((agent) => console.log(agent.name, agent.phone, agent.office, agent.website));

You can also start runs over plain HTTP from the API tab, or connect the Actor to AI agents through the Apify MCP server.

Use cases

  • Market research. Compare prices, sizes and property types across Canadian cities and neighbourhoods.
  • New listing alerts. Schedule a daily run sorted by newest and push new listings to Slack or Google Sheets.
  • Rental analysis. Track rents by bedroom count and area for investment decisions.
  • Lead generation. Build lists of REALTORS® and brokerages by city, with phone numbers, websites and social links.
  • Real estate investing. Find multi-family, vacant land or commercial properties in a price range.

How it works

  1. A location is matched to REALTOR.ca's own place search, which gives the city boundary used on its map. When a name matches several places, the log tells you which one was used.
  2. Properties are loaded 200 at a time with your filters. REALTOR.ca returns at most 600 results per search, so larger searches are split into price bands, then into smaller map areas, until every part fits. In our test, a run with no limit collected all 10,967 listings REALTOR.ca reported for Toronto.
  3. Agents are loaded 50 at a time. Larger agent searches are split by last name. In our test of Calgary (8,483 REALTORS®), a full run collected 8,464 of them (99.8%); a few agents whose very short last name is also a common part of other names can be missed.
  4. Results that show up in more than one part of a split search are saved once.

FAQ

Do I need a REALTOR.ca account? No. The Actor reads public listings and REALTOR® profiles that anyone can see on REALTOR.ca.

Which URLs can I use? Map URLs (realtor.ca/map#..., with the map area and filters you set on the site), listing URLs (realtor.ca/real-estate/<id>/...), agent profiles (realtor.ca/agent/<id>/...), REALTOR directory pages (realtor.ca/realtors/on/toronto) and REALTOR search result URLs. French URLs work too.

Why do some listings have a price of $1 or no address? Some boards publish placeholder prices, and some sellers hide the address (addressHidden is then true). The Actor keeps what REALTOR.ca shows.

Why is there only one photo per listing? REALTOR.ca's search results include the cover photo only. coverPhoto and photos hold it at full resolution.

Why are descriptions empty? REALTOR.ca's search results usually leave the public remarks out, so description is filled only when they are included.

How fast is it? REALTOR.ca limits how fast one visitor can search, so the Actor keeps a steady pace. In our tests, all 10,967 Toronto listings took under 1.5 minutes; a full agent list for a large city takes longer because agents come 50 at a time (Calgary's 8,483 REALTORS® took about 17 minutes).

Do I need a proxy? No. The Actor connects directly and switches to Apify Proxy on its own if REALTOR.ca starts refusing requests.

Can I schedule runs or export to Google Sheets? Yes. Use Apify Schedules for recurring runs and integrations for Google Sheets, Zapier, Make, Slack and webhooks.

Something is missing or broken? Open an issue on the Issues tab. Feedback and feature requests are welcome there too.

The Actor collects only public listings and REALTOR® profiles that REALTOR.ca shows to every visitor. It doesn't log in or access account data. Agent names, phone numbers and photos are personal information under Canadian privacy law (PIPEDA), and commercial messages are covered by Canada's Anti-Spam Legislation (CASL), so make sure you have a lawful basis to store and contact them. The MLS® and REALTOR® marks belong to CREA. Read more in Apify's blog post Is web scraping legal?

Other real estate scrapers

ActorWhat it does
Realtor.com ScraperScrape US homes for sale, rent and sold from Realtor.com
OpenRent ScraperScrape UK rental listings from OpenRent
Funda.nl ScraperScrape Dutch property listings from Funda
Sreality.cz ScraperScrape Czech property listings from Sreality.cz
AutoTrader Canada ScraperScrape Canadian car listings from AutoTrader.ca