Realtor.ca Property Listings Scraper
Pricing
Pay per event
Realtor.ca Property Listings Scraper
Extract Canadian Realtor.ca listings: prices, MLS IDs, addresses, photos, agents, brokerages, coordinates, and listing URLs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Extract Canadian property listings from Realtor.ca search areas with prices, MLS numbers, addresses, photos, agents, and brokerage details.
What does Realtor.ca Property Listings Scraper do?
Realtor.ca Property Listings Scraper turns public Realtor.ca map searches into structured datasets.
It collects property records from Canadian search areas and saves them in a table that can be exported as JSON, CSV, Excel, XML, or used directly through the Apify API.
Use it to monitor Canadian real-estate inventory, price changes, agent leads, brokerage activity, and local housing market supply.
Who is it for?
- ๐๏ธ Real-estate investors tracking listings in target Canadian markets.
- ๐ข Brokerages monitoring competitor inventory and agents.
- ๐ Market analysts building housing dashboards.
- ๐งฉ Proptech teams enriching internal property databases.
- ๐ฌ Lead-generation teams collecting agent and brokerage contact context.
Why use this scraper?
Realtor.ca data is spread across interactive map pages.
This actor gives you repeatable extraction without manually opening each listing.
You can schedule it daily, compare datasets over time, and plug the results into your CRM or BI stack.
What data can it extract?
| Field | Description |
|---|---|
propertyId | Realtor.ca property ID |
mlsNumber | MLS listing number when available |
listingUrl | Public Realtor.ca listing page |
price | Display price |
priceUnformatted | Numeric price |
propertyType | Apartment, house, townhouse, land, etc. |
addressText | Full listing address text |
latitude, longitude | Map coordinates |
bedrooms, bathrooms | Bedroom and bathroom counts |
sizeInterior, lotSize | Building and lot sizes when available |
photos | Listing image URLs |
agentNames | Listing agent names |
brokerageNames | Brokerages attached to the listing |
phones | Agent phone numbers from the search payload |
sourceSearch | Search area that produced the record |
scrapedAt | Extraction timestamp |
How much does it cost to scrape Realtor.ca listings?
The actor uses pay-per-event pricing.
You pay a small run-start fee plus a per-listing event for each saved property record.
The exact price is shown on the Apify Store pricing panel before you start a run.
Use a small maxItems value for a first test, then scale after confirming that the selected map area returns the data you need.
How to use Realtor.ca Property Listings Scraper
- Open the actor on Apify.
- Keep the default Toronto search area or add your own Canadian bounding box.
- Set
maxItemsto the number of listings you need. - Optionally add price filters.
- Run the actor.
- Download the dataset or connect it to your workflow.
Input: search areas
The most reliable input is locations.
Each location needs:
namelatitudeMinlatitudeMaxlongitudeMinlongitudeMax
Example:
{"locations": [{"name": "Toronto, ON","latitudeMin": 43.55,"latitudeMax": 43.9,"longitudeMin": -79.75,"longitudeMax": -79.1}],"maxItems": 100}
Input: start URLs
You can also pass Realtor.ca map URLs in startUrls if the URL contains map-bound parameters such as LatitudeMin, LatitudeMax, LongitudeMin, and LongitudeMax.
The actor extracts those bounds and uses them as search areas.
Input: filters
Available filters include:
maxItemsrecordsPerPageminPricemaxPricetransactionTypeIdpropertyTypeGroupIdpropertySearchTypeIdproxyCountryCode
Output example
{"propertyId": "29974459","mlsNumber": "W13508020","listingUrl": "https://www.realtor.ca/real-estate/29974459/example","price": "$495,000","priceUnformatted": 495000,"propertyType": "Apartment","addressText": "530 - 3100 KEELE STREET|Toronto, Ontario","bedrooms": "2","bathrooms": "2","agentNames": ["Example Agent"],"brokerageNames": ["Example Brokerage"],"sourceSearch": "Toronto, ON","scrapedAt": "2026-07-01T00:00:00.000Z"}
Tips for best results
- Start with one city or neighborhood bounding box.
- Use
maxItems25-100 for initial tests. - Increase gradually for scheduled monitoring.
- Keep the proxy country set to
CAfor Canadian listings. - Use smaller map boxes for neighborhood-level dashboards.
Common use cases
- Track new listings in Toronto, Vancouver, Calgary, Ottawa, or Montreal.
- Build a daily property inventory database.
- Monitor price bands for investment criteria.
- Collect agent and brokerage lead context.
- Compare listing counts between neighborhoods.
Integrations
Use Apify integrations to move the dataset into:
- Google Sheets for market watchlists.
- Zapier or Make for lead workflows.
- BigQuery or Snowflake for analytics.
- Webhooks for daily alerts.
- Custom APIs through the Apify client.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/realtor-ca-property-listings-scraper').call({locations: [{name: 'Toronto, ON',latitudeMin: 43.55,latitudeMax: 43.9,longitudeMin: -79.75,longitudeMax: -79.1,}],maxItems: 100,});console.log(run.defaultDatasetId);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('MY-APIFY-TOKEN')run = client.actor('automation-lab/realtor-ca-property-listings-scraper').call(run_input={'locations': [{'name': 'Toronto, ON','latitudeMin': 43.55,'latitudeMax': 43.9,'longitudeMin': -79.75,'longitudeMax': -79.1,}],'maxItems': 100,})print(run['defaultDatasetId'])
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~realtor-ca-property-listings-scraper/runs?token=MY-APIFY-TOKEN' \-H 'Content-Type: application/json' \-d '{"locations":[{"name":"Toronto, ON","latitudeMin":43.55,"latitudeMax":43.9,"longitudeMin":-79.75,"longitudeMax":-79.1}],"maxItems":100}'
MCP integration
Use this actor from Claude through the Apify MCP server.
MCP URL:
https://mcp.apify.com/?tools=automation-lab/realtor-ca-property-listings-scraper
Add the actor to Claude Code:
$claude mcp add apify-realtor-ca "https://mcp.apify.com/?tools=automation-lab/realtor-ca-property-listings-scraper"
Example MCP JSON config:
{"mcpServers": {"apify-realtor-ca": {"url": "https://mcp.apify.com/?tools=automation-lab/realtor-ca-property-listings-scraper"}}}
Example prompts:
- "Scrape 100 Realtor.ca listings in Toronto and summarize average price by property type."
- "Run the Realtor.ca scraper for this bounding box and export the agent names."
- "Compare today's listings with yesterday's Realtor.ca dataset."
Scheduling
Schedule the actor daily or weekly to build a historical property inventory.
Use a consistent bounding box and store each run's dataset ID.
Then compare MLS numbers across runs to detect new or removed listings.
Data quality notes
Realtor.ca fields vary by listing.
Some listings may not include every size, postal code, phone, or description field in the search payload.
The actor keeps optional fields as null or empty arrays instead of guessing.
Troubleshooting
If a run returns fewer listings than expected, increase the map area or remove price filters.
If a run fails with an anti-bot response, retry with proxyCountryCode set to CA and a smaller recordsPerPage value.
Legality
This actor extracts publicly available listing information.
You are responsible for using the data in accordance with Realtor.ca terms, applicable laws, privacy rules, and your own compliance requirements.
Avoid collecting or using personal data beyond what your workflow lawfully requires.
Related scrapers
Other automation-lab actors that may fit real-estate workflows:
- Zillow Scraper: https://apify.com/automation-lab/zillow-scraper
- Google Maps Lead Finder: https://apify.com/automation-lab/google-maps-lead-finder
- Website Contact Finder: https://apify.com/automation-lab/website-contact-finder
FAQ
Can I scrape any Canadian city?
Yes, if you provide a bounding box for the target area and Realtor.ca has public listings there.
Does it scrape listing detail pages?
The MVP saves fields available from the public search payload, including listing URLs for detail-page follow-up.
Can I monitor price changes?
Yes. Schedule repeat runs and compare mlsNumber, propertyId, and priceUnformatted over time.
Does it need proxies?
Yes. Realtor.ca uses Incapsula anti-bot controls, so the actor uses Apify Residential Proxy by default.
Why are some fields empty?
Realtor.ca does not expose every field for every listing in the search response. Empty values are preserved as null or empty arrays.