Centris APIcentris.ca ↗
Access Quebec real estate listings via the Centris.ca API. Search houses, plexes, and intergenerational properties. Retrieve price, rooms, photos, and full descriptions.
What is the Centris API?
The Centris.ca API exposes 5 endpoints for searching and retrieving property listings from Quebec's largest real estate platform. Use search_listings to query residential properties province-wide, or targeted endpoints for Montreal plexes and intergenerational homes. Each listing record returns fields including price, address, room counts, bedroom and bathroom counts, photo URLs, and full description text.
curl -X GET 'https://api.parse.bot/scraper/3937f45a-c256-4bc2-bc85-6b630ec600a5/search_listings?limit=5' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace centris-ca-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Centris Real Estate API — search listings, drill into details, explore property types."""
from parse_apis.centris_real_estate_api import Centris, Listing, ListingNotFound
client = Centris()
# Search for plex properties in Montreal within a price range
for summary in client.listingsummaries.search_plex(min_price=800000, max_price=1500000, limit=5):
print(summary.price, summary.address)
# Drill into one listing's full details
listing_summary = client.listingsummaries.search(limit=1).first()
if listing_summary:
detail = listing_summary.details()
print(detail.price, detail.address, detail.property_type)
# Search intergenerational homes under a budget
for home in client.listingsummaries.search_intergenerational(max_price=900000, limit=3):
print(home.id, home.price, home.address)
# Search large houses by keyword criteria
large_home = client.listings.search_by_keywords(min_rooms=6, limit=1).first()
if large_home:
print(large_home.address, large_home.rooms, large_home.description[:100])
# Typed error handling: attempt to fetch a non-existent listing
try:
bad = client.listingsummary(id="99999999").details()
print(bad.price)
except ListingNotFound as exc:
print(f"Listing not found: {exc.listing_id}")
print("exercised: listingsummaries.search / search_plex / search_intergenerational / details / listings.search_by_keywords")
Search for residential real estate listings for sale across Quebec. Returns a paginated list of property listing summaries. Each summary includes id, URL, price, address, and a description teaser. Use get_listing_details with an id from the results to fetch full property information.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of listings to return. |
{
"type": "object",
"fields": {
"listings": "array of listing summaries each containing id, url, price, price_value, address, and description_teaser"
},
"sample": {
"data": {
"listings": [
{
"id": "20102820",
"url": "https://www.centris.ca/en/houses~for-sale~laval-sainte-rose/20102820",
"price": "$499,999",
"address": "7035, Rue Galarneau\nLaval (Sainte-Rose)",
"price_value": "499999",
"description_teaser": "House for sale"
}
]
},
"status": "success"
}
}About the Centris API
Search Endpoints
The API provides four search entry points. search_listings queries residential properties for sale across Quebec and accepts a limit parameter to control result volume. search_plex_montreal narrows to plex-type properties (duplex through quintuplex) on the Island of Montreal, with optional min_price and max_price filters in CAD. search_intergenerational_montreal returns intergenerational homes on the Island of Montreal with an optional max_price cap. All three search endpoints return listing summaries containing id, url, price, price_value, address, and description_teaser.
Keyword and Room Filtering
search_houses_keywords_montreal targets single-family houses in Montreal and filters results against keyword matches in listing descriptions — specifically "bachelor" and "intergenerational" — while enforcing a min_rooms threshold. Unlike the summary-based search endpoints, this endpoint returns full listing detail objects directly, so no second call to get_listing_details is needed for matching results.
Listing Details
get_listing_details accepts a listing_id (the numeric string found in any search result) and returns the complete record for that property: price, address, property_type (e.g. "House for sale"), bedrooms, bathrooms, rooms, description, photos (array of URLs), and the canonical url to the listing page. Tax assessment and financial details are also included where present on the listing.
The Centris API is a managed, monitored endpoint for centris.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when centris.ca changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official centris.ca API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor Montreal plex inventory within a specific price band using
search_plex_montrealwithmin_priceandmax_price. - Build a Quebec property alert system by polling
search_listingsand diffing against a stored set of listing IDs. - Aggregate photo galleries for property listings by extracting the
photosarray fromget_listing_details. - Find intergenerational housing options in Montreal under a budget ceiling with
search_intergenerational_montreal. - Filter Montreal single-family houses by room count and description keywords using
search_houses_keywords_montreal. - Display full listing cards — price, address, room counts, and description — by chaining a search endpoint with
get_listing_details. - Compare tax assessments across listings by pulling the financial details field from
get_listing_detailsresults.
| 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 | 100 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 Centris.ca have an official developer API?+
What does `get_listing_details` return beyond the search summary fields?+
get_listing_details returns the full listing record: bedrooms, bathrooms, rooms, property_type, the complete description text, an array of photos URLs, and financial details such as tax assessments. The search endpoints return only id, url, price, price_value, address, and description_teaser.Does the API cover rental listings or commercial properties?+
Are searches available for regions outside Montreal and Quebec?+
search_listings covers residential properties across Quebec province-wide. The plex and intergenerational endpoints are scoped specifically to the Island of Montreal. Searches for other Canadian provinces are not currently covered. You can fork this API on Parse and revise it to target other regions.How does pagination work across the search endpoints?+
limit integer parameter that caps the number of results returned. There is no offset or cursor parameter exposed — if you need to page through large result sets beyond the limit, you can fork the API on Parse and revise it to add pagination support.