realtor.ca APIrealtor.ca ↗
Search and retrieve Canadian real estate listings from REALTOR.ca. Get MLS data, property details, photos, pricing, agent info, and pagination via 2 endpoints.
curl -X GET 'https://api.parse.bot/scraper/74c62a3e-07d2-4eb2-a736-d1542f09450d/search_listings?current_page=1&records_per_page=3' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for property listings within a geographic bounding box with price and property filters. Returns paginated results.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order: 6-D (price descending), 6-A (price ascending), 1-A (newest first) |
| price_max | string | Maximum price filter. Omitting returns all prices above price_min. |
| price_min | string | Minimum price filter |
| bedrooms_min | string | Minimum number of bedrooms. Omitting returns all bedroom counts. |
| current_page | string | Page number for pagination |
| latitude_max | string | Maximum latitude of search bounding box |
| latitude_min | string | Minimum latitude of search bounding box |
| longitude_max | string | Maximum longitude of search bounding box |
| longitude_min | string | Minimum longitude of search bounding box |
| building_type_id | string | Building type filter ID. Omitting returns all building types. |
| records_per_page | string | Number of results per page (max 50) |
| transaction_type_id | string | Transaction type: 2 (for sale), 3 (for rent) |
| property_type_group_id | string | Property type group: 1 (residential) |
| property_search_type_id | string | Property search type: 1 (residential), 0 (all) |
{
"type": "object",
"fields": {
"listings": "array of listing objects with id, mls_number, url, address, price, bedrooms, bathrooms, photos, agents, and more",
"pagination": "object containing current_page, total_pages, total_records, records_per_page, records_showing"
},
"sample": {
"data": {
"listings": [
{
"id": "29713601",
"url": "https://www.realtor.ca/real-estate/29713601/6123-edenwood-drive-mississauga-meadowvale",
"media": [
{
"url": "https://edenwood6123.lovable.app/",
"type": "VideoTourWebsite"
}
],
"price": "$1,349,900",
"agents": [
{
"name": "Jane Doe",
"phones": [
{
"type": "Telephone",
"number": "+1 (555) 012-3456"
}
],
"position": "Salesperson",
"brokerage": {
"logo": "",
"name": "EXP REALTY",
"phones": [
{
"type": "Telephone",
"number": "+1 (555) 012-3456"
}
],
"address": "4711 YONGE ST 10TH FLR|TORONTO, Ontario M2N6K8",
"website": "",
"designation": "Brokerage"
},
"has_email": true,
"last_name": "Doe",
"first_name": "Jane",
"profile_url": "https://www.realtor.ca/agent/2095298/jane-doe-..."
}
],
"photos": [
{
"low_res": "https://cdn.realtor.ca/listings/TS639137400819030000/reb82/lowres/8/w13094378_1.jpg",
"med_res": "https://cdn.realtor.ca/listings/TS639137400819030000/reb82/medres/8/w13094378_1.jpg",
"high_res": "https://cdn.realtor.ca/listings/TS639137400819030000/reb82/highres/8/w13094378_1.jpg"
}
],
"address": "6123 EDENWOOD DRIVE|Mississauga (Meadowvale), Ontario L5N2Y6",
"parking": [
"Attached Garage"
],
"stories": "2",
"bedrooms": "4",
"latitude": "43.5691963",
"lot_size": "46.3 x 151.7 FT",
"province": "Ontario",
"bathrooms": "4",
"longitude": "-79.7457792",
"price_raw": "1349900",
"status_id": "1",
"floor_area": "2000+ sqft",
"mls_number": "W13094378",
"description": "Welcome to 6123 Edenwood Dr...",
"listed_time": "19 min ago",
"postal_code": "L5N2Y6",
"lot_frontage": "46 ft ,3 in",
"building_type": "House",
"property_type": "Single Family",
"size_interior": "185.8045 m2",
"half_bathrooms": "1",
"ownership_type": "Freehold",
"parking_spaces": "4"
}
],
"pagination": {
"total_pages": 200,
"current_page": 1,
"total_records": 6250,
"records_showing": 600,
"records_per_page": 3
}
},
"status": "success"
}
}About the realtor.ca API
The REALTOR.ca API provides access to Canadian MLS property listings through 2 endpoints: search_listings for geographic bounding-box searches with price, bedroom, and sort filters, and get_listing_details for full property data on a specific MLS number. Responses include structured fields for price, address, bedrooms, bathrooms, parking, agent contacts, brokerage details, and multi-resolution photo URLs.
Search Listings by Geography and Filters
The search_listings endpoint accepts a geographic bounding box defined by latitude_min, latitude_max, and longitude_max (along with implied longitude minimum) to return MLS listings within that area. You can narrow results with price_min, price_max, and bedrooms_min, and control ordering with the sort parameter — 6-D for price descending, 6-A for price ascending, or 1-A for newest first. Pagination is handled via current_page, and every response includes a pagination object with current_page, total_pages, total_records, and records_per_page so you can walk through large result sets.
Listing Detail Fields
The get_listing_details endpoint takes a single required input — property_id, which is an MLS number such as W13040146 — and returns a full property record. That record includes price (formatted with currency symbol), address, bedrooms, stories, parking (as an array of type strings), photos with high_res, med_res, and low_res URL variants, and media as an array of typed media objects. Agent data comes back as an array under agents, with each entry containing name, position, phones, and brokerage details.
MLS Number Lifecycle
MLS numbers are tied to active listings and expire when a property is removed from the market. Passing an expired or invalid property_id to get_listing_details returns a stale_input response with kind input_not_found rather than an error. For any production use, MLS numbers should be sourced from fresh search_listings results via results[*].mls_number to minimize stale lookups.
Coverage Scope
The API covers publicly listed properties across Canada on REALTOR.ca, including residential listings with bedroom, bathroom, parking, and multi-resolution photo data. Listing URLs are returned in both endpoints, pointing directly to the canonical REALTOR.ca page for each property.
- Build a Canadian property search map using bounding-box coordinates and price filters from
search_listings - Display MLS listing cards with multi-resolution photos and formatted price from
get_listing_details - Track agent and brokerage contact details for lead generation or CRM enrichment
- Monitor new listings in a target area by polling
search_listingssorted by1-A(newest first) - Filter properties by minimum bedroom count and maximum price for a buyer-facing search tool
- Paginate through large metropolitan result sets using the
pagination.total_pagesfield - Build a listing detail page with parking type arrays, stories, and full agent phone data
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does REALTOR.ca have an official developer API?+
What does `search_listings` return beyond basic price and address?+
total_records and total_pages so you can iterate through result sets page by page.What happens when I request details for a listing that has been sold or removed?+
get_listing_details endpoint returns a stale_input response with kind input_not_found for any MLS number that is expired or invalid. To reduce stale lookups, always source property_id values from recent search_listings results rather than storing MLS numbers long-term.