Yugenox Data

Canadian real estate, Realtor.ca

A Realtor.ca scraper for active listings, with the listing agent on every row

Pick Canadian cities, choose sale or rent and residential or commercial, and get one row per active listing: MLS® number, asking price, beds, baths, interior size, listing date, map coordinates, main photo, the listing link and the listing agent with brokerage and phone. $1.00 per 1,000 listings. No API key, no MLS® membership and no login.

Does Realtor.ca have an API?

Not a public one: CREA's REALTOR.ca DDF® is a managed feed for REALTORS®, broker owners and the technology providers who build their websites. The Realtor.ca API options page compares DDF®, board feeds and this Actor, with costs. More example code for the Realtor.ca Property Scraper is in the realtor-ca-data repository on GitHub.

Input

InputWhat you giveNotes
locationsCities, as "Toronto, ON" or just "Toronto"One of the 18 cities below. Other place names are skipped and named in the run log
limitPerLocationListings per cityUp to about 500 per city in one run
transactionTypesale (default) or rentFor-sale or for-rent listings
propertyTyperesidential (default) or commercialCommercial works the same way

The 18 cities it searches:

Write Montreal without the accent. Each city is searched as a fixed map area about 25 km across, around its centre. That can leave out a large city's outer edges and can overlap a neighbouring city on the list; a listing found by two cities in one run is saved once. If none of your locations is supported, the run stops before it starts searching and says so.

What each row holds

FieldWhat it holds
mlsNumberThe MLS® number. Use it as your key
price, priceValueAsking price as shown ("$949,900") and as a number
bedrooms, bathroomsAs published; "2 + 1" means two bedrooms plus a den
sizeInteriorInterior size as published
propertyType, ownershipTypeFor example Single Family, Freehold, Condominium/Strata
address, cityProvince, postalCode, provinceWhere the property is
latitude, longitudeMap coordinates
listedDateUTCWhen the listing went up on REALTOR.ca, as .NET ticks (100-nanosecond steps since 1 January 0001, UTC). The realtor-ca-data scripts on GitHub turn it into a date
daysOnRealtorREALTOR.ca's own time-on-site label as a bare number: minutes or hours for a listing under a day old, days for about its first week, then empty. Use listedDateUTC for a listing's age
photoUrl, listingUrlThe main photo and the REALTOR.ca listing page
agentsThe listing agent or agents: REALTOR.ca agent ID, name, brokerage and phone
locationThe city you searched, for grouping

The main fields of a row (made-up values and a made-up agent):

Sample row
{
  "mlsNumber": "W1234567",
  "price": "$949,900",
  "priceValue": 949900,
  "bedrooms": "2 + 1",
  "bathrooms": "2",
  "sizeInterior": "65 m2",
  "propertyType": "Single Family",
  "ownershipType": "Condominium/Strata",
  "address": "100 EXAMPLE AVE W",
  "cityProvince": "Toronto, Ontario M6P0D0",
  "postalCode": "M6P0D0",
  "province": "Ontario",
  "latitude": 43.65,
  "longitude": -79.46,
  "daysOnRealtor": 3,
  "listedDateUTC": "639266331000000000",
  "photoUrl": "https://cdn.realtor.ca/listings/.../photo.jpg",
  "listingUrl": "https://www.realtor.ca/real-estate/...",
  "agents": [
    {
      "individualId": 1234567,
      "name": "JANE DOE",
      "brokerage": "EXAMPLE REALTY INC., BROKERAGE",
      "phone": "416-555-0198"
    }
  ],
  "location": "Toronto, ON"
}

What it costs

One price on every Apify plan, read from the Actor's Store pricing on 2026-10-15.
EventPriceCharged for
Listing saved$0.001Each listing saved to your dataset
Run start$0.002Once per run at the default 1 GB of memory (one event per GB)

