Realtor.ca Scraper — Canada Sale, Rent & Sold avatar

Realtor.ca Scraper — Canada Sale, Rent & Sold

Pricing

from $0.80 / 1,000 listings

Go to Apify Store
Realtor.ca Scraper — Canada Sale, Rent & Sold

Realtor.ca Scraper — Canada Sale, Rent & Sold

Scrape Realtor.ca listings across Canada for sale, rent, or sold. Each row includes price, beds, baths, MLS number, address, photos, and agent phone. JSON export for Python, Node.js, and MCP.

Pricing

from $0.80 / 1,000 listings

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

Share

Realtor.ca Scraper

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by the Canadian Real Estate Association (CREA), REALTOR.ca, or their affiliates. Data is read from publicly accessible listing search results and listing pages only. No login. You are responsible for complying with applicable law (including privacy law where a row includes an agent name or phone) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

Search Canadian property listings and export price, beds, baths, MLS number, address, photos, and the listing agent’s public phone. This Realtor.ca scraper is an API alternative for market checks, rent comps, and sold-listing pulls. Run it from Python, Node.js, or MCP and save JSON.

Canada listingsUS listings
Realtor.ca Scraper ◄── you are hereRealtor.com Scraper

When to use

  • Pull for-sale, for-rent, or sold listings for a Canadian city
  • Filter by price, beds, and baths before the rows hit your dataset
  • Grab MLS number, brokerage, and the public agent phone from the search card
  • Open listing details when you also need tax, maintenance, and year built

Use Realtor.com Scraper when the next step is US sold comps or a ZIP search.

Key features

  • City name, map or city URL, or a latitude/longitude radius
  • Sale, rent, and sold, with optional sold-within-days
  • Price, beds, baths, property type, and keyword filters
  • MLS number, address, photos, brokerage, and public agent phone
  • Optional listing detail for tax, maintenance fee, and year built
  • HTTP-first at 512 MB on Apify; Camoufox clears Cloudflare when curl alone is blocked

Input

FieldRequiredDescription
locationOne of theseCity or neighbourhood, such as Toronto or Vancouver, BC
startUrlsOne of theseCity page, map link, or one listing URL
latitude / longitudeOne of theseCenter point. Replaces location when both are set
distanceKmNoRadius for coordinates. Default 20
operationNobuy, rent, or sold. Default buy
propertyTypeNoResidential, condo, vacant land, recreational, multi-family, agricultural, or parking
sortByNonewest, oldest, lowPrice, or highPrice
maxItemsNoStop after this many rows. Default 20, maximum 1000. One area returns about 600
minPrice / maxPriceNoCAD bounds. 0 means no bound
minBeds / maxBedsNoBedroom bounds. 0 means any
minBaths / maxBathsNoBathroom bounds. 0 means any
keywordsNoExtra search words
soldWithinDaysNoUsed when operation is sold
openHousesOnlyNoKeep open-house listings. Not applied to sold
includeDetailsNoAdd tax, maintenance, year built, and the longer description
proxyConfigurationNoUsed after a direct request is blocked. Canada residential is the cloud path

Input example

{
"location": "Toronto",
"operation": "buy",
"minBeds": 2,
"maxPrice": 900000,
"maxItems": 20,
"includeDetails": false
}

Coordinate search:

{
"latitude": 49.2827,
"longitude": -123.1207,
"distanceKm": 15,
"operation": "rent",
"maxItems": 50
}

Output

One dataset row per listing.

FieldDescription
listingIdPublic listing id
mlsNumberMLS number
urlListing URL
operationbuy, rent, or sold
priceNumeric price in CAD
priceTextPrice as shown on the card
currencyCAD
propertyTypeType on the card
addressStreet, city, and province
cityCity parsed from the address
provinceProvince or territory
postalCodePostal code when the card has one
latitude / longitudeMap point
bedrooms / bathroomsCounts from the card
sizeInteriorInterior size text
brokerageBrokerage name
agentNameListing agent
agentPhonePublic agent phone
publicRemarksPublic description
photoUrlsUp to 20 photo URLs
photoCountHow many photo URLs were saved
openHouseTrue when the card lists an open house
timeOnRealtorHow long the listing has been public
maintenanceFee / taxAmount / yearBuiltFilled when includeDetails is on
scrapedAtUTC timestamp

Output example

{
"listingId": "30362405",
"mlsNumber": "C13859784",
"url": "https://www.realtor.ca/real-estate/30362405/635-glenholme-avenue",
"operation": "buy",
"price": 995000,
"currency": "CAD",
"city": "Toronto",
"province": "Ontario",
"bedrooms": "3 + 1",
"bathrooms": "2",
"brokerage": "Example Brokerage",
"agentName": "Ada Agent",
"agentPhone": "416-5550100"
}

Use cases

  • Compare asking prices and bedroom counts for one city before a trip
  • Export rent listings around a job site from a coordinate radius
  • Pull recent sold rows with operation set to sold and soldWithinDays
  • Hand a shortlist to a CRM with MLS number, brokerage, and public phone

Integration examples

Replace YOUR_TOKEN with an Apify API token. The store id is crawloop/realtor-ca-scraper.

Node.js

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_TOKEN" });
const run = await client.actor("crawloop/realtor-ca-scraper").call({
location: "Toronto",
operation: "buy",
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/realtor-ca-scraper").call(run_input={
"location": "Toronto",
"operation": "buy",
"maxItems": 20,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL

curl "https://api.apify.com/v2/acts/crawloop~realtor-ca-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"location":"Toronto","operation":"buy","maxItems":20}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its store id crawloop/realtor-ca-scraper.

Example prompts:

  • "Run Realtor.ca Scraper for Toronto for-sale listings, max 20, and return price, beds, and MLS number as JSON"
  • "Scrape Vancouver rentals within a 15 km radius of downtown and summarize median asking rent"
  • "Chain Realtor.ca Scraper for Canadian listings, then Realtor.com Scraper for US sold comps in the same brief"

Suite next step

After a Canadian shortlist, run Realtor.com Scraper for US sold comps, ZIP searches, and listing monitors.

FAQ

Does this cover sold listings?

Yes. Set operation to sold. Add soldWithinDays when you only want recent closings. Sold coverage depends on what the public search returns for that area.

How many listings can one city return?

One search area stops around 600 rows, newest first when you sort by newest. Raise maxItems up to 1000 if you want the full window the search will return.

Do I get the agent phone without opening every listing?

The search card includes the public agent name and phone when the listing shows them. Turn on includeDetails for tax, maintenance fee, year built, and a longer description.

Is this a Realtor.ca API?

It is an API alternative. Send a city, a map link, or coordinates and download JSON. Call it from Python, Node.js, cURL, or an AI assistant over MCP. No login and no browser.

Any Canadian city the public search resolves, including Toronto, Vancouver, Calgary, and Montreal. Use Vancouver, BC when the place name is shared. A coordinate radius covers a job site or a neighbourhood the city page does not name.