icon

REALTOR.ca Scraper

Scrape MLS Listings and Prices from REALTOR.ca

Extract Canadian property listings, CAD prices, MLS numbers, beds, baths, square footage, and listing agent details from Canada's #1 real estate portal. REALTOR.ca is owned by CREA, pulls around 40M monthly visits, and sits behind Imperva, which greets bots and datacenter IPs with an 'Access Denied - Error 15' block page. Scrape.do handles it automatically.

START SCRAPING FOR FREE

Start scraping today with 1000 free credits. No Credit Card Required

REALTOR.ca screenshot

40M Monthly Visits. Canada's #1 Real Estate Portal. One API.

REALTOR.ca is the #1 real estate portal in Canada by SimilarWeb category rank, pulling in around 40.1M monthly visits with 93.6% of traffic from Canada in 2026. Owned and operated by the Canadian Real Estate Association (CREA), it aggregates MLS Systems listings from real estate boards nationwide, and in 2025 it drew 633 million visits from 113 million unique visitors and captured roughly 61% of all Canadian real estate web traffic. Even well-funded foreign rivals like Zillow have failed to displace it.

For scrapers this is the dataset for Canadian residential and commercial real estate. With Scrape.do you can pull list prices in CAD down to the postal code (FSA), capture MLS numbers, beds, baths, and square footage, monitor new listings and price changes across Toronto, Vancouver, Montreal, and Calgary, and feed valuation models, comparable-sales tools, or lead-gen products with property type, lot size, and listing brokerage data through a single API call.

40M Monthly Visits. Canada's #1 Real Estate Portal. One API.

Imperva WAF. Access Denied - Error 15. Handled.

REALTOR.ca runs behind Imperva (Incapsula), and it does not hesitate to slam the door. Send a request that looks automated or comes from a datacenter IP and REALTOR.ca returns an HTTP 403 with a red 'Access Denied - Error 15' page stamped with your IP and an Incident ID instead of the listing HTML. Headless-browser fingerprints get blocked outright, so a naive render-mode scraper just collects error pages.

Scrape.do routes REALTOR.ca requests through residential IPs in super mode, rotates sessions automatically, and clears the Imperva check so you get the full property HTML back. In our recon, plain super mode returned the complete 239KB listing page while every render-mode attempt failed, so a single super-mode call is all it takes. No proxy lists, no CAPTCHA solvers, no maintenance.

Imperva WAF. Access Denied - Error 15. Handled.

How to Scrape REALTOR.ca

1

Select a Target

Property Listing screenshot
2

Send API Request

import requests
import urllib.parse

token = "<SDO-token>"
targetUrl = "https://www.realtor.ca/real-estate/29633490/69-home-avenue-champlain-613-vankleek-hill"
render = "false"  # set to "true" to enable JavaScript rendering
super = "true"  # set to "false" to disable residential proxies

encodedUrl = urllib.parse.quote(targetUrl)
url = f"https://api.scrape.do/?token={token}&url={encodedUrl}&render={render}&super={super}"

response = requests.get(url)

print(response.text)
3

Get HTML

HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>69 HOME AVENUE, Champlain, Ontario K0B1R0 | REALTOR.ca</title>
  <meta name="description" content="Single Family (freehold) house 2 bedrooms, 2 bathrooms, 69 home avenue champlain, ontario, for sale $395,000." />
  <script type="application/ld+json">
  {
    "@context": "http://schema.org/",
    "@type": "Product",
    "name": "69 HOME AVENUE, Champlain, Ontario K0B1R0",
    "sku": "29633490",
    "category": "Single Family > House",
    "offers": {
      "@type": "Offer",
      "priceCurrency": "CAD",
      "price": "395000.00",
      "businessFunction": "sell"
    }
  }
  </script>
</head>
<body>
  <div id="listingDetailsHeaderCon">
    <div class="propertyCardPrice" id="listingPrice" data-value-cad="$395,000 ">
      <div id="listingPriceValue">$395,000 </div>
    </div>

    <div class="propertyCardMLSNumber">MLS<sup>&reg;</sup> Number:
      <span id="MLNumberVal">X13023784</span>
    </div>

    <div class="propertyCardOfficeCon">
      <div class="propertyCardOfficeName">ROYAL LEPAGE PERFORMANCE REALTY</div>
    </div>

    <div class="propertyHeaderCon">
      <div class="listingIconCon" id="BedroomIcon">
        <div class="listingIconNum">2</div>
        <div class="listingIconText">Bedrooms</div>
      </div>
      <div class="listingIconCon" id="BathroomIcon">
        <div class="listingIconNum">2</div>
        <div class="listingIconText">Bathrooms</div>
      </div>
      <div class="listingIconCon" id="SquareFootageIcon">
        <div class="listingIconNum">700 - 1100</div>
        <div class="listingIconText">Square Feet</div>
      </div>
    </div>
  </div>

  <div class="propertyDetailsSectionContentSubCon" id="propertyDetailsSectionContentSubCon_SquareFootage">
    <div class="propertyDetailsSectionContentLabel">Square Footage</div>
    <div class="propertyDetailsSectionContentValue">700 - 1100 sqft</div>
  </div>
  <!-- ... remaining listing content ... -->
</body>
</html>

Scrape.do has been a game-changer with powerful scraping tools, but what truly sets them apart is their excellent customer support.

user avatar
Rogerio C.

CTO

timertimer
capterra best customer support
< 5 min

Average Response Time

No tickets connect with expert engineers.

like changelike change
99.98%

Success rate

hierarchyhierarchy
110 Million

Proxies

trellotrello
+40%

Faster gateway than the closest competitor.

  • Trustpilot Reviews
  • G2 Reviews
  • Capterra Reviews
  • scrapedo capterra most recommended
  • scrapedo capterra best ease of use
  • scrapedo capterra best value
  • capterra best customer support
  • scrapedo capterra front runners

Reliable, Scalable,Unstoppable Web Scraping

START SCRAPING FOR FREE

Sounds great, but I have a few questions..

Yes. REALTOR.ca runs behind Imperva (Incapsula) and returns an HTTP 403 'Access Denied - Error 15' page to bots and datacenter IPs instead of the listing HTML. Scrape.do routes requests through residential IPs in super mode, clears the check, and returns the full page. In our recon, plain super mode returned the complete 239KB listing while every render-mode attempt got a 502, so success is highest with a single super=true call.

You can extract the list price in CAD, MLS number, number of bedrooms and bathrooms, square footage, property type (Single Family, condo, land, commercial), full address and postal code, listing brokerage and REALTOR name, property description, days on market, photos, and the JSON-LD Product block. Coverage spans every Canadian province and city, from Toronto and Vancouver condos to rural listings.

No, and it actually hurts. REALTOR.ca serves the full listing HTML server-side, so render mode is unnecessary, and Imperva blocks headless-browser fingerprints, which is why every render-mode request in our recon returned a 502. Use Scrape.do with super=true and render=false to pull the complete page reliably and at lower cost.