Centris.ca Scraper — Quebec Real Estate Listings avatar

Centris.ca Scraper — Quebec Real Estate Listings

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Centris.ca Scraper — Quebec Real Estate Listings

Centris.ca Scraper — Quebec Real Estate Listings

Scrape Quebec property listings from Centris.ca by city, type & price. Get address, price, bedrooms, bathrooms, living area, photos, GPS coordinates & broker for houses, condos & rentals — for real estate market research and lead generation.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

0

Monthly active users

9 hours ago

Last modified

Security

Limited permissions

Share

Centris.ca Scraper — Quebec Real Estate Listings, Prices, GPS & Broker Data

Extract structured real-estate listings from Centris.ca — the official MLS property portal of Quebec, Canada — without login or coding. Search across Montreal, Quebec City, Laval, Gatineau, Longueuil, Sherbrooke, or any Quebec town/borough and get price in CAD, full address, property type, bedrooms, bathrooms, GPS coordinates (latitude/longitude), living area, MLS number, photo count, and listing broker/agency.

Export clean, de-duplicated Quebec property data to JSON, CSV, Excel, or API in seconds.

Apify Actor

Built for real-estate investors, Quebec property analysts, mortgage & appraisal teams, proptech platforms, GIS & mapping specialists, and B2B lead-generation agencies building Quebec broker/courtier contact lists.


⚡ At a glance

FeatureDetails
Target PortalCentris.ca — Official listing system of Quebec's real-estate brokers
Locations Supported30 built-in Quebec cities (Montreal, Quebec City, Laval, Gatineau, Longueuil, Sherbrooke, Levis, Trois-Rivieres, Brossard, etc.) + any custom borough or town via customLocations (e.g., Westmount, Outremont)
FilterssellingType (sale / rent), category (residential / commercial), minPrice & maxPrice (CAD)
Core Card Data (Fast)listingId, url, propertyType, sellingType, price, address, bedrooms, bathrooms, mainPhoto, and exact GPS coordinates (latitude, longitude)
Enriched Data (Optional)brokerName, brokerFirm (agency), description, mlsNumber, livingArea (sqft), photoCount, and resolved city
Pagination & ScaleAutomatic GetInscriptions pagination (20 listings/page) with automatic session refresh — scales cleanly to 1,000+ listings per run
De-duplicationAutomatic listingId de-duplication across all pages and locations (0 duplicates)
Export FormatsJSON, CSV, Excel (XLSX), HTML, XML, RSS, and Apify API

🔎 Why scrape Centris.ca?

Centris.ca is the authoritative multiple-listing service (MLS) portal operated by the real-estate boards of Quebec, hosting tens of thousands of active residential and commercial properties for sale and rent across Greater Montreal, Quebec City, the Laurentians, the Eastern Townships, Outaouais, and every region of the province.

While Centris is the richest source of Quebec real estate data, it offers no public API and no CSV export, and manually clicking through 20-card result pages is impractical when a single city like Montreal has over 11,000 active listings. This Centris.ca scraper automates the entire pipeline: it resolves any city, borough, or municipality via Centris's geographic autocomplete, queries the listing feed with your exact price and category filters, paginates cleanly through 1,000+ properties, extracts GPS coordinates right from the search cards, and optionally enriches each listing with broker and property details.

Common reasons teams use this Centris.ca data extractor:

  • 📊 Quebec housing market research — track inventory counts, median asking prices, and property-type mix (Houses, Condos, Duplexes, Triplexes, Plexes, Land) across Montreal boroughs and Quebec regions.
  • 💰 Real-estate investment & plex sourcing — screen multi-family plexes, condos, and single-family homes by price band (minPrice / maxPrice), room count, and location.
  • 🧑‍💼 Real-estate broker & agency lead generation — enable enrichDetails: true to extract brokerName and brokerFirm (e.g., RE/MAX, Royal LePage, Via Capitale, Sutton) across target cities.
  • 🗺️ GIS mapping & spatial analytics — every single record includes latitude and longitude out of the box (even with enrichDetails: false), allowing instant map plotting and radius analysis.
  • 📈 Comparative Market Analysis (CMA) & valuation models — feed live CAD prices, bedroom/bathroom counts, and square footage (livingArea) into appraisal and AVM models.
  • ⏱️ Automated listing & price-change monitoring — schedule daily or weekly runs and compare listingId + price to detect newly listed properties and price reductions.

