
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape realtor.ca listings for sale or rent across Canada by city or map URL: MLS number, price, address, beds, baths, size, land, photos, coordinates, agent and brokerage, plus optional full details.
Scrape realtor.ca, Canada's biggest real estate site, for homes for sale and for rent. Type a city like "Toronto, ON" or paste a realtor.ca map URL and get MLS numbers, prices, addresses, beds, baths, sizes, photos, coordinates, agents and brokerages as clean JSON, CSV or Excel. No login, no account, and 1,000 listings cost about $0.60.
Toronto, ON, Kelowna, BC), or paste realtor.ca URLs into Start URLs.| Field | What it does |
|---|---|
locations | Canadian cities, neighbourhoods or regions, one per line |
startUrls | realtor.ca map URLs, listing URLs (/real-estate/...) or city pages (/on/toronto/real-estate) |
maxListings | Listings per location or URL (default 20, 0 = all) |
transactionType | sale or rent |
propertyCategory | residential or commercial |
propertyType / buildingType | for example condo, multi-family / house, townhouse, apartment |
minPrice, maxPrice | Price range in CAD (monthly rent for rentals) |
minBeds, minBaths | Minimum bedrooms and bathrooms |
listedWithinDays | Only listings added in the last N days |
keywords | Words that must appear in the listing |
sort | newest, oldest, price-low, price-high |
getDetails | Load each listing's full detail record |
simplifyOutput | Save only flat fields |
{
"locations": ["Toronto, ON", "Ottawa, ON"],
"transactionType": "sale",
"buildingType": "house",
"minPrice": 500000,
"maxPrice": 1200000,
"minBeds": 3,
"maxListings": 200,
"getDetails": false
}
Filters apply to the Locations searches. Map URLs keep the filters that are already in the URL, so you can set everything on realtor.ca/map and copy the address bar.
Every listing contains the complete realtor.ca record (Id, MlsNumber, PublicRemarks, Building, Property, Land, Individual, Tags, ...) plus these flat fields:
| Field | Example |
|---|---|
Url | Listing page on realtor.ca |
MlsNumber | C1234567 |
Price / PriceValue | $849,000 / 849000 |
TransactionType | For sale or For rent |
Address, StreetAddress, City, Province, PostalCode | |
Latitude, Longitude | 43.6655, -79.4103 |
BuildingType, PropertyType, OwnershipType | House, Single Family, Freehold |
Bedrooms, BathroomTotal, HalfBathTotal | 3 + 1, 3, 1 |
SizeInterior, FloorArea, LandSize, LandFrontage | |
ParkingType, ParkingSpaceTotal, MaintenanceFee, TaxAmount | |
ListedDate | When the listing was added (UTC) |
AgentName, AgentPosition, AgentPhone, AgentUrl | Listing agent |
OrganizationName, OrganizationPhone, OrganizationAddress | Brokerage |
PhotoURL, PhotoURLs, PhotoCount | High-resolution photos |
Example (fictional values, shortened):
{
"Id": "29000001",
"MlsNumber": "C1234567",
"Url": "https://www.realtor.ca/real-estate/29000001/12-sample-avenue-toronto",
"Price": "$849,000",
"PriceValue": 849000,
"TransactionType": "For sale",
"Address": "12 SAMPLE AVENUE, Toronto (Trinity-Bellwoods), Ontario M6J0A1",
"City": "Toronto (Trinity-Bellwoods)",
"Province": "Ontario",
"PostalCode": "M6J0A1",
"Latitude": 43.6501,
"Longitude": -79.4152,
"BuildingType": "Row / Townhouse",
"Bedrooms": "2 + 1",
"BathroomTotal": "2",
"SizeInterior": "1100 sqft",
"LandSize": "18 x 90 FT",
"ListedDate": "2026-10-14T13:05:00Z",
"AgentName": "Jane Example",
"AgentPhone": "(416) 555-0100",
"OrganizationName": "EXAMPLE REALTY INC., Brokerage",
"PhotoURL": "https://cdn.realtor.ca/listings/.../highres/c1234567_1.jpg",
"PhotoCount": 32,
"PublicRemarks": "Bright townhouse steps from the park ...",
"Building": { "Type": "Row / Townhouse", "Bedrooms": "2 + 1", "BathroomTotal": "2" },
"Property": { "Price": "$849,000", "Type": "Single Family", "ParkingType": "Garage" }
}
With Full listing details on, you also get Building.Room (each room with level and dimensions), appliances, heating and cooling, amenities, History, media links, the uploading board and more.
You pay $0.60 per 1,000 listings ($0.0006 per listing), with or without full details. Platform usage (compute and proxy traffic) is billed separately and is small: in our tests a 1,000-listing run used about 30 seconds of compute at 512 MB and a few MB of proxy traffic, well under $0.02. So 1,000 listings ≈ $0.62 in total.
Is it legal to scrape realtor.ca? The scraper only collects listing information that realtor.ca shows publicly to every visitor. Check realtor.ca's terms and your local laws for your use case, and handle agent contact details according to privacy rules such as Canada's anti-spam law (CASL).
Do I need a realtor.ca account or my own proxy? No. No login is used. The run uses the platform's residential proxy by default, because realtor.ca blocks most datacenter IPs.
How many listings can I get? Realtor.ca shows at most 600 listings per search. The scraper splits big areas into smaller map tiles, so you can collect whole cities (Toronto has more than 13,000 listings for sale). The only exception is a single building or point with more than 600 listings, which realtor.ca itself cannot show in full.
Why are some fields empty?
Listing boards fill different fields. Rentals have LeaseRent instead of a sale price, condos often have no land size, and some listings hide the address. Empty fields are left empty, never invented.
Can I schedule it or use the API? Yes. Schedule daily runs with "Listed within (days)" set to 1 for new listings, and read results through the API or integrations.
What about sold listings? Realtor.ca does not publish sold prices, so sold data is not available.
maxListings applies per location or URL, not to the whole run.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
locationsarrayOptionalLocations
Canadian cities, neighbourhoods or regions to search, one per line (for example 'Toronto, ON', 'Kelowna, BC' or 'Le Plateau-Mont-Royal, Montreal'). Each one is looked up on realtor.ca and searched with the filters below.
startUrlsarrayOptionalStart URLs
realtor.ca URLs: map search pages (copy the URL after setting your filters on realtor.ca/map), single listing pages (realtor.ca/real-estate/...) or city pages (realtor.ca/on/toronto/real-estate). Map URLs keep their own filters.
maxListingsintegerOptionaldefault 20Max listings per search
Stop each location or search URL after this many listings. 0 means all listings (large areas are split automatically to get past realtor.ca's 600-per-search limit).
Filters apply to the Locations searches. Map URLs use the filters in the URL.
transactionTypeenumOptionaldefault "sale"For sale or rent
Search listings for sale or for rent.
propertyCategoryenumOptionaldefault "residential"Category
Residential homes or commercial property.
propertyTypeenumOptionaldefault "any"Property type
realtor.ca property type.
buildingTypeenumOptionaldefault "any"Building type
Only this building type.
minPriceintegerOptionalMin price (CAD)
Lowest price. For rentals this is the monthly rent.
maxPriceintegerOptionalMax price (CAD)
Highest price. For rentals this is the monthly rent.
minBedsintegerOptionalMin bedrooms
At least this many bedrooms.
minBathsintegerOptionalMin bathrooms
At least this many bathrooms.
listedWithinDaysintegerOptionalListed within (days)
Only listings added to realtor.ca in the last N days (1 to 365).
keywordsstringOptionalKeywords
Words that must appear in the listing, for example 'pool' or 'waterfront'.
sortenumOptionaldefault "newest"Sort by
Order of results. Very large searches that are split into map tiles are not globally sorted.
getDetailsbooleanOptionaldefault falseFull listing details
Load each listing's detail record: rooms with dimensions, appliances, heating and cooling, amenities, tax, maintenance fee type, all agents and media. Slower (one extra request per listing).
simplifyOutputbooleanOptionaldefault falseSimplify output
Save only flat, readable fields (no nested realtor.ca objects). Easier for CSV and Excel.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
realtor.ca blocks most datacenter IPs, so residential proxies are the default.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| PhotoURL | any | Photo |
| Url | any | Listing |
| MlsNumber | any | MLS # |
| Price | any | Price |
| TransactionType | any | Type |
| Address | any | Address |
| City | any | City |
| Province | any | Province |
| BuildingType | any | Building |
| Bedrooms | any | Beds |
| BathroomTotal | any | Baths |
| SizeInterior | any | Interior size |
| LandSize | any | Land size |
| ListedDate | any | Listed |
| AgentName | any | Agent |
| OrganizationName | any | Brokerage |
| AgentPhone | any | Agent phone |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Listing | One realtor.ca listing saved (full details included when enabled). | $0.0006 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('roamandroof/realtor-ca-scraper').call({
"locations": [
"Toronto, ON"
],
"maxListings": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run roamandroof/realtor-ca-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=roamandroof/realtor-ca-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Listings from a Realtor.ca map URL with full details.
Newest listings from a map URL.
Rentals up to 4,000 CAD, cheapest first.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.