Skip to content
# urban_services — Urban Services (Urban Tenant Solutions)
- site: https://rent.urbanservices.ca/Listing/Listings (vitrine : https://urbanservices.ca)
- méthode: html + JSON embarqué (portail Building Stack)
- annonces: 53 (unités disponibles, 16 immeubles — Gatineau seulement)
- couverture (sur 53 annonces): prix 100%, adresse 100%, dispo 98%, superficie 74%, commodités 70%, images 100%, GPS 100%
- fixture: ok · test: ok
- Portail Building Stack — même famille que le volet edifialocation.com du connecteur edifia.py, sélecteurs identiques :
/Listing/Listings embarque var units = [...] (une entrée par appartement annoncé : prix structuré + PriceFormatted, pi², chambres/sdb, adresse complète avec code postal, GPS, contact de l'immeuble (ListingEmployeesContacts -> details.contact nom/téléphone/courriel), photo d'unité et d'immeuble) ;
- pages immeuble
/b/<id> (16 requêtes/sync, garde-fou max_buildings=40) : onglets a.apartment-view-potential = inventaire complet (numéro, prix, pi², chambres, sdb, date de disponibilité : « Disponible dès maintenant! », « oct. 01, 2027 » -> « Libre oct. 01, 2027 ») + commodités .facilities (« Ascenseur », « Stationnement intérieur »).
- La page /b/ fait foi pour l'inventaire : le JSON de la liste est tronqué pour les immeubles à fort inventaire (ex. 19-21 Patrimoine : 8 entrées JSON pour 30 unités affichées sur /b/…). Le connecteur croise les deux : onglets = lignes, JSON = enrichissement (GPS, contact, prix structuré, photo, URL profonde
/b/<id>/<apartmentId>).
- Filtre provincial :
Address.Province.ProvinceCode == QC (11 unités d'Ottawa exclues).
unit_type : convention Building Stack (comme edifia) — 0 chambre -> Studio, n chambres -> (n+2)½.
external_id = <id public immeuble>-<numéro d'unité> — stable.
- Le JSON Razor encode les apostrophes (
') : html.unescape sur adresse/ville/nom d'immeuble.
# Champs indisponibles à la source
- Description : le portail n'a pas de texte descriptif par immeuble/unité (champ synthétique pi²/chambres/sdb seulement).
- Commodités : absentes pour 5/16 immeubles (
.facilities vide).
- Superficie : « -- » pour 14/53 unités.
- Disponibilité : 1 unité présente dans le JSON mais absente des onglets -> dispo laissée vide (jamais inventée).
# Fragilités
- Sélecteurs Building Stack (
var units = , ul.wpb-tabs-menu a.apartment-view-potential, .facilities) : partagés avec edifia — toute casse touchera les deux (et inversement, un correctif servira aux deux).
- Position des
span dans les onglets (0=unité, 1=prix, 2=pi², 3=chambres, 4=sdb, 5=dispo) : implicite, comme edifia.
- Les unités « 0 chambre / 0 sdb / -- pi² » (ex. 202-204 St-Rédempteur à 700 $) sont typées Studio par la convention Building Stack — possiblement des chambres.
# Notes
- 53 unités disponibles (700 $–4 800 $) dans 16 immeubles, toutes à Gatineau (secteurs Hull, Aylmer, Plateau…) ; certaines dispos lointaines (2027-2028) publiées par la source et conservées telles quelles.
- robots.txt de rent.urbanservices.ca : vide (aucune interdiction).
- Premier connecteur « portail Building Stack pur » hors edifia — patron réutilisable (Gestion Summum, etc.).