Realtor.ca Scraper — Listings, Details & Agents avatar

Realtor.ca Scraper — Listings, Details & Agents

Pricing

from $5.00 / 1,000 realtor.ca records

Go to Apify Store
Realtor.ca Scraper — Listings, Details & Agents

Realtor.ca Scraper — Listings, Details & Agents

Realtor.ca scraper for Canadian listings, full property details, agent contacts, brokerages, photos, and MLS data. MCP-ready at $0.005 per record.

Pricing

from $5.00 / 1,000 realtor.ca records

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Realtor.ca Scraper extracts Canadian property listings, full property-page details, REALTOR agent profiles, and brokerage contacts from public Realtor.ca pages. Use it for Canadian housing research, property monitoring, brokerage intelligence, and compliant real-estate lead workflows. Do not use it for US realtor.com data or private MLS fields. It returns one normalized record per listing or agent with stable, MCP-friendly fields and charges $0.005 per record returned plus the small Actor-start event.

The Actor accepts Realtor.ca map searches, city real-estate pages, individual property pages, city/province REALTOR directories, and individual agent profiles. It automatically recognizes each URL type, uses a real browser with consistent Canadian proxy sessions, captures Realtor.ca JSON search responses when available, and falls back to public DOM and JSON-LD data when the internal response shape changes.

What data can I extract with Realtor.ca Scraper?

Data groupIncluded fields
Listing identitypropertyId, mlsNumber, listingUrl, address
Price and layoutprice, currency, bedrooms, bathrooms, sizeInterior
Property classificationpropertyType, buildingType, ownershipType
Full page detailsdescription, timeOnRealtor, features, imageUrls
Map datalatitude, longitude when present in the captured search payload
Listing agentagentId, agentName, agentTitle, agentPhone, profile and website URLs
BrokerageofficeName, officeAddress, officePhone, officeWebsite
Agent profilelanguages, specialties, tradingAreas, public social links
ProvenancerecordType, sourceUrl, sourceSearchUrl, scrapedAt, warnings

Optional fields are always present as null, [], or {}. This consistent shape is useful for database imports and for AI agents using the Apify MCP server, because consumers do not need to guess whether an absent key means “not available” or “parser failure.”

Realtor.ca Scraper use cases

  • Monitor new Canadian property listings within a saved map boundary.
  • Build market snapshots by MLS number, property type, price, bedrooms, or brokerage.
  • Enrich listing summaries with public descriptions, photos, property facts, and agent contacts.
  • Research REALTOR coverage, languages, specialties, and trading areas in a Canadian city.
  • Compare brokerage inventory or create internal dashboards for mortgage, inspection, staging, and PropTech teams.
  • Schedule repeat runs and compare datasets to detect listing additions, removals, and price changes.
  • Give an AI agent a narrow Realtor.ca search/detail tool with predictable input, output, and billing.

This Actor does not provide sold-history databases, owner identities, buyer or tenant data, private broker remarks, showing instructions, or any other login-only MLS information.

How to use Realtor.ca Scraper

  1. Open Realtor.ca and configure the map, city search, property page, or REALTOR directory you need.
  2. Copy the resulting URL into startUrls.
  3. Set maxResults to your required record and billing cap.
  4. Leave detail enrichment enabled for richer records, or disable it for the fastest search-card export.
  5. Run the Actor and export its dataset as JSON, CSV, Excel, XML, RSS, or JSONL.

Supported URL examples

https://www.realtor.ca/map#ZoomLevel=10&Center=45.25%2C-75.79&...
https://www.realtor.ca/on/toronto/real-estate
https://www.realtor.ca/real-estate/30023436/example-listing
https://www.realtor.ca/realtors/ab/edmonton
https://www.realtor.ca/agent/1946468/example-agent

The scraper is Canada-only. A realtor.com URL is rejected with a soft, actionable status message rather than being sent to the wrong extractor.

Input

{
"startUrls": [
{ "url": "https://www.realtor.ca/realtors/ab/edmonton" },
{ "url": "https://www.realtor.ca/on/ottawa/real-estate" }
],
"maxResults": 50,
"enrichPropertyDetails": true,
"enrichAgentProfiles": true,
"responseFormat": "detailed"
}
InputDefaultNotes
startUrlsSmall Ottawa map searchOne or more supported Realtor.ca URLs
maxResults10Hard cap across all URLs; range 1–1000
enrichPropertyDetailstrueVisits each listing page for full public details
enrichAgentProfilestrueVisits each agent page for qualifications and office data
responseFormatdetailedconcise keeps core fields; detailed adds bounded enrichment

Proxy, concurrency, retry, and fingerprint settings are intentionally managed by the Actor. Realtor.ca is protected by Imperva and can reject datacenter or inconsistent sessions; exposing these settings would make successful runs harder for most users and AI agents.

Output

