Royal LePage Listings Scraper — Canada MLS & Photos
Pricing
from $1.96 / 1,000 royal lepage property records
Royal LePage Listings Scraper — Canada MLS & Photos
Scrape Royal LePage listings across Canada: CAD price, MLS number, address, beds, baths, photos, rooms and brokerage. USD 2.44 per 1,000 listings.
Pricing
from $1.96 / 1,000 royal lepage property records
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
Royal LePage Listings Scraper exports public Royal LePage property listings across Canada: asking price in CAD, MLS number, address, property type, bedrooms, bathrooms, description, photos, feature table, room sizes and brokerage. It costs USD 2.44 per 1,000 listings on the FREE tier (USD 0.002444 per listing), and you pay only for listings saved to your dataset.
It is built for Canadian investors, agents, proptech teams and researchers who track new listings in a city, and for AI agents that need structured Canadian listing data.
What does the Royal LePage listings scraper return?
One record per listing, deduplicated by Royal LePage listing ID. Missing values are null, empty arrays or empty objects.
| Field | What you get |
|---|---|
listingId, mlsNumber, url, title | Royal LePage ID, MLS® number, listing link and address headline |
price, priceCurrency | Asking price as a number, in CAD |
status, transactionType, propertyType | Flag such as "new listing", sale or rent, House / Apartment / Townhouse |
streetAddress, city, province, postalCode, country | Location |
latitude, longitude | Coordinates as published on the page |
bedrooms, bathrooms | Counts from the listing |
description, datePosted | Property remarks and posting date |
imageUrl, imageUrls | Main photo and up to 100 photo URLs |
features | Label-to-value map, for example Heating Type, Floor Space, Parking |
rooms | Room name, level, and metric and imperial dimensions |
brokerage | Listing brokerage |
sourceUrl, scrapedAt, detailLevel | Source search page, time, and full or summary |
The run also writes SUMMARY with the outcome (DATA, EMPTY, BLOCKED, FAILED or REJECTED), records delivered and charged, stop reason, collection pages visited, failed requests and warnings. A run that is blocked or fails with no listings ends as failed, not green.
How do I scrape Royal LePage listings for a city?
Open the city or neighbourhood results on royallepage.ca, apply your filters, and paste the URL into startUrls. The Actor follows the result pages, opens each listing for the full record, and stops at maxResults.
{"startUrls": [{ "url": "https://www.royallepage.ca/en/bc/vancouver/properties/" }],"maxResults": 50,"maxPages": 3,"includeDetails": true}
| Input | Default | Meaning |
|---|---|---|
startUrls | Toronto properties | Royal LePage result-page or property-page URLs (English /en/ or French /fr/) |
maxResults | 25 | Listings per run, 1–1,000; also your billing cap |
maxPages | 5 | Result pages to follow, 1–100; property URLs do not count |
includeDetails | true | Opens each listing for description, photos, features, rooms and brokerage; false keeps the result-card data |
maxConcurrency | 3 | Pages fetched at the same time, 1–10 |
The Actor chooses its own access route; there is no proxy setting to configure.
Is the Royal LePage scraper working right now?
Yes. On 2026-10-26 runs from Apify's cloud were refused on every listing page (HTTP 403) and one hit the 300-second timeout. The 2026-10-27 repair routes requests through an access path Royal LePage accepts, adds a time guard that stops the crawl and writes SUMMARY 30 seconds before the run timeout, and makes a blocked run end as failed. Apart from the start event, you pay only for listings saved.
When should I use it, and when not?
Use it when you need:
- new Royal LePage listings in one Canadian city or neighbourhood, with MLS numbers and photos;
- room dimensions and feature tables for comparing homes;
- the brokerage behind each listing.
Do not use it when you need:
- MLS® listings from every brokerage on Realtor.ca, with agent contacts: use Realtor.ca Scraper & API;
- luxury homes worldwide: use JamesEdition Real Estate Scraper;
- sold prices or price history: Royal LePage keeps those behind a login, and this Actor does not log in;
- private sellers and rentals on classifieds: use Kijiji.ca Scraper.
What does the output look like?
Two listings from a default Toronto run on 2026-10-26 (descriptions, photos, features and rooms shortened):
[{"listingId": "29490014","mlsNumber": "W14113820","title": "50 MAYDOLPH ROAD , Toronto, Ontario M9B 1W5","url": "https://www.royallepage.ca/en/property/ontario/toronto/50-maydolph-road/29490014/mlsw14113820/","status": "new listing","transactionType": "SALE","propertyType": "House","price": 1399900,"priceCurrency": "CAD","city": "Toronto","province": "ON","postalCode": "M9B 1W5","bedrooms": 4,"bathrooms": 4,"datePosted": "2026-10-24","imageUrls": ["https://rlp.jumplisting.com/photos/29/49/0/14/29490014_0_lg.jpg"],"features": { "Style": "Detached", "Architectural Style": "Bungalow", "Exterior Finish": "Brick" },"rooms": [{ "name": "3rd Bedroom", "level": "Basement Level", "dimensionsMetric": "4.72 m x 3.05 m", "dimensionsImperial": "15.49 ft x 10.01 ft" }],"brokerage": "PANORAMA R.E. LIMITED","detailLevel": "full"},{"listingId": "29490472","mlsNumber": "C14114272","propertyType": "Apartment","price": 375000,"priceCurrency": "CAD","streetAddress": "918 - 1 KING STREET W","bedrooms": 0,"bathrooms": 1,"features": { "Amenities": "Exercise Centre, Party Room, Sauna", "Floor Space": "0 - 499 sqft Square Feet" },"brokerage": "DREAM HOME REALTY INC.","detailLevel": "full"}]
Pricing: how much does Royal LePage Listings Scraper cost?
Pay per event, with Apify platform usage included. The listing event is charged automatically for each listing saved to the dataset; duplicates are skipped.
| Event | FREE | BRONZE | SILVER | GOLD / PLATINUM / DIAMOND |
|---|---|---|---|---|
| Actor start (per started GB of allocated memory) | USD 0.006251 | USD 0.006094 | USD 0.005938 | USD 0.005 |
| Royal LePage property record | USD 0.002444 | USD 0.002382 | USD 0.002321 | USD 0.001955 |
The default memory is 512 MB, so a run has one start event.
- Default run, 25 listings (FREE): 0.006251 + 25 × 0.002444 = about USD 0.07.
- 1,000 listings (FREE): 0.006251 + 1,000 × 0.002444 = about USD 2.45.
The status message and SUMMARY show costs from the live prices of your pricing tier.
What are the limits?
- Speed. Up to 60 requests per minute with three retries per page. With details on, every listing is one extra page;
includeDetails: falsereads about 45 listings per result page and is much faster. - Timeout. The default run timeout is 300 seconds. The Actor stops cleanly 30 seconds before it and reports the stop reason in
SUMMARY. Listing pages take several seconds each: on 2026-10-27, 25 detailed listings took about 2 minutes at the default concurrency of 3, and 40 took about 1.5 minutes at concurrency 8. For more than about 60 detailed listings, raisemaxConcurrencyor the run timeout. - Access. After 10 failed requests with nothing saved, the Actor stops and reports
BLOCKED. - Public data only. No sold data, no agent emails or phone numbers.
Use it from an AI assistant
The Actor works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/royal-lepage-canada-scraper to your client.
Example prompt: "Get 20 new Royal LePage listings in Calgary with price, MLS number, bedrooms, bathrooms and brokerage, and sort them by price."
Run it from the API
JavaScript (apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('muhammadafzal/royal-lepage-canada-scraper').call({startUrls: [{ url: 'https://www.royallepage.ca/en/on/ottawa/properties/' }],maxResults: 25,includeDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python (apify-client 3.x):
from apify_client import ApifyClientclient = ApifyClient(token='YOUR_APIFY_TOKEN')run = client.actor('muhammadafzal/royal-lepage-canada-scraper').call(run_input={'startUrls': [{'url': 'https://www.royallepage.ca/en/bc/vancouver/properties/'}],'maxResults': 25,'includeDetails': False,})items = client.dataset(run.default_dataset_id).list_items().items
FAQ
Do I need a Royal LePage account or API key?
No. The Actor reads the public listing pages and returns JSON, CSV or Excel through your Apify dataset.
Does it return MLS numbers?
Yes, in mlsNumber, when the listing page shows one.
Can I scrape French Royal LePage pages?
URLs under /fr/ are accepted. The parser was built on the English pages, so check a small run before a large French one.
Can I get sold prices?
No. Sold data needs a Royal LePage login, and the Actor only reads public pages.
How fresh is the data?
Each run reads the live pages, so prices and status are current as of scrapedAt. Schedule the same input daily to track new listings.
Why did my run end with no listings?
Check SUMMARY. BLOCKED means Royal LePage refused the requests; retry later. EMPTY means the search had no matching listings.
Related Actors
- Realtor.ca Scraper & API: MLS® listings from all brokerages, with agents.
- JamesEdition Real Estate Scraper: luxury homes worldwide with price, size and photos.
- Kijiji.ca Scraper: Canadian classified listings.
- Yellow Pages Canada Scraper: Canadian local business leads.
Responsible use
Collect only public listing data and respect Royal LePage's terms, the rights of listing brokerages and CREA's DDF® rules. Keep request rates low, process any personal data under Canadian privacy law, and do not republish listing content without permission. Verify every listing before a financial decision.
Last verified: 2026-10-27