Duproprio Listings Extractor
Pricing
from $1.99 / 1,000 results
Duproprio Listings Extractor
DuProprio scraper that turns any DuProprio search URL into structured listing data with prices, addresses, photos, and availability, so you can track Quebec real estate without copying it by hand.
Pricing
from $1.99 / 1,000 results
Rating
0.0
(0)
Developer
Kawsar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
DuProprio Listings Extractor: turn any DuProprio search into structured data
DuProprio Listings Extractor scrapes property listings from DuProprio search result pages and saves them as a structured dataset. Paste a search URL for rentals or homes for sale, run the actor, and you get prices, addresses, bedroom counts, availability dates, photo URLs, and a direct link for every listing. Pagination is handled for you, so a search with hundreds of results still only takes one run.
DuProprio is the largest for-sale-by-owner real estate site in Quebec. Its search pages are useful to browse but painful to copy data from. This actor does the copying.
How it works
- Build a search on duproprio.com with whatever filters you want: region, price range, property type, sort order, for sale or for rent.
- Copy the URL from your browser's address bar.
- Paste it into the DuProprio search URLs field and run the actor.
The actor walks through every result page of each search URL until it runs out of listings or hits your Max items cap. If two of your searches overlap, duplicate listings are skipped.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
searchUrls | array | required | One or more DuProprio search result URLs. Rentals and for-sale searches both work. |
maxItems | integer | 100 | Stop after this many listings, across all search URLs. Hard cap is 1000. |
requestTimeoutSecs | integer | 30 | Timeout for each page request, in seconds. |
Example input:
{"searchUrls": ["https://duproprio.com/en/rental/search/list?search=true®ions[0]=8&parent=1&sort=-published_at"],"maxItems": 100}
What data does this actor extract?
Each listing becomes one dataset item:
| Field | Example | Notes |
|---|---|---|
listingId | "1133900" | DuProprio's internal listing ID. |
listingUrl | "https://duproprio.com/en/rental/...-1133900" | Direct link to the listing page. |
priceLabel | "$1,800 / monthly" | Price exactly as shown on the site. |
priceValue | 1800 | Numeric price, ready for sorting and spreadsheets. |
city | "Bécancour (Bécancour)" | City and borough. |
streetAddress | "2088 avenue Monseigneur Moreau" | Street address as published. |
bedrooms | 3 | Parsed from the listing summary when present. |
listingSummary | "5 1/2 (3 bedrooms) for rent..." | Short teaser text from the search card. |
availability | "Now" | Move-in date for rentals. Usually empty for sales. |
tags | ["With Parking"] | Badges shown on the card, like Furnished or 3D Virtual Tour. |
coverImageUrl | "https://photos.duproprio.com/...600...jpg" | Main listing photo. |
imageUrls | [...] | Every published size of the listing photo (320, 600, and 1024 px wide). |
sourceUrl | "https://duproprio.com/en/rental/search/list?..." | The search page this listing came from. |
pageNumber | 1 | Which result page it appeared on. |
scrapedAt | "2026-08-09T06:41:47Z" | UTC timestamp. |
error | null | Set only when a page could not be fetched. |
Example output item:
{"listingId": "1133900","listingUrl": "https://duproprio.com/en/rental/centre-du-quebec/becancour-becancour/5-1-2-for-rent/hab-2088-avenue-monseigneur-moreau-1133900","priceLabel": "$1,800 / monthly","priceValue": 1800,"city": "Bécancour (Bécancour)","streetAddress": "2088 avenue Monseigneur Moreau","bedrooms": 3,"listingSummary": "5 1/2 (3 bedrooms) for rent. 5 1/2 fully furnished...","availability": "Now","tags": ["Available as of"],"coverImageUrl": "https://photos.duproprio.com/photos/public/for_rent/202605/1133900/5-1-2-becancour-600-15701380.jpg","imageUrls": ["https://photos.duproprio.com/photos/public/for_rent/202605/1133900/5-1-2-becancour-600-15701380.jpg","https://photos.duproprio.com/photos/public/for_rent/202605/1133900/5-1-2-becancour-320-15701380.jpg","https://photos.duproprio.com/photos/public/for_rent/202605/1133900/5-1-2-becancour-1024-15701380.jpg"],"sourceUrl": "https://duproprio.com/en/rental/search/list?search=true®ions%5B0%5D=8&pageNumber=1","pageNumber": 1,"scrapedAt": "2026-08-09T06:41:47+00:00","error": null}
Use cases
- Rental hunting: run a saved search on a schedule and get new apartments as a dataset instead of refreshing the site every morning
- Market research: pull asking prices for a whole region into a spreadsheet and see how the FSBO market moves week to week
- Lead generation: agents and brokers can monitor for-sale-by-owner listings in their territory
- Price comparison: line up DuProprio listings next to data from other real estate scrapers to spot under-priced properties
- Portfolio tracking: property managers can watch competing rentals in the same neighbourhoods
FAQ
Does it work for both rentals and homes for sale?
Yes. Any DuProprio search list URL works: /en/rental/search/list?... for rentals and /en/search/list?... for sales. French URLs work too, as long as the page is a search result list.
How do I scrape a specific region?
Set the region filters on duproprio.com first, then copy the resulting URL. The region choices are encoded in the URL as regions[0]=... parameters, so the actor searches exactly what you saw in the browser.
How many listings can it collect per run?
Up to 1000 per run, controlled by the maxItems input. DuProprio shows 12 listings per result page and the actor keeps paging until it reaches your cap or the end of the results.
Do I get the listing photos?
Yes. Each item includes the cover photo plus every size variant DuProprio publishes for the search card (320, 600, and 1024 pixels wide). Full photo galleries live on the individual listing pages, which you can visit through listingUrl.
Will it break if DuProprio changes its site?
If the site's markup changes, some fields can come back empty. The actor fails soft: each page is parsed independently and fetch errors are recorded in the error field instead of killing the run.
Tips
- Sort your search by newest first (
sort=-published_at) and schedule the actor daily to build a change feed of new listings. - Keep
maxItemsclose to what you actually need. Smaller runs finish faster and cost less. - The
priceValuefield is numeric on purpose: filter or sort on it directly in the Apify dataset view or after export to CSV or Excel.
Extract DuProprio listings once, or put the actor on a schedule and let the Quebec real estate data come to you.