# duProprio Property Scraper (`ocrad/duproprio-property-scraper`) Actor

Scrapes property listings from DuProprio.com for mortgage prices, address, city, type, availability, tags, and room dimensions.

- **URL**: https://apify.com/ocrad/duproprio-property-scraper.md
- **Developed by:** [Ocrad](https://apify.com/ocrad) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 8 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### DuProprio Property Scraper

![DuProprio Property Scraper](https://prixnobilis.com/wp-content/uploads/2018/10/DP_Partenariat_APCHQ_Page_Nobilis_M13789_Header-1024x576.jpg)

---

#### 🔍 **What it does**

This Actor scrapes **property listings** from [DuProprio.com](https://duproprio.com) — Canada's largest private real estate platform. By providing any search results URL, you can retrieve structured property data across all listing types (for sale, for rent, commercial).

With this Actor, you can:

* **Get Listing Overviews**: Extract price, address, city, property type, availability, tags, and thumbnail photos from search result pages.
* **Access Deep Property Details**: Enable `detailedInfo` to visit each listing page and extract room dimensions, living space area, full feature groups, and property features.
* **Retrieve Mortgage Estimates**: Capture DuProprio's built-in mortgage calculator outputs — mortgage amount and estimated payments.



#### **📝 Example Output**

##### Basic (detailedInfo: false)
```json
{
	"id": "1119778",
	"url": "https://duproprio.com/en/monteregie/bromont/condominium-for-sale/271-rue-brodeur-1119778",
	"title": "271 rue Brodeur, Bromont for sale",
	"price": "$749,000",
	"city": "Bromont",
	"address": "271 rue Brodeur",
	"typeAndIntro": "Condominium for sale – Bright and spacious corner unit on the 3rd floor of a prestigious building in the heart of Bromont...",
	"availability": null,
	"tags": [
		"Inground Pool",
		"Open house"
	],
	"imageUrl": "https://photos.duproprio.com/photos/public/for_sale/202501/1119778/condominium-bromont-600-14823456.jpg",
	"scrapedAt": "2026-03-19T15:42:20.171Z"
}
````

##### Detailed (detailedInfo: true)

```json
{
	"id": "1119778",
	"url": "https://duproprio.com/en/monteregie/bromont/condominium-for-sale/271-rue-brodeur-1119778",
	"title": "271 rue Brodeur, Bromont for sale",
	"price": "$749,000",
	"city": "Bromont",
	"address": "271 rue Brodeur",
	"typeAndIntro": "Condominium for sale – Bright and spacious corner unit on the 3rd floor of a prestigious building in the heart of Bromont...",
	"availability": null,
	"tags": [
		"Inground Pool",
		"Open house"
	],
	"imageUrl": "https://photos.duproprio.com/photos/public/for_sale/202501/1119778/condominium-bromont-600-14823456.jpg",
	"bedrooms": "2",
	"bathrooms": "2",
	"levels": "1",
	"livingSpaceArea": "1,150 ft² (106.84 m²)",
	"propertyFeatures": {
		"Asking Price": "$749,000",
		"Year of construction": "2018",
		"Certificate of Location": "Yes",
		"Municipal evaluation": "$612,400",
		"Municipal evaluation's date": "2024",
		"Lot's municipal evaluation": "$80,000",
		"Building's municipal evaluation": "$532,400",
		"Common expenses / Condo fees": "$425 / monthly",
		"Taxes year": "2024",
		"Municipal Taxes": "$4,210",
		"School taxes": "$320"
	},
	"featureGroups": [
		{
			"category": "Services",
			"items": [
				"Hot water",
				"Electricity",
				"Air exchange system"
			]
		},
		{
			"category": "Heating source",
			"items": [
				"Electric",
				"Heat-pump"
			]
		},
		{
			"category": "Kitchen",
			"items": [
				"Quartz countertop",
				"Dishwasher",
				"Central island"
			]
		},
		{
			"category": "Pool",
			"items": [
				"Inground",
				"Heated"
			]
		},
		{
			"category": "Garage",
			"items": [
				"Attached",
				"Heated",
				"1 space"
			]
		},
		{
			"category": "Location",
			"items": [
				"Near park",
				"Near ski hill",
				"Residential area"
			]
		},
		{
			"category": "Near Commerce",
			"items": [
				"Supermarket",
				"Restaurant",
				"Bank"
			]
		},
		{
			"category": "Near Recreational Services",
			"items": [
				"Cycling path",
				"Cross-country skiing",
				"Downhill skiing"
			]
		}
	],
	"rooms": [
		{
			"room": "Living room",
			"storey": "Main floor",
			"dimensions": "20' x 14' (6.10 m x 4.27 m)",
			"flooring": "Hardwood"
		},
		{
			"room": "Dining room",
			"storey": "Main floor",
			"dimensions": "12' x 10' (3.66 m x 3.05 m)",
			"flooring": "Hardwood"
		},
		{
			"room": "Kitchen",
			"storey": "Main floor",
			"dimensions": "14' x 10' (4.27 m x 3.05 m)",
			"flooring": "Ceramic"
		},
		{
			"room": "Primary bedroom",
			"storey": "Main floor",
			"dimensions": "14' x 12' (4.27 m x 3.66 m)",
			"flooring": "Hardwood"
		},
		{
			"room": "Bedroom 2",
			"storey": "Main floor",
			"dimensions": "11' x 10' (3.35 m x 3.05 m)",
			"flooring": "Hardwood"
		},
		{
			"room": "Bathroom",
			"storey": "Main floor",
			"dimensions": "9' x 7' (2.74 m x 2.13 m)",
			"flooring": "Ceramic"
		},
		{
			"room": "Ensuite bathroom",
			"storey": "Main floor",
			"dimensions": "8' x 6' (2.44 m x 1.83 m)",
			"flooring": "Ceramic"
		}
	],
	"mortgageAmount": "$511,200",
	"myPayments": "$719 Weekly",
	"scrapedAt": "2026-03-19T15:42:20.171Z"
}
```

***

#### 🎯 **How It Works**

1. **Input**: Provide any DuProprio search results URL (copy it directly from your browser after applying filters) and the number of pages to scrape.
2. **Listing pages**: The Actor loads each result page and extracts all property cards — price, city, address, type, tags, and thumbnail.
3. **Detail pages** *(optional)*: When `detailedInfo` is enabled, the Actor visits each listing's page to extract room dimensions, property features, feature groups, and mortgage estimates.
4. **Output**: All data is stored as structured JSON records in the Apify dataset, ready to download as JSON, CSV, or XLSX.

***

##### Example Input

```json
{
    "url": "https://duproprio.com/en/search/list?search[is_for_sale]=1&search[property_type][]=1",
    "maxPages": 5,
    "detailedInfo": true
}
```

> Apply any filters on DuProprio (region, price range, property type, etc.) and copy the resulting URL directly into the `url` field.

***

#### 💬 **Support and Feedback**

Need help or have suggestions? Leave a review on the Actor's Apify page or reach out via Apify support. We monitor DuProprio's page structure and aim to keep the scraper up to date with any site changes.

# Actor input Schema

## `url` (type: `string`):

The DuProprio search results URL to scrape. You can copy it directly from your browser after applying filters on duproprio.com.

## `maxPages` (type: `integer`):

Maximum number of search result pages to scrape. Each page contains ~10 listings. Page 2 is fetched by appending pageNumber=2 to the URL.

## `detailedInfo` (type: `boolean`):

When enabled, the scraper visits each property's page to extract detailed data: room dimensions, property features, feature groups (services, heating, etc.), living space area, and mortgage estimates. This increases run time and request count significantly.

## Actor input object example

```json
{
  "url": "https://duproprio.com/en/search/list?search[is_for_sale]=1&search[property_type][]=1",
  "maxPages": 1,
  "detailedInfo": false
}
```

# Actor output Schema

## `defaultDatasetUrl` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "url": "https://duproprio.com/en/search/list?search[is_for_sale]=1&search[property_type][]=1",
    "maxPages": 1,
    "detailedInfo": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("ocrad/duproprio-property-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "url": "https://duproprio.com/en/search/list?search[is_for_sale]=1&search[property_type][]=1",
    "maxPages": 1,
    "detailedInfo": False,
}

# Run the Actor and wait for it to finish
run = client.actor("ocrad/duproprio-property-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "url": "https://duproprio.com/en/search/list?search[is_for_sale]=1&search[property_type][]=1",
  "maxPages": 1,
  "detailedInfo": false
}' |
apify call ocrad/duproprio-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ocrad/duproprio-property-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "duProprio Property Scraper",
        "description": "Scrapes property listings from DuProprio.com for mortgage prices, address, city, type, availability, tags, and room dimensions.",
        "version": "1.0",
        "x-build-id": "bGYaKxRpPo4LPSFqm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ocrad~duproprio-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ocrad-duproprio-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ocrad~duproprio-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-ocrad-duproprio-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ocrad~duproprio-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-ocrad-duproprio-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "url"
                ],
                "properties": {
                    "url": {
                        "title": "Search URL",
                        "type": "string",
                        "description": "The DuProprio search results URL to scrape. You can copy it directly from your browser after applying filters on duproprio.com."
                    },
                    "maxPages": {
                        "title": "Maximum Pages",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of search result pages to scrape. Each page contains ~10 listings. Page 2 is fetched by appending pageNumber=2 to the URL.",
                        "default": 1
                    },
                    "detailedInfo": {
                        "title": "Fetch Detailed Info",
                        "type": "boolean",
                        "description": "When enabled, the scraper visits each property's page to extract detailed data: room dimensions, property features, feature groups (services, heating, etc.), living space area, and mortgage estimates. This increases run time and request count significantly.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
