Realtor.ca Scraper - Canada Real Estate, Agents & Leads avatar

Realtor.ca Scraper - Canada Real Estate, Agents & Leads

Pricing

from $2.20 / 1,000 property scrapeds

Go to Apify Store
Realtor.ca Scraper - Canada Real Estate, Agents & Leads

Realtor.ca Scraper - Canada Real Estate, Agents & Leads

Scrape Realtor.ca for-sale & for-rent homes across Canada: price, beds/baths, size, address & geo, photos, remarks, MLS#, plus listing agent & brokerage leads. Search by city, map URL or MLS number. New-listing & price-drop monitoring. No login, key or browser.

Pricing

from $2.20 / 1,000 property scrapeds

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

3

Monthly active users

11 days ago

Last modified

Share

Realtor.ca Scraper — Canada Real Estate Listings, Agents & Leads

Extract complete Realtor.ca real-estate data for any Canadian city, neighbourhood or map area — the listings and the people behind them. Pull live for-sale and for-rent homes with price, beds/baths, size, lot, address & geo, photos, full remarks, property type and MLS® number, plus the listing agent and brokerage as ready-to-use leads (name, phone, office). Search a whole metro, a custom map box, a point + radius, or look up exact MLS® numbers — and monitor a market for new listings and price drops.

No login, no API key, no browser — fast JSON extraction straight from Realtor.ca's own public listing data path.

Why this Realtor.ca scraper?

Realtor.ca (operated by CREA) is the national real-estate portal of Canada. Most scrapers return a thin listing grid and stop. This actor ships the richest record in the category and turns every listing into a lead:

DataTypical scrapersThis actor
Price, beds, baths, size, property type, MLS#
Full address, postal code, community, neighbourhood, lat/longpartial
For sale and for rentpartial
Ownership type, building type, stories, age, lot size & frontage
Parking, nearby amenities, landscape features
Full public remarks / descriptionpartial
All listing photos (high-res)partial
Listing agent: name, phone, cell, profile
Brokerage: name, phone, fax, office address, website
Deduplicated agent-lead list with active-listing count & lead score
Listed date, time-on-market, price-change date
New-listing & price-drop monitoring
Whole-metro coverage past the 500-result cap (auto map tiling)

Use cases

  • Real-estate lead generation — every listing carries the listing agent and brokerage with phone numbers and office details. Run Agents mode to get a clean, deduplicated agent/brokerage prospect list per market, ranked by a 0-100 lead score and active-listing volume.
  • Investing & market analysis — pull active inventory or rentals for a city, filter by price, beds and property type, and compare $/listing, rent levels and days-on-market across neighbourhoods.
  • Pricing & inventory intelligence — track active counts, new listings, price cuts and rent trends for any Canadian metro over time.
  • New-listing & price-drop alerts — run in monitoring mode on a schedule to capture only listings that are new or whose price/status changed since the last run.
  • Proptech, CRM & valuation models — feed clean, structured Canadian listings, geo and agent data straight into your own models, dashboards or CRM.

How to use

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the Realtor.ca Scraper, type one or more cities (e.g. Toronto, Vancouver, Calgary), pick For sale or For rent, and click Start.
  3. Watch results stream into the dataset table.
  4. Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.

Input

{
"mode": "properties",
"transactionType": "sale",
"searchCities": ["Toronto", "Calgary"],
"propertyType": "residential",
"priceMin": 500000,
"priceMax": 1200000,
"bedsMin": 3,
"sort": "newest",
"subdivideLargeAreas": true,
"maxResults": 500
}
  • modeproperties (one record per listing, agent embedded) or agents (deduplicated agent/brokerage leads).
  • transactionTypesale, rent, or all.
  • searchCities — Canadian cities; 55+ major metros are built in (Toronto, Vancouver, Calgary, Edmonton, Ottawa, Montreal, Halifax, Winnipeg, Quebec City and many more).
  • startUrls — any realtor.ca map URL: search your area on Realtor.ca, copy the …/map#… URL, and the actor reads the bounding box from it (works for any town or neighbourhood).
  • boundingBoxes — explicit latMin,lngMin,latMax,lngMax rectangles.
  • centerPoints — a lat,lng,radiusKm catchment around a point.
  • mlsNumbers — look up exact listings by MLS® number (e.g. A2321763).
  • propertyType / priceMin / priceMax / bedsMin / bathsMin / sort — listing filters.
  • enrichDetails (default false) — fetch each listing's full detail record (complete remarks + extra fields).
  • subdivideLargeAreas / maxSubdivisionDepth — Realtor.ca caps any query at 500 results; the actor auto-splits busy areas into map tiles for full coverage.
  • maxResults / maxResultsPerArea — global and per-area caps.
  • monitorMode (default false) — emit ONLY new or changed (price/status) listings vs. the previous run; pairs with Schedules.

Output

One record per property (agent & brokerage embedded):