{
"recordType": "listing",
"sourceUrl": "https://www.realtor.ca/real-estate/30023436/example",
"sourceSearchUrl": "https://www.realtor.ca/on/ottawa/real-estate",
"scrapedAt": "2026-07-13T12:00:00.000Z",
"propertyId": "30023436",
"mlsNumber": "X13554518",
"listingUrl": "https://www.realtor.ca/real-estate/30023436/example",
"address": "116 PASSAGEWAY PRIVATE, Ottawa, Ontario K2M1H6",
"price": 840000,
"currency": "CAD",
"bedrooms": "2 + 1",
"bathrooms": "3",
"sizeInterior": "1500 - 2000 sqft",
"propertyType": "Single Family",
"buildingType": "Row / Townhouse",
"ownershipType": "Freehold",
"description": "Bright end-unit bungalow with an open-concept main floor...",
"timeOnRealtor": "9 minutes",
"latitude": null,
"longitude": null,
"imageUrls": ["https://cdn.realtor.ca/listings/example.jpg"],
"agentId": "2135240",
"agentName": "Example Agent",
"agentTitle": "Salesperson",
"agentPhone": "613-555-0100",
"agentWebsite": null,
"agentProfileUrl": "https://www.realtor.ca/agent/2135240/example",
"agentPhotoUrl": null,
"officeName": "Example Brokerage",
"officeAddress": "Ottawa, Ontario",
"officePhone": "613-555-0101",
"officeWebsite": null,
"languages": [],
"specialties": [],
"tradingAreas": [],
"socialLinks": { "facebook": null, "instagram": null, "linkedin": null, "twitter": null },
"features": { "Annual Property Taxes": "$5,752 (CAD)", "Parking Type": "Attached Garage" },
"warnings": []
}

The OUTPUT key in the default key-value store contains the final run summary: pushed listing/agent counts, source modes, failed URLs, warnings, runtime, response format, charge count, and billed result-event total.

How much does scraping Realtor.ca cost?

The Actor uses transparent pay-per-event billing:

EventPrice
Actor start$0.00005, scaled by allocated memory
Schema-valid listing or agent record$0.005

Examples: 10 records cost about $0.05, 100 records cost $0.50, and 1,000 records cost $5.00, plus the small start event and any platform usage option shown by Apify. The Actor prints the maximum result-event cost before scraping and charges only after a valid record has been stored. maxResults, Apify’s paid-dataset cap, and the run’s total-charge cap are all enforced before another charge can occur.

API and MCP examples

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/realtor-ca-api-scraper').call({
startUrls: [{ url: 'https://www.realtor.ca/realtors/ab/edmonton' }],
maxResults: 25,
enrichAgentProfiles: true,
responseFormat: 'concise'
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient('MY_APIFY_TOKEN')
run = client.actor('muhammadafzal/realtor-ca-api-scraper').call(run_input={
'startUrls': [{'url': 'https://www.realtor.ca/on/toronto/real-estate'}],
'maxResults': 20,
'responseFormat': 'detailed',
})
items = client.dataset(run['defaultDatasetId']).list_items().items

For MCP clients, configure https://mcp.apify.com/?tools=muhammadafzal/realtor-ca-api-scraper. The concise response format is best when the agent needs to compare many records; detailed format is better for analyzing a small number of properties or agents.

Reliability and limits

Realtor.ca can present Imperva/GeoTest challenges. The Actor uses a low-concurrency Playwright browser, Canadian residential proxy sessions, persistent cookies, browser fingerprints, retries, session retirement on 403/429 responses, a canary page, and partial-result preservation. Search extraction uses two layers: intercepted Realtor.ca JSON when available and stable public card selectors as a fallback. Property pages additionally use JSON-LD and labeled public detail sections.

Fields vary by listing and real-estate board. Missing optional values remain null rather than being guessed. A detail-page failure returns the already captured search-card record with a warning when that is truthful. If every request is blocked, the run fails honestly instead of returning a misleading empty success.

Realtor.ca’s Terms of Use state that its content is intended for private, non-commercial use and expressly prohibit web/data scraping, collection, storage, reorganization, manipulation, AI training, and republication. Building or running this Actor does not grant permission from Realtor.ca, CREA, a brokerage, or a listing owner. Before use, obtain any required authorization and legal advice, and comply with copyright, database rights, privacy law, PIPEDA, Quebec Law 25, CASL, contracts, and applicable real-estate-board rules.

Do not use the Actor to create a competing public listing database, republish photos or descriptions, send spam, infer sensitive traits, or retrieve data beyond the public page. Use the smallest amount of data necessary for a lawful purpose, retain it only as long as needed, and honour deletion or correction obligations.

Other dedicated scrapers

FAQ

How many results can I scrape with Realtor.ca Scraper?

Up to 1,000 records per run through maxResults. Start small because detail enrichment adds one browser request per record.

Can I integrate Realtor.ca Scraper with other apps?

Yes. Use Apify Integrations, webhooks, Zapier, Make, datasets, schedules, or the REST API.

Can I use Realtor.ca Scraper with the Apify API?

Yes. Call the Actor synchronously or asynchronously and read its default dataset and OUTPUT summary.

Can I use Realtor.ca Scraper through an MCP Server?

Yes. Add this Actor through Apify’s hosted MCP server and use concise output for lower token usage.

Do I need proxies to scrape Realtor.ca?

Cloud runs use Canadian residential proxies automatically. Direct local runs may be blocked and are mainly intended for parser/schema testing.

Realtor.ca’s terms expressly prohibit scraping and restrict content to private, non-commercial use. Obtain permission and qualified legal advice before running the Actor.

Your feedback

Report a failing URL, run ID, expected record type, and missing field in the Actor’s Issues tab. Do not include private credentials or personal data.