✨ What this Centris.ca scraper does

  • ✅ 30 Built-in Quebec Cities (cities) — select Montreal, Quebec City, Laval, Gatineau, Longueuil, Sherbrooke, Levis, Trois-Rivieres, Terrebonne, Saint-Jean-sur-Richelieu, Brossard, Repentigny, Drummondville, Saint-Jerome, Granby, Blainville, Saint-Hyacinthe, Mirabel, Dollard-des-Ormeaux, Rimouski, Chateauguay, Saint-Eustache, Victoriaville, Mascouche, Salaberry-de-Valleyfield, Shawinigan, Boucherville, Vaudreuil-Dorion, Cote-Saint-Luc, or Sorel-Tracy.
  • ✅ Any Custom Borough, Neighbourhood, or Town (customLocations) — type any Quebec locality (e.g., "Westmount", "Outremont", "Mont-Tremblant", "Bromont", "Kirkland") and the scraper automatically resolves its exact Centris geographic level (GeographicArea, GeographicSubArea, or CityDistrict).
  • ✅ Sale vs. Rent & Residential vs. Commercial Filters — toggle sellingType (sale or rent), category (residential or commercial), and CAD price bounds (minPrice, maxPrice).
  • ✅ Unlocked 1,000+ Deep Pagination — with maxPages: 0 (the default), the scraper steps through 20-listing pages continuously, refreshing session cookies automatically every 25 pages so long 1,000+ listing runs never stall.
  • ✅ Instant Map-Ready GPS Coordinates — latitude and longitude are parsed directly from the search cards on 100% of listings without needing slow per-page detail requests.
  • ✅ Optional Detail Page Enrichment (enrichDetails: true) — visits individual listing pages in parallel batches of 5 to extract brokerName, brokerFirm, full description, mlsNumber, livingArea (sqft), photoCount, and parsed city.

🎯 Use cases & B2B workflows

1. Quebec Real-Estate Investors & Plex Buyers

Filter for residential properties in Montreal, Laval, Longueuil, and Sherbrooke within your target CAD budget (minPrice / maxPrice). Filter the resulting dataset by propertyType (Duplex, Triplex, Quadruplex, Quintplex, Condo, House) to spot high-yield opportunities immediately.

2. B2B Proptech, Mortgage & Home-Services Lead Generation

Turn on enrichDetails: true to build a live roster of active Quebec real-estate brokers (brokerName) and brokerages (brokerFirm) along with the exact inventory value and neighbourhoods they represent.

3. Geospatial & Retail Site-Selection Teams

Because latitude, longitude, price, propertyType, and address are populated in fast search-card mode (enrichDetails: false), you can harvest 1,000+ geocoded listings in ~1.5 minutes and import them directly into QGIS, ArcGIS, Mapbox, or Kepler.gl.

4. Commercial Real-Estate & Retail Analysts

Switch category: "commercial" to extract commercial buildings, industrial spaces, offices, and retail units for sale or lease across Montreal, Quebec City, Laval, and Gatineau.


🗺️ Built-in Quebec cities & custom localities

RegionSupported cities Dropdown Values & customLocations Examples
Greater Montreal (Island & Laval)Montreal, Laval, Dollard-des-Ormeaux, Cote-Saint-Luc + custom boroughs (Westmount, Outremont, Verdun, Plateau-Mont-Royal, Saint-Laurent, Lasalle, Kirkland, Pointe-Claire)
Montérégie (South Shore)Longueuil, Brossard, Saint-Jean-sur-Richelieu, Saint-Hyacinthe, Granby, Chateauguay, Salaberry-de-Valleyfield, Boucherville, Vaudreuil-Dorion, Sorel-Tracy
Capitale-Nationale & Chaudière-AppalachesQuebec City, Levis + custom localities (Beauport, Sainte-Foy, Charlesbourg)
Lanaudière & Laurentides (North Shore)Terrebonne, Repentigny, Saint-Jerome, Blainville, Mirabel, Saint-Eustache, Mascouche + custom resort towns (Mont-Tremblant, Sainte-Adele, Saint-Sauveur)
Outaouais, Estrie, Mauricie & Centre-du-QuébecGatineau, Sherbrooke, Trois-Rivieres, Drummondville, Victoriaville, Shawinigan, Rimouski

