Realtor.ca Scraper & API — Canada MLS Listings & Agents
Pricing
from $15.00 / 1,000 realtor.ca records
Realtor.ca Scraper & API — Canada MLS Listings & Agents
Scrape Realtor.ca searches, listings and REALTOR profiles into JSON: price, MLS number, address, photos, agent and brokerage contacts. $15 per 1,000 records.
Pricing
from $15.00 / 1,000 realtor.ca records
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
3
Monthly active users
6 days ago
Last modified
Categories
Security
Limited permissionsShare
Realtor.ca Scraper & API turns public Realtor.ca map searches, property pages, and REALTOR® directories into structured JSON: price, MLS® number, address, beds, baths, size, description, photos, listing agent, and brokerage contacts. It is built for Canadian PropTech, mortgage, brokerage-intelligence, and housing-research teams, and costs USD 15 per 1,000 records on every Apify tier, including FREE.
The Actor recognises each Realtor.ca URL type automatically and returns one normalized record per listing or agent through the Apify API, MCP, or a dataset export (JSON, CSV, Excel). It covers Canada's Realtor.ca only; it does not read the US realtor.com site.
What data does the Realtor.ca Scraper return?
Each record is a listing or an agent (recordType). Every field is always present; values a page does not show are null, [], or {}.
| Data group | Fields |
|---|---|
| Listing identity | propertyId, mlsNumber, listingUrl, address |
| Price and layout | price, currency, bedrooms, bathrooms, sizeInterior |
| Property type | propertyType, buildingType, ownershipType |
| Listing details | description (up to 900 characters), timeOnRealtor, features (for example taxes, parking), imageUrls (up to 8) |
| Map position | latitude, longitude when the search response includes them |
| Listing agent | agentId, agentName, agentTitle, agentPhone, agentWebsite, agentProfileUrl, agentPhotoUrl |
| Brokerage | officeName, officeAddress, officePhone, officeWebsite |
| Agent profile | languages, specialties, tradingAreas, socialLinks (Facebook, Instagram, LinkedIn, X) |
| Provenance | recordType, sourceUrl, sourceSearchUrl, scrapedAt, warnings |
Agent emails, sold-price history, owner names, and private MLS® remarks are not returned; the Actor reads only what public Realtor.ca pages show.
How do I scrape Realtor.ca listings with prices, photos, and agent details?
Set up the search on Realtor.ca, copy the URL into startUrls, and keep enrichPropertyDetails on. The Actor reads the search results, opens each property page, and returns the full listing with photos, agent, and brokerage.
{"startUrls": [{ "url": "https://www.realtor.ca/on/ottawa/real-estate" }],"maxResults": 50,"enrichPropertyDetails": true,"responseFormat": "detailed"}
Supported URL types:
| URL | What you get |
|---|---|
https://www.realtor.ca/map#... or https://www.realtor.ca/on/toronto/real-estate | Listings from a map or city search, with pagination |
https://www.realtor.ca/real-estate/30023436/... | One fully parsed property |
https://www.realtor.ca/realtors/ab/edmonton | REALTOR® directory for a city; with enrichAgentProfiles each profile is opened |
https://www.realtor.ca/agent/1946468/... | One fully parsed agent profile |
responseFormat: "concise" keeps core listing and contact fields (one photo, no description, features, or profile lists), which suits AI agents comparing many records. "detailed" adds description, up to 8 photos, features, languages, specialties, and trading areas. Turning enrichPropertyDetails off returns search-card data only and finishes faster.
Call it from code
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);
from apify_client import ApifyClientclient = 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.default_dataset_id).list_items().items
Is there an official Realtor.ca API?
Not a public one. CREA's Data Distribution Facility (DDF®) is the official listing feed, and it is available to REALTOR® members and approved technology providers. Realtor.ca Scraper & API gives you programmatic access to what the public Realtor.ca pages show, with no membership needed, but it does not grant any licence to the data.
Use it from an AI assistant
Realtor.ca Scraper & API works from Claude, ChatGPT, Cursor, or any MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/realtor-ca-api-scraper, then ask, for example: "Get 20 houses for sale in Ottawa from Realtor.ca with price, bedrooms, and the listing brokerage, in concise format." The assistant sees the inputs and the price per record before it runs.
What does the output look like?
One listing and one agent record, shortened. Names and phone numbers are placeholders.
[{"recordType": "listing","sourceUrl": "https://www.realtor.ca/real-estate/30023436/example","sourceSearchUrl": "https://www.realtor.ca/on/ottawa/real-estate","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...","imageUrls": ["https://cdn.realtor.ca/listings/example.jpg"],"agentName": "Example Agent","agentTitle": "Salesperson","agentPhone": "613-555-0100","officeName": "Example Brokerage","officePhone": "613-555-0101","features": { "Annual Property Taxes": "$5,752 (CAD)", "Parking Type": "Attached Garage" },"warnings": []},{"recordType": "agent","sourceUrl": "https://www.realtor.ca/agent/1946468/example","agentId": "1946468","agentName": "Example Agent","agentTitle": "REALTOR®","agentPhone": "780-555-0100","officeName": "Example Realty","languages": ["English", "French"],"specialties": ["Residential"],"tradingAreas": ["Edmonton"],"price": null,"warnings": []}]
Pricing: how much does it cost to scrape 1,000 Realtor.ca records?
USD 15 per 1,000 records, the same on every tier, plus a start fee. Platform usage is included.
| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|---|---|---|---|---|---|---|
| Realtor.ca record (listing or agent) | $0.015 | $0.015 | $0.015 | $0.015 | $0.015 | $0.015 |
| Actor start, per started GB of allocated memory | $0.01 | $0.01 | $0.01 | $0.01 | $0.01 | $0.01 |
The Actor runs a real browser with 2 GB by default, so a run pays two start events ($0.02). Worked totals:
- 10 records: $0.02 + 10 × $0.015 = $0.17.
- 100 records: $0.02 + 100 × $0.015 = $1.52.
- 1,000 records: $0.02 + 1,000 × $0.015 = $15.02.
A record is charged only after it passes schema validation and is saved. Duplicates are skipped and not charged. If Realtor.ca blocks every request, the run fails and only the start fee is charged.
When should I use it, and when not?
Use it when you need:
- a snapshot of listings inside a saved Realtor.ca map area or city, with price, MLS® number, and brokerage;
- full property-page details (description, features, photos) for a short list of properties;
- REALTOR® directory data by city: titles, phones, offices, languages, specialties, trading areas.
Use something else when you need:
- US realtor.com agents: Realtor Agents Scraper;
- agent leads with email addresses: Realtor Leads Scraper;
- one brokerage's Canadian inventory: Royal LePage Canada Scraper or RE/MAX Real Estate Listings Scraper;
- Canadian rentals and classifieds: Kijiji.ca Scraper;
- sold-price history or login-only MLS® data: not available from this Actor.
Limits and reliability
- 1 to 1,000 records per run (
maxResults, default 10), across all URLs. - Realtor.ca uses bot protection. The Actor uses a real browser, session rotation, retries, and about 20 page requests per minute, so 100 detailed records take several minutes. Runs can still be blocked; a fully blocked run fails instead of returning a misleading empty success.
- When a property or agent page fails after retries, the search-card record is returned with a warning instead.
- The
OUTPUTrecord summarises listing and agent counts, failed URLs, charged events, and warnings.
FAQ
How many Realtor.ca listings can I scrape per run?
Up to 1,000 records per run. Start with 10 to 50, because each detailed record opens its own property page.
Can I get REALTOR® phone numbers and brokerages?
Yes. Listing records include the listing agent's name, title, and phone plus the brokerage name, address, and phone when Realtor.ca shows them. Agent records add website, languages, specialties, trading areas, and social links. Emails are not shown publicly, so none are returned.
Should I use concise or detailed output?
Use concise for many records or AI-agent workflows, because it drops long text and keeps one photo. Use detailed when you analyse a small set of properties or agents.
Do I need proxies or a Realtor.ca account?
No. Browser, session, and retry settings are managed by the Actor, and it reads only public pages without logging in.
What happens if Realtor.ca blocks the run?
The run fails with a clear status message, no records are charged, and only the start fee applies. Retry later or with fewer records.
Does it work with realtor.com?
No. realtor.com URLs are rejected with a message. Use the Realtor Agents Scraper for US agents.
Is it legal to scrape Realtor.ca?
Realtor.ca's Terms of Use restrict its content to private, non-commercial use and prohibit scraping. Get the necessary permission and legal advice before you run the Actor or use its data.
Related Actors
- Royal LePage Canada Scraper: Royal LePage listings with MLS® numbers and photos.
- RE/MAX Real Estate Listings Scraper: RE/MAX search and property pages.
- Kijiji.ca Scraper: Canadian classified listings.
- Yellow Pages Canada Scraper: Canadian local-business leads.
- Realtor Agents Scraper: US realtor.com agent profiles.
Compliance note
Running this Actor does not grant permission from Realtor.ca, CREA, brokerages, or listing owners. Comply with copyright, database rights, PIPEDA, Quebec Law 25, CASL, and real-estate board rules; do not republish photos or descriptions, and treat agent contact details as personal information.
Last verified: 2026-10-26