{
"id": "29913854",
"mlsNumber": "A2321763",
"url": "https://www.realtor.ca/real-estate/29913854/487-arlington-drive-se-calgary-acadia",
"transactionType": "For sale",
"price": 739900,
"priceFormatted": "$739,900",
"propertyType": "Single Family",
"ownershipType": "Freehold",
"address": "487 Arlington Drive SE, Calgary, Alberta T2H1S4",
"city": "Calgary",
"province": "Alberta",
"postalCode": "T2H1S4",
"latitude": 50.975628,
"longitude": -114.057285,
"bedrooms": 4,
"bedroomsRaw": "2 + 2",
"bathroomsTotal": 3,
"sizeInterior": "1525 sqft",
"lotSize": "7480 sqft",
"parkingTotal": 4,
"amenitiesNearby": "Playground, Schools, Shopping",
"status": "Active",
"timeOnRealtor": "25 min ago",
"listedDate": "2026-06-17T02:02:23.640Z",
"photoCount": 32,
"primaryPhoto": "https://cdn.realtor.ca/listings/.../highres/...jpg",
"listingAgentName": "Brandon Cabrera",
"listingAgentPhone": "(587) 577-3627",
"brokerageName": "CIR Realty",
"brokeragePhone": "(403) 271-0600",
"agents": [
{
"agentId": 2256996,
"name": "Brandon Cabrera",
"position": "Associate",
"phone": "(587) 577-3627",
"profileUrl": "https://www.realtor.ca/agent/2256996/brandon-cabrera-...",
"brokerage": {
"name": "CIR Realty",
"phone": "(403) 271-0600",
"fax": "(403) 271-5909",
"address": "130, 703 - 64 AVENUE SE, CALGARY, Alberta T2H2C3",
"profileUrl": "https://www.realtor.ca/office/firm/54464/cir-realty-..."
}
}
],
"scrapedAt": "2026-06-17T12:00:00.000Z"
}

In agents mode each record is a deduplicated agent/brokerage lead with activeListings, cities, sampleMls and a 0-100 leadScore. In monitoring mode each listing also carries changeType (new / price_drop / price_increase / status_change) and previousPrice.

Pricing — pay per result, no start or subscription fee

You pay only for what you pull:

EventChargedPrice
Property scrapedEvery listing written to the dataset (full record + agent/brokerage).$0.004
Property detail enrichedOnce per listing whose full detail record is fetched (enrichDetails on).$0.005
Agent lead scrapedEach unique agent/brokerage lead emitted in agents mode.$0.008
  • Listings run → $0.004 / property (grid record already includes the agent & brokerage).
  • Full-detail run → $0.009 / property (listing + enrichment).
  • Agent-lead run → $0.008 / unique agent.

Example: 1,000 listings = $4.00; 500 deduplicated agent leads = $4.00. Apify platform compute & proxy usage is billed separately by Apify.

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('scrapesage/realtor-ca-scraper').call({
mode: 'properties',
transactionType: 'sale',
searchCities: ['Toronto'],
bedsMin: 3,
monitorMode: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} Realtor.ca listings`);

Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new listings or agent leads straight into your CRM.
  • Slack — get notified when a monitored market gets new listings or price cuts.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find 3-bed houses under $900k in Calgary and list the agents" and let it run this scraper for you.

Agent-ready: autonomous payments (x402 & Skyfire)

This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:

  • x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
  • Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

More scrapers from scrapesage

Build a complete property & local-market intelligence stack:

Tips

  • Whole-metro coverage: Realtor.ca returns at most 500 results per query. Keep subdivideLargeAreas on (default) so the actor auto-tiles busy cities — raise maxSubdivisionDepth for exhaustive coverage of a large market.
  • Any area, any town: not in the built-in city list? Open realtor.ca/map, search your area, and paste the …/map#… URL into startUrls — the bounding box is read straight from the URL.
  • Agent prospecting: switch mode to agents for a deduplicated agent/brokerage lead list with phone, office and a lead score, instead of one row per listing.
  • Recurring monitoring: combine Schedules with monitorMode to track only new listings and price drops — the actor's own "seen" memory is separate from the Apify scheduler, so they work together cleanly.
  • Proxies: keep the default Canadian residential proxy — Realtor.ca's edge (Imperva Incapsula) rate-blocks datacenter and single IPs, so residential is required (and is the default). A fully blocked run fails loudly instead of returning an empty dataset.

FAQ

How do I scrape Realtor.ca for a specific city? Type the city name into searchCities (Toronto, Vancouver, Calgary, …). For a town or neighbourhood that isn't built in, paste a realtor.ca map URL into startUrls, or give a bounding box / center point.

Can I get rentals? Yes — set transactionType to rent (or all for both). Price filters apply to monthly rent for rentals.

Does it include the listing agent's contact? Yes — every listing carries the listing agent (name, phone, cell, profile link) and the brokerage (name, phone, fax, office address). Run agents mode for a deduplicated agent-lead list.

Why is there a 500-result cap per area? That's Realtor.ca's own per-query limit. The actor works around it by automatically splitting busy areas into smaller map tiles — keep subdivideLargeAreas on.

Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.

How do I monitor new listings automatically? Turn on monitorMode and create a Schedule. Each run emits only listings that are new or changed since the last run, tagged with changeType.

Is scraping Realtor.ca legal? This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws and Realtor.ca's terms.

A field is null — why? Some listings genuinely don't publish a lot size, agent cell or amenity list. Fields are null only when the data doesn't exist, not because the scraper skipped them.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.