📥 Input configuration

All fields are optional (required: []). Leave cities and customLocations empty to search across all of Quebec.

ParameterTypeDefault / PrefillDescription
citiesarray<string>Prefill: ["Montreal"]One or more Quebec cities from the 30-city dropdown. Leave empty to search across all of Quebec.
customLocationsarray<string>[]Any other Quebec city, borough, or municipality not in the dropdown (e.g., ["Westmount", "Outremont", "Mont-Tremblant"]).
sellingTypestring"sale"Market segment: "sale" (For Sale) or "rent" (For Rent).
categorystring"residential"Property category: "residential" (houses, condos, plexes, land) or "commercial".
minPriceinteger|nullnullMinimum listing price in CAD (optional).
maxPriceinteger|nullnullMaximum listing price in CAD (optional).
enrichDetailsbooleanfalseOpen each listing page to extract brokerName, brokerFirm, description, mlsNumber, livingArea, photoCount, and city. Keep false for fast sweeps (GPS coordinates are always included).
maxItemsinteger100Maximum total listings to collect across all selected locations (0 = unlimited). Set 1000+ for deep market extraction.
maxPagesinteger0Maximum result pages per location (20 listings per page). 0 = automatic pagination governed by maxItems.
proxyConfigurationobjectCA ResidentialApify Proxy configuration. Canadian Residential proxy (CA) is preconfigured by default.

Example 1 — 1,000+ Residential properties for sale in Montreal & Laval

{
"cities": ["Montreal", "Laval"],
"sellingType": "sale",
"category": "residential",
"enrichDetails": false,
"maxItems": 1000,
"maxPages": 0,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "CA"
}
}

Example 2 — Enriched broker & property details in Quebec City and Lévis

{
"cities": ["Quebec City", "Levis"],
"sellingType": "sale",
"category": "residential",
"minPrice": 300000,
"maxPrice": 800000,
"enrichDetails": true,
"maxItems": 150
}

Example 3 — Custom Montreal boroughs & resort towns (customLocations)

{
"customLocations": ["Westmount", "Outremont", "Mont-Tremblant"],
"sellingType": "sale",
"category": "residential",
"maxItems": 300
}

📤 Output schema & field reference

Every listing is stored as a clean JSON object. Below is a standard fast-mode record (enrichDetails: false) with built-in GPS coordinates:

{
"listingId": "26767752",
"url": "https://www.centris.ca/en/condos~for-sale~montreal-rosemont-la-petite-patrie/26767752",
"propertyType": "Condo",
"sellingType": "sale",
"price": 378900,
"address": "2530, Place Michel-Brault, apt. 549 Montréal (Rosemont/La Petite-Patrie)",
"city": null,
"bedrooms": 1,
"bathrooms": 1,
"livingArea": null,
"lotArea": null,
"latitude": 45.60090266,
"longitude": -73.57170582,
"brokerName": null,
"brokerFirm": null,
"description": null,
"mlsNumber": null,
"mainPhoto": "https://mspublic.centris.ca/media.ashx?id=ADDD250DA4AE2B4DDDDDDDDDDE&t=pi&w=320&h=240&sm=c",
"photoCount": null,
"scrapedAt": "2026-11-10T02:58:00.000Z"
}

With enrichDetails: true, the broker, agency, description, MLS number, living area, photo count, and city fields are populated:

{
"listingId": "24338005",
"url": "https://www.centris.ca/en/houses~for-sale~quebec-beauport/24338005",
"propertyType": "House",
"sellingType": "sale",
"price": 359900,
"address": "122, Rue Saint-Théophile Québec (Beauport)",
"city": "Québec",
"bedrooms": 2,
"bathrooms": 2,
"livingArea": "864",
"lotArea": null,
"latitude": 46.88682,
"longitude": -71.163238,
"brokerName": "Richard Turmel",
"brokerFirm": "VIA CAPITALE SÉLECT",
"description": "Charming well-maintained bungalow offering 2 bedrooms...",
"mlsNumber": "24338005",
"mainPhoto": "https://mspublic.centris.ca/media.ashx?id=...",
"photoCount": 33,
"scrapedAt": "2026-11-10T02:58:00.000Z"
}

