Realtor.ca Listings Scraper avatar

Realtor.ca Listings Scraper

Pricing

Pay per event

Go to Apify Store
Realtor.ca Listings Scraper

Realtor.ca Listings Scraper

Search Realtor.ca, Canada's national real-estate listing site from CREA, by city or bounding box and get normalized listing rows: price, address, beds, baths, and agent or brokerage contact details, with photos, for investment and lead-gen pipelines.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Realtor.ca Listings Scraper

Realtor.ca Listings Scraper

$3.20 / 1,000 results — pay only for results, no credit card to try.

Normalized Canadian residential listings from Realtor.ca, CREA's national listing site — price, address, beds/baths, agent and brokerage contact, and photos, ready for a spreadsheet or a pipeline, not a scroll-and-read map search.

🎯 What this scrapes

Give it a curated Canadian city or an explicit bounding box, plus a transaction type (sale or rent), and it returns one normalized record per listing: MLS number, price, street address, latitude/longitude, property type, beds/baths, interior size, amenities, agent name and phone, brokerage name and address, photo URLs, and the listing's own detail-page URL — deduplicated by listing ID across every page fetched in the run. Canada's #1 residential portal already draws serious scraping demand — the category's current leader alone runs over 16,000 times every 30 days — and this Actor targets the same api2.realtor.ca search endpoint the site's own map search calls.

🔥 Features

  • Curated 10-city convenience input (Toronto, Vancouver, Montreal, and more) or an explicit bounding box for precise areas.
  • Sale and rent transaction types in one Actor.
  • Price parsed from the listing's own numeric field, not scraped off formatted display text — with a formatted-text fallback if the numeric field is ever missing.
  • Agent name, phone, and brokerage name/address normalized per row.
  • Deduplicated by listing ID across pages within a run.
  • English and French response modes (cultureId).

💡 Use cases

  • Investment deal screening — pull normalized for-sale listings across any curated city or bounding box, with price/beds/baths ready for comparables analysis.
  • Rental market research — switch transaction type to rent to track asking rents across a city or micro-area.
  • Agent/brokerage lead-gen — collect agent name, phone, and brokerage contact per listing without visiting each detail page by hand.
  • Cross-city market monitoring — run the curated city list on a schedule to track new listings and price movement over time.

⚙️ How to use it

  1. Click Try for free.
  2. Set searchArea to {"city": "Toronto"} (or any curated city), or pass an explicit {"latitudeMax","latitudeMin","longitudeMax","longitudeMin"} bounding box.
  3. Pick transactionType (sale or rent) and maxResults.
  4. Run. Results land in the default dataset — export to JSON or CSV.

📥 Input

FieldTypeDefaultDescription
searchAreaobject{"city": "Toronto"}Either {"city": "<curated city>"} or an explicit bounding box. Exactly one form
transactionTypestring"sale"sale or rent
cultureIdstring"1"1 = English, 2 = French
maxResultsinteger48Cap on rows returned for this run (server page size 12, server max 600)
proxyConfigurationobject{"useApifyProxy": true}Apify Proxy configuration
{
"searchArea": {"city": "Toronto"},
"transactionType": "sale",
"cultureId": "1",
"maxResults": 48,
"proxyConfiguration": {"useApifyProxy": true}
}

Curated cities in v1: Toronto, Vancouver, Montreal, Calgary, Edmonton, Ottawa, Winnipeg, Quebec City, Halifax, Victoria. Need somewhere else? Pass an explicit bounding box instead.

📤 Output

One row per listing, deduplicated by id:

{
"id": "30320779",
"mlsNumber": "C13821958",
"price": 699000.0,
"currency": "CAD",
"transactionType": "sale",
"streetAddress": "3703 - 35 MARINER TERRACE|Toronto (Waterfront Communities), Ontario M5V3V9",
"latitude": 43.6398435,
"longitude": -79.3920963,
"propertyType": "Single Family",
"bedrooms": "1 + 1",
"bathroomTotal": 1,
"sizeInterior": "65.0316 m2",
"storiesTotal": "",
"amenities": ["Security/Concierge", "Exercise Centre", "Visitor Parking", "Storage - Locker"],
"floorAreaMeasurements": ["700+ sqft"],
"agentName": "ROY WANG",
"agentPhone": "905-909-0101",
"brokerageName": "BAY STREET GROUP INC.",
"brokerageAddress": "8300 WOODBINE AVE STE 500|MARKHAM, Ontario L3R9Y7",
"photoUrls": ["https://cdn.realtor.ca/listings/TS639258083800500000/reb82/highres/8/c13821958_1.jpg"],
"listingDetailUrl": "https://www.realtor.ca/real-estate/30320779/3703-35-mariner-terrace-toronto-waterfront-communities-waterfront-communities-c1",
"searchCity": "Toronto",
"page": 1,
"scrapedAt": "2026-09-24T00:00:00Z"
}

💰 Pricing

EventPrice
Actor start$0.20
Result row emitted$0.003

Pay-per-event: 1,000 listings = $3.20 per run ($0.20 start + 1000 x $0.003). No data → no charge (only the small actor-start warm-up fee).

🚧 Limitations

  • v1 covers one search (one city or bounding box, one transaction type) per run, capped at the server's own 600-result ceiling.
  • Only residential listings — commercial and land property groups are out of scope for v1.
  • Listing-detail-page-only data (full photo galleries, open-house schedules, tax history, school ratings) isn't part of this search payload and isn't returned.
  • No agent email and no listing description text: Realtor.ca's search results carry neither (emails are contact-form references, remarks are blank), so we don't emit empty columns for them.
  • Curated city list covers 10 major Canadian cities; anywhere else needs an explicit bounding box.

❓ FAQ

Do I need a Realtor.ca account or API key? No. This Actor reads Realtor.ca's own publicly listed search-result data — no login, no API key.

Can I search a custom area instead of a city? Yes — pass an explicit bounding box (latitudeMax/latitudeMin/ longitudeMax/longitudeMin) instead of a city name.

What happens if my search matches nothing? The run finishes successfully with zero rows and a status message naming what was searched — no charge beyond the small actor-start fee.

💬 Your feedback

Found a field that's off, or a city that needs adding to the curated list? Open an issue via the Actor's Apify Store page or reach out at apify.com/DevilScrapes — we read every report.