Skip to content

Neighborhoods API

GET /neighborhoods

List all Montreal neighborhoods with basic content fields.

Query Parameters

ParamTypeDescription
boroughstringFilter by borough name

Response

json
{
  "neighborhoods": [
    {
      "id": "uuid",
      "name": "Mile End",
      "slug": "mile-end",
      "borough": "Le Plateau-Mont-Royal",
      "latitude": "45.5270000",
      "longitude": "-73.5960000",
      "descriptionEn": "Markdown description...",
      "descriptionFr": "Description en markdown...",
      "coverImageUrl": "https://...",
      "walkabilityScore": 92,
      "transitScore": 88,
      "createdAt": "2026-02-28T00:00:00.000Z"
    }
  ]
}

GET /neighborhoods/:slug

Get full neighborhood profile with content, SEO fields, per-bedroom stats, property type breakdown, and latest listings.

Response

json
{
  "neighborhood": {
    "id": "uuid",
    "name": "Mile End",
    "slug": "mile-end",
    "borough": "Le Plateau-Mont-Royal",
    "descriptionEn": "# Mile End\n\nCreative neighborhood...",
    "descriptionFr": "# Mile End\n\nQuartier créatif...",
    "highlightsEn": "- Great coffee shops\n- Transit accessible",
    "highlightsFr": "- Excellents cafés\n- Accessible en transport",
    "seoTitleEn": "Apartments in Mile End",
    "seoTitleFr": "Appartements à Mile End",
    "seoDescriptionEn": "Find rentals in Mile End...",
    "seoDescriptionFr": "Trouvez des locations à Mile End...",
    "coverImageUrl": "https://...",
    "walkabilityScore": 92,
    "transitScore": 88,
    "createdAt": "2026-02-28T00:00:00.000Z"
  },
  "stats": {
    "totalListings": 61,
    "avgPrice": 196902,
    "minPrice": 85000,
    "maxPrice": 350000,
    "byBedroom": [
      { "bedrooms": 0, "avgPrice": 114953, "activeCount": 45, "minPrice": 73000, "maxPrice": 159500 },
      { "bedrooms": 1, "avgPrice": 151302, "activeCount": 51, "minPrice": 75000, "maxPrice": 235000 },
      { "bedrooms": 2, "avgPrice": 187927, "activeCount": 33, "minPrice": 97500, "maxPrice": 269000 },
      { "bedrooms": 3, "avgPrice": 235850, "activeCount": 28, "minPrice": 97500, "maxPrice": 320000 },
      { "bedrooms": 4, "avgPrice": 278480, "activeCount": 9, "minPrice": 68300, "maxPrice": 499000 }
    ],
    "byPropertyType": [
      { "propertyType": "apartment", "count": 42 },
      { "propertyType": "condo", "count": 12 }
    ]
  },
  "latestListings": [
    { "id": "uuid", "title": "...", "pricePerMonth": 150000, "primaryImage": { "url": "..." } }
  ]
}
  • Prices in stats are integer cents (196902 = $1,969)
  • byBedroom: bedrooms 0 = Studio, 4 = 4+ bedrooms. Uses active+archived listings for price averages
  • byPropertyType: active listings only
  • latestListings: 6 most recent active listings with primary images

GET /neighborhoods/:slug/snapshots

Historical stats snapshots for price trends. Data accumulates daily via a scheduled job.

Query Parameters

ParamTypeDefaultDescription
fromdate90 days agoStart date (YYYY-MM-DD)
todatetodayEnd date (YYYY-MM-DD)
bedroomsintegerallFilter by bedroom count (0=studio, 1-3, 4=4+)

Response

json
{
  "snapshots": [
    {
      "date": "2026-03-01T00:00:00.000Z",
      "bedrooms": null,
      "avgPrice": 170308,
      "listingCount": 166,
      "minPrice": 68300,
      "maxPrice": 499000
    }
  ]
}
  • bedrooms: null = overall aggregate for the neighborhood
  • Snapshots are computed daily at 2:00 AM by the scraper service

Boroughs

Neighborhoods are grouped by Montreal borough (arrondissement):

  • Ahuntsic-Cartierville
  • CDN-NDG
  • Lachine
  • LaSalle
  • Le Plateau-Mont-Royal
  • Le Sud-Ouest
  • Mercier-Hochelaga-Maisonneuve
  • Outremont
  • Rosemont-La Petite-Patrie
  • Saint-Laurent
  • Verdun
  • Ville-Marie
  • Villeray-Saint-Michel-Parc-Extension