🏡 Property Identity, Type & Pricing

FieldTypeCoverageDescription
listingIdstring🟢 High (100%)Unique Centris listing ID used for de-duplication across pages and cities.
mlsNumberstring|null🟡 Enriched ModeOfficial Centris / MLS number (enrichDetails: true).
urlstring🟢 High (100%)Canonical URL to the property page on Centris.ca.
propertyTypestring|null🟢 High (100%)Normalized property category (House, Condo, Duplex, Triplex, Lot, Commercial, etc.).
sellingTypestring🟢 High (100%)"sale" or "rent".
pricenumber|null🟢 High (100%)Numeric asking price in Canadian Dollars (CAD).

📍 Location, Coordinates & Dimensions

FieldTypeCoverageDescription
addressstring|null🟢 High (100%)Full street address, municipality, and borough as displayed on Centris.
citystring|null🟡 Enriched ModeParsed municipality / Ville name (enrichDetails: true).
latitudenumber|null🟢 High (100%)WGS84 GPS latitude extracted directly from the search card.
longitudenumber|null🟢 High (100%)WGS84 GPS longitude extracted directly from the search card.
bedroomsnumber|null🟢 High (~96%)Number of bedrooms (present on residential units; null on vacant lots/land).
bathroomsnumber|null🟢 High (~98%)Number of bathrooms / powder rooms.
livingAreastring|null🟡 Enriched ModeLiving / habitable area in square feet (sqft) when published (enrichDetails: true).
lotAreastring|null🟡 ConditionalLot area when exposed on the card.

🧑‍💼 Broker, Media & Run Metadata

FieldTypeCoverageDescription
brokerNamestring|null🟡 Enriched ModeFull name of the listing real-estate broker / courtier (enrichDetails: true).
brokerFirmstring|null🟡 Enriched ModeReal-estate agency / brokerage firm name (enrichDetails: true).
descriptionstring|null🟡 Enriched ModeProperty description text (enrichDetails: true).
mainPhotostring|null🟢 High (100%)Primary property image URL.
photoCountnumber|null🟡 Enriched ModeTotal number of gallery photos on the listing (enrichDetails: true).
scrapedAtstring🟢 High (100%)ISO 8601 UTC timestamp of extraction.

🔁 Pagination, scale & 1,000+ listing extraction

Centris paginates search results in blocks of 20 listings per page (pageSize: 20). This scraper is engineered for deep, uninterrupted pagination:

  • Fast 100-item prefill: Collects 5 pages (100 listings) in ~12–20 seconds (enrichDetails: false).
  • 1,000+ listing sweeps: Set maxItems: 1000+ (and maxPages: 0). The actor automatically steps through 50+ pages, synchronizes page and startPosition, and refreshes session cookies every 25 pages (or immediately if a page response comes back empty) so 1,000+ listing runs complete reliably.
  • Total count awareness: Before paging a city, the actor queries the total matching count (listingCount — e.g., 11,205 active listings in Montreal) and stops cleanly as soon as all available listings or maxItems have been collected.

⚙️ How to use

  1. Open the Actor in the Apify Console.
  2. Choose your locations: select one or more cities from cities (or type custom boroughs/towns into customLocations).
  3. Set filters: pick sellingType (sale / rent), category (residential / commercial), and optional minPrice / maxPrice.
  4. Configure volume & detail: set maxItems (e.g., 100 for a quick test, 1000+ for bulk collection) and toggle enrichDetails: true if you need broker names and descriptions.
  5. Click Start and export your results to JSON, CSV, Excel, or API.

API Example (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/centris-scraper").call(run_input={
"cities": ["Montreal", "Quebec City"],
"sellingType": "sale",
"category": "residential",
"enrichDetails": False,
"maxItems": 1000,
"maxPages": 0,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['listingId']} | ${item['price']} | {item['propertyType']} | {item['address']} | ({item['latitude']}, {item['longitude']})")