200 Toronto listings cost $0.20, plus $0.002 for the run start ($0.202 in all). All 18 cities at 100 listings each, in one run, is 1,800 listings: $1.80 plus the run start. Several other Realtor.ca Actors on the Apify Store also charge about $1 per 1,000 results (Store prices on 2026-10-15), so compare their inputs and run statistics too; if you need a city that isn't on the list above, another Actor may cover it.

What it doesn't do

Export Realtor.ca listings to Excel

When the run finishes, open its Output tab and export the dataset as Excel or CSV, or fetch https://api.apify.com/v2/datasets/<datasetId>/items?format=xlsx with your API token. Add &unwind=agents for one line per listing agent. To turn listedDateUTC into a date in Excel, use =(A2-621355968000000000)/864000000000+25569 and format the cell as a date.

What people use it for

The listing agent's name and business phone are published on REALTOR.ca so clients can reach them. They are still personal information under Canada's privacy law, so use them for the purpose you collected them for, follow REALTOR.ca's terms, and check the anti-spam rules (CASL) before sending commercial emails or texts.

Use it from an AI assistant

The Realtor.ca Property Scraper works as a tool in ChatGPT, Claude, Cursor and VS Code through Apify's hosted MCP server. Add this URL as a custom connector and sign in with your Apify account; runs bill to that account. Then ask in plain English, for example "get 100 for-rent listings in Halifax and give me the median asking rent by number of bedrooms".

MCP server URL
https://mcp.apify.com/?tools=fetch-actor-details,yugenox/realtor-ca-property-scraper

The AI setup guide walks through each client; use this URL in place of the YouTube or Instagram one.

Run it from code

100 for-sale listings in each of Toronto and Ottawa: 200 listings, $0.20 plus the run start.

JavaScript
// Save as run.mjs, then: npm i apify-client && APIFY_TOKEN=... node run.mjs
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('yugenox/realtor-ca-property-scraper').call({
  locations: [
    "Toronto, ON",
    "Ottawa, ON"
  ],
  limitPerLocation: 100,
  transactionType: "sale",
  propertyType: "residential"
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) console.log(item.mlsNumber, item.priceValue, item.cityProvince);

Not affiliated with or endorsed by The Canadian Real Estate Association (CREA) or REALTOR.ca. MLS® and Multiple Listing Service® are trademarks owned by CREA, and REALTOR® is a trademark controlled by CREA.

Questions people ask

Does Realtor.ca have a public API?

No. REALTOR.ca DDF® is CREA's listing feed for REALTORS®, broker owners and the websites they work with, and it needs a REALTOR.ca sign-in. This Actor reads the public listing results instead, at $1.00 per 1,000 listings.

Which cities does it cover?

Toronto, Mississauga, Brampton, Vaughan, Markham, Oakville, Hamilton, Ottawa, London, Vancouver, Surrey, Burnaby, Victoria, Calgary, Edmonton, Montreal, Winnipeg, Halifax. Type them as "Toronto, ON" or just "Toronto", and write Montreal without the accent.

Can I search by postal code or neighbourhood?

Not with this Actor: it searches the 18 cities. Filter the rows by postalCode afterwards.

Can I get sold prices or price history?

No. It returns active listings only, newest first. You can schedule it and keep your own snapshots, but in a big city each run covers only the most recent listings, so it won't find every listing again each time.

Are agent emails included?

No. REALTOR.ca doesn't publish agent emails. Each listing carries the listing agent's name, brokerage and phone as shown on REALTOR.ca.

Is it legal to scrape REALTOR.ca?

The Actor collects only listing data that anyone can view on REALTOR.ca without an account. Collecting public data is generally legal, but you are responsible for how you use it: listing agents' names and business phones are personal data, so follow PIPEDA, GDPR or CCPA where they apply and REALTOR.ca's terms, and ask a lawyer if unsure.

Run it on your own data

Open the Realtor.ca Property Scraper on Apify, pick your cities and press Start. You pay per listing from your own Apify account, with no subscription to us.

Last updated 2026-10-15.