API Example (Node.js)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/centris-scraper').call({
cities: ['Laval', 'Longueuil'],
sellingType: 'sale',
enrichDetails: true,
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Collected ${items.length} enriched Centris listings`);

API Example (cURL)

curl -X POST "https://api.apify.com/v2/acts/haketa~centris-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cities": ["Montreal"],
"sellingType": "sale",
"category": "residential",
"enrichDetails": false,
"maxItems": 1000,
"maxPages": 0
}'

🔄 Automation & integration workflows

  • Google Sheets / Airtable CMA Trackers: Sync Quebec listings (price, propertyType, address, bedrooms, bathrooms, livingArea, url) directly into valuation spreadsheets.
  • Make.com / Zapier / n8n Deal Alerts: Run scheduled searches for plexes or condos in your target price range and notify your acquisitions team via Slack or email whenever new listingId records appear.
  • CRM & Broker Outreach (HubSpot / Salesforce / Pipedrive): Run with enrichDetails: true to populate brokerName, brokerFirm, mlsNumber, and city for B2B real-estate marketing.

💡 Pro tips for best results

  • Keep enrichDetails: false for fast 1,000+ listing sweeps: Because price, address, propertyType, bedrooms, bathrooms, mainPhoto, and latitude/longitude are all extracted directly from the search feed, you can collect 1,000+ map-ready listings in under 2 minutes without visiting individual property pages.
  • Segment very large markets by price band: Montreal alone has over 11,000 active residential listings. For exhaustive city-wide harvesting, segment runs using minPrice and maxPrice bands (e.g., $0–$500k, $500k–$1M, $1M+).
  • Keep Canadian Residential proxy enabled: Centris sits behind Cloudflare and works best with the preconfigured Canadian (CA) Residential proxy.

⚠️ Honest limitations

  • Enrichment speed: Turning on enrichDetails: true fetches each property page individually (in parallel batches of 5). For enriched runs, keep maxItems between 50 and 300 so runs finish quickly and residential proxy bandwidth stays low.
  • Vacant land & commercial listings: Land/lot listings (propertyType: "Lot") naturally have bedrooms: null and bathrooms: null.

❓ FAQ

Do I need a Centris.ca account or API key?

No. All listing data is extracted from publicly visible Centris search and property pages with no login required.

Are GPS coordinates included without enrichment?

Yes! Both latitude and longitude are extracted directly from the search cards on 100% of records even when enrichDetails: false.

How does the scraper handle Quebec City vs. Montreal geographic types?

Centris uses different internal geographic types for different municipalities (GeographicArea for Montreal Island, GeographicSubArea for Quebec City, CityDistrict for boroughs). This scraper dynamically inspects the autocomplete Type and TypeId for every location so both cities and neighbourhoods return accurate counts and results.

How many listings can I extract in a single run?

With maxPages: 0 (auto up to 1,000 pages / 20,000 listings per location), you can extract 1,000+ listings in a single run governed by your maxItems parameter.


Building a Canadian or international real-estate pipeline? Pair Centris.ca Scraper with these related actors by haketa:


📋 Changelog

v1.2 (2026-11)

  • Unlocked 1,000+ Deep Pagination: Raised default page cap to 1,000 pages (maxPages: 0 = auto governed by maxItems), added startPosition synchronization, and added automatic session/cookie refresh every 25 pages (and on empty responses) so 1,000+ listing runs paginate cleanly without stalling.
  • Empty-Location Explicit maxItems Fix: Honored explicit user maxItems > 100 even when cities is left empty (all-Quebec search).
  • Documentation Upgrade: Added ⚡ At a glance table, coverage indicators, and bulk Python/Node.js API examples.

v1.1 (2026-10)

  • Added direct search-card GPS coordinate extraction (latitude, longitude) so map coordinates are returned on 100% of records without enabling enrichDetails.
  • Fixed dynamic GeographicSubArea / CityDistrict query field mapping for Quebec City and custom boroughs.

v1.0 (2026-09)

  • Initial release with 30 Quebec cities, custom location autocomplete, sale/rent and residential/commercial filters, and optional broker/detail enrichment.