Broker listings + registry expansion: realtor_ca connector (+22 477 MLS rentals) + 71 Buildium & 15 LiftSystem managers
- realtor_ca: CREA/REALTOR.ca broker rental listings via internal PropertySearch_Post API (Scrapfly ASP + residential pool), recursive quad-split around the 600-records/area cap, threaded crawl, honest failure. ON 20 889, BC 1 281, AB 194, NB/MB/NL/PE tail. - LiftSystem: probe_liftsystem_gaps.py scans never-probed client_ids (1..3200, client name/site read from the feed) -> +15 clients (+146 listings); fix build_lift_registry.py idempotence bug (coverage sets computed before dropping generated entries wiped sources.json to 100) + exclude duplicate corporate feeds (Sterling Karamar, Drewlo, Minto). - Buildium: national discovery campaign -> +71 validated portals (+991 listings, BC/AB/SK/MB/Atlantic/ON) merged via scripts/merge_candidates.py. - AppFolio: campaign result = no live ROC portal left (RPM Canada decommissioned public portals) — dead ends documented in candidates file. Site now 83 260 active published listings across 762 sources. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
11 changed files +3,978 −232
added
data/appfolio_candidates.json
+9 −0
@@ -0,0 +1,9 @@ | ||
| 1 | +{ | |
| 2 | + "_comment": "Candidats AppFolio Canada hors Québec — recherche massive du 2026-08-28 (~40 requêtes moteur + ~40 vérifications live). RÉSULTAT : AUCUN nouveau portail AppFolio vivant avec ≥1 annonce hors Québec au-delà des 2 clients du registre (fusepm ON, regencypropmgmt SK — non dupliqués). CONSTAT : le réseau Real Property Management Canada a DÉCOMMISSIONNÉ ses portails publics — rpmbc001-005 et rpmcan01/03/05 → 302 page-not-found-sub ; rpmcan02/rpmcan04 live mais 0 annonce ; rpmcan05 = Envision Real Estate Services (Saskatoon, envisionyxe.com, oportal seulement) ; franchises consolidées sur realpm.ca (JS, sitemap vide). ~42 sous-domaines découverts, le reste = homonymes US (investwest/zenithproperties/deainvestments/premier/tmgwashington = Vancouver WA ; victoriasprop = Victoria TX ; chappell = Prince George VA ; sigpm/jaasopm = CO ; vmg = CA ; guidemanagement = WA/ID). Le marché hors QC crawlé tourne sur Buildium/managebuilding.com (GoodDoors, JML, Bodewell, RE/MAX Rental Pros, Highpoint…), Rentsync, PropertyWare. REJETS à ne pas réessayer : rpmbc001-005, rpmcan01-05, korecki, bolld. PISTES : surveiller rpmcan02/rpmcan04 et realpm.ca.", | |
| 3 | + "generated": "2026-08-28", | |
| 4 | + "clients": [], | |
| 5 | + "leads_vides": [ | |
| 6 | + {"id": "rpmcan02", "subdomain": "rpmcan02", "name": "Real Property Management Canada (franchise non identifiée)", "status": "vide", "notes": "Live 2026-08-28 mais « No vacancies found » — 0 annonce. À re-vérifier."}, | |
| 7 | + {"id": "rpmcan04", "subdomain": "rpmcan04", "name": "Real Property Management Canada (franchise non identifiée)", "status": "vide", "notes": "Live 2026-08-28 mais « No vacancies found » — 0 annonce. À re-vérifier."} | |
| 8 | + ] | |
| 9 | +} | |
modified
data/appfolio_clients.json
+31 −31
@@ -1,33 +1,33 @@ | ||
| 1 | 1 | { |
| 2 | − "_comment": "Registre des clients AppFolio (<sous-domaine>.appfolio.com/listings — HTML rendu serveur, cartes .js-listing-item, page unique « Showing all available listings ») — longue traîne Ontario 2026-08. Consommé par rentka/connectors/appfolio.py qui génère un connecteur apf_<id> par entrée 'valide'. CONSTAT de la recherche du 2026-08-27 (Serper site:appfolio.com + scan des 273 sites de gestion-immobiliere-ontario.md) : AppFolio est RARE en Ontario — la longue traîne ON est massivement sur Buildium (voir buildium_clients.json). REJETS vérifiés (ne pas réessayer) : AG Secure (agsecure.ca) et Strano (stranoproperties.ca) ont migré sur Wix, plus aucun lien AppFolio même en rendu JS Scrapfly ; rpmcan07 (RPM Barrie, cité par un rapport simcoe.ca 2021) éteint, rpmcan01-15 balayés = 0 client ON ; homonymes US écartés (wpd=Chicago, skylineprops=ND, stonebrown=VT, northbay=Californie, marda* sans portail public). Les adresses AppFolio étant en texte libre, le connecteur filtre par code postal canadien (K/L/M/N/P = ON, G/H/J = QC).", | |
| 3 | − "updated": "2026-08-27", | |
| 4 | − "clients": [ | |
| 5 | − { | |
| 6 | − "id": "fusepm", | |
| 7 | − "name": "Fuse Property Management", | |
| 8 | − "site": "https://fusepm.ca", | |
| 9 | − "subdomain": "fusepm", | |
| 10 | − "regions": [ | |
| 11 | − "Barrie", | |
| 12 | − "Orillia", | |
| 13 | − "Oro-Medonte", | |
| 14 | − "Simcoe" | |
| 15 | − ], | |
| 16 | − "status": "valide", | |
| 17 | − "listings_on": 25, | |
| 18 | − "notes": "25 annonces ON le 2026-08-27 (Barrie/Orillia/Oro-Medonte), page unique sans pagination ; sous-domaine trouvé dans fusepm.ca" | |
| 19 | − }, | |
| 20 | − { | |
| 21 | − "id": "regency", | |
| 22 | − "name": "Regency Property Management", | |
| 23 | − "site": "https://regencypm.com", | |
| 24 | − "subdomain": "regencypropmgmt", | |
| 25 | − "regions": [ | |
| 26 | − "Regina" | |
| 27 | − ], | |
| 28 | − "province": "SK", | |
| 29 | − "status": "valide", | |
| 30 | − "notes": "canada-expansion 2026-08-27 — /listings 200 avec inventaire (vérifié live)" | |
| 31 | − } | |
| 32 | − ] | |
| 2 | + "_comment": "Registre des clients AppFolio (<sous-domaine>.appfolio.com/listings — HTML rendu serveur, cartes .js-listing-item, page unique « Showing all available listings ») — longue traîne Ontario 2026-08. Consommé par rentka/connectors/appfolio.py qui génère un connecteur apf_<id> par entrée 'valide'. CONSTAT de la recherche du 2026-08-27 (Serper site:appfolio.com + scan des 273 sites de gestion-immobiliere-ontario.md) : AppFolio est RARE en Ontario — la longue traîne ON est massivement sur Buildium (voir buildium_clients.json). REJETS vérifiés (ne pas réessayer) : AG Secure (agsecure.ca) et Strano (stranoproperties.ca) ont migré sur Wix, plus aucun lien AppFolio même en rendu JS Scrapfly ; rpmcan07 (RPM Barrie, cité par un rapport simcoe.ca 2021) éteint, rpmcan01-15 balayés = 0 client ON ; homonymes US écartés (wpd=Chicago, skylineprops=ND, stonebrown=VT, northbay=Californie, marda* sans portail public). Les adresses AppFolio étant en texte libre, le connecteur filtre par code postal canadien (K/L/M/N/P = ON, G/H/J = QC).", | |
| 3 | + "updated": "2026-08-28", | |
| 4 | + "clients": [ | |
| 5 | + { | |
| 6 | + "id": "fusepm", | |
| 7 | + "name": "Fuse Property Management", | |
| 8 | + "site": "https://fusepm.ca", | |
| 9 | + "subdomain": "fusepm", | |
| 10 | + "regions": [ | |
| 11 | + "Barrie", | |
| 12 | + "Orillia", | |
| 13 | + "Oro-Medonte", | |
| 14 | + "Simcoe" | |
| 15 | + ], | |
| 16 | + "status": "valide", | |
| 17 | + "listings_on": 25, | |
| 18 | + "notes": "25 annonces ON le 2026-08-27 (Barrie/Orillia/Oro-Medonte), page unique sans pagination ; sous-domaine trouvé dans fusepm.ca" | |
| 19 | + }, | |
| 20 | + { | |
| 21 | + "id": "regency", | |
| 22 | + "name": "Regency Property Management", | |
| 23 | + "site": "https://regencypm.com", | |
| 24 | + "subdomain": "regencypropmgmt", | |
| 25 | + "regions": [ | |
| 26 | + "Regina" | |
| 27 | + ], | |
| 28 | + "province": "SK", | |
| 29 | + "status": "valide", | |
| 30 | + "notes": "canada-expansion 2026-08-27 — /listings 200 avec inventaire (vérifié live)" | |
| 31 | + } | |
| 32 | + ] | |
| 33 | 33 | } |
| \ No newline at end of file | ||
added
data/buildium_candidates.json
+886 −0
@@ -0,0 +1,886 @@ | ||
| 1 | +{ | |
| 2 | + "_comment": "Candidats Buildium Canada HORS Québec — campagne de découverte massive 2026-08-28 (WebSearch site:managebuilding.com + villes/provinces, validation live des pages /Resident/public/rentals via WebFetch, ~112 sous-domaines uniques découverts). Même format que data/buildium_clients.json ; listings_on = nb d'annonces hors QC visibles au moment du sondage (peut inclure quelques unités non résidentielles — parking/commercial — que le connecteur filtre). AUCUN doublon avec buildium_clients.json. REJETS 2026-08-28 (0 annonce ou page morte) : hoolihomesrealty, royallepageproperty, vernongardens, veyronproperties, hubcentral (404), renttruman, edmontonfurnishedsuites (404), topwestrealty, metawestrealty (404), ridgeapartments (404), m-f-properties (404), justrent, graymanagementservices (Whitehorse — 404 au sondage, à re-tester), directpropertymanagement1 (Yellowknife — 0 annonce), niagararental (404), hylandproperties, lakeheadgroup (404), gryphonpropertymanagement (404), shorelinepropertymanagement, homelife (gabarit vide), brooksidepm (404), nicerentals/bluediamondpropertiesllc/bentbirchpropertymanagement (comptes inactifs). HORS CANADA (ne pas retester) : migmgmt + uppm (Californie), abdproperties + jsadevelopment (Waterloo, Iowa), romigrentals (US). MISE EN PAGE HÉRITÉE NON VALIDABLE PAR WebFetch (viewmodel DotVVM dans <script>, nécessite curl) — à valider par curl avant intégration : remaxrentalpros (Nanaimo BC, annonces indexées Google), diverserentals (Chilliwack/Abbotsford BC), selectrealestatebc (BC), rentdan (Abbotsford BC), mygirlfridaymanagement (Kitchener-Waterloo ON).", | |
| 3 | + "generated": "2026-08-28", | |
| 4 | + "clients": [ | |
| 5 | + { | |
| 6 | + "id": "refinity", | |
| 7 | + "name": "Refinity Homes", | |
| 8 | + "site": "https://refinity.managebuilding.com/Resident/public/home", | |
| 9 | + "subdomain": "refinity", | |
| 10 | + "regions": ["Vancouver", "Surrey", "Richmond", "Burnaby", "Langley"], | |
| 11 | + "province": "BC", | |
| 12 | + "status": "valide", | |
| 13 | + "listings_on": 7, | |
| 14 | + "notes": "7 annonces BC (Lower Mainland) le 2026-08-28 ; mise en page moderne" | |
| 15 | + }, | |
| 16 | + { | |
| 17 | + "id": "macpherson", | |
| 18 | + "name": "MacPherson Real Estate Ltd.", | |
| 19 | + "site": "https://cbmre.managebuilding.com/Resident/public/home", | |
| 20 | + "subdomain": "cbmre", | |
| 21 | + "regions": ["Vancouver", "Burnaby", "Coquitlam", "New Westminster"], | |
| 22 | + "province": "BC", | |
| 23 | + "status": "valide", | |
| 24 | + "listings_on": 6, | |
| 25 | + "notes": "6 annonces BC le 2026-08-28 ; Coldwell Banker MacPherson, Coquitlam" | |
| 26 | + }, | |
| 27 | + { | |
| 28 | + "id": "rlpklein", | |
| 29 | + "name": "Royal LePage Westside Klein Group", | |
| 30 | + "site": "https://rlpkleingroup.managebuilding.com/Resident/public/home", | |
| 31 | + "subdomain": "rlpkleingroup", | |
| 32 | + "regions": ["Vancouver"], | |
| 33 | + "province": "BC", | |
| 34 | + "status": "valide", | |
| 35 | + "listings_on": 3, | |
| 36 | + "notes": "3 annonces Vancouver le 2026-08-28" | |
| 37 | + }, | |
| 38 | + { | |
| 39 | + "id": "pennylane", | |
| 40 | + "name": "Penny Lane Property Management", | |
| 41 | + "site": "https://pennylanepropertymanagement.managebuilding.com/Resident/public/home", | |
| 42 | + "subdomain": "pennylanepropertymanagement", | |
| 43 | + "regions": ["Victoria", "Courtenay", "Campbell River"], | |
| 44 | + "province": "BC", | |
| 45 | + "status": "valide", | |
| 46 | + "listings_on": 14, | |
| 47 | + "notes": "14 annonces BC (île de Vancouver) le 2026-08-28" | |
| 48 | + }, | |
| 49 | + { | |
| 50 | + "id": "jksrealty", | |
| 51 | + "name": "JKS Realty & Property Management", | |
| 52 | + "site": "https://jksrealty.managebuilding.com/Resident/public/home", | |
| 53 | + "subdomain": "jksrealty", | |
| 54 | + "regions": ["Victoria", "Langford"], | |
| 55 | + "province": "BC", | |
| 56 | + "status": "valide", | |
| 57 | + "listings_on": 10, | |
| 58 | + "notes": "10 annonces Victoria/Langford le 2026-08-28" | |
| 59 | + }, | |
| 60 | + { | |
| 61 | + "id": "westurban", | |
| 62 | + "name": "WestUrban Properties Management Ltd.", | |
| 63 | + "site": "https://westurban.managebuilding.com/Resident/public/home", | |
| 64 | + "subdomain": "westurban", | |
| 65 | + "regions": ["Victoria", "Duncan", "Nanaimo", "Kelowna", "Salmon Arm", "Campbell River", "Cranbrook", "Vernon", "Abbotsford", "Winnipeg", "Calgary"], | |
| 66 | + "province": "BC", | |
| 67 | + "status": "valide", | |
| 68 | + "listings_on": 79, | |
| 69 | + "notes": "79 annonces le 2026-08-28 (BC 67, MB 3, AB 2, autres 7) — promoteur-gestionnaire multi-provinces, gros volume" | |
| 70 | + }, | |
| 71 | + { | |
| 72 | + "id": "pqvi", | |
| 73 | + "name": "Pacific Quorum Vancouver Island Properties Inc.", | |
| 74 | + "site": "https://pqvi.managebuilding.com/Resident/public/home", | |
| 75 | + "subdomain": "pqvi", | |
| 76 | + "regions": ["Victoria", "Courtenay", "Campbell River", "Parksville", "Comox", "Port Alberni"], | |
| 77 | + "province": "BC", | |
| 78 | + "status": "valide", | |
| 79 | + "listings_on": 22, | |
| 80 | + "notes": "22 annonces BC (île de Vancouver) le 2026-08-28" | |
| 81 | + }, | |
| 82 | + { | |
| 83 | + "id": "pqrn", | |
| 84 | + "name": "Pacific Quorum (Vancouver Island) — portail locations pqrn", | |
| 85 | + "site": "https://pqrn.managebuilding.com/Resident/public/home", | |
| 86 | + "subdomain": "pqrn", | |
| 87 | + "regions": ["Nanaimo", "Victoria", "Coquitlam"], | |
| 88 | + "province": "BC", | |
| 89 | + "status": "valide", | |
| 90 | + "listings_on": 23, | |
| 91 | + "notes": "23 annonces BC le 2026-08-28 ; deuxième portail Pacific Quorum, inventaire distinct de pqvi (dédupliquer par adresse au besoin)" | |
| 92 | + }, | |
| 93 | + { | |
| 94 | + "id": "bishops", | |
| 95 | + "name": "Bishops Realty Inc.", | |
| 96 | + "site": "https://bishopsrealtyinc.managebuilding.com/Resident/public/home", | |
| 97 | + "subdomain": "bishopsrealtyinc", | |
| 98 | + "regions": ["Kelowna", "West Kelowna"], | |
| 99 | + "province": "BC", | |
| 100 | + "status": "valide", | |
| 101 | + "listings_on": 12, | |
| 102 | + "notes": "12 annonces Kelowna/West Kelowna le 2026-08-28" | |
| 103 | + }, | |
| 104 | + { | |
| 105 | + "id": "cityplex", | |
| 106 | + "name": "Cityplex Property Management", | |
| 107 | + "site": "https://cityplex.managebuilding.com/Resident/public/home", | |
| 108 | + "subdomain": "cityplex", | |
| 109 | + "regions": ["Kelowna", "West Kelowna", "Peachland", "Penticton", "Surrey", "White Rock"], | |
| 110 | + "province": "BC", | |
| 111 | + "status": "valide", | |
| 112 | + "listings_on": 14, | |
| 113 | + "notes": "14 annonces BC (Okanagan + Lower Mainland) le 2026-08-28" | |
| 114 | + }, | |
| 115 | + { | |
| 116 | + "id": "pqokanagan", | |
| 117 | + "name": "Pacific Quorum (Okanagan) Properties Inc", | |
| 118 | + "site": "https://pqokanagan.managebuilding.com/Resident/public/home", | |
| 119 | + "subdomain": "pqokanagan", | |
| 120 | + "regions": ["Kelowna", "West Kelowna", "Penticton", "Salmon Arm", "Sicamous"], | |
| 121 | + "province": "BC", | |
| 122 | + "status": "valide", | |
| 123 | + "listings_on": 8, | |
| 124 | + "notes": "8 annonces Okanagan le 2026-08-28" | |
| 125 | + }, | |
| 126 | + { | |
| 127 | + "id": "highpoint", | |
| 128 | + "name": "Highpoint Realty Ltd.", | |
| 129 | + "site": "https://highpointrealtyltd.managebuilding.com/Resident/public/home", | |
| 130 | + "subdomain": "highpointrealtyltd", | |
| 131 | + "regions": ["Kelowna"], | |
| 132 | + "province": "BC", | |
| 133 | + "status": "valide", | |
| 134 | + "listings_on": 11, | |
| 135 | + "notes": "11 annonces Kelowna le 2026-08-28 (secteur UBCO/Academy Way)" | |
| 136 | + }, | |
| 137 | + { | |
| 138 | + "id": "mvk", | |
| 139 | + "name": "MVK Rental", | |
| 140 | + "site": "https://mvkrental.ca", | |
| 141 | + "subdomain": "mvkrental", | |
| 142 | + "regions": ["Kamloops", "Vernon", "Merritt", "Kelowna"], | |
| 143 | + "province": "BC", | |
| 144 | + "status": "valide", | |
| 145 | + "listings_on": 12, | |
| 146 | + "notes": "12 annonces BC (Kamloops 7, Vernon 5) le 2026-08-28" | |
| 147 | + }, | |
| 148 | + { | |
| 149 | + "id": "greenstone", | |
| 150 | + "name": "Greenstone Properties", | |
| 151 | + "site": "https://greenstoneproperties.managebuilding.com/Resident/public/home", | |
| 152 | + "subdomain": "greenstoneproperties", | |
| 153 | + "regions": ["Kamloops", "Pouce Coupe"], | |
| 154 | + "province": "BC", | |
| 155 | + "status": "valide", | |
| 156 | + "listings_on": 1, | |
| 157 | + "notes": "1 annonce BC (Pouce Coupe) le 2026-08-28 ; gestionnaire basé à Kamloops, petit inventaire variable" | |
| 158 | + }, | |
| 159 | + { | |
| 160 | + "id": "c21energy", | |
| 161 | + "name": "Century 21 Energy Realty", | |
| 162 | + "site": "https://c21energypropertymanagement.managebuilding.com/Resident/public/home", | |
| 163 | + "subdomain": "c21energypropertymanagement", | |
| 164 | + "regions": ["Prince George", "Fort St. John", "Chetwynd", "Quesnel", "Taylor"], | |
| 165 | + "province": "BC", | |
| 166 | + "status": "valide", | |
| 167 | + "listings_on": 48, | |
| 168 | + "notes": "48 cartes BC (nord de la BC) le 2026-08-28, dont quelques stationnements à filtrer" | |
| 169 | + }, | |
| 170 | + { | |
| 171 | + "id": "nestpg", | |
| 172 | + "name": "Nest Property Management and Real Estate Services Ltd.", | |
| 173 | + "site": "https://nestrealtyltd.com", | |
| 174 | + "subdomain": "nestpg", | |
| 175 | + "regions": ["Prince George", "Vancouver", "Burnaby", "Kitimat", "Prince Rupert", "Terrace", "Surrey"], | |
| 176 | + "province": "BC", | |
| 177 | + "status": "valide", | |
| 178 | + "listings_on": 76, | |
| 179 | + "notes": "76 annonces BC le 2026-08-28 (Prince George + Lower Mainland + nord-ouest BC) — gros volume" | |
| 180 | + }, | |
| 181 | + { | |
| 182 | + "id": "kidd", | |
| 183 | + "name": "Kidd Management Ltd (KG Property)", | |
| 184 | + "site": "https://kgproperty.managebuilding.com/Resident/public/home", | |
| 185 | + "subdomain": "kgproperty", | |
| 186 | + "regions": ["Prince George"], | |
| 187 | + "province": "BC", | |
| 188 | + "status": "valide", | |
| 189 | + "listings_on": 9, | |
| 190 | + "notes": "9 annonces Prince George le 2026-08-28" | |
| 191 | + }, | |
| 192 | + { | |
| 193 | + "id": "homelifebc", | |
| 194 | + "name": "HomeLife Property Management BC", | |
| 195 | + "site": "https://homelifepropertymanagementbc.managebuilding.com/Resident/public/home", | |
| 196 | + "subdomain": "homelifepropertymanagementbc", | |
| 197 | + "regions": ["Surrey", "Langley", "Delta", "Chilliwack", "White Rock", "Port Coquitlam"], | |
| 198 | + "province": "BC", | |
| 199 | + "status": "valide", | |
| 200 | + "listings_on": 30, | |
| 201 | + "notes": "30 annonces BC (Fraser Valley/Lower Mainland) le 2026-08-28" | |
| 202 | + }, | |
| 203 | + { | |
| 204 | + "id": "c21coastal", | |
| 205 | + "name": "Century 21 Coastal Realty Property Management", | |
| 206 | + "site": "https://c21.managebuilding.com/Resident/public/home", | |
| 207 | + "subdomain": "c21", | |
| 208 | + "regions": ["Abbotsford", "Maple Ridge", "Surrey", "Richmond", "Mission", "Chilliwack", "Coquitlam"], | |
| 209 | + "province": "BC", | |
| 210 | + "status": "valide", | |
| 211 | + "listings_on": 23, | |
| 212 | + "notes": "23 annonces BC (Fraser Valley) le 2026-08-28" | |
| 213 | + }, | |
| 214 | + { | |
| 215 | + "id": "homelifecv", | |
| 216 | + "name": "Homelife Advantage Realty Ltd", | |
| 217 | + "site": "https://homelifeadvantagecv.managebuilding.com/Resident/public/home", | |
| 218 | + "subdomain": "homelifeadvantagecv", | |
| 219 | + "regions": ["Chilliwack", "Surrey"], | |
| 220 | + "province": "BC", | |
| 221 | + "status": "valide", | |
| 222 | + "listings_on": 6, | |
| 223 | + "notes": "6 annonces BC le 2026-08-28" | |
| 224 | + }, | |
| 225 | + { | |
| 226 | + "id": "cbexecutives", | |
| 227 | + "name": "Coldwell Banker Executives Realty", | |
| 228 | + "site": "https://executives-realty.managebuilding.com/Resident/public/home", | |
| 229 | + "subdomain": "executives-realty", | |
| 230 | + "regions": ["Vernon", "Revelstoke"], | |
| 231 | + "province": "BC", | |
| 232 | + "status": "valide", | |
| 233 | + "listings_on": 3, | |
| 234 | + "notes": "3 annonces BC (Revelstoke 2, Vernon 1) le 2026-08-28" | |
| 235 | + }, | |
| 236 | + { | |
| 237 | + "id": "synterra", | |
| 238 | + "name": "Synterra Realty", | |
| 239 | + "site": "https://synterrarealty.managebuilding.com/Resident/public/home", | |
| 240 | + "subdomain": "synterrarealty", | |
| 241 | + "regions": ["Calgary", "Airdrie"], | |
| 242 | + "province": "AB", | |
| 243 | + "status": "valide", | |
| 244 | + "listings_on": 8, | |
| 245 | + "notes": "8 annonces AB (Calgary 6, Airdrie 2) le 2026-08-28" | |
| 246 | + }, | |
| 247 | + { | |
| 248 | + "id": "citysearch", | |
| 249 | + "name": "Citysearch Rental Network Inc.", | |
| 250 | + "site": "https://citysearchrental.managebuilding.com/Resident/public/home", | |
| 251 | + "subdomain": "citysearchrental", | |
| 252 | + "regions": ["Calgary"], | |
| 253 | + "province": "AB", | |
| 254 | + "status": "valide", | |
| 255 | + "listings_on": 16, | |
| 256 | + "notes": "16 annonces Calgary le 2026-08-28" | |
| 257 | + }, | |
| 258 | + { | |
| 259 | + "id": "pinto", | |
| 260 | + "name": "Pinto Properties", | |
| 261 | + "site": "https://pintoproperties.managebuilding.com/Resident/public/home", | |
| 262 | + "subdomain": "pintoproperties", | |
| 263 | + "regions": ["Edmonton"], | |
| 264 | + "province": "AB", | |
| 265 | + "status": "valide", | |
| 266 | + "listings_on": 12, | |
| 267 | + "notes": "12 annonces Edmonton (Garneau et environs) le 2026-08-28" | |
| 268 | + }, | |
| 269 | + { | |
| 270 | + "id": "mylife", | |
| 271 | + "name": "My Life Realty, Property Management", | |
| 272 | + "site": "https://myliferealty.managebuilding.com/Resident/public/home", | |
| 273 | + "subdomain": "myliferealty", | |
| 274 | + "regions": ["Lethbridge"], | |
| 275 | + "province": "AB", | |
| 276 | + "status": "valide", | |
| 277 | + "listings_on": 3, | |
| 278 | + "notes": "3 annonces Lethbridge le 2026-08-28" | |
| 279 | + }, | |
| 280 | + { | |
| 281 | + "id": "grassrootssouth", | |
| 282 | + "name": "Grassroots Property Management South", | |
| 283 | + "site": "https://grassrootssouthpropertymanagement.managebuilding.com/Resident/public/home", | |
| 284 | + "subdomain": "grassrootssouthpropertymanagement", | |
| 285 | + "regions": ["Lethbridge", "Magrath", "Cardston"], | |
| 286 | + "province": "AB", | |
| 287 | + "status": "valide", | |
| 288 | + "listings_on": 6, | |
| 289 | + "notes": "6 annonces AB (Lethbridge 5, Magrath 1) le 2026-08-28" | |
| 290 | + }, | |
| 291 | + { | |
| 292 | + "id": "grassrootsgp", | |
| 293 | + "name": "Grassroots Property Management (Grande Prairie)", | |
| 294 | + "site": "https://grassrootspropertymanagement.managebuilding.com/Resident/public/home", | |
| 295 | + "subdomain": "grassrootspropertymanagement", | |
| 296 | + "regions": ["Grande Prairie", "Clairmont", "High Prairie"], | |
| 297 | + "province": "AB", | |
| 298 | + "status": "valide", | |
| 299 | + "listings_on": 28, | |
| 300 | + "notes": "28 annonces AB le 2026-08-28 ; même bannière que grassrootssouth mais compte Buildium distinct" | |
| 301 | + }, | |
| 302 | + { | |
| 303 | + "id": "gpprime", | |
| 304 | + "name": "Prime Property Management (GP Prime)", | |
| 305 | + "site": "https://gpprime.managebuilding.com/Resident/public/home", | |
| 306 | + "subdomain": "gpprime", | |
| 307 | + "regions": ["Grande Prairie"], | |
| 308 | + "province": "AB", | |
| 309 | + "status": "valide", | |
| 310 | + "listings_on": 1, | |
| 311 | + "notes": "1 annonce Grande Prairie le 2026-08-28 ; inventaire variable" | |
| 312 | + }, | |
| 313 | + { | |
| 314 | + "id": "equityrentals", | |
| 315 | + "name": "Equity Rentals Ltd", | |
| 316 | + "site": "https://equityrentalsltd.managebuilding.com/Resident/public/home", | |
| 317 | + "subdomain": "equityrentalsltd", | |
| 318 | + "regions": ["Grande Prairie"], | |
| 319 | + "province": "AB", | |
| 320 | + "status": "valide", | |
| 321 | + "listings_on": 24, | |
| 322 | + "notes": "24 cartes Grande Prairie le 2026-08-28, dont quelques locaux commerciaux à filtrer" | |
| 323 | + }, | |
| 324 | + { | |
| 325 | + "id": "resremedies", | |
| 326 | + "name": "Residential Remedies Inc. (3% Realty Fort McMurray)", | |
| 327 | + "site": "https://residentialremedies.managebuilding.com/Resident/public/home", | |
| 328 | + "subdomain": "residentialremedies", | |
| 329 | + "regions": ["Fort McMurray"], | |
| 330 | + "province": "AB", | |
| 331 | + "status": "valide", | |
| 332 | + "listings_on": 15, | |
| 333 | + "notes": "15 annonces Fort McMurray le 2026-08-28" | |
| 334 | + }, | |
| 335 | + { | |
| 336 | + "id": "zen", | |
| 337 | + "name": "Zen Residential Ltd", | |
| 338 | + "site": "https://zenresidential.managebuilding.com/Resident/public/home", | |
| 339 | + "subdomain": "zenresidential", | |
| 340 | + "regions": ["Edmonton", "Calgary", "Fort McMurray", "St. Albert", "Okotoks", "Morinville"], | |
| 341 | + "province": "AB", | |
| 342 | + "status": "valide", | |
| 343 | + "listings_on": 68, | |
| 344 | + "notes": "68 annonces AB le 2026-08-28 (Edmonton 45, Calgary 12) — gros volume" | |
| 345 | + }, | |
| 346 | + { | |
| 347 | + "id": "mastergroup", | |
| 348 | + "name": "Master Group Investments", | |
| 349 | + "site": "https://mastergroupinvestments.managebuilding.com/Resident/public/home", | |
| 350 | + "subdomain": "mastergroupinvestments", | |
| 351 | + "regions": ["Edmonton", "Stony Plain", "Drayton Valley"], | |
| 352 | + "province": "AB", | |
| 353 | + "status": "valide", | |
| 354 | + "listings_on": 21, | |
| 355 | + "notes": "21 annonces AB le 2026-08-28" | |
| 356 | + }, | |
| 357 | + { | |
| 358 | + "id": "casawise", | |
| 359 | + "name": "Casawise Property Management", | |
| 360 | + "site": "https://casawise.managebuilding.com/Resident/public/home", | |
| 361 | + "subdomain": "casawise", | |
| 362 | + "regions": ["Edmonton", "Leduc", "St. Albert"], | |
| 363 | + "province": "AB", | |
| 364 | + "status": "valide", | |
| 365 | + "listings_on": 71, | |
| 366 | + "notes": "71 annonces AB le 2026-08-28 (Edmonton 52, Leduc 13, St. Albert 6) — gros volume" | |
| 367 | + }, | |
| 368 | + { | |
| 369 | + "id": "davies", | |
| 370 | + "name": "Davies Property Management", | |
| 371 | + "site": "https://davies.managebuilding.com/Resident/public/home", | |
| 372 | + "subdomain": "davies", | |
| 373 | + "regions": ["Edmonton", "St. Albert"], | |
| 374 | + "province": "AB", | |
| 375 | + "status": "valide", | |
| 376 | + "listings_on": 30, | |
| 377 | + "notes": "30 annonces AB le 2026-08-28" | |
| 378 | + }, | |
| 379 | + { | |
| 380 | + "id": "wpp", | |
| 381 | + "name": "Western Premium Property Management", | |
| 382 | + "site": "https://wppmanagement.managebuilding.com/Resident/public/home", | |
| 383 | + "subdomain": "wppmanagement", | |
| 384 | + "regions": ["Saskatoon", "Warman", "Biggar"], | |
| 385 | + "province": "SK", | |
| 386 | + "status": "valide", | |
| 387 | + "listings_on": 129, | |
| 388 | + "notes": "129 annonces SK le 2026-08-28 (Saskatoon 126) — plus gros candidat de la campagne" | |
| 389 | + }, | |
| 390 | + { | |
| 391 | + "id": "bartlett", | |
| 392 | + "name": "Bartlett Realty Ltd.", | |
| 393 | + "site": "https://bartlettrealty.managebuilding.com/Resident/public/home", | |
| 394 | + "subdomain": "bartlettrealty", | |
| 395 | + "regions": ["Regina"], | |
| 396 | + "province": "SK", | |
| 397 | + "status": "valide", | |
| 398 | + "listings_on": 3, | |
| 399 | + "notes": "3 annonces Regina le 2026-08-28" | |
| 400 | + }, | |
| 401 | + { | |
| 402 | + "id": "supreme", | |
| 403 | + "name": "Supreme Consulting", | |
| 404 | + "site": "https://supremeconsulting.managebuilding.com/Resident/public/home", | |
| 405 | + "subdomain": "supremeconsulting", | |
| 406 | + "regions": ["Regina", "Yorkton", "Prince Albert", "Swift Current", "North Battleford"], | |
| 407 | + "province": "SK", | |
| 408 | + "status": "valide", | |
| 409 | + "listings_on": 19, | |
| 410 | + "notes": "19 annonces SK le 2026-08-28" | |
| 411 | + }, | |
| 412 | + { | |
| 413 | + "id": "jml", | |
| 414 | + "name": "JML Properties Ltd", | |
| 415 | + "site": "https://jmlpropertiesltd.managebuilding.com/Resident/public/home", | |
| 416 | + "subdomain": "jmlpropertiesltd", | |
| 417 | + "regions": ["Regina", "Saskatoon", "Moose Jaw"], | |
| 418 | + "province": "SK", | |
| 419 | + "status": "valide", | |
| 420 | + "listings_on": 9, | |
| 421 | + "notes": "9 annonces SK (Regina 7, Saskatoon 2) le 2026-08-28" | |
| 422 | + }, | |
| 423 | + { | |
| 424 | + "id": "kodiak", | |
| 425 | + "name": "Kodiak Property Management Ltd.", | |
| 426 | + "site": "https://kodiakpropertymanagement.managebuilding.com/Resident/public/home", | |
| 427 | + "subdomain": "kodiakpropertymanagement", | |
| 428 | + "regions": ["Regina", "Moose Jaw"], | |
| 429 | + "province": "SK", | |
| 430 | + "status": "valide", | |
| 431 | + "listings_on": 12, | |
| 432 | + "notes": "12 annonces SK le 2026-08-28" | |
| 433 | + }, | |
| 434 | + { | |
| 435 | + "id": "tree", | |
| 436 | + "name": "TREE Property Management", | |
| 437 | + "site": "https://treepropertymanagement.managebuilding.com/Resident/public/home", | |
| 438 | + "subdomain": "treepropertymanagement", | |
| 439 | + "regions": ["Moose Jaw"], | |
| 440 | + "province": "SK", | |
| 441 | + "status": "valide", | |
| 442 | + "listings_on": 7, | |
| 443 | + "notes": "7 annonces Moose Jaw le 2026-08-28" | |
| 444 | + }, | |
| 445 | + { | |
| 446 | + "id": "3keys", | |
| 447 | + "name": "3Keys Property Management", | |
| 448 | + "site": "https://3keysproperty.managebuilding.com/Resident/public/home", | |
| 449 | + "subdomain": "3keysproperty", | |
| 450 | + "regions": ["Moose Jaw"], | |
| 451 | + "province": "SK", | |
| 452 | + "status": "valide", | |
| 453 | + "listings_on": 1, | |
| 454 | + "notes": "1 annonce Moose Jaw le 2026-08-28 ; inventaire habituel 5-10 selon Google, variable" | |
| 455 | + }, | |
| 456 | + { | |
| 457 | + "id": "clearwater", | |
| 458 | + "name": "Clearwater Management", | |
| 459 | + "site": "https://clearwatermanagement.managebuilding.com/Resident/public/home", | |
| 460 | + "subdomain": "clearwatermanagement", | |
| 461 | + "regions": ["Winnipeg", "Portage la Prairie"], | |
| 462 | + "province": "MB", | |
| 463 | + "status": "valide", | |
| 464 | + "listings_on": 18, | |
| 465 | + "notes": "18 annonces MB le 2026-08-28" | |
| 466 | + }, | |
| 467 | + { | |
| 468 | + "id": "premier204", | |
| 469 | + "name": "Premier Property Solutions Inc", | |
| 470 | + "site": "https://premier204.managebuilding.com/Resident/public/home", | |
| 471 | + "subdomain": "premier204", | |
| 472 | + "regions": ["Winnipeg"], | |
| 473 | + "province": "MB", | |
| 474 | + "status": "valide", | |
| 475 | + "listings_on": 57, | |
| 476 | + "notes": "57 annonces Winnipeg le 2026-08-28 — gros volume MB" | |
| 477 | + }, | |
| 478 | + { | |
| 479 | + "id": "joatmon", | |
| 480 | + "name": "Joatmon Properties Ltd.", | |
| 481 | + "site": "https://joatmonproperties.managebuilding.com/Resident/public/home", | |
| 482 | + "subdomain": "joatmonproperties", | |
| 483 | + "regions": ["Winnipeg"], | |
| 484 | + "province": "MB", | |
| 485 | + "status": "valide", | |
| 486 | + "listings_on": 10, | |
| 487 | + "notes": "10 annonces Winnipeg le 2026-08-28" | |
| 488 | + }, | |
| 489 | + { | |
| 490 | + "id": "assetcore", | |
| 491 | + "name": "AssetCore Properties", | |
| 492 | + "site": "https://assetcore.managebuilding.com/Resident/public/home", | |
| 493 | + "subdomain": "assetcore", | |
| 494 | + "regions": ["Winnipeg"], | |
| 495 | + "province": "MB", | |
| 496 | + "status": "valide", | |
| 497 | + "listings_on": 4, | |
| 498 | + "notes": "4 annonces Winnipeg le 2026-08-28" | |
| 499 | + }, | |
| 500 | + { | |
| 501 | + "id": "canopy", | |
| 502 | + "name": "Canopy Mgmt Property Managers", | |
| 503 | + "site": "https://jxpm.managebuilding.com/Resident/public/home", | |
| 504 | + "subdomain": "jxpm", | |
| 505 | + "regions": ["Winnipeg"], | |
| 506 | + "province": "MB", | |
| 507 | + "status": "valide", | |
| 508 | + "listings_on": 12, | |
| 509 | + "notes": "12 annonces Winnipeg le 2026-08-28" | |
| 510 | + }, | |
| 511 | + { | |
| 512 | + "id": "oakapple", | |
| 513 | + "name": "Oak & Apple Inc.", | |
| 514 | + "site": "https://oakandapple.managebuilding.com/Resident/public/home", | |
| 515 | + "subdomain": "oakandapple", | |
| 516 | + "regions": ["Winnipeg"], | |
| 517 | + "province": "MB", | |
| 518 | + "status": "valide", | |
| 519 | + "listings_on": 2, | |
| 520 | + "notes": "2 annonces Winnipeg le 2026-08-28" | |
| 521 | + }, | |
| 522 | + { | |
| 523 | + "id": "ember", | |
| 524 | + "name": "Ember Realty Group Ltd.", | |
| 525 | + "site": "https://emberrealty.managebuilding.com/Resident/public/home", | |
| 526 | + "subdomain": "emberrealty", | |
| 527 | + "regions": ["Winnipeg"], | |
| 528 | + "province": "MB", | |
| 529 | + "status": "valide", | |
| 530 | + "listings_on": 1, | |
| 531 | + "notes": "1 annonce Winnipeg le 2026-08-28 ; inventaire variable" | |
| 532 | + }, | |
| 533 | + { | |
| 534 | + "id": "padpicker", | |
| 535 | + "name": "The Pad Picker Inc", | |
| 536 | + "site": "https://padpicker.managebuilding.com/Resident/public/home", | |
| 537 | + "subdomain": "padpicker", | |
| 538 | + "regions": ["Halifax", "Dartmouth", "Bedford", "Timberlea", "Eastern Passage"], | |
| 539 | + "province": "NS", | |
| 540 | + "status": "valide", | |
| 541 | + "listings_on": 15, | |
| 542 | + "notes": "15 annonces NS (grand Halifax) le 2026-08-28" | |
| 543 | + }, | |
| 544 | + { | |
| 545 | + "id": "anchorhfx", | |
| 546 | + "name": "Anchor Property Management (Halifax)", | |
| 547 | + "site": "https://anchorpropertieshfx.managebuilding.com/Resident/public/home", | |
| 548 | + "subdomain": "anchorpropertieshfx", | |
| 549 | + "regions": ["Halifax"], | |
| 550 | + "province": "NS", | |
| 551 | + "status": "valide", | |
| 552 | + "listings_on": 4, | |
| 553 | + "notes": "4 annonces Halifax le 2026-08-28" | |
| 554 | + }, | |
| 555 | + { | |
| 556 | + "id": "urchin", | |
| 557 | + "name": "Urchin Property Management Inc.", | |
| 558 | + "site": "https://urchinpropertymanagementinc.managebuilding.com/Resident/public/home", | |
| 559 | + "subdomain": "urchinpropertymanagementinc", | |
| 560 | + "regions": ["Dartmouth", "Halifax", "Cole Harbour"], | |
| 561 | + "province": "NS", | |
| 562 | + "status": "valide", | |
| 563 | + "listings_on": 16, | |
| 564 | + "notes": "16 annonces NS (Dartmouth 13) le 2026-08-28" | |
| 565 | + }, | |
| 566 | + { | |
| 567 | + "id": "northdt", | |
| 568 | + "name": "North DT Holdings", | |
| 569 | + "site": "https://northdtholdings.managebuilding.com/Resident/public/home", | |
| 570 | + "subdomain": "northdtholdings", | |
| 571 | + "regions": ["Truro"], | |
| 572 | + "province": "NS", | |
| 573 | + "status": "valide", | |
| 574 | + "listings_on": 1, | |
| 575 | + "notes": "1 annonce Truro le 2026-08-28" | |
| 576 | + }, | |
| 577 | + { | |
| 578 | + "id": "safeguard", | |
| 579 | + "name": "Safeguard Property Management & Services", | |
| 580 | + "site": "https://safeguardservices.managebuilding.com/Resident/public/home", | |
| 581 | + "subdomain": "safeguardservices", | |
| 582 | + "regions": ["Wolfville", "Windsor", "Kentville", "Middleton", "New Minas", "Annapolis Royal", "Bridgetown"], | |
| 583 | + "province": "NS", | |
| 584 | + "status": "valide", | |
| 585 | + "listings_on": 31, | |
| 586 | + "notes": "31 annonces NS (vallée d'Annapolis, Windsor→Middleton) le 2026-08-28" | |
| 587 | + }, | |
| 588 | + { | |
| 589 | + "id": "lighthouse", | |
| 590 | + "name": "Rent With Lighthouse", | |
| 591 | + "site": "https://rentwithlighthouse.managebuilding.com/Resident/public/home", | |
| 592 | + "subdomain": "rentwithlighthouse", | |
| 593 | + "regions": ["Truro", "Dartmouth", "New Minas", "Amherst", "Fall River"], | |
| 594 | + "province": "NS", | |
| 595 | + "status": "valide", | |
| 596 | + "listings_on": 11, | |
| 597 | + "notes": "11 annonces NS le 2026-08-28" | |
| 598 | + }, | |
| 599 | + { | |
| 600 | + "id": "hubcity", | |
| 601 | + "name": "Hub City Property Management", | |
| 602 | + "site": "https://hubcitypm.managebuilding.com/Resident/public/home", | |
| 603 | + "subdomain": "hubcitypm", | |
| 604 | + "regions": ["Moncton", "Shediac", "Dieppe", "Miramichi", "Sackville"], | |
| 605 | + "province": "NB", | |
| 606 | + "status": "valide", | |
| 607 | + "listings_on": 26, | |
| 608 | + "notes": "26 cartes NB le 2026-08-28, dont quelques garages/commerciaux à filtrer" | |
| 609 | + }, | |
| 610 | + { | |
| 611 | + "id": "greenlight", | |
| 612 | + "name": "GreenLight Property Management Inc", | |
| 613 | + "site": "https://rentgreenlight.com", | |
| 614 | + "subdomain": "greenlightpropertymanagementinc", | |
| 615 | + "regions": ["Moncton", "Dieppe"], | |
| 616 | + "province": "NB", | |
| 617 | + "status": "valide", | |
| 618 | + "listings_on": 15, | |
| 619 | + "notes": "15 annonces NB le 2026-08-28" | |
| 620 | + }, | |
| 621 | + { | |
| 622 | + "id": "4rent", | |
| 623 | + "name": "4 Rent Solutions Inc.", | |
| 624 | + "site": "https://4rentsolutionsinc.managebuilding.com/Resident/public/home", | |
| 625 | + "subdomain": "4rentsolutionsinc", | |
| 626 | + "regions": ["Moncton", "Shediac"], | |
| 627 | + "province": "NB", | |
| 628 | + "status": "valide", | |
| 629 | + "listings_on": 12, | |
| 630 | + "notes": "12 annonces NB le 2026-08-28" | |
| 631 | + }, | |
| 632 | + { | |
| 633 | + "id": "colpitts", | |
| 634 | + "name": "Colpitts Developments", | |
| 635 | + "site": "https://colpittsdevelopments.managebuilding.com/Resident/public/home", | |
| 636 | + "subdomain": "colpittsdevelopments", | |
| 637 | + "regions": ["Fredericton"], | |
| 638 | + "province": "NB", | |
| 639 | + "status": "valide", | |
| 640 | + "listings_on": 43, | |
| 641 | + "notes": "43 annonces Fredericton le 2026-08-28 — gros volume NB (immeubles Manhattan Drive 82 unités)" | |
| 642 | + }, | |
| 643 | + { | |
| 644 | + "id": "freddybeach", | |
| 645 | + "name": "Freddy Beach Property Management", | |
| 646 | + "site": "https://freddybeachpm.managebuilding.com/Resident/public/home", | |
| 647 | + "subdomain": "freddybeachpm", | |
| 648 | + "regions": ["Fredericton", "Moncton", "Saint John"], | |
| 649 | + "province": "NB", | |
| 650 | + "status": "valide", | |
| 651 | + "listings_on": 13, | |
| 652 | + "notes": "13 cartes NB le 2026-08-28, dont 1-2 commerciaux/garages à filtrer" | |
| 653 | + }, | |
| 654 | + { | |
| 655 | + "id": "redsands", | |
| 656 | + "name": "Red Sands Property Management", | |
| 657 | + "site": "https://redsandsproperties.ca", | |
| 658 | + "subdomain": "redsandsproperties", | |
| 659 | + "regions": ["Charlottetown", "Summerside", "Kensington", "Montague", "Souris", "O'Leary"], | |
| 660 | + "province": "PE", | |
| 661 | + "status": "valide", | |
| 662 | + "listings_on": 26, | |
| 663 | + "notes": "26 annonces PE (partout sur l'île, incl. locations hivernales saisonnières oct-mai — vérifier durée) le 2026-08-28" | |
| 664 | + }, | |
| 665 | + { | |
| 666 | + "id": "westroyalty", | |
| 667 | + "name": "West Royalty Suites", | |
| 668 | + "site": "https://westroyaltysuites.managebuilding.com/Resident/public/home", | |
| 669 | + "subdomain": "westroyaltysuites", | |
| 670 | + "regions": ["Charlottetown"], | |
| 671 | + "province": "PE", | |
| 672 | + "status": "valide", | |
| 673 | + "listings_on": 7, | |
| 674 | + "notes": "7 annonces Charlottetown (immeuble 20 Daniel Drive) le 2026-08-28" | |
| 675 | + }, | |
| 676 | + { | |
| 677 | + "id": "mpropgroup", | |
| 678 | + "name": "M Property Management Group", | |
| 679 | + "site": "https://mpropgroup.managebuilding.com/Resident/public/home", | |
| 680 | + "subdomain": "mpropgroup", | |
| 681 | + "regions": ["Summerside", "Prince Albert"], | |
| 682 | + "province": "PE", | |
| 683 | + "status": "valide", | |
| 684 | + "listings_on": 4, | |
| 685 | + "notes": "4 annonces le 2026-08-28 (Summerside PE 2, Prince Albert SK 2) — bi-provincial" | |
| 686 | + }, | |
| 687 | + { | |
| 688 | + "id": "metronl", | |
| 689 | + "name": "Metro Property Management (St. John's)", | |
| 690 | + "site": "https://metropropertymanagement.managebuilding.com/Resident/public/home", | |
| 691 | + "subdomain": "metropropertymanagement", | |
| 692 | + "regions": ["St. John's", "Mount Pearl", "Paradise", "Torbay"], | |
| 693 | + "province": "NL", | |
| 694 | + "status": "valide", | |
| 695 | + "listings_on": 21, | |
| 696 | + "notes": "21 annonces NL (grand St. John's) le 2026-08-28 — seul client NL du registre" | |
| 697 | + }, | |
| 698 | + { | |
| 699 | + "id": "marco", | |
| 700 | + "name": "Marco Toronto Property Management", | |
| 701 | + "site": "https://marcotoronto.managebuilding.com/Resident/public/home", | |
| 702 | + "subdomain": "marcotoronto", | |
| 703 | + "regions": ["Toronto", "East York", "Mississauga"], | |
| 704 | + "province": "ON", | |
| 705 | + "status": "valide", | |
| 706 | + "listings_on": 43, | |
| 707 | + "notes": "43 annonces ON (Toronto 40) le 2026-08-28 ; segment haut de gamme (jusqu'à 30 k$/mois)" | |
| 708 | + }, | |
| 709 | + { | |
| 710 | + "id": "camden", | |
| 711 | + "name": "Camden Property Management", | |
| 712 | + "site": "https://camdenpm.managebuilding.com/Resident/public/home", | |
| 713 | + "subdomain": "camdenpm", | |
| 714 | + "regions": ["Toronto"], | |
| 715 | + "province": "ON", | |
| 716 | + "status": "valide", | |
| 717 | + "listings_on": 1, | |
| 718 | + "notes": "1 annonce Toronto (Annex) le 2026-08-28 ; inventaire variable" | |
| 719 | + }, | |
| 720 | + { | |
| 721 | + "id": "pmtoronto", | |
| 722 | + "name": "Property Management Toronto Inc", | |
| 723 | + "site": "https://propertymanagementtoronto.managebuilding.com/Resident/public/home", | |
| 724 | + "subdomain": "propertymanagementtoronto", | |
| 725 | + "regions": ["Toronto", "Mississauga", "Brampton", "Oshawa", "Kitchener", "Brantford"], | |
| 726 | + "province": "ON", | |
| 727 | + "status": "valide", | |
| 728 | + "listings_on": 23, | |
| 729 | + "notes": "23 annonces ON (GTA + Kitchener) le 2026-08-28" | |
| 730 | + }, | |
| 731 | + { | |
| 732 | + "id": "niagarasuites", | |
| 733 | + "name": "Niagara Suites", | |
| 734 | + "site": "https://niagarasuites.managebuilding.com/Resident/public/home", | |
| 735 | + "subdomain": "niagarasuites", | |
| 736 | + "regions": ["St. Catharines", "Niagara Falls", "Hamilton", "Toronto", "Kingston", "Niagara-on-the-Lake"], | |
| 737 | + "province": "ON", | |
| 738 | + "status": "valide", | |
| 739 | + "listings_on": 18, | |
| 740 | + "notes": "18 annonces ON le 2026-08-28" | |
| 741 | + }, | |
| 742 | + { | |
| 743 | + "id": "ckso", | |
| 744 | + "name": "CKSO Properties", | |
| 745 | + "site": "https://cksoproperties.managebuilding.com/Resident/public/home", | |
| 746 | + "subdomain": "cksoproperties", | |
| 747 | + "regions": ["Greater Sudbury"], | |
| 748 | + "province": "ON", | |
| 749 | + "status": "valide", | |
| 750 | + "listings_on": 21, | |
| 751 | + "notes": "21 annonces Grand Sudbury le 2026-08-28" | |
| 752 | + }, | |
| 753 | + { | |
| 754 | + "id": "superiorchoice", | |
| 755 | + "name": "Superior Choice PM", | |
| 756 | + "site": "https://tbay.managebuilding.com/Resident/public/home", | |
| 757 | + "subdomain": "tbay", | |
| 758 | + "regions": ["Thunder Bay"], | |
| 759 | + "province": "ON", | |
| 760 | + "status": "valide", | |
| 761 | + "listings_on": 3, | |
| 762 | + "notes": "3 annonces Thunder Bay le 2026-08-28" | |
| 763 | + }, | |
| 764 | + { | |
| 765 | + "id": "hocking", | |
| 766 | + "name": "Hocking Management Corporation", | |
| 767 | + "site": "https://hmc.managebuilding.com/Resident/public/home", | |
| 768 | + "subdomain": "hmc", | |
| 769 | + "regions": ["Barrie"], | |
| 770 | + "province": "ON", | |
| 771 | + "status": "valide", | |
| 772 | + "listings_on": 4, | |
| 773 | + "notes": "4 annonces Barrie le 2026-08-28" | |
| 774 | + }, | |
| 775 | + { | |
| 776 | + "id": "spruce", | |
| 777 | + "name": "Spruce Living Inc.", | |
| 778 | + "site": "https://sprucelivinginc.managebuilding.com/Resident/public/home", | |
| 779 | + "subdomain": "sprucelivinginc", | |
| 780 | + "regions": ["Guelph"], | |
| 781 | + "province": "ON", | |
| 782 | + "status": "valide", | |
| 783 | + "listings_on": 8, | |
| 784 | + "notes": "8 annonces Guelph le 2026-08-28" | |
| 785 | + }, | |
| 786 | + { | |
| 787 | + "id": "guelphpm", | |
| 788 | + "name": "Guelph PM", | |
| 789 | + "site": "https://guelphpm.managebuilding.com/Resident/public/home", | |
| 790 | + "subdomain": "guelphpm", | |
| 791 | + "regions": ["Guelph"], | |
| 792 | + "province": "ON", | |
| 793 | + "status": "valide", | |
| 794 | + "listings_on": 2, | |
| 795 | + "notes": "2 annonces Guelph le 2026-08-28" | |
| 796 | + }, | |
| 797 | + { | |
| 798 | + "id": "sfour", | |
| 799 | + "name": "S Four Inc.", | |
| 800 | + "site": "https://sfourinc.managebuilding.com/Resident/public/home", | |
| 801 | + "subdomain": "sfourinc", | |
| 802 | + "regions": ["Kitchener", "Waterloo"], | |
| 803 | + "province": "ON", | |
| 804 | + "status": "valide", | |
| 805 | + "listings_on": 23, | |
| 806 | + "notes": "23 annonces ON (Kitchener 14, Waterloo 9) le 2026-08-28" | |
| 807 | + }, | |
| 808 | + { | |
| 809 | + "id": "starliving", | |
| 810 | + "name": "Starliving Management", | |
| 811 | + "site": "https://starliving.managebuilding.com/Resident/public/home", | |
| 812 | + "subdomain": "starliving", | |
| 813 | + "regions": ["Brantford", "Hamilton", "Cambridge", "Oshawa", "St. Catharines"], | |
| 814 | + "province": "ON", | |
| 815 | + "status": "valide", | |
| 816 | + "listings_on": 4, | |
| 817 | + "notes": "4 annonces ON le 2026-08-28" | |
| 818 | + }, | |
| 819 | + { | |
| 820 | + "id": "rentaplex", | |
| 821 | + "name": "Rentaplex Inc", | |
| 822 | + "site": "https://rentaplexinc.managebuilding.com/Resident/public/home", | |
| 823 | + "subdomain": "rentaplexinc", | |
| 824 | + "regions": ["Oshawa", "Whitby"], | |
| 825 | + "province": "ON", | |
| 826 | + "status": "valide", | |
| 827 | + "listings_on": 3, | |
| 828 | + "notes": "3 annonces Durham (Oshawa 2, Whitby 1) le 2026-08-28" | |
| 829 | + }, | |
| 830 | + { | |
| 831 | + "id": "harper", | |
| 832 | + "name": "Harper Management Services Inc", | |
| 833 | + "site": "https://harpermanagementservicesinc.managebuilding.com/Resident/public/home", | |
| 834 | + "subdomain": "harpermanagementservicesinc", | |
| 835 | + "regions": ["Sault Ste. Marie", "Welland", "St. Catharines", "Fort Erie"], | |
| 836 | + "province": "ON", | |
| 837 | + "status": "valide", | |
| 838 | + "listings_on": 15, | |
| 839 | + "notes": "15 annonces ON (SSM 8 + Niagara) le 2026-08-28" | |
| 840 | + }, | |
| 841 | + { | |
| 842 | + "id": "2cats", | |
| 843 | + "name": "2 Cats Investor Services Inc.", | |
| 844 | + "site": "https://2-cats.managebuilding.com/Resident/public/home", | |
| 845 | + "subdomain": "2-cats", | |
| 846 | + "regions": ["Brantford"], | |
| 847 | + "province": "ON", | |
| 848 | + "status": "valide", | |
| 849 | + "listings_on": 8, | |
| 850 | + "notes": "8 annonces Brantford (1 Wellington St.) le 2026-08-28" | |
| 851 | + }, | |
| 852 | + { | |
| 853 | + "id": "ska", | |
| 854 | + "name": "SKA Apartments", | |
| 855 | + "site": "https://ska-apartment-rentals.managebuilding.com/Resident/public/home", | |
| 856 | + "subdomain": "ska-apartment-rentals", | |
| 857 | + "regions": ["Chatham", "Brantford", "Leamington", "Tillsonburg", "Guelph"], | |
| 858 | + "province": "ON", | |
| 859 | + "status": "valide", | |
| 860 | + "listings_on": 23, | |
| 861 | + "notes": "23 annonces ON (sud-ouest) le 2026-08-28" | |
| 862 | + }, | |
| 863 | + { | |
| 864 | + "id": "fourchambers", | |
| 865 | + "name": "Four Chambers Property Management", | |
| 866 | + "site": "https://fourchamberspropertymanagement.managebuilding.com/Resident/public/home", | |
| 867 | + "subdomain": "fourchamberspropertymanagement", | |
| 868 | + "regions": ["Hamilton", "St. Catharines", "Brantford"], | |
| 869 | + "province": "ON", | |
| 870 | + "status": "valide", | |
| 871 | + "listings_on": 9, | |
| 872 | + "notes": "9 annonces ON (Hamilton 7) le 2026-08-28" | |
| 873 | + }, | |
| 874 | + { | |
| 875 | + "id": "firstnorth", | |
| 876 | + "name": "First North Property Management", | |
| 877 | + "site": "https://firstnorthpm.managebuilding.com/Resident/public/home", | |
| 878 | + "subdomain": "firstnorthpm", | |
| 879 | + "regions": ["North Bay", "Sudbury", "Timmins"], | |
| 880 | + "province": "ON", | |
| 881 | + "status": "valide", | |
| 882 | + "listings_on": 9, | |
| 883 | + "notes": "9 annonces ON (North Bay 4, Sudbury 5) le 2026-08-28" | |
| 884 | + } | |
| 885 | + ] | |
| 886 | +} | |
modified
data/buildium_clients.json
+1244 −193
@@ -1,195 +1,1246 @@ | ||
| 1 | 1 | { |
| 2 | − "_comment": "Registre des clients Buildium (<sous-domaine>.managebuilding.com/Resident/public/rentals) — longue traîne Ontario 2026-08. Consommé par rentka/connectors/buildium.py qui génère un connecteur bld_<id> par entrée 'valide'. Sous-domaines découverts via Serper (site:managebuilding.com <nom>) ou le site vitrine du gestionnaire, puis VALIDÉS EN LIVE le 2026-08-27 (compte d'annonces ON résidentielles ; seuil ≥ 3). Deux mises en page servies par Buildium : « moderne » (/Resident/public/rentals, cartes a.featured-listing rendues serveur) et « héritée » (redirection 302 vers PublicPages/ApartmentSearch.aspx, annonces embarquées dans le viewmodel DotVVM __dot_viewmodel_root — AUCUN rendu JS requis dans les deux cas). Le connecteur détecte la mise en page automatiquement. REJETS du 2026-08-27 (ne pas re-tester avant un moment) : stsproperties (Shore to Slope, Collingwood) et lakeviewrealtyinc (Lakeview, Orillia) = 0 annonce en ligne (« check back ») ; keiltyresidential (Keilty, Cobourg), legacylogin (Legacy/LPRM, Thunder Bay), mgpropmgt (MG, Timmins), davispropertiesinc (Davis, Kirkland Lake) = pages publiques désactivées (302 vers /Resident/apps/portal/login) ; douglasfirpm (lié depuis prestigiousplacesudbury.com) = 302 vers /Resident/Public sans annonces.", | |
| 3 | − "updated": "2026-08-27", | |
| 4 | − "clients": [ | |
| 5 | − { | |
| 6 | − "id": "richmond", | |
| 7 | − "name": "Richmond Property Management", | |
| 8 | − "site": "https://richmondpm.ca", | |
| 9 | − "subdomain": "richmondmanagement", | |
| 10 | − "regions": [ | |
| 11 | − "Windsor" | |
| 12 | − ], | |
| 13 | − "status": "valide", | |
| 14 | − "listings_on": 52, | |
| 15 | − "notes": "52 annonces ON le 2026-08-27, toutes Windsor (MultiFamily 47, SingleFamily 3, CondoTownhome 2) ; mise en page moderne" | |
| 16 | − }, | |
| 17 | − { | |
| 18 | − "id": "dreampm", | |
| 19 | − "name": "Dream Property Management", | |
| 20 | − "site": "https://rentalsdreampm.com", | |
| 21 | − "subdomain": "dreampm", | |
| 22 | − "regions": [ | |
| 23 | − "Sarnia" | |
| 24 | − ], | |
| 25 | − "status": "valide", | |
| 26 | − "listings_on": 9, | |
| 27 | − "notes": "9 annonces ON (Sarnia) le 2026-08-27 ; mise en page moderne" | |
| 28 | − }, | |
| 29 | − { | |
| 30 | − "id": "grem", | |
| 31 | − "name": "Guardian Real Estate Management (GREM)", | |
| 32 | − "site": "https://grem.ca", | |
| 33 | − "subdomain": "guardianrealestatemanagement", | |
| 34 | − "regions": [ | |
| 35 | − "Sarnia", | |
| 36 | − "West Nipissing" | |
| 37 | − ], | |
| 38 | − "status": "valide", | |
| 39 | − "listings_on": 44, | |
| 40 | − "notes": "44 annonces ON le 2026-08-27 (Sarnia surtout) ; MISE EN PAGE HÉRITÉE (302 vers ApartmentSearch.aspx, viewmodel DotVVM embarqué avec city/state/postalcode/description complète)" | |
| 41 | − }, | |
| 42 | − { | |
| 43 | − "id": "elite", | |
| 44 | − "name": "Elite Property Group", | |
| 45 | − "site": "https://elitepropertygroup.org", | |
| 46 | − "subdomain": "elitepropertygroup", | |
| 47 | − "regions": [ | |
| 48 | − "Sarnia" | |
| 49 | − ], | |
| 50 | − "status": "valide", | |
| 51 | − "listings_on": 34, | |
| 52 | − "notes": "34 annonces ON (Sarnia) le 2026-08-27 ; mise en page moderne" | |
| 53 | − }, | |
| 54 | − { | |
| 55 | − "id": "paragon", | |
| 56 | − "name": "Paragon Property Management & Maintenance", | |
| 57 | − "site": "https://paragonproperty.ca", | |
| 58 | − "subdomain": "paragonpropertymgt", | |
| 59 | − "regions": [ | |
| 60 | − "Chatham-Kent" | |
| 61 | − ], | |
| 62 | − "status": "valide", | |
| 63 | − "listings_on": 34, | |
| 64 | − "notes": "36 cartes ON le 2026-08-27 dont 2 Storage (filtrées par le connecteur) = 34 résidentielles ; attention : ne pas confondre avec paragonproperty.managebuilding.com (Brookings, Dakota du Sud)" | |
| 65 | − }, | |
| 66 | − { | |
| 67 | − "id": "panadew", | |
| 68 | − "name": "Panadew Property Management", | |
| 69 | − "site": "https://panadew.ca", | |
| 70 | − "subdomain": "panadew", | |
| 71 | − "regions": [ | |
| 72 | − "Kingston" | |
| 73 | − ], | |
| 74 | − "status": "valide", | |
| 75 | − "listings_on": 7, | |
| 76 | − "notes": "8 cartes ON le 2026-08-27 dont 1 ParkingSpace (filtrée) = 7 résidentielles (Kingston) ; mise en page moderne" | |
| 77 | − }, | |
| 78 | − { | |
| 79 | − "id": "tag", | |
| 80 | − "name": "TAG Property Management", | |
| 81 | − "site": "https://tagpropertymanagement1.managebuilding.com/Resident/public/home", | |
| 82 | − "subdomain": "tagpropertymanagement1", | |
| 83 | − "regions": [ | |
| 84 | − "Cobourg", | |
| 85 | − "Port Hope" | |
| 86 | − ], | |
| 87 | − "status": "valide", | |
| 88 | − "listings_on": 10, | |
| 89 | − "notes": "10 annonces ON (Cobourg/Port Hope) le 2026-08-27 ; portail Buildium = seul site public ; mise en page moderne" | |
| 90 | − }, | |
| 91 | − { | |
| 92 | − "id": "genedco", | |
| 93 | − "name": "Genedco Property Management (GRANITE)", | |
| 94 | − "site": "https://genedco.ca", | |
| 95 | − "subdomain": "genedco", | |
| 96 | − "regions": [ | |
| 97 | − "Cobourg", | |
| 98 | − "Port Hope", | |
| 99 | − "Peterborough" | |
| 100 | − ], | |
| 101 | − "status": "valide", | |
| 102 | − "listings_on": 9, | |
| 103 | − "notes": "9 annonces ON le 2026-08-27 ; mise en page moderne" | |
| 104 | − }, | |
| 105 | − { | |
| 106 | − "id": "rentcorp", | |
| 107 | − "name": "RentCorp Property Management", | |
| 108 | − "site": "https://www.rentcorp.ca", | |
| 109 | − "subdomain": "rentcorppropertymanagement", | |
| 110 | − "regions": [ | |
| 111 | − "Waterloo", | |
| 112 | − "North Bay", | |
| 113 | − "London" | |
| 114 | − ], | |
| 115 | − "status": "valide", | |
| 116 | − "listings_on": 26, | |
| 117 | − "notes": "26 annonces ON le 2026-08-27 (Waterloo surtout, incl. chambres étudiantes 575-700 $ = longue durée, on garde) ; mise en page moderne" | |
| 118 | − }, | |
| 119 | − { | |
| 120 | − "id": "sleepwell", | |
| 121 | − "name": "Sleepwell Property Management", | |
| 122 | − "site": "https://www.sleepwellmanagement.com", | |
| 123 | − "subdomain": "sleepwellpropertymanagement", | |
| 124 | − "regions": [ | |
| 125 | − "Ottawa" | |
| 126 | − ], | |
| 127 | − "status": "valide", | |
| 128 | − "listings_on": 130, | |
| 129 | − "notes": "130 annonces ON le 2026-08-27 (Ottawa — MultiFamily 121, SingleFamily 6, CondoTownhome 3) : plus gros client Buildium du registre, trouvé via Serper pendant la validation ; mise en page moderne" | |
| 130 | − }, | |
| 131 | − { | |
| 132 | − "id": "athena", | |
| 133 | − "name": "Athena Property Management", | |
| 134 | − "site": "https://athenapropertymanagementinc1.managebuilding.com/Resident/public/home", | |
| 135 | − "subdomain": "athenapropertymanagementinc1", | |
| 136 | − "regions": [ | |
| 137 | − "Hamilton", | |
| 138 | − "St. Catharines" | |
| 139 | − ], | |
| 140 | − "status": "valide", | |
| 141 | − "listings_on": 29, | |
| 142 | − "notes": "29 annonces ON le 2026-08-27 (Hamilton surtout) ; découvert via Serper pendant la validation ; mise en page moderne" | |
| 143 | − }, | |
| 144 | − { | |
| 145 | − "id": "gooddoors", | |
| 146 | − "name": "GoodDoors Property Management", | |
| 147 | − "site": "https://gooddoors.com", | |
| 148 | − "subdomain": "gooddoors", | |
| 149 | − "regions": [ | |
| 150 | − "Regina", | |
| 151 | − "Saskatoon" | |
| 152 | − ], | |
| 153 | − "province": "SK", | |
| 154 | − "status": "valide", | |
| 155 | − "notes": "canada-expansion 2026-08-27 — 18 annonces live (SK), page publique 200 sans anti-bot" | |
| 156 | − }, | |
| 157 | − { | |
| 158 | − "id": "imperial", | |
| 159 | − "name": "Imperial Properties", | |
| 160 | − "site": "https://imperialproperties.ca", | |
| 161 | − "subdomain": "ip", | |
| 162 | − "regions": [ | |
| 163 | − "Winnipeg", | |
| 164 | − "Regina" | |
| 165 | − ], | |
| 166 | − "province": "MB", | |
| 167 | − "status": "valide", | |
| 168 | − "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage (inventaire variable)" | |
| 169 | − }, | |
| 170 | − { | |
| 171 | − "id": "frontenac", | |
| 172 | − "name": "Frontenac Property Management", | |
| 173 | − "site": "https://frontenacproperty.com", | |
| 174 | − "subdomain": "frontenacproperty", | |
| 175 | − "regions": [ | |
| 176 | − "Kingston" | |
| 177 | − ], | |
| 178 | − "province": "ON", | |
| 179 | − "status": "valide", | |
| 180 | − "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage" | |
| 181 | − }, | |
| 182 | − { | |
| 183 | − "id": "universalrealty", | |
| 184 | − "name": "Universal Realty Group", | |
| 185 | − "site": "https://universalrealty.net", | |
| 186 | − "subdomain": "universalrealty", | |
| 187 | − "regions": [ | |
| 188 | − "Halifax" | |
| 189 | − ], | |
| 190 | − "province": "NS", | |
| 191 | − "status": "valide", | |
| 192 | − "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage" | |
| 193 | − } | |
| 194 | − ] | |
| 2 | + "_comment": "Registre des clients Buildium (<sous-domaine>.managebuilding.com/Resident/public/rentals) — longue traîne Ontario 2026-08. Consommé par rentka/connectors/buildium.py qui génère un connecteur bld_<id> par entrée 'valide'. Sous-domaines découverts via Serper (site:managebuilding.com <nom>) ou le site vitrine du gestionnaire, puis VALIDÉS EN LIVE le 2026-08-27 (compte d'annonces ON résidentielles ; seuil ≥ 3). Deux mises en page servies par Buildium : « moderne » (/Resident/public/rentals, cartes a.featured-listing rendues serveur) et « héritée » (redirection 302 vers PublicPages/ApartmentSearch.aspx, annonces embarquées dans le viewmodel DotVVM __dot_viewmodel_root — AUCUN rendu JS requis dans les deux cas). Le connecteur détecte la mise en page automatiquement. REJETS du 2026-08-27 (ne pas re-tester avant un moment) : stsproperties (Shore to Slope, Collingwood) et lakeviewrealtyinc (Lakeview, Orillia) = 0 annonce en ligne (« check back ») ; keiltyresidential (Keilty, Cobourg), legacylogin (Legacy/LPRM, Thunder Bay), mgpropmgt (MG, Timmins), davispropertiesinc (Davis, Kirkland Lake) = pages publiques désactivées (302 vers /Resident/apps/portal/login) ; douglasfirpm (lié depuis prestigiousplacesudbury.com) = 302 vers /Resident/Public sans annonces.", | |
| 3 | + "updated": "2026-08-28", | |
| 4 | + "clients": [ | |
| 5 | + { | |
| 6 | + "id": "richmond", | |
| 7 | + "name": "Richmond Property Management", | |
| 8 | + "site": "https://richmondpm.ca", | |
| 9 | + "subdomain": "richmondmanagement", | |
| 10 | + "regions": [ | |
| 11 | + "Windsor" | |
| 12 | + ], | |
| 13 | + "status": "valide", | |
| 14 | + "listings_on": 52, | |
| 15 | + "notes": "52 annonces ON le 2026-08-27, toutes Windsor (MultiFamily 47, SingleFamily 3, CondoTownhome 2) ; mise en page moderne" | |
| 16 | + }, | |
| 17 | + { | |
| 18 | + "id": "dreampm", | |
| 19 | + "name": "Dream Property Management", | |
| 20 | + "site": "https://rentalsdreampm.com", | |
| 21 | + "subdomain": "dreampm", | |
| 22 | + "regions": [ | |
| 23 | + "Sarnia" | |
| 24 | + ], | |
| 25 | + "status": "valide", | |
| 26 | + "listings_on": 9, | |
| 27 | + "notes": "9 annonces ON (Sarnia) le 2026-08-27 ; mise en page moderne" | |
| 28 | + }, | |
| 29 | + { | |
| 30 | + "id": "grem", | |
| 31 | + "name": "Guardian Real Estate Management (GREM)", | |
| 32 | + "site": "https://grem.ca", | |
| 33 | + "subdomain": "guardianrealestatemanagement", | |
| 34 | + "regions": [ | |
| 35 | + "Sarnia", | |
| 36 | + "West Nipissing" | |
| 37 | + ], | |
| 38 | + "status": "valide", | |
| 39 | + "listings_on": 44, | |
| 40 | + "notes": "44 annonces ON le 2026-08-27 (Sarnia surtout) ; MISE EN PAGE HÉRITÉE (302 vers ApartmentSearch.aspx, viewmodel DotVVM embarqué avec city/state/postalcode/description complète)" | |
| 41 | + }, | |
| 42 | + { | |
| 43 | + "id": "elite", | |
| 44 | + "name": "Elite Property Group", | |
| 45 | + "site": "https://elitepropertygroup.org", | |
| 46 | + "subdomain": "elitepropertygroup", | |
| 47 | + "regions": [ | |
| 48 | + "Sarnia" | |
| 49 | + ], | |
| 50 | + "status": "valide", | |
| 51 | + "listings_on": 34, | |
| 52 | + "notes": "34 annonces ON (Sarnia) le 2026-08-27 ; mise en page moderne" | |
| 53 | + }, | |
| 54 | + { | |
| 55 | + "id": "paragon", | |
| 56 | + "name": "Paragon Property Management & Maintenance", | |
| 57 | + "site": "https://paragonproperty.ca", | |
| 58 | + "subdomain": "paragonpropertymgt", | |
| 59 | + "regions": [ | |
| 60 | + "Chatham-Kent" | |
| 61 | + ], | |
| 62 | + "status": "valide", | |
| 63 | + "listings_on": 34, | |
| 64 | + "notes": "36 cartes ON le 2026-08-27 dont 2 Storage (filtrées par le connecteur) = 34 résidentielles ; attention : ne pas confondre avec paragonproperty.managebuilding.com (Brookings, Dakota du Sud)" | |
| 65 | + }, | |
| 66 | + { | |
| 67 | + "id": "panadew", | |
| 68 | + "name": "Panadew Property Management", | |
| 69 | + "site": "https://panadew.ca", | |
| 70 | + "subdomain": "panadew", | |
| 71 | + "regions": [ | |
| 72 | + "Kingston" | |
| 73 | + ], | |
| 74 | + "status": "valide", | |
| 75 | + "listings_on": 7, | |
| 76 | + "notes": "8 cartes ON le 2026-08-27 dont 1 ParkingSpace (filtrée) = 7 résidentielles (Kingston) ; mise en page moderne" | |
| 77 | + }, | |
| 78 | + { | |
| 79 | + "id": "tag", | |
| 80 | + "name": "TAG Property Management", | |
| 81 | + "site": "https://tagpropertymanagement1.managebuilding.com/Resident/public/home", | |
| 82 | + "subdomain": "tagpropertymanagement1", | |
| 83 | + "regions": [ | |
| 84 | + "Cobourg", | |
| 85 | + "Port Hope" | |
| 86 | + ], | |
| 87 | + "status": "valide", | |
| 88 | + "listings_on": 10, | |
| 89 | + "notes": "10 annonces ON (Cobourg/Port Hope) le 2026-08-27 ; portail Buildium = seul site public ; mise en page moderne" | |
| 90 | + }, | |
| 91 | + { | |
| 92 | + "id": "genedco", | |
| 93 | + "name": "Genedco Property Management (GRANITE)", | |
| 94 | + "site": "https://genedco.ca", | |
| 95 | + "subdomain": "genedco", | |
| 96 | + "regions": [ | |
| 97 | + "Cobourg", | |
| 98 | + "Port Hope", | |
| 99 | + "Peterborough" | |
| 100 | + ], | |
| 101 | + "status": "valide", | |
| 102 | + "listings_on": 9, | |
| 103 | + "notes": "9 annonces ON le 2026-08-27 ; mise en page moderne" | |
| 104 | + }, | |
| 105 | + { | |
| 106 | + "id": "rentcorp", | |
| 107 | + "name": "RentCorp Property Management", | |
| 108 | + "site": "https://www.rentcorp.ca", | |
| 109 | + "subdomain": "rentcorppropertymanagement", | |
| 110 | + "regions": [ | |
| 111 | + "Waterloo", | |
| 112 | + "North Bay", | |
| 113 | + "London" | |
| 114 | + ], | |
| 115 | + "status": "valide", | |
| 116 | + "listings_on": 26, | |
| 117 | + "notes": "26 annonces ON le 2026-08-27 (Waterloo surtout, incl. chambres étudiantes 575-700 $ = longue durée, on garde) ; mise en page moderne" | |
| 118 | + }, | |
| 119 | + { | |
| 120 | + "id": "sleepwell", | |
| 121 | + "name": "Sleepwell Property Management", | |
| 122 | + "site": "https://www.sleepwellmanagement.com", | |
| 123 | + "subdomain": "sleepwellpropertymanagement", | |
| 124 | + "regions": [ | |
| 125 | + "Ottawa" | |
| 126 | + ], | |
| 127 | + "status": "valide", | |
| 128 | + "listings_on": 130, | |
| 129 | + "notes": "130 annonces ON le 2026-08-27 (Ottawa — MultiFamily 121, SingleFamily 6, CondoTownhome 3) : plus gros client Buildium du registre, trouvé via Serper pendant la validation ; mise en page moderne" | |
| 130 | + }, | |
| 131 | + { | |
| 132 | + "id": "athena", | |
| 133 | + "name": "Athena Property Management", | |
| 134 | + "site": "https://athenapropertymanagementinc1.managebuilding.com/Resident/public/home", | |
| 135 | + "subdomain": "athenapropertymanagementinc1", | |
| 136 | + "regions": [ | |
| 137 | + "Hamilton", | |
| 138 | + "St. Catharines" | |
| 139 | + ], | |
| 140 | + "status": "valide", | |
| 141 | + "listings_on": 29, | |
| 142 | + "notes": "29 annonces ON le 2026-08-27 (Hamilton surtout) ; découvert via Serper pendant la validation ; mise en page moderne" | |
| 143 | + }, | |
| 144 | + { | |
| 145 | + "id": "gooddoors", | |
| 146 | + "name": "GoodDoors Property Management", | |
| 147 | + "site": "https://gooddoors.com", | |
| 148 | + "subdomain": "gooddoors", | |
| 149 | + "regions": [ | |
| 150 | + "Regina", | |
| 151 | + "Saskatoon" | |
| 152 | + ], | |
| 153 | + "province": "SK", | |
| 154 | + "status": "valide", | |
| 155 | + "notes": "canada-expansion 2026-08-27 — 18 annonces live (SK), page publique 200 sans anti-bot" | |
| 156 | + }, | |
| 157 | + { | |
| 158 | + "id": "imperial", | |
| 159 | + "name": "Imperial Properties", | |
| 160 | + "site": "https://imperialproperties.ca", | |
| 161 | + "subdomain": "ip", | |
| 162 | + "regions": [ | |
| 163 | + "Winnipeg", | |
| 164 | + "Regina" | |
| 165 | + ], | |
| 166 | + "province": "MB", | |
| 167 | + "status": "valide", | |
| 168 | + "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage (inventaire variable)" | |
| 169 | + }, | |
| 170 | + { | |
| 171 | + "id": "frontenac", | |
| 172 | + "name": "Frontenac Property Management", | |
| 173 | + "site": "https://frontenacproperty.com", | |
| 174 | + "subdomain": "frontenacproperty", | |
| 175 | + "regions": [ | |
| 176 | + "Kingston" | |
| 177 | + ], | |
| 178 | + "province": "ON", | |
| 179 | + "status": "valide", | |
| 180 | + "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage" | |
| 181 | + }, | |
| 182 | + { | |
| 183 | + "id": "universalrealty", | |
| 184 | + "name": "Universal Realty Group", | |
| 185 | + "site": "https://universalrealty.net", | |
| 186 | + "subdomain": "universalrealty", | |
| 187 | + "regions": [ | |
| 188 | + "Halifax" | |
| 189 | + ], | |
| 190 | + "province": "NS", | |
| 191 | + "status": "valide", | |
| 192 | + "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage" | |
| 193 | + }, | |
| 194 | + { | |
| 195 | + "id": "refinity", | |
| 196 | + "name": "Refinity Homes", | |
| 197 | + "site": "https://refinity.managebuilding.com/Resident/public/home", | |
| 198 | + "subdomain": "refinity", | |
| 199 | + "regions": [ | |
| 200 | + "Vancouver", | |
| 201 | + "Surrey", | |
| 202 | + "Richmond", | |
| 203 | + "Burnaby", | |
| 204 | + "Langley" | |
| 205 | + ], | |
| 206 | + "province": "BC", | |
| 207 | + "status": "valide", | |
| 208 | + "listings_on": 7, | |
| 209 | + "notes": "7 annonces BC (Lower Mainland) le 2026-08-28 ; mise en page moderne" | |
| 210 | + }, | |
| 211 | + { | |
| 212 | + "id": "macpherson", | |
| 213 | + "name": "MacPherson Real Estate Ltd.", | |
| 214 | + "site": "https://cbmre.managebuilding.com/Resident/public/home", | |
| 215 | + "subdomain": "cbmre", | |
| 216 | + "regions": [ | |
| 217 | + "Vancouver", | |
| 218 | + "Burnaby", | |
| 219 | + "Coquitlam", | |
| 220 | + "New Westminster" | |
| 221 | + ], | |
| 222 | + "province": "BC", | |
| 223 | + "status": "valide", | |
| 224 | + "listings_on": 6, | |
| 225 | + "notes": "6 annonces BC le 2026-08-28 ; Coldwell Banker MacPherson, Coquitlam" | |
| 226 | + }, | |
| 227 | + { | |
| 228 | + "id": "rlpklein", | |
| 229 | + "name": "Royal LePage Westside Klein Group", | |
| 230 | + "site": "https://rlpkleingroup.managebuilding.com/Resident/public/home", | |
| 231 | + "subdomain": "rlpkleingroup", | |
| 232 | + "regions": [ | |
| 233 | + "Vancouver" | |
| 234 | + ], | |
| 235 | + "province": "BC", | |
| 236 | + "status": "valide", | |
| 237 | + "listings_on": 3, | |
| 238 | + "notes": "3 annonces Vancouver le 2026-08-28" | |
| 239 | + }, | |
| 240 | + { | |
| 241 | + "id": "pennylane", | |
| 242 | + "name": "Penny Lane Property Management", | |
| 243 | + "site": "https://pennylanepropertymanagement.managebuilding.com/Resident/public/home", | |
| 244 | + "subdomain": "pennylanepropertymanagement", | |
| 245 | + "regions": [ | |
| 246 | + "Victoria", | |
| 247 | + "Courtenay", | |
| 248 | + "Campbell River" | |
| 249 | + ], | |
| 250 | + "province": "BC", | |
| 251 | + "status": "valide", | |
| 252 | + "listings_on": 14, | |
| 253 | + "notes": "14 annonces BC (île de Vancouver) le 2026-08-28" | |
| 254 | + }, | |
| 255 | + { | |
| 256 | + "id": "jksrealty", | |
| 257 | + "name": "JKS Realty & Property Management", | |
| 258 | + "site": "https://jksrealty.managebuilding.com/Resident/public/home", | |
| 259 | + "subdomain": "jksrealty", | |
| 260 | + "regions": [ | |
| 261 | + "Victoria", | |
| 262 | + "Langford" | |
| 263 | + ], | |
| 264 | + "province": "BC", | |
| 265 | + "status": "valide", | |
| 266 | + "listings_on": 10, | |
| 267 | + "notes": "10 annonces Victoria/Langford le 2026-08-28" | |
| 268 | + }, | |
| 269 | + { | |
| 270 | + "id": "westurban", | |
| 271 | + "name": "WestUrban Properties Management Ltd.", | |
| 272 | + "site": "https://westurban.managebuilding.com/Resident/public/home", | |
| 273 | + "subdomain": "westurban", | |
| 274 | + "regions": [ | |
| 275 | + "Victoria", | |
| 276 | + "Duncan", | |
| 277 | + "Nanaimo", | |
| 278 | + "Kelowna", | |
| 279 | + "Salmon Arm", | |
| 280 | + "Campbell River", | |
| 281 | + "Cranbrook", | |
| 282 | + "Vernon", | |
| 283 | + "Abbotsford", | |
| 284 | + "Winnipeg", | |
| 285 | + "Calgary" | |
| 286 | + ], | |
| 287 | + "province": "BC", | |
| 288 | + "status": "valide", | |
| 289 | + "listings_on": 79, | |
| 290 | + "notes": "79 annonces le 2026-08-28 (BC 67, MB 3, AB 2, autres 7) — promoteur-gestionnaire multi-provinces, gros volume" | |
| 291 | + }, | |
| 292 | + { | |
| 293 | + "id": "pqvi", | |
| 294 | + "name": "Pacific Quorum Vancouver Island Properties Inc.", | |
| 295 | + "site": "https://pqvi.managebuilding.com/Resident/public/home", | |
| 296 | + "subdomain": "pqvi", | |
| 297 | + "regions": [ | |
| 298 | + "Victoria", | |
| 299 | + "Courtenay", | |
| 300 | + "Campbell River", | |
| 301 | + "Parksville", | |
| 302 | + "Comox", | |
| 303 | + "Port Alberni" | |
| 304 | + ], | |
| 305 | + "province": "BC", | |
| 306 | + "status": "valide", | |
| 307 | + "listings_on": 22, | |
| 308 | + "notes": "22 annonces BC (île de Vancouver) le 2026-08-28" | |
| 309 | + }, | |
| 310 | + { | |
| 311 | + "id": "pqrn", | |
| 312 | + "name": "Pacific Quorum (Vancouver Island) — portail locations pqrn", | |
| 313 | + "site": "https://pqrn.managebuilding.com/Resident/public/home", | |
| 314 | + "subdomain": "pqrn", | |
| 315 | + "regions": [ | |
| 316 | + "Nanaimo", | |
| 317 | + "Victoria", | |
| 318 | + "Coquitlam" | |
| 319 | + ], | |
| 320 | + "province": "BC", | |
| 321 | + "status": "valide", | |
| 322 | + "listings_on": 23, | |
| 323 | + "notes": "23 annonces BC le 2026-08-28 ; deuxième portail Pacific Quorum, inventaire distinct de pqvi (dédupliquer par adresse au besoin)" | |
| 324 | + }, | |
| 325 | + { | |
| 326 | + "id": "bishops", | |
| 327 | + "name": "Bishops Realty Inc.", | |
| 328 | + "site": "https://bishopsrealtyinc.managebuilding.com/Resident/public/home", | |
| 329 | + "subdomain": "bishopsrealtyinc", | |
| 330 | + "regions": [ | |
| 331 | + "Kelowna", | |
| 332 | + "West Kelowna" | |
| 333 | + ], | |
| 334 | + "province": "BC", | |
| 335 | + "status": "valide", | |
| 336 | + "listings_on": 12, | |
| 337 | + "notes": "12 annonces Kelowna/West Kelowna le 2026-08-28" | |
| 338 | + }, | |
| 339 | + { | |
| 340 | + "id": "pqokanagan", | |
| 341 | + "name": "Pacific Quorum (Okanagan) Properties Inc", | |
| 342 | + "site": "https://pqokanagan.managebuilding.com/Resident/public/home", | |
| 343 | + "subdomain": "pqokanagan", | |
| 344 | + "regions": [ | |
| 345 | + "Kelowna", | |
| 346 | + "West Kelowna", | |
| 347 | + "Penticton", | |
| 348 | + "Salmon Arm", | |
| 349 | + "Sicamous" | |
| 350 | + ], | |
| 351 | + "province": "BC", | |
| 352 | + "status": "valide", | |
| 353 | + "listings_on": 8, | |
| 354 | + "notes": "8 annonces Okanagan le 2026-08-28" | |
| 355 | + }, | |
| 356 | + { | |
| 357 | + "id": "highpoint", | |
| 358 | + "name": "Highpoint Realty Ltd.", | |
| 359 | + "site": "https://highpointrealtyltd.managebuilding.com/Resident/public/home", | |
| 360 | + "subdomain": "highpointrealtyltd", | |
| 361 | + "regions": [ | |
| 362 | + "Kelowna" | |
| 363 | + ], | |
| 364 | + "province": "BC", | |
| 365 | + "status": "valide", | |
| 366 | + "listings_on": 11, | |
| 367 | + "notes": "11 annonces Kelowna le 2026-08-28 (secteur UBCO/Academy Way)" | |
| 368 | + }, | |
| 369 | + { | |
| 370 | + "id": "mvk", | |
| 371 | + "name": "MVK Rental", | |
| 372 | + "site": "https://mvkrental.ca", | |
| 373 | + "subdomain": "mvkrental", | |
| 374 | + "regions": [ | |
| 375 | + "Kamloops", | |
| 376 | + "Vernon", | |
| 377 | + "Merritt", | |
| 378 | + "Kelowna" | |
| 379 | + ], | |
| 380 | + "province": "BC", | |
| 381 | + "status": "valide", | |
| 382 | + "listings_on": 12, | |
| 383 | + "notes": "12 annonces BC (Kamloops 7, Vernon 5) le 2026-08-28" | |
| 384 | + }, | |
| 385 | + { | |
| 386 | + "id": "greenstone", | |
| 387 | + "name": "Greenstone Properties", | |
| 388 | + "site": "https://greenstoneproperties.managebuilding.com/Resident/public/home", | |
| 389 | + "subdomain": "greenstoneproperties", | |
| 390 | + "regions": [ | |
| 391 | + "Kamloops", | |
| 392 | + "Pouce Coupe" | |
| 393 | + ], | |
| 394 | + "province": "BC", | |
| 395 | + "status": "valide", | |
| 396 | + "listings_on": 1, | |
| 397 | + "notes": "1 annonce BC (Pouce Coupe) le 2026-08-28 ; gestionnaire basé à Kamloops, petit inventaire variable" | |
| 398 | + }, | |
| 399 | + { | |
| 400 | + "id": "c21energy", | |
| 401 | + "name": "Century 21 Energy Realty", | |
| 402 | + "site": "https://c21energypropertymanagement.managebuilding.com/Resident/public/home", | |
| 403 | + "subdomain": "c21energypropertymanagement", | |
| 404 | + "regions": [ | |
| 405 | + "Prince George", | |
| 406 | + "Fort St. John", | |
| 407 | + "Chetwynd", | |
| 408 | + "Quesnel", | |
| 409 | + "Taylor" | |
| 410 | + ], | |
| 411 | + "province": "BC", | |
| 412 | + "status": "valide", | |
| 413 | + "listings_on": 48, | |
| 414 | + "notes": "48 cartes BC (nord de la BC) le 2026-08-28, dont quelques stationnements à filtrer" | |
| 415 | + }, | |
| 416 | + { | |
| 417 | + "id": "nestpg", | |
| 418 | + "name": "Nest Property Management and Real Estate Services Ltd.", | |
| 419 | + "site": "https://nestrealtyltd.com", | |
| 420 | + "subdomain": "nestpg", | |
| 421 | + "regions": [ | |
| 422 | + "Prince George", | |
| 423 | + "Vancouver", | |
| 424 | + "Burnaby", | |
| 425 | + "Kitimat", | |
| 426 | + "Prince Rupert", | |
| 427 | + "Terrace", | |
| 428 | + "Surrey" | |
| 429 | + ], | |
| 430 | + "province": "BC", | |
| 431 | + "status": "valide", | |
| 432 | + "listings_on": 76, | |
| 433 | + "notes": "76 annonces BC le 2026-08-28 (Prince George + Lower Mainland + nord-ouest BC) — gros volume" | |
| 434 | + }, | |
| 435 | + { | |
| 436 | + "id": "kidd", | |
| 437 | + "name": "Kidd Management Ltd (KG Property)", | |
| 438 | + "site": "https://kgproperty.managebuilding.com/Resident/public/home", | |
| 439 | + "subdomain": "kgproperty", | |
| 440 | + "regions": [ | |
| 441 | + "Prince George" | |
| 442 | + ], | |
| 443 | + "province": "BC", | |
| 444 | + "status": "valide", | |
| 445 | + "listings_on": 9, | |
| 446 | + "notes": "9 annonces Prince George le 2026-08-28" | |
| 447 | + }, | |
| 448 | + { | |
| 449 | + "id": "c21coastal", | |
| 450 | + "name": "Century 21 Coastal Realty Property Management", | |
| 451 | + "site": "https://c21.managebuilding.com/Resident/public/home", | |
| 452 | + "subdomain": "c21", | |
| 453 | + "regions": [ | |
| 454 | + "Abbotsford", | |
| 455 | + "Maple Ridge", | |
| 456 | + "Surrey", | |
| 457 | + "Richmond", | |
| 458 | + "Mission", | |
| 459 | + "Chilliwack", | |
| 460 | + "Coquitlam" | |
| 461 | + ], | |
| 462 | + "province": "BC", | |
| 463 | + "status": "valide", | |
| 464 | + "listings_on": 23, | |
| 465 | + "notes": "23 annonces BC (Fraser Valley) le 2026-08-28" | |
| 466 | + }, | |
| 467 | + { | |
| 468 | + "id": "homelifecv", | |
| 469 | + "name": "Homelife Advantage Realty Ltd", | |
| 470 | + "site": "https://homelifeadvantagecv.managebuilding.com/Resident/public/home", | |
| 471 | + "subdomain": "homelifeadvantagecv", | |
| 472 | + "regions": [ | |
| 473 | + "Chilliwack", | |
| 474 | + "Surrey" | |
| 475 | + ], | |
| 476 | + "province": "BC", | |
| 477 | + "status": "valide", | |
| 478 | + "listings_on": 6, | |
| 479 | + "notes": "6 annonces BC le 2026-08-28" | |
| 480 | + }, | |
| 481 | + { | |
| 482 | + "id": "cbexecutives", | |
| 483 | + "name": "Coldwell Banker Executives Realty", | |
| 484 | + "site": "https://executives-realty.managebuilding.com/Resident/public/home", | |
| 485 | + "subdomain": "executives-realty", | |
| 486 | + "regions": [ | |
| 487 | + "Vernon", | |
| 488 | + "Revelstoke" | |
| 489 | + ], | |
| 490 | + "province": "BC", | |
| 491 | + "status": "valide", | |
| 492 | + "listings_on": 3, | |
| 493 | + "notes": "3 annonces BC (Revelstoke 2, Vernon 1) le 2026-08-28" | |
| 494 | + }, | |
| 495 | + { | |
| 496 | + "id": "synterra", | |
| 497 | + "name": "Synterra Realty", | |
| 498 | + "site": "https://synterrarealty.managebuilding.com/Resident/public/home", | |
| 499 | + "subdomain": "synterrarealty", | |
| 500 | + "regions": [ | |
| 501 | + "Calgary", | |
| 502 | + "Airdrie" | |
| 503 | + ], | |
| 504 | + "province": "AB", | |
| 505 | + "status": "valide", | |
| 506 | + "listings_on": 8, | |
| 507 | + "notes": "8 annonces AB (Calgary 6, Airdrie 2) le 2026-08-28" | |
| 508 | + }, | |
| 509 | + { | |
| 510 | + "id": "citysearch", | |
| 511 | + "name": "Citysearch Rental Network Inc.", | |
| 512 | + "site": "https://citysearchrental.managebuilding.com/Resident/public/home", | |
| 513 | + "subdomain": "citysearchrental", | |
| 514 | + "regions": [ | |
| 515 | + "Calgary" | |
| 516 | + ], | |
| 517 | + "province": "AB", | |
| 518 | + "status": "valide", | |
| 519 | + "listings_on": 16, | |
| 520 | + "notes": "16 annonces Calgary le 2026-08-28" | |
| 521 | + }, | |
| 522 | + { | |
| 523 | + "id": "pinto", | |
| 524 | + "name": "Pinto Properties", | |
| 525 | + "site": "https://pintoproperties.managebuilding.com/Resident/public/home", | |
| 526 | + "subdomain": "pintoproperties", | |
| 527 | + "regions": [ | |
| 528 | + "Edmonton" | |
| 529 | + ], | |
| 530 | + "province": "AB", | |
| 531 | + "status": "valide", | |
| 532 | + "listings_on": 12, | |
| 533 | + "notes": "12 annonces Edmonton (Garneau et environs) le 2026-08-28" | |
| 534 | + }, | |
| 535 | + { | |
| 536 | + "id": "mylife", | |
| 537 | + "name": "My Life Realty, Property Management", | |
| 538 | + "site": "https://myliferealty.managebuilding.com/Resident/public/home", | |
| 539 | + "subdomain": "myliferealty", | |
| 540 | + "regions": [ | |
| 541 | + "Lethbridge" | |
| 542 | + ], | |
| 543 | + "province": "AB", | |
| 544 | + "status": "valide", | |
| 545 | + "listings_on": 3, | |
| 546 | + "notes": "3 annonces Lethbridge le 2026-08-28" | |
| 547 | + }, | |
| 548 | + { | |
| 549 | + "id": "grassrootssouth", | |
| 550 | + "name": "Grassroots Property Management South", | |
| 551 | + "site": "https://grassrootssouthpropertymanagement.managebuilding.com/Resident/public/home", | |
| 552 | + "subdomain": "grassrootssouthpropertymanagement", | |
| 553 | + "regions": [ | |
| 554 | + "Lethbridge", | |
| 555 | + "Magrath", | |
| 556 | + "Cardston" | |
| 557 | + ], | |
| 558 | + "province": "AB", | |
| 559 | + "status": "valide", | |
| 560 | + "listings_on": 6, | |
| 561 | + "notes": "6 annonces AB (Lethbridge 5, Magrath 1) le 2026-08-28" | |
| 562 | + }, | |
| 563 | + { | |
| 564 | + "id": "grassrootsgp", | |
| 565 | + "name": "Grassroots Property Management (Grande Prairie)", | |
| 566 | + "site": "https://grassrootspropertymanagement.managebuilding.com/Resident/public/home", | |
| 567 | + "subdomain": "grassrootspropertymanagement", | |
| 568 | + "regions": [ | |
| 569 | + "Grande Prairie", | |
| 570 | + "Clairmont", | |
| 571 | + "High Prairie" | |
| 572 | + ], | |
| 573 | + "province": "AB", | |
| 574 | + "status": "valide", | |
| 575 | + "listings_on": 28, | |
| 576 | + "notes": "28 annonces AB le 2026-08-28 ; même bannière que grassrootssouth mais compte Buildium distinct" | |
| 577 | + }, | |
| 578 | + { | |
| 579 | + "id": "gpprime", | |
| 580 | + "name": "Prime Property Management (GP Prime)", | |
| 581 | + "site": "https://gpprime.managebuilding.com/Resident/public/home", | |
| 582 | + "subdomain": "gpprime", | |
| 583 | + "regions": [ | |
| 584 | + "Grande Prairie" | |
| 585 | + ], | |
| 586 | + "province": "AB", | |
| 587 | + "status": "valide", | |
| 588 | + "listings_on": 1, | |
| 589 | + "notes": "1 annonce Grande Prairie le 2026-08-28 ; inventaire variable" | |
| 590 | + }, | |
| 591 | + { | |
| 592 | + "id": "resremedies", | |
| 593 | + "name": "Residential Remedies Inc. (3% Realty Fort McMurray)", | |
| 594 | + "site": "https://residentialremedies.managebuilding.com/Resident/public/home", | |
| 595 | + "subdomain": "residentialremedies", | |
| 596 | + "regions": [ | |
| 597 | + "Fort McMurray" | |
| 598 | + ], | |
| 599 | + "province": "AB", | |
| 600 | + "status": "valide", | |
| 601 | + "listings_on": 15, | |
| 602 | + "notes": "15 annonces Fort McMurray le 2026-08-28" | |
| 603 | + }, | |
| 604 | + { | |
| 605 | + "id": "mastergroup", | |
| 606 | + "name": "Master Group Investments", | |
| 607 | + "site": "https://mastergroupinvestments.managebuilding.com/Resident/public/home", | |
| 608 | + "subdomain": "mastergroupinvestments", | |
| 609 | + "regions": [ | |
| 610 | + "Edmonton", | |
| 611 | + "Stony Plain", | |
| 612 | + "Drayton Valley" | |
| 613 | + ], | |
| 614 | + "province": "AB", | |
| 615 | + "status": "valide", | |
| 616 | + "listings_on": 21, | |
| 617 | + "notes": "21 annonces AB le 2026-08-28" | |
| 618 | + }, | |
| 619 | + { | |
| 620 | + "id": "casawise", | |
| 621 | + "name": "Casawise Property Management", | |
| 622 | + "site": "https://casawise.managebuilding.com/Resident/public/home", | |
| 623 | + "subdomain": "casawise", | |
| 624 | + "regions": [ | |
| 625 | + "Edmonton", | |
| 626 | + "Leduc", | |
| 627 | + "St. Albert" | |
| 628 | + ], | |
| 629 | + "province": "AB", | |
| 630 | + "status": "valide", | |
| 631 | + "listings_on": 71, | |
| 632 | + "notes": "71 annonces AB le 2026-08-28 (Edmonton 52, Leduc 13, St. Albert 6) — gros volume" | |
| 633 | + }, | |
| 634 | + { | |
| 635 | + "id": "wpp", | |
| 636 | + "name": "Western Premium Property Management", | |
| 637 | + "site": "https://wppmanagement.managebuilding.com/Resident/public/home", | |
| 638 | + "subdomain": "wppmanagement", | |
| 639 | + "regions": [ | |
| 640 | + "Saskatoon", | |
| 641 | + "Warman", | |
| 642 | + "Biggar" | |
| 643 | + ], | |
| 644 | + "province": "SK", | |
| 645 | + "status": "valide", | |
| 646 | + "listings_on": 129, | |
| 647 | + "notes": "129 annonces SK le 2026-08-28 (Saskatoon 126) — plus gros candidat de la campagne" | |
| 648 | + }, | |
| 649 | + { | |
| 650 | + "id": "supreme", | |
| 651 | + "name": "Supreme Consulting", | |
| 652 | + "site": "https://supremeconsulting.managebuilding.com/Resident/public/home", | |
| 653 | + "subdomain": "supremeconsulting", | |
| 654 | + "regions": [ | |
| 655 | + "Regina", | |
| 656 | + "Yorkton", | |
| 657 | + "Prince Albert", | |
| 658 | + "Swift Current", | |
| 659 | + "North Battleford" | |
| 660 | + ], | |
| 661 | + "province": "SK", | |
| 662 | + "status": "valide", | |
| 663 | + "listings_on": 19, | |
| 664 | + "notes": "19 annonces SK le 2026-08-28" | |
| 665 | + }, | |
| 666 | + { | |
| 667 | + "id": "jml", | |
| 668 | + "name": "JML Properties Ltd", | |
| 669 | + "site": "https://jmlpropertiesltd.managebuilding.com/Resident/public/home", | |
| 670 | + "subdomain": "jmlpropertiesltd", | |
| 671 | + "regions": [ | |
| 672 | + "Regina", | |
| 673 | + "Saskatoon", | |
| 674 | + "Moose Jaw" | |
| 675 | + ], | |
| 676 | + "province": "SK", | |
| 677 | + "status": "valide", | |
| 678 | + "listings_on": 9, | |
| 679 | + "notes": "9 annonces SK (Regina 7, Saskatoon 2) le 2026-08-28" | |
| 680 | + }, | |
| 681 | + { | |
| 682 | + "id": "kodiak", | |
| 683 | + "name": "Kodiak Property Management Ltd.", | |
| 684 | + "site": "https://kodiakpropertymanagement.managebuilding.com/Resident/public/home", | |
| 685 | + "subdomain": "kodiakpropertymanagement", | |
| 686 | + "regions": [ | |
| 687 | + "Regina", | |
| 688 | + "Moose Jaw" | |
| 689 | + ], | |
| 690 | + "province": "SK", | |
| 691 | + "status": "valide", | |
| 692 | + "listings_on": 12, | |
| 693 | + "notes": "12 annonces SK le 2026-08-28" | |
| 694 | + }, | |
| 695 | + { | |
| 696 | + "id": "tree", | |
| 697 | + "name": "TREE Property Management", | |
| 698 | + "site": "https://treepropertymanagement.managebuilding.com/Resident/public/home", | |
| 699 | + "subdomain": "treepropertymanagement", | |
| 700 | + "regions": [ | |
| 701 | + "Moose Jaw" | |
| 702 | + ], | |
| 703 | + "province": "SK", | |
| 704 | + "status": "valide", | |
| 705 | + "listings_on": 7, | |
| 706 | + "notes": "7 annonces Moose Jaw le 2026-08-28" | |
| 707 | + }, | |
| 708 | + { | |
| 709 | + "id": "3keys", | |
| 710 | + "name": "3Keys Property Management", | |
| 711 | + "site": "https://3keysproperty.managebuilding.com/Resident/public/home", | |
| 712 | + "subdomain": "3keysproperty", | |
| 713 | + "regions": [ | |
| 714 | + "Moose Jaw" | |
| 715 | + ], | |
| 716 | + "province": "SK", | |
| 717 | + "status": "valide", | |
| 718 | + "listings_on": 1, | |
| 719 | + "notes": "1 annonce Moose Jaw le 2026-08-28 ; inventaire habituel 5-10 selon Google, variable" | |
| 720 | + }, | |
| 721 | + { | |
| 722 | + "id": "clearwater", | |
| 723 | + "name": "Clearwater Management", | |
| 724 | + "site": "https://clearwatermanagement.managebuilding.com/Resident/public/home", | |
| 725 | + "subdomain": "clearwatermanagement", | |
| 726 | + "regions": [ | |
| 727 | + "Winnipeg", | |
| 728 | + "Portage la Prairie" | |
| 729 | + ], | |
| 730 | + "province": "MB", | |
| 731 | + "status": "valide", | |
| 732 | + "listings_on": 18, | |
| 733 | + "notes": "18 annonces MB le 2026-08-28" | |
| 734 | + }, | |
| 735 | + { | |
| 736 | + "id": "premier204", | |
| 737 | + "name": "Premier Property Solutions Inc", | |
| 738 | + "site": "https://premier204.managebuilding.com/Resident/public/home", | |
| 739 | + "subdomain": "premier204", | |
| 740 | + "regions": [ | |
| 741 | + "Winnipeg" | |
| 742 | + ], | |
| 743 | + "province": "MB", | |
| 744 | + "status": "valide", | |
| 745 | + "listings_on": 57, | |
| 746 | + "notes": "57 annonces Winnipeg le 2026-08-28 — gros volume MB" | |
| 747 | + }, | |
| 748 | + { | |
| 749 | + "id": "joatmon", | |
| 750 | + "name": "Joatmon Properties Ltd.", | |
| 751 | + "site": "https://joatmonproperties.managebuilding.com/Resident/public/home", | |
| 752 | + "subdomain": "joatmonproperties", | |
| 753 | + "regions": [ | |
| 754 | + "Winnipeg" | |
| 755 | + ], | |
| 756 | + "province": "MB", | |
| 757 | + "status": "valide", | |
| 758 | + "listings_on": 10, | |
| 759 | + "notes": "10 annonces Winnipeg le 2026-08-28" | |
| 760 | + }, | |
| 761 | + { | |
| 762 | + "id": "assetcore", | |
| 763 | + "name": "AssetCore Properties", | |
| 764 | + "site": "https://assetcore.managebuilding.com/Resident/public/home", | |
| 765 | + "subdomain": "assetcore", | |
| 766 | + "regions": [ | |
| 767 | + "Winnipeg" | |
| 768 | + ], | |
| 769 | + "province": "MB", | |
| 770 | + "status": "valide", | |
| 771 | + "listings_on": 4, | |
| 772 | + "notes": "4 annonces Winnipeg le 2026-08-28" | |
| 773 | + }, | |
| 774 | + { | |
| 775 | + "id": "oakapple", | |
| 776 | + "name": "Oak & Apple Inc.", | |
| 777 | + "site": "https://oakandapple.managebuilding.com/Resident/public/home", | |
| 778 | + "subdomain": "oakandapple", | |
| 779 | + "regions": [ | |
| 780 | + "Winnipeg" | |
| 781 | + ], | |
| 782 | + "province": "MB", | |
| 783 | + "status": "valide", | |
| 784 | + "listings_on": 2, | |
| 785 | + "notes": "2 annonces Winnipeg le 2026-08-28" | |
| 786 | + }, | |
| 787 | + { | |
| 788 | + "id": "ember", | |
| 789 | + "name": "Ember Realty Group Ltd.", | |
| 790 | + "site": "https://emberrealty.managebuilding.com/Resident/public/home", | |
| 791 | + "subdomain": "emberrealty", | |
| 792 | + "regions": [ | |
| 793 | + "Winnipeg" | |
| 794 | + ], | |
| 795 | + "province": "MB", | |
| 796 | + "status": "valide", | |
| 797 | + "listings_on": 1, | |
| 798 | + "notes": "1 annonce Winnipeg le 2026-08-28 ; inventaire variable" | |
| 799 | + }, | |
| 800 | + { | |
| 801 | + "id": "padpicker", | |
| 802 | + "name": "The Pad Picker Inc", | |
| 803 | + "site": "https://padpicker.managebuilding.com/Resident/public/home", | |
| 804 | + "subdomain": "padpicker", | |
| 805 | + "regions": [ | |
| 806 | + "Halifax", | |
| 807 | + "Dartmouth", | |
| 808 | + "Bedford", | |
| 809 | + "Timberlea", | |
| 810 | + "Eastern Passage" | |
| 811 | + ], | |
| 812 | + "province": "NS", | |
| 813 | + "status": "valide", | |
| 814 | + "listings_on": 15, | |
| 815 | + "notes": "15 annonces NS (grand Halifax) le 2026-08-28" | |
| 816 | + }, | |
| 817 | + { | |
| 818 | + "id": "anchorhfx", | |
| 819 | + "name": "Anchor Property Management (Halifax)", | |
| 820 | + "site": "https://anchorpropertieshfx.managebuilding.com/Resident/public/home", | |
| 821 | + "subdomain": "anchorpropertieshfx", | |
| 822 | + "regions": [ | |
| 823 | + "Halifax" | |
| 824 | + ], | |
| 825 | + "province": "NS", | |
| 826 | + "status": "valide", | |
| 827 | + "listings_on": 4, | |
| 828 | + "notes": "4 annonces Halifax le 2026-08-28" | |
| 829 | + }, | |
| 830 | + { | |
| 831 | + "id": "urchin", | |
| 832 | + "name": "Urchin Property Management Inc.", | |
| 833 | + "site": "https://urchinpropertymanagementinc.managebuilding.com/Resident/public/home", | |
| 834 | + "subdomain": "urchinpropertymanagementinc", | |
| 835 | + "regions": [ | |
| 836 | + "Dartmouth", | |
| 837 | + "Halifax", | |
| 838 | + "Cole Harbour" | |
| 839 | + ], | |
| 840 | + "province": "NS", | |
| 841 | + "status": "valide", | |
| 842 | + "listings_on": 16, | |
| 843 | + "notes": "16 annonces NS (Dartmouth 13) le 2026-08-28" | |
| 844 | + }, | |
| 845 | + { | |
| 846 | + "id": "northdt", | |
| 847 | + "name": "North DT Holdings", | |
| 848 | + "site": "https://northdtholdings.managebuilding.com/Resident/public/home", | |
| 849 | + "subdomain": "northdtholdings", | |
| 850 | + "regions": [ | |
| 851 | + "Truro" | |
| 852 | + ], | |
| 853 | + "province": "NS", | |
| 854 | + "status": "valide", | |
| 855 | + "listings_on": 1, | |
| 856 | + "notes": "1 annonce Truro le 2026-08-28" | |
| 857 | + }, | |
| 858 | + { | |
| 859 | + "id": "safeguard", | |
| 860 | + "name": "Safeguard Property Management & Services", | |
| 861 | + "site": "https://safeguardservices.managebuilding.com/Resident/public/home", | |
| 862 | + "subdomain": "safeguardservices", | |
| 863 | + "regions": [ | |
| 864 | + "Wolfville", | |
| 865 | + "Windsor", | |
| 866 | + "Kentville", | |
| 867 | + "Middleton", | |
| 868 | + "New Minas", | |
| 869 | + "Annapolis Royal", | |
| 870 | + "Bridgetown" | |
| 871 | + ], | |
| 872 | + "province": "NS", | |
| 873 | + "status": "valide", | |
| 874 | + "listings_on": 31, | |
| 875 | + "notes": "31 annonces NS (vallée d'Annapolis, Windsor→Middleton) le 2026-08-28" | |
| 876 | + }, | |
| 877 | + { | |
| 878 | + "id": "lighthouse", | |
| 879 | + "name": "Rent With Lighthouse", | |
| 880 | + "site": "https://rentwithlighthouse.managebuilding.com/Resident/public/home", | |
| 881 | + "subdomain": "rentwithlighthouse", | |
| 882 | + "regions": [ | |
| 883 | + "Truro", | |
| 884 | + "Dartmouth", | |
| 885 | + "New Minas", | |
| 886 | + "Amherst", | |
| 887 | + "Fall River" | |
| 888 | + ], | |
| 889 | + "province": "NS", | |
| 890 | + "status": "valide", | |
| 891 | + "listings_on": 11, | |
| 892 | + "notes": "11 annonces NS le 2026-08-28" | |
| 893 | + }, | |
| 894 | + { | |
| 895 | + "id": "hubcity", | |
| 896 | + "name": "Hub City Property Management", | |
| 897 | + "site": "https://hubcitypm.managebuilding.com/Resident/public/home", | |
| 898 | + "subdomain": "hubcitypm", | |
| 899 | + "regions": [ | |
| 900 | + "Moncton", | |
| 901 | + "Shediac", | |
| 902 | + "Dieppe", | |
| 903 | + "Miramichi", | |
| 904 | + "Sackville" | |
| 905 | + ], | |
| 906 | + "province": "NB", | |
| 907 | + "status": "valide", | |
| 908 | + "listings_on": 26, | |
| 909 | + "notes": "26 cartes NB le 2026-08-28, dont quelques garages/commerciaux à filtrer" | |
| 910 | + }, | |
| 911 | + { | |
| 912 | + "id": "greenlight", | |
| 913 | + "name": "GreenLight Property Management Inc", | |
| 914 | + "site": "https://rentgreenlight.com", | |
| 915 | + "subdomain": "greenlightpropertymanagementinc", | |
| 916 | + "regions": [ | |
| 917 | + "Moncton", | |
| 918 | + "Dieppe" | |
| 919 | + ], | |
| 920 | + "province": "NB", | |
| 921 | + "status": "valide", | |
| 922 | + "listings_on": 15, | |
| 923 | + "notes": "15 annonces NB le 2026-08-28" | |
| 924 | + }, | |
| 925 | + { | |
| 926 | + "id": "4rent", | |
| 927 | + "name": "4 Rent Solutions Inc.", | |
| 928 | + "site": "https://4rentsolutionsinc.managebuilding.com/Resident/public/home", | |
| 929 | + "subdomain": "4rentsolutionsinc", | |
| 930 | + "regions": [ | |
| 931 | + "Moncton", | |
| 932 | + "Shediac" | |
| 933 | + ], | |
| 934 | + "province": "NB", | |
| 935 | + "status": "valide", | |
| 936 | + "listings_on": 12, | |
| 937 | + "notes": "12 annonces NB le 2026-08-28" | |
| 938 | + }, | |
| 939 | + { | |
| 940 | + "id": "colpitts", | |
| 941 | + "name": "Colpitts Developments", | |
| 942 | + "site": "https://colpittsdevelopments.managebuilding.com/Resident/public/home", | |
| 943 | + "subdomain": "colpittsdevelopments", | |
| 944 | + "regions": [ | |
| 945 | + "Fredericton" | |
| 946 | + ], | |
| 947 | + "province": "NB", | |
| 948 | + "status": "valide", | |
| 949 | + "listings_on": 43, | |
| 950 | + "notes": "43 annonces Fredericton le 2026-08-28 — gros volume NB (immeubles Manhattan Drive 82 unités)" | |
| 951 | + }, | |
| 952 | + { | |
| 953 | + "id": "freddybeach", | |
| 954 | + "name": "Freddy Beach Property Management", | |
| 955 | + "site": "https://freddybeachpm.managebuilding.com/Resident/public/home", | |
| 956 | + "subdomain": "freddybeachpm", | |
| 957 | + "regions": [ | |
| 958 | + "Fredericton", | |
| 959 | + "Moncton", | |
| 960 | + "Saint John" | |
| 961 | + ], | |
| 962 | + "province": "NB", | |
| 963 | + "status": "valide", | |
| 964 | + "listings_on": 13, | |
| 965 | + "notes": "13 cartes NB le 2026-08-28, dont 1-2 commerciaux/garages à filtrer" | |
| 966 | + }, | |
| 967 | + { | |
| 968 | + "id": "redsands", | |
| 969 | + "name": "Red Sands Property Management", | |
| 970 | + "site": "https://redsandsproperties.ca", | |
| 971 | + "subdomain": "redsandsproperties", | |
| 972 | + "regions": [ | |
| 973 | + "Charlottetown", | |
| 974 | + "Summerside", | |
| 975 | + "Kensington", | |
| 976 | + "Montague", | |
| 977 | + "Souris", | |
| 978 | + "O'Leary" | |
| 979 | + ], | |
| 980 | + "province": "PE", | |
| 981 | + "status": "valide", | |
| 982 | + "listings_on": 26, | |
| 983 | + "notes": "26 annonces PE (partout sur l'île, incl. locations hivernales saisonnières oct-mai — vérifier durée) le 2026-08-28" | |
| 984 | + }, | |
| 985 | + { | |
| 986 | + "id": "westroyalty", | |
| 987 | + "name": "West Royalty Suites", | |
| 988 | + "site": "https://westroyaltysuites.managebuilding.com/Resident/public/home", | |
| 989 | + "subdomain": "westroyaltysuites", | |
| 990 | + "regions": [ | |
| 991 | + "Charlottetown" | |
| 992 | + ], | |
| 993 | + "province": "PE", | |
| 994 | + "status": "valide", | |
| 995 | + "listings_on": 7, | |
| 996 | + "notes": "7 annonces Charlottetown (immeuble 20 Daniel Drive) le 2026-08-28" | |
| 997 | + }, | |
| 998 | + { | |
| 999 | + "id": "mpropgroup", | |
| 1000 | + "name": "M Property Management Group", | |
| 1001 | + "site": "https://mpropgroup.managebuilding.com/Resident/public/home", | |
| 1002 | + "subdomain": "mpropgroup", | |
| 1003 | + "regions": [ | |
| 1004 | + "Summerside", | |
| 1005 | + "Prince Albert" | |
| 1006 | + ], | |
| 1007 | + "province": "PE", | |
| 1008 | + "status": "valide", | |
| 1009 | + "listings_on": 4, | |
| 1010 | + "notes": "4 annonces le 2026-08-28 (Summerside PE 2, Prince Albert SK 2) — bi-provincial" | |
| 1011 | + }, | |
| 1012 | + { | |
| 1013 | + "id": "metronl", | |
| 1014 | + "name": "Metro Property Management (St. John's)", | |
| 1015 | + "site": "https://metropropertymanagement.managebuilding.com/Resident/public/home", | |
| 1016 | + "subdomain": "metropropertymanagement", | |
| 1017 | + "regions": [ | |
| 1018 | + "St. John's", | |
| 1019 | + "Mount Pearl", | |
| 1020 | + "Paradise", | |
| 1021 | + "Torbay" | |
| 1022 | + ], | |
| 1023 | + "province": "NL", | |
| 1024 | + "status": "valide", | |
| 1025 | + "listings_on": 21, | |
| 1026 | + "notes": "21 annonces NL (grand St. John's) le 2026-08-28 — seul client NL du registre" | |
| 1027 | + }, | |
| 1028 | + { | |
| 1029 | + "id": "marco", | |
| 1030 | + "name": "Marco Toronto Property Management", | |
| 1031 | + "site": "https://marcotoronto.managebuilding.com/Resident/public/home", | |
| 1032 | + "subdomain": "marcotoronto", | |
| 1033 | + "regions": [ | |
| 1034 | + "Toronto", | |
| 1035 | + "East York", | |
| 1036 | + "Mississauga" | |
| 1037 | + ], | |
| 1038 | + "province": "ON", | |
| 1039 | + "status": "valide", | |
| 1040 | + "listings_on": 43, | |
| 1041 | + "notes": "43 annonces ON (Toronto 40) le 2026-08-28 ; segment haut de gamme (jusqu'à 30 k$/mois)" | |
| 1042 | + }, | |
| 1043 | + { | |
| 1044 | + "id": "camden", | |
| 1045 | + "name": "Camden Property Management", | |
| 1046 | + "site": "https://camdenpm.managebuilding.com/Resident/public/home", | |
| 1047 | + "subdomain": "camdenpm", | |
| 1048 | + "regions": [ | |
| 1049 | + "Toronto" | |
| 1050 | + ], | |
| 1051 | + "province": "ON", | |
| 1052 | + "status": "valide", | |
| 1053 | + "listings_on": 1, | |
| 1054 | + "notes": "1 annonce Toronto (Annex) le 2026-08-28 ; inventaire variable" | |
| 1055 | + }, | |
| 1056 | + { | |
| 1057 | + "id": "pmtoronto", | |
| 1058 | + "name": "Property Management Toronto Inc", | |
| 1059 | + "site": "https://propertymanagementtoronto.managebuilding.com/Resident/public/home", | |
| 1060 | + "subdomain": "propertymanagementtoronto", | |
| 1061 | + "regions": [ | |
| 1062 | + "Toronto", | |
| 1063 | + "Mississauga", | |
| 1064 | + "Brampton", | |
| 1065 | + "Oshawa", | |
| 1066 | + "Kitchener", | |
| 1067 | + "Brantford" | |
| 1068 | + ], | |
| 1069 | + "province": "ON", | |
| 1070 | + "status": "valide", | |
| 1071 | + "listings_on": 23, | |
| 1072 | + "notes": "23 annonces ON (GTA + Kitchener) le 2026-08-28" | |
| 1073 | + }, | |
| 1074 | + { | |
| 1075 | + "id": "ckso", | |
| 1076 | + "name": "CKSO Properties", | |
| 1077 | + "site": "https://cksoproperties.managebuilding.com/Resident/public/home", | |
| 1078 | + "subdomain": "cksoproperties", | |
| 1079 | + "regions": [ | |
| 1080 | + "Greater Sudbury" | |
| 1081 | + ], | |
| 1082 | + "province": "ON", | |
| 1083 | + "status": "valide", | |
| 1084 | + "listings_on": 21, | |
| 1085 | + "notes": "21 annonces Grand Sudbury le 2026-08-28" | |
| 1086 | + }, | |
| 1087 | + { | |
| 1088 | + "id": "superiorchoice", | |
| 1089 | + "name": "Superior Choice PM", | |
| 1090 | + "site": "https://tbay.managebuilding.com/Resident/public/home", | |
| 1091 | + "subdomain": "tbay", | |
| 1092 | + "regions": [ | |
| 1093 | + "Thunder Bay" | |
| 1094 | + ], | |
| 1095 | + "province": "ON", | |
| 1096 | + "status": "valide", | |
| 1097 | + "listings_on": 3, | |
| 1098 | + "notes": "3 annonces Thunder Bay le 2026-08-28" | |
| 1099 | + }, | |
| 1100 | + { | |
| 1101 | + "id": "hocking", | |
| 1102 | + "name": "Hocking Management Corporation", | |
| 1103 | + "site": "https://hmc.managebuilding.com/Resident/public/home", | |
| 1104 | + "subdomain": "hmc", | |
| 1105 | + "regions": [ | |
| 1106 | + "Barrie" | |
| 1107 | + ], | |
| 1108 | + "province": "ON", | |
| 1109 | + "status": "valide", | |
| 1110 | + "listings_on": 4, | |
| 1111 | + "notes": "4 annonces Barrie le 2026-08-28" | |
| 1112 | + }, | |
| 1113 | + { | |
| 1114 | + "id": "spruce", | |
| 1115 | + "name": "Spruce Living Inc.", | |
| 1116 | + "site": "https://sprucelivinginc.managebuilding.com/Resident/public/home", | |
| 1117 | + "subdomain": "sprucelivinginc", | |
| 1118 | + "regions": [ | |
| 1119 | + "Guelph" | |
| 1120 | + ], | |
| 1121 | + "province": "ON", | |
| 1122 | + "status": "valide", | |
| 1123 | + "listings_on": 8, | |
| 1124 | + "notes": "8 annonces Guelph le 2026-08-28" | |
| 1125 | + }, | |
| 1126 | + { | |
| 1127 | + "id": "guelphpm", | |
| 1128 | + "name": "Guelph PM", | |
| 1129 | + "site": "https://guelphpm.managebuilding.com/Resident/public/home", | |
| 1130 | + "subdomain": "guelphpm", | |
| 1131 | + "regions": [ | |
| 1132 | + "Guelph" | |
| 1133 | + ], | |
| 1134 | + "province": "ON", | |
| 1135 | + "status": "valide", | |
| 1136 | + "listings_on": 2, | |
| 1137 | + "notes": "2 annonces Guelph le 2026-08-28" | |
| 1138 | + }, | |
| 1139 | + { | |
| 1140 | + "id": "sfour", | |
| 1141 | + "name": "S Four Inc.", | |
| 1142 | + "site": "https://sfourinc.managebuilding.com/Resident/public/home", | |
| 1143 | + "subdomain": "sfourinc", | |
| 1144 | + "regions": [ | |
| 1145 | + "Kitchener", | |
| 1146 | + "Waterloo" | |
| 1147 | + ], | |
| 1148 | + "province": "ON", | |
| 1149 | + "status": "valide", | |
| 1150 | + "listings_on": 23, | |
| 1151 | + "notes": "23 annonces ON (Kitchener 14, Waterloo 9) le 2026-08-28" | |
| 1152 | + }, | |
| 1153 | + { | |
| 1154 | + "id": "starliving", | |
| 1155 | + "name": "Starliving Management", | |
| 1156 | + "site": "https://starliving.managebuilding.com/Resident/public/home", | |
| 1157 | + "subdomain": "starliving", | |
| 1158 | + "regions": [ | |
| 1159 | + "Brantford", | |
| 1160 | + "Hamilton", | |
| 1161 | + "Cambridge", | |
| 1162 | + "Oshawa", | |
| 1163 | + "St. Catharines" | |
| 1164 | + ], | |
| 1165 | + "province": "ON", | |
| 1166 | + "status": "valide", | |
| 1167 | + "listings_on": 4, | |
| 1168 | + "notes": "4 annonces ON le 2026-08-28" | |
| 1169 | + }, | |
| 1170 | + { | |
| 1171 | + "id": "rentaplex", | |
| 1172 | + "name": "Rentaplex Inc", | |
| 1173 | + "site": "https://rentaplexinc.managebuilding.com/Resident/public/home", | |
| 1174 | + "subdomain": "rentaplexinc", | |
| 1175 | + "regions": [ | |
| 1176 | + "Oshawa", | |
| 1177 | + "Whitby" | |
| 1178 | + ], | |
| 1179 | + "province": "ON", | |
| 1180 | + "status": "valide", | |
| 1181 | + "listings_on": 3, | |
| 1182 | + "notes": "3 annonces Durham (Oshawa 2, Whitby 1) le 2026-08-28" | |
| 1183 | + }, | |
| 1184 | + { | |
| 1185 | + "id": "harper", | |
| 1186 | + "name": "Harper Management Services Inc", | |
| 1187 | + "site": "https://harpermanagementservicesinc.managebuilding.com/Resident/public/home", | |
| 1188 | + "subdomain": "harpermanagementservicesinc", | |
| 1189 | + "regions": [ | |
| 1190 | + "Sault Ste. Marie", | |
| 1191 | + "Welland", | |
| 1192 | + "St. Catharines", | |
| 1193 | + "Fort Erie" | |
| 1194 | + ], | |
| 1195 | + "province": "ON", | |
| 1196 | + "status": "valide", | |
| 1197 | + "listings_on": 15, | |
| 1198 | + "notes": "15 annonces ON (SSM 8 + Niagara) le 2026-08-28" | |
| 1199 | + }, | |
| 1200 | + { | |
| 1201 | + "id": "2cats", | |
| 1202 | + "name": "2 Cats Investor Services Inc.", | |
| 1203 | + "site": "https://2-cats.managebuilding.com/Resident/public/home", | |
| 1204 | + "subdomain": "2-cats", | |
| 1205 | + "regions": [ | |
| 1206 | + "Brantford" | |
| 1207 | + ], | |
| 1208 | + "province": "ON", | |
| 1209 | + "status": "valide", | |
| 1210 | + "listings_on": 8, | |
| 1211 | + "notes": "8 annonces Brantford (1 Wellington St.) le 2026-08-28" | |
| 1212 | + }, | |
| 1213 | + { | |
| 1214 | + "id": "ska", | |
| 1215 | + "name": "SKA Apartments", | |
| 1216 | + "site": "https://ska-apartment-rentals.managebuilding.com/Resident/public/home", | |
| 1217 | + "subdomain": "ska-apartment-rentals", | |
| 1218 | + "regions": [ | |
| 1219 | + "Chatham", | |
| 1220 | + "Brantford", | |
| 1221 | + "Leamington", | |
| 1222 | + "Tillsonburg", | |
| 1223 | + "Guelph" | |
| 1224 | + ], | |
| 1225 | + "province": "ON", | |
| 1226 | + "status": "valide", | |
| 1227 | + "listings_on": 23, | |
| 1228 | + "notes": "23 annonces ON (sud-ouest) le 2026-08-28" | |
| 1229 | + }, | |
| 1230 | + { | |
| 1231 | + "id": "fourchambers", | |
| 1232 | + "name": "Four Chambers Property Management", | |
| 1233 | + "site": "https://fourchamberspropertymanagement.managebuilding.com/Resident/public/home", | |
| 1234 | + "subdomain": "fourchamberspropertymanagement", | |
| 1235 | + "regions": [ | |
| 1236 | + "Hamilton", | |
| 1237 | + "St. Catharines", | |
| 1238 | + "Brantford" | |
| 1239 | + ], | |
| 1240 | + "province": "ON", | |
| 1241 | + "status": "valide", | |
| 1242 | + "listings_on": 9, | |
| 1243 | + "notes": "9 annonces ON (Hamilton 7) le 2026-08-28" | |
| 1244 | + } | |
| 1245 | + ] | |
| 195 | 1246 | } |
| \ No newline at end of file | ||
modified
data/liftsystem_clients.json
+197 −0
@@ -8392,6 +8392,203 @@ | ||
| 8392 | 8392 | "province": "ON", |
| 8393 | 8393 | "status": "valide", |
| 8394 | 8394 | "notes": "canada-expansion 2026-08-27 — probe live: 111 propriétés résidentielles hors QC (ON 93, AB 10, NS 8)" |
| 8395 | + }, | |
| 8396 | + { | |
| 8397 | + "id": "srsrseniorsliving", | |
| 8398 | + "name": "Srgroup: S&R Seniors Living", | |
| 8399 | + "site": "https://srseniorsliving.ca", | |
| 8400 | + "client_id": 351, | |
| 8401 | + "listing_url": "https://srseniorsliving.ca", | |
| 8402 | + "regions": [ | |
| 8403 | + "Ontario" | |
| 8404 | + ], | |
| 8405 | + "province": "ON", | |
| 8406 | + "status": "valide", | |
| 8407 | + "notes": "canada-expansion 2026-08-27 — probe live: 8 propriétés résidentielles hors QC (ON 8)" | |
| 8408 | + }, | |
| 8409 | + { | |
| 8410 | + "id": "skyviewsuites", | |
| 8411 | + "name": "Sky View Suites", | |
| 8412 | + "site": "https://skyviewsuites.com", | |
| 8413 | + "client_id": 643, | |
| 8414 | + "listing_url": "https://skyviewsuites.com", | |
| 8415 | + "regions": [ | |
| 8416 | + "Ontario" | |
| 8417 | + ], | |
| 8418 | + "province": "ON", | |
| 8419 | + "status": "valide", | |
| 8420 | + "notes": "canada-expansion 2026-08-27 — probe live: 3 propriétés résidentielles hors QC (ON 3)" | |
| 8421 | + }, | |
| 8422 | + { | |
| 8423 | + "id": "kevingtonbuildingcorp", | |
| 8424 | + "name": "Kevington Building Corp", | |
| 8425 | + "site": "https://kevingtonbuilding.com", | |
| 8426 | + "client_id": 754, | |
| 8427 | + "listing_url": "https://kevingtonbuilding.com", | |
| 8428 | + "regions": [ | |
| 8429 | + "British Columbia" | |
| 8430 | + ], | |
| 8431 | + "province": "BC", | |
| 8432 | + "status": "valide", | |
| 8433 | + "notes": "canada-expansion 2026-08-27 — probe live: 6 propriétés résidentielles hors QC (BC 6)" | |
| 8434 | + }, | |
| 8435 | + { | |
| 8436 | + "id": "forthrightventures", | |
| 8437 | + "name": "Forthright Ventures Inc", | |
| 8438 | + "site": "https://forthrightventures.ca", | |
| 8439 | + "client_id": 949, | |
| 8440 | + "listing_url": "https://forthrightventures.ca", | |
| 8441 | + "regions": [ | |
| 8442 | + "Manitoba" | |
| 8443 | + ], | |
| 8444 | + "province": "MB", | |
| 8445 | + "status": "valide", | |
| 8446 | + "notes": "canada-expansion 2026-08-27 — probe live: 17 propriétés résidentielles hors QC (MB 17)" | |
| 8447 | + }, | |
| 8448 | + { | |
| 8449 | + "id": "pathrealestateteam", | |
| 8450 | + "name": "Path Real Estate Team", | |
| 8451 | + "site": "https://beginyourpath.com", | |
| 8452 | + "client_id": 1197, | |
| 8453 | + "listing_url": "https://beginyourpath.com", | |
| 8454 | + "regions": [ | |
| 8455 | + "Ontario" | |
| 8456 | + ], | |
| 8457 | + "province": "ON", | |
| 8458 | + "status": "valide", | |
| 8459 | + "notes": "canada-expansion 2026-08-27 — probe live: 6 propriétés résidentielles hors QC (ON 6)" | |
| 8460 | + }, | |
| 8461 | + { | |
| 8462 | + "id": "remaxurbantorontoteamrea", | |
| 8463 | + "name": "Remax Urban Toronto Team Realty Inc", | |
| 8464 | + "site": "https://skrealtytoronto.ca", | |
| 8465 | + "client_id": 1391, | |
| 8466 | + "listing_url": "https://skrealtytoronto.ca", | |
| 8467 | + "regions": [ | |
| 8468 | + "Ontario" | |
| 8469 | + ], | |
| 8470 | + "province": "ON", | |
| 8471 | + "status": "valide", | |
| 8472 | + "notes": "canada-expansion 2026-08-27 — probe live: 24 propriétés résidentielles hors QC (ON 24)" | |
| 8473 | + }, | |
| 8474 | + { | |
| 8475 | + "id": "pavelshaganenko", | |
| 8476 | + "name": "Pavel Shaganenko", | |
| 8477 | + "site": "https://realpavel.ca", | |
| 8478 | + "client_id": 1816, | |
| 8479 | + "listing_url": "https://realpavel.ca", | |
| 8480 | + "regions": [ | |
| 8481 | + "Ontario" | |
| 8482 | + ], | |
| 8483 | + "province": "ON", | |
| 8484 | + "status": "valide", | |
| 8485 | + "notes": "canada-expansion 2026-08-27 — probe live: 17 propriétés résidentielles hors QC (ON 17)" | |
| 8486 | + }, | |
| 8487 | + { | |
| 8488 | + "id": "gestionzagora", | |
| 8489 | + "name": "Gestion Zagora", | |
| 8490 | + "site": "", | |
| 8491 | + "client_id": 2007, | |
| 8492 | + "listing_url": "", | |
| 8493 | + "regions": [ | |
| 8494 | + "Alberta", | |
| 8495 | + "Ontario", | |
| 8496 | + "Nova Scotia" | |
| 8497 | + ], | |
| 8498 | + "province": "AB", | |
| 8499 | + "status": "valide", | |
| 8500 | + "notes": "canada-expansion 2026-08-27 — probe live: 14 propriétés résidentielles hors QC (AB 6, ON 4, NS 4)" | |
| 8501 | + }, | |
| 8502 | + { | |
| 8503 | + "id": "goldenfortuna", | |
| 8504 | + "name": "Golden Fortuna Inc.", | |
| 8505 | + "site": "", | |
| 8506 | + "client_id": 2502, | |
| 8507 | + "listing_url": "", | |
| 8508 | + "regions": [ | |
| 8509 | + "Ontario" | |
| 8510 | + ], | |
| 8511 | + "province": "ON", | |
| 8512 | + "status": "valide", | |
| 8513 | + "notes": "canada-expansion 2026-08-27 — probe live: 5 propriétés résidentielles hors QC (ON 5)" | |
| 8514 | + }, | |
| 8515 | + { | |
| 8516 | + "id": "propextheexpertsabltd", | |
| 8517 | + "name": "PROPEX-The property Experts AB Ltd", | |
| 8518 | + "site": "https://www.thepropex.ca", | |
| 8519 | + "client_id": 2515, | |
| 8520 | + "listing_url": "https://www.thepropex.ca", | |
| 8521 | + "regions": [ | |
| 8522 | + "Alberta" | |
| 8523 | + ], | |
| 8524 | + "province": "AB", | |
| 8525 | + "status": "valide", | |
| 8526 | + "notes": "canada-expansion 2026-08-27 — probe live: 3 propriétés résidentielles hors QC (AB 3)" | |
| 8527 | + }, | |
| 8528 | + { | |
| 8529 | + "id": "midtown", | |
| 8530 | + "name": "Mid-Town Management Group", | |
| 8531 | + "site": "https://www.midtownmg.com", | |
| 8532 | + "client_id": 2519, | |
| 8533 | + "listing_url": "https://www.midtownmg.com", | |
| 8534 | + "regions": [ | |
| 8535 | + "New Brunswick" | |
| 8536 | + ], | |
| 8537 | + "province": "NB", | |
| 8538 | + "status": "valide", | |
| 8539 | + "notes": "canada-expansion 2026-08-27 — probe live: 4 propriétés résidentielles hors QC (NB 4)" | |
| 8540 | + }, | |
| 8541 | + { | |
| 8542 | + "id": "filamentrealty", | |
| 8543 | + "name": "Filament Realty Management", | |
| 8544 | + "site": "https://www.filamentmanagement.ca", | |
| 8545 | + "client_id": 2523, | |
| 8546 | + "listing_url": "https://www.filamentmanagement.ca", | |
| 8547 | + "regions": [ | |
| 8548 | + "Ontario" | |
| 8549 | + ], | |
| 8550 | + "province": "ON", | |
| 8551 | + "status": "valide", | |
| 8552 | + "notes": "canada-expansion 2026-08-27 — probe live: 8 propriétés résidentielles hors QC (ON 8)" | |
| 8553 | + }, | |
| 8554 | + { | |
| 8555 | + "id": "springerofcompanies", | |
| 8556 | + "name": "Springer Group of Companies", | |
| 8557 | + "site": "https://www.springergroup.com", | |
| 8558 | + "client_id": 2549, | |
| 8559 | + "listing_url": "https://www.springergroup.com", | |
| 8560 | + "regions": [ | |
| 8561 | + "Ontario" | |
| 8562 | + ], | |
| 8563 | + "province": "ON", | |
| 8564 | + "status": "valide", | |
| 8565 | + "notes": "canada-expansion 2026-08-27 — probe live: 4 propriétés résidentielles hors QC (ON 4)" | |
| 8566 | + }, | |
| 8567 | + { | |
| 8568 | + "id": "3r", | |
| 8569 | + "name": "3R Property Management", | |
| 8570 | + "site": "https://www.3rproperties.com", | |
| 8571 | + "client_id": 2552, | |
| 8572 | + "listing_url": "https://www.3rproperties.com", | |
| 8573 | + "regions": [ | |
| 8574 | + "Ontario" | |
| 8575 | + ], | |
| 8576 | + "province": "ON", | |
| 8577 | + "status": "valide", | |
| 8578 | + "notes": "canada-expansion 2026-08-27 — probe live: 3 propriétés résidentielles hors QC (ON 3)" | |
| 8579 | + }, | |
| 8580 | + { | |
| 8581 | + "id": "niagarasuites", | |
| 8582 | + "name": "Niagara Suites", | |
| 8583 | + "site": "", | |
| 8584 | + "client_id": 2558, | |
| 8585 | + "listing_url": "", | |
| 8586 | + "regions": [ | |
| 8587 | + "Ontario" | |
| 8588 | + ], | |
| 8589 | + "province": "ON", | |
| 8590 | + "status": "valide", | |
| 8591 | + "notes": "canada-expansion 2026-08-27 — probe live: 13 propriétés résidentielles hors QC (ON 13)" | |
| 8395 | 8592 | } |
| 8396 | 8593 | ] |
| 8397 | 8594 | } |
| \ No newline at end of file | ||
modified
data/liftsystem_probe.jsonl
+68 −0
@@ -1141,3 +1141,71 @@ | ||
| 1141 | 1141 | {"client_id": 2495, "name": "Les Immeubles Logis Belanger", "website": "", "n": 2, "res": 2, "provinces": {"QC": 2}, "ts": "2026-08-27T20:13:33"} |
| 1142 | 1142 | {"client_id": 2497, "name": "Spire Development", "website": "www.spiredevelopment.ca", "n": 1, "res": 1, "provinces": {"BC": 1}, "ts": "2026-08-27T20:13:34"} |
| 1143 | 1143 | {"client_id": 2500, "name": "Coletara Developments", "website": "", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-27T20:13:35"} |
| 1144 | +{"client_id": 18, "name": "Hyde Park Properties Inc.", "website": "hydeparkinleaside.com", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:48:15"} | |
| 1145 | +{"client_id": 72, "name": "Rockwood Management Inc", "website": "rockwoodmanagement.com", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:48:25"} | |
| 1146 | +{"client_id": 75, "name": "Atlantic Living Property Management Services", "website": "goatlanticliving.com", "n": 1, "res": 1, "provinces": {"NS": 1}, "ts": "2026-08-28T04:48:25"} | |
| 1147 | +{"client_id": 77, "name": "Les Immeubles Cora Inc.", "website": "", "n": 1, "res": 1, "provinces": {"QC": 1}, "ts": "2026-08-28T04:48:26"} | |
| 1148 | +{"client_id": 112, "name": "Flatbook Corp.", "website": "", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:48:31"} | |
| 1149 | +{"client_id": 156, "name": "Casco Realty", "website": "cascoapts.ca", "n": 7, "res": 7, "provinces": {"QC": 7}, "ts": "2026-08-28T04:48:37"} | |
| 1150 | +{"client_id": 210, "name": "RIMAP", "website": "rimaphospitality.com", "n": 9, "res": 0, "provinces": {}, "ts": "2026-08-28T04:48:46"} | |
| 1151 | +{"client_id": 336, "name": "Rhapsody VIA123", "website": "via123.ca", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:49:08"} | |
| 1152 | +{"client_id": 351, "name": "Srgroup: S&R Seniors Living", "website": "srseniorsliving.ca", "n": 8, "res": 8, "provinces": {"ON": 8}, "ts": "2026-08-28T04:49:11"} | |
| 1153 | +{"client_id": 405, "name": "Richard Sancho", "website": "", "n": 1, "res": 1, "provinces": {"BC": 1}, "ts": "2026-08-28T04:49:21"} | |
| 1154 | +{"client_id": 467, "name": "Minto Corp Services (Investors)", "website": "mintoapartmentreit.com", "n": 28, "res": 28, "provinces": {"ON": 19, "BC": 1, "QC": 4, "AB": 4}, "ts": "2026-08-28T04:49:37"} | |
| 1155 | +{"client_id": 535, "name": "Alliance Properties", "website": "allianceproperties.ca", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:49:52"} | |
| 1156 | +{"client_id": 643, "name": "Sky View Suites", "website": "skyviewsuites.com", "n": 3, "res": 3, "provinces": {"ON": 3}, "ts": "2026-08-28T04:50:16"} | |
| 1157 | +{"client_id": 754, "name": "Kevington Building Corp", "website": "kevingtonbuilding.com", "n": 6, "res": 6, "provinces": {"BC": 6}, "ts": "2026-08-28T04:50:34"} | |
| 1158 | +{"client_id": 926, "name": "FBC Properties Inc", "website": "", "n": 2, "res": 2, "provinces": {"BC": 2}, "ts": "2026-08-28T04:51:05"} | |
| 1159 | +{"client_id": 949, "name": "Forthright Ventures Inc", "website": "forthrightventures.ca", "n": 17, "res": 17, "provinces": {"MB": 17}, "ts": "2026-08-28T04:51:11"} | |
| 1160 | +{"client_id": 970, "name": "Chambers Properties Inc", "website": "chambersproperties.ca", "n": 1, "res": 1, "provinces": {"BC": 1}, "ts": "2026-08-28T04:51:14"} | |
| 1161 | +{"client_id": 983, "name": "Abdellah Majd", "website": "", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:51:17"} | |
| 1162 | +{"client_id": 1005, "name": "Gammon International Real Estate Corporation", "website": "gammoninternational.com", "n": 1, "res": 1, "provinces": {"BC": 1}, "ts": "2026-08-28T04:51:20"} | |
| 1163 | +{"client_id": 1023, "name": "Yada Property Management LLC", "website": "yadaproperties.com", "n": 7, "res": 6, "provinces": {"DE": 6}, "ts": "2026-08-28T04:51:22"} | |
| 1164 | +{"client_id": 1059, "name": "Cosy Montreal Flats", "website": "", "n": 9, "res": 9, "provinces": {"QC": 9}, "ts": "2026-08-28T04:51:31"} | |
| 1165 | +{"client_id": 1085, "name": "Prestige Flats", "website": "prestigeflats.com", "n": 1, "res": 1, "provinces": {"QC": 1}, "ts": "2026-08-28T04:51:36"} | |
| 1166 | +{"client_id": 1158, "name": "Cape Group", "website": "capegroup.ca", "n": 2, "res": 2, "provinces": {"BC": 2}, "ts": "2026-08-28T04:51:47"} | |
| 1167 | +{"client_id": 1190, "name": "Rolland Lattouf", "website": "", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:51:51"} | |
| 1168 | +{"client_id": 1197, "name": "Path Real Estate Team", "website": "beginyourpath.com", "n": 6, "res": 6, "provinces": {"ON": 6}, "ts": "2026-08-28T04:51:51"} | |
| 1169 | +{"client_id": 1198, "name": "(NEW WEBSITE) Drewlo Holdings2", "website": "", "n": 4, "res": 4, "provinces": {"ON": 4}, "ts": "2026-08-28T04:51:51"} | |
| 1170 | +{"client_id": 1250, "name": "Casa San Marcos", "website": "", "n": 1, "res": 1, "provinces": {"QC": 1}, "ts": "2026-08-28T04:52:00"} | |
| 1171 | +{"client_id": 1261, "name": "Olymbec Investments Inc.", "website": "olymbec.com", "n": 2, "res": 0, "provinces": {}, "ts": "2026-08-28T04:52:01"} | |
| 1172 | +{"client_id": 1281, "name": "North American Development Group", "website": "iluminaparkplace.com", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:52:05"} | |
| 1173 | +{"client_id": 1289, "name": "Onaxin", "website": "", "n": 2, "res": 2, "provinces": {"QC": 2}, "ts": "2026-08-28T04:52:07"} | |
| 1174 | +{"client_id": 1295, "name": "Minerva Realty Group", "website": "minervarealty.ca", "n": 1, "res": 1, "provinces": {"BC": 1}, "ts": "2026-08-28T04:52:08"} | |
| 1175 | +{"client_id": 1388, "name": "Dremetsikas Developments Inc", "website": "ladonariverapartments.ca", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:52:30"} | |
| 1176 | +{"client_id": 1391, "name": "Remax Urban Toronto Team Realty Inc", "website": "skrealtytoronto.ca", "n": 24, "res": 24, "provinces": {"ON": 24}, "ts": "2026-08-28T04:52:30"} | |
| 1177 | +{"client_id": 1445, "name": "Realtegic Management Solutions", "website": "realtegicmgmt.net", "n": 1, "res": 1, "provinces": {"AB": 1}, "ts": "2026-08-28T04:52:41"} | |
| 1178 | +{"client_id": 1446, "name": "Jake Steinman", "website": "", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:52:42"} | |
| 1179 | +{"client_id": 1585, "name": "Domania MGMT", "website": "domania.ca/alouer", "n": 1, "res": 1, "provinces": {"QC": 1}, "ts": "2026-08-28T04:53:15"} | |
| 1180 | +{"client_id": 1624, "name": "ESPACE PROPERTIES INC.", "website": "", "n": 3, "res": 3, "provinces": {"QC": 3}, "ts": "2026-08-28T04:53:28"} | |
| 1181 | +{"client_id": 1746, "name": "Sterling Karamar", "website": "", "n": 55, "res": 55, "provinces": {"ON": 55}, "ts": "2026-08-28T04:53:59"} | |
| 1182 | +{"client_id": 1780, "name": "Ranjoy Sales & Leasing Ltd c/o Genesis", "website": "theprestigewinnipeg.ca", "n": 1, "res": 1, "provinces": {"MB": 1}, "ts": "2026-08-28T04:54:08"} | |
| 1183 | +{"client_id": 1816, "name": "Pavel Shaganenko", "website": "realpavel.ca", "n": 17, "res": 17, "provinces": {"ON": 17}, "ts": "2026-08-28T04:54:17"} | |
| 1184 | +{"client_id": 1821, "name": "Gab Sebag", "website": "", "n": 1, "res": 0, "provinces": {}, "ts": "2026-08-28T04:54:18"} | |
| 1185 | +{"client_id": 1941, "name": "YD Citadel LP", "website": "", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:54:52"} | |
| 1186 | +{"client_id": 1968, "name": "M. Schiketanz Real Estate", "website": "www.schiketanz.ca", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:54:59"} | |
| 1187 | +{"client_id": 2007, "name": "Gestion Zagora", "website": "", "n": 48, "res": 48, "provinces": {"QC": 29, "FL": 1, "AB": 6, "ON": 4, "NS": 4}, "ts": "2026-08-28T04:55:10"} | |
| 1188 | +{"client_id": 2154, "name": "Built by Aryze, Managed by Sanpra", "website": "https://aryze.ca/", "n": 1, "res": 1, "provinces": {"BC": 1}, "ts": "2026-08-28T04:55:47"} | |
| 1189 | +{"client_id": 2211, "name": "Meyers Group 3 Inc", "website": "", "n": 1, "res": 0, "provinces": {}, "ts": "2026-08-28T04:56:00"} | |
| 1190 | +{"client_id": 2443, "name": "Nova Investment Group", "website": "", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:57:01"} | |
| 1191 | +{"client_id": 2491, "name": "Corcoran Horizon Realty", "website": "www.corcoranhorizon.com", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:57:13"} | |
| 1192 | +{"client_id": 2502, "name": "Golden Fortuna Inc.", "website": "", "n": 5, "res": 5, "provinces": {"ON": 5}, "ts": "2026-08-28T04:57:15"} | |
| 1193 | +{"client_id": 2504, "name": "Windmill Developments", "website": "", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:57:16"} | |
| 1194 | +{"client_id": 2510, "name": "Gestions Fortex Inc.", "website": "", "n": 2, "res": 2, "provinces": {"QC": 2}, "ts": "2026-08-28T04:57:18"} | |
| 1195 | +{"client_id": 2511, "name": "ORKO Gestion", "website": "orkogestion.ca", "n": 1, "res": 1, "provinces": {"QC": 1}, "ts": "2026-08-28T04:57:19"} | |
| 1196 | +{"client_id": 2515, "name": "PROPEX-The property Experts AB Ltd", "website": "www.thepropex.ca", "n": 3, "res": 3, "provinces": {"AB": 3}, "ts": "2026-08-28T04:57:20"} | |
| 1197 | +{"client_id": 2519, "name": "Mid-Town Management Group", "website": "www.midtownmg.com", "n": 4, "res": 4, "provinces": {"NB": 4}, "ts": "2026-08-28T04:57:22"} | |
| 1198 | +{"client_id": 2523, "name": "Filament Realty Management", "website": "www.filamentmanagement.ca", "n": 8, "res": 8, "provinces": {"ON": 8}, "ts": "2026-08-28T04:57:23"} | |
| 1199 | +{"client_id": 2531, "name": "Peak Property Management", "website": "www.finchliving.ca", "n": 1, "res": 1, "provinces": {"NS": 1}, "ts": "2026-08-28T04:57:26"} | |
| 1200 | +{"client_id": 2532, "name": "Action Realty", "website": "", "n": 9, "res": 9, "provinces": {"QC": 9}, "ts": "2026-08-28T04:57:27"} | |
| 1201 | +{"client_id": 2533, "name": "Dona Management", "website": "", "n": 12, "res": 12, "provinces": {"QC": 12}, "ts": "2026-08-28T04:57:27"} | |
| 1202 | +{"client_id": 2539, "name": "Lakeview Homes", "website": "themixonrobson.com", "n": 1, "res": 1, "provinces": {"BC": 1}, "ts": "2026-08-28T04:57:30"} | |
| 1203 | +{"client_id": 2541, "name": "GBS Developments", "website": "", "n": 1, "res": 1, "provinces": {"AB": 1}, "ts": "2026-08-28T04:57:31"} | |
| 1204 | +{"client_id": 2542, "name": "Campus Gate Residences", "website": "campusgate.ca", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:57:31"} | |
| 1205 | +{"client_id": 2547, "name": "ICM Property Group", "website": "www.icmpropertygroup.com", "n": 1, "res": 1, "provinces": {"AB": 1}, "ts": "2026-08-28T04:57:33"} | |
| 1206 | +{"client_id": 2548, "name": "White Birch for 1485 Fir Street Project LP c/o Oviedo Properties", "website": "https://oviedoproperties.com/", "n": 1, "res": 1, "provinces": {"BC": 1}, "ts": "2026-08-28T04:57:33"} | |
| 1207 | +{"client_id": 2549, "name": "Springer Group of Companies", "website": "www.springergroup.com", "n": 4, "res": 4, "provinces": {"ON": 4}, "ts": "2026-08-28T04:57:34"} | |
| 1208 | +{"client_id": 2552, "name": "3R Property Management", "website": "www.3rproperties.com", "n": 3, "res": 3, "provinces": {"ON": 3}, "ts": "2026-08-28T04:57:35"} | |
| 1209 | +{"client_id": 2554, "name": "3M Asset Management Ltd.", "website": "3md.ca", "n": 1, "res": 1, "provinces": {"AB": 1}, "ts": "2026-08-28T04:57:36"} | |
| 1210 | +{"client_id": 2555, "name": "neighbours", "website": "neighbours.org", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-28T04:57:36"} | |
| 1211 | +{"client_id": 2558, "name": "Niagara Suites", "website": "", "n": 13, "res": 13, "provinces": {"ON": 13}, "ts": "2026-08-28T04:57:37"} | |
modified
data/sources.json
+990 −1
@@ -1,6 +1,17 @@ | ||
| 1 | 1 | { |
| 2 | − "_comment": "Rent-Ka source registry — 674 rental sources for Canada outside Québec (national expansion 2026-08-27). The real on/off switch is the connector's `disabled` class attribute; `status` here is documentary. One entry per source_id (see rentka/connectors/).", | |
| 2 | + "_comment": "Rent-Ka source registry — 690 rental sources for Canada outside Québec (national expansion 2026-08-27). The real on/off switch is the connector's `disabled` class attribute; `status` here is documentary. One entry per source_id (see rentka/connectors/).", | |
| 3 | 3 | "sources": [ |
| 4 | + { | |
| 5 | + "id": "realtor_ca", | |
| 6 | + "name": "REALTOR.ca (broker listings)", | |
| 7 | + "url": "https://www.realtor.ca", | |
| 8 | + "listing_url": "https://www.realtor.ca/map#TransactionTypeId=3", | |
| 9 | + "sectors": "All provinces except Québec", | |
| 10 | + "connector": "realtor_ca", | |
| 11 | + "status": "actif", | |
| 12 | + "region": "Canada (outside Québec)", | |
| 13 | + "notes": "CREA MLS rental listings published by real-estate brokers — internal PropertySearch_Post API via Scrapfly ASP, recursive quad-split (600 records/area cap). Added 2026-08-28." | |
| 14 | + }, | |
| 4 | 15 | { |
| 5 | 16 | "id": "cogir", |
| 6 | 17 | "name": "Cogir Immobilier", |
@@ -8678,6 +8689,984 @@ | ||
| 8678 | 8689 | "status": "actif", |
| 8679 | 8690 | "region": "Ontario / Alberta / Nova Scotia — LiftSystem", |
| 8680 | 8691 | "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2471" |
| 8692 | + }, | |
| 8693 | + { | |
| 8694 | + "id": "lift_srsrseniorsliving", | |
| 8695 | + "name": "Srgroup: S&R Seniors Living", | |
| 8696 | + "url": "https://srseniorsliving.ca", | |
| 8697 | + "listing_url": "https://srseniorsliving.ca", | |
| 8698 | + "sectors": [ | |
| 8699 | + "Ontario" | |
| 8700 | + ], | |
| 8701 | + "connector": "lift_srsrseniorsliving", | |
| 8702 | + "status": "actif", | |
| 8703 | + "region": "Ontario — LiftSystem", | |
| 8704 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 351" | |
| 8705 | + }, | |
| 8706 | + { | |
| 8707 | + "id": "lift_skyviewsuites", | |
| 8708 | + "name": "Sky View Suites", | |
| 8709 | + "url": "https://skyviewsuites.com", | |
| 8710 | + "listing_url": "https://skyviewsuites.com", | |
| 8711 | + "sectors": [ | |
| 8712 | + "Ontario" | |
| 8713 | + ], | |
| 8714 | + "connector": "lift_skyviewsuites", | |
| 8715 | + "status": "actif", | |
| 8716 | + "region": "Ontario — LiftSystem", | |
| 8717 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 643" | |
| 8718 | + }, | |
| 8719 | + { | |
| 8720 | + "id": "lift_kevingtonbuildingcorp", | |
| 8721 | + "name": "Kevington Building Corp", | |
| 8722 | + "url": "https://kevingtonbuilding.com", | |
| 8723 | + "listing_url": "https://kevingtonbuilding.com", | |
| 8724 | + "sectors": [ | |
| 8725 | + "British Columbia" | |
| 8726 | + ], | |
| 8727 | + "connector": "lift_kevingtonbuildingcorp", | |
| 8728 | + "status": "actif", | |
| 8729 | + "region": "British Columbia — LiftSystem", | |
| 8730 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 754" | |
| 8731 | + }, | |
| 8732 | + { | |
| 8733 | + "id": "lift_forthrightventures", | |
| 8734 | + "name": "Forthright Ventures Inc", | |
| 8735 | + "url": "https://forthrightventures.ca", | |
| 8736 | + "listing_url": "https://forthrightventures.ca", | |
| 8737 | + "sectors": [ | |
| 8738 | + "Manitoba" | |
| 8739 | + ], | |
| 8740 | + "connector": "lift_forthrightventures", | |
| 8741 | + "status": "actif", | |
| 8742 | + "region": "Manitoba — LiftSystem", | |
| 8743 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 949" | |
| 8744 | + }, | |
| 8745 | + { | |
| 8746 | + "id": "lift_pathrealestateteam", | |
| 8747 | + "name": "Path Real Estate Team", | |
| 8748 | + "url": "https://beginyourpath.com", | |
| 8749 | + "listing_url": "https://beginyourpath.com", | |
| 8750 | + "sectors": [ | |
| 8751 | + "Ontario" | |
| 8752 | + ], | |
| 8753 | + "connector": "lift_pathrealestateteam", | |
| 8754 | + "status": "actif", | |
| 8755 | + "region": "Ontario — LiftSystem", | |
| 8756 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 1197" | |
| 8757 | + }, | |
| 8758 | + { | |
| 8759 | + "id": "lift_remaxurbantorontoteamrea", | |
| 8760 | + "name": "Remax Urban Toronto Team Realty Inc", | |
| 8761 | + "url": "https://skrealtytoronto.ca", | |
| 8762 | + "listing_url": "https://skrealtytoronto.ca", | |
| 8763 | + "sectors": [ | |
| 8764 | + "Ontario" | |
| 8765 | + ], | |
| 8766 | + "connector": "lift_remaxurbantorontoteamrea", | |
| 8767 | + "status": "actif", | |
| 8768 | + "region": "Ontario — LiftSystem", | |
| 8769 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 1391" | |
| 8770 | + }, | |
| 8771 | + { | |
| 8772 | + "id": "lift_pavelshaganenko", | |
| 8773 | + "name": "Pavel Shaganenko", | |
| 8774 | + "url": "https://realpavel.ca", | |
| 8775 | + "listing_url": "https://realpavel.ca", | |
| 8776 | + "sectors": [ | |
| 8777 | + "Ontario" | |
| 8778 | + ], | |
| 8779 | + "connector": "lift_pavelshaganenko", | |
| 8780 | + "status": "actif", | |
| 8781 | + "region": "Ontario — LiftSystem", | |
| 8782 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 1816" | |
| 8783 | + }, | |
| 8784 | + { | |
| 8785 | + "id": "lift_gestionzagora", | |
| 8786 | + "name": "Gestion Zagora", | |
| 8787 | + "url": "", | |
| 8788 | + "listing_url": "", | |
| 8789 | + "sectors": [ | |
| 8790 | + "Alberta", | |
| 8791 | + "Ontario", | |
| 8792 | + "Nova Scotia" | |
| 8793 | + ], | |
| 8794 | + "connector": "lift_gestionzagora", | |
| 8795 | + "status": "actif", | |
| 8796 | + "region": "Alberta / Ontario / Nova Scotia — LiftSystem", | |
| 8797 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2007" | |
| 8798 | + }, | |
| 8799 | + { | |
| 8800 | + "id": "lift_goldenfortuna", | |
| 8801 | + "name": "Golden Fortuna Inc.", | |
| 8802 | + "url": "", | |
| 8803 | + "listing_url": "", | |
| 8804 | + "sectors": [ | |
| 8805 | + "Ontario" | |
| 8806 | + ], | |
| 8807 | + "connector": "lift_goldenfortuna", | |
| 8808 | + "status": "actif", | |
| 8809 | + "region": "Ontario — LiftSystem", | |
| 8810 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2502" | |
| 8811 | + }, | |
| 8812 | + { | |
| 8813 | + "id": "lift_propextheexpertsabltd", | |
| 8814 | + "name": "PROPEX-The property Experts AB Ltd", | |
| 8815 | + "url": "https://www.thepropex.ca", | |
| 8816 | + "listing_url": "https://www.thepropex.ca", | |
| 8817 | + "sectors": [ | |
| 8818 | + "Alberta" | |
| 8819 | + ], | |
| 8820 | + "connector": "lift_propextheexpertsabltd", | |
| 8821 | + "status": "actif", | |
| 8822 | + "region": "Alberta — LiftSystem", | |
| 8823 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2515" | |
| 8824 | + }, | |
| 8825 | + { | |
| 8826 | + "id": "lift_midtown", | |
| 8827 | + "name": "Mid-Town Management Group", | |
| 8828 | + "url": "https://www.midtownmg.com", | |
| 8829 | + "listing_url": "https://www.midtownmg.com", | |
| 8830 | + "sectors": [ | |
| 8831 | + "New Brunswick" | |
| 8832 | + ], | |
| 8833 | + "connector": "lift_midtown", | |
| 8834 | + "status": "actif", | |
| 8835 | + "region": "New Brunswick — LiftSystem", | |
| 8836 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2519" | |
| 8837 | + }, | |
| 8838 | + { | |
| 8839 | + "id": "lift_filamentrealty", | |
| 8840 | + "name": "Filament Realty Management", | |
| 8841 | + "url": "https://www.filamentmanagement.ca", | |
| 8842 | + "listing_url": "https://www.filamentmanagement.ca", | |
| 8843 | + "sectors": [ | |
| 8844 | + "Ontario" | |
| 8845 | + ], | |
| 8846 | + "connector": "lift_filamentrealty", | |
| 8847 | + "status": "actif", | |
| 8848 | + "region": "Ontario — LiftSystem", | |
| 8849 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2523" | |
| 8850 | + }, | |
| 8851 | + { | |
| 8852 | + "id": "lift_springerofcompanies", | |
| 8853 | + "name": "Springer Group of Companies", | |
| 8854 | + "url": "https://www.springergroup.com", | |
| 8855 | + "listing_url": "https://www.springergroup.com", | |
| 8856 | + "sectors": [ | |
| 8857 | + "Ontario" | |
| 8858 | + ], | |
| 8859 | + "connector": "lift_springerofcompanies", | |
| 8860 | + "status": "actif", | |
| 8861 | + "region": "Ontario — LiftSystem", | |
| 8862 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2549" | |
| 8863 | + }, | |
| 8864 | + { | |
| 8865 | + "id": "lift_3r", | |
| 8866 | + "name": "3R Property Management", | |
| 8867 | + "url": "https://www.3rproperties.com", | |
| 8868 | + "listing_url": "https://www.3rproperties.com", | |
| 8869 | + "sectors": [ | |
| 8870 | + "Ontario" | |
| 8871 | + ], | |
| 8872 | + "connector": "lift_3r", | |
| 8873 | + "status": "actif", | |
| 8874 | + "region": "Ontario — LiftSystem", | |
| 8875 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2552" | |
| 8876 | + }, | |
| 8877 | + { | |
| 8878 | + "id": "lift_niagarasuites", | |
| 8879 | + "name": "Niagara Suites", | |
| 8880 | + "url": "", | |
| 8881 | + "listing_url": "", | |
| 8882 | + "sectors": [ | |
| 8883 | + "Ontario" | |
| 8884 | + ], | |
| 8885 | + "connector": "lift_niagarasuites", | |
| 8886 | + "status": "actif", | |
| 8887 | + "region": "Ontario — LiftSystem", | |
| 8888 | + "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2558" | |
| 8889 | + }, | |
| 8890 | + { | |
| 8891 | + "id": "bld_refinity", | |
| 8892 | + "name": "Refinity Homes", | |
| 8893 | + "url": "https://refinity.managebuilding.com/Resident/public/home", | |
| 8894 | + "listing_url": "https://refinity.managebuilding.com/Resident/public/rentals", | |
| 8895 | + "sectors": "Vancouver, Surrey, Richmond, Burnaby, Langley", | |
| 8896 | + "connector": "bld_refinity", | |
| 8897 | + "status": "actif", | |
| 8898 | + "region": "Canada (outside Québec)", | |
| 8899 | + "notes": "canada-expansion 2026-08-28 — buildium — 7 annonces BC (Lower Mainland) le 2026-08-28 ; mise en page moderne" | |
| 8900 | + }, | |
| 8901 | + { | |
| 8902 | + "id": "bld_macpherson", | |
| 8903 | + "name": "MacPherson Real Estate Ltd.", | |
| 8904 | + "url": "https://cbmre.managebuilding.com/Resident/public/home", | |
| 8905 | + "listing_url": "https://cbmre.managebuilding.com/Resident/public/rentals", | |
| 8906 | + "sectors": "Vancouver, Burnaby, Coquitlam, New Westminster", | |
| 8907 | + "connector": "bld_macpherson", | |
| 8908 | + "status": "actif", | |
| 8909 | + "region": "Canada (outside Québec)", | |
| 8910 | + "notes": "canada-expansion 2026-08-28 — buildium — 6 annonces BC le 2026-08-28 ; Coldwell Banker MacPherson, Coquitlam" | |
| 8911 | + }, | |
| 8912 | + { | |
| 8913 | + "id": "bld_rlpklein", | |
| 8914 | + "name": "Royal LePage Westside Klein Group", | |
| 8915 | + "url": "https://rlpkleingroup.managebuilding.com/Resident/public/home", | |
| 8916 | + "listing_url": "https://rlpkleingroup.managebuilding.com/Resident/public/rentals", | |
| 8917 | + "sectors": "Vancouver", | |
| 8918 | + "connector": "bld_rlpklein", | |
| 8919 | + "status": "actif", | |
| 8920 | + "region": "Canada (outside Québec)", | |
| 8921 | + "notes": "canada-expansion 2026-08-28 — buildium — 3 annonces Vancouver le 2026-08-28" | |
| 8922 | + }, | |
| 8923 | + { | |
| 8924 | + "id": "bld_pennylane", | |
| 8925 | + "name": "Penny Lane Property Management", | |
| 8926 | + "url": "https://pennylanepropertymanagement.managebuilding.com/Resident/public/home", | |
| 8927 | + "listing_url": "https://pennylanepropertymanagement.managebuilding.com/Resident/public/rentals", | |
| 8928 | + "sectors": "Victoria, Courtenay, Campbell River", | |
| 8929 | + "connector": "bld_pennylane", | |
| 8930 | + "status": "actif", | |
| 8931 | + "region": "Canada (outside Québec)", | |
| 8932 | + "notes": "canada-expansion 2026-08-28 — buildium — 14 annonces BC (île de Vancouver) le 2026-08-28" | |
| 8933 | + }, | |
| 8934 | + { | |
| 8935 | + "id": "bld_jksrealty", | |
| 8936 | + "name": "JKS Realty & Property Management", | |
| 8937 | + "url": "https://jksrealty.managebuilding.com/Resident/public/home", | |
| 8938 | + "listing_url": "https://jksrealty.managebuilding.com/Resident/public/rentals", | |
| 8939 | + "sectors": "Victoria, Langford", | |
| 8940 | + "connector": "bld_jksrealty", | |
| 8941 | + "status": "actif", | |
| 8942 | + "region": "Canada (outside Québec)", | |
| 8943 | + "notes": "canada-expansion 2026-08-28 — buildium — 10 annonces Victoria/Langford le 2026-08-28" | |
| 8944 | + }, | |
| 8945 | + { | |
| 8946 | + "id": "bld_westurban", | |
| 8947 | + "name": "WestUrban Properties Management Ltd.", | |
| 8948 | + "url": "https://westurban.managebuilding.com/Resident/public/home", | |
| 8949 | + "listing_url": "https://westurban.managebuilding.com/Resident/public/rentals", | |
| 8950 | + "sectors": "Victoria, Duncan, Nanaimo, Kelowna, Salmon Arm, Campbell River, Cranbrook, Vernon, Abbotsford, Winnipeg, Calgary", | |
| 8951 | + "connector": "bld_westurban", | |
| 8952 | + "status": "actif", | |
| 8953 | + "region": "Canada (outside Québec)", | |
| 8954 | + "notes": "canada-expansion 2026-08-28 — buildium — 79 annonces le 2026-08-28 (BC 67, MB 3, AB 2, autres 7) — promoteur-gestionnaire multi-provinces, gros volume" | |
| 8955 | + }, | |
| 8956 | + { | |
| 8957 | + "id": "bld_pqvi", | |
| 8958 | + "name": "Pacific Quorum Vancouver Island Properties Inc.", | |
| 8959 | + "url": "https://pqvi.managebuilding.com/Resident/public/home", | |
| 8960 | + "listing_url": "https://pqvi.managebuilding.com/Resident/public/rentals", | |
| 8961 | + "sectors": "Victoria, Courtenay, Campbell River, Parksville, Comox, Port Alberni", | |
| 8962 | + "connector": "bld_pqvi", | |
| 8963 | + "status": "actif", | |
| 8964 | + "region": "Canada (outside Québec)", | |
| 8965 | + "notes": "canada-expansion 2026-08-28 — buildium — 22 annonces BC (île de Vancouver) le 2026-08-28" | |
| 8966 | + }, | |
| 8967 | + { | |
| 8968 | + "id": "bld_pqrn", | |
| 8969 | + "name": "Pacific Quorum (Vancouver Island) — portail locations pqrn", | |
| 8970 | + "url": "https://pqrn.managebuilding.com/Resident/public/home", | |
| 8971 | + "listing_url": "https://pqrn.managebuilding.com/Resident/public/rentals", | |
| 8972 | + "sectors": "Nanaimo, Victoria, Coquitlam", | |
| 8973 | + "connector": "bld_pqrn", | |
| 8974 | + "status": "actif", | |
| 8975 | + "region": "Canada (outside Québec)", | |
| 8976 | + "notes": "canada-expansion 2026-08-28 — buildium — 23 annonces BC le 2026-08-28 ; deuxième portail Pacific Quorum, inventaire distinct de pqvi (dédupliquer par adresse au besoin)" | |
| 8977 | + }, | |
| 8978 | + { | |
| 8979 | + "id": "bld_bishops", | |
| 8980 | + "name": "Bishops Realty Inc.", | |
| 8981 | + "url": "https://bishopsrealtyinc.managebuilding.com/Resident/public/home", | |
| 8982 | + "listing_url": "https://bishopsrealtyinc.managebuilding.com/Resident/public/rentals", | |
| 8983 | + "sectors": "Kelowna, West Kelowna", | |
| 8984 | + "connector": "bld_bishops", | |
| 8985 | + "status": "actif", | |
| 8986 | + "region": "Canada (outside Québec)", | |
| 8987 | + "notes": "canada-expansion 2026-08-28 — buildium — 12 annonces Kelowna/West Kelowna le 2026-08-28" | |
| 8988 | + }, | |
| 8989 | + { | |
| 8990 | + "id": "bld_pqokanagan", | |
| 8991 | + "name": "Pacific Quorum (Okanagan) Properties Inc", | |
| 8992 | + "url": "https://pqokanagan.managebuilding.com/Resident/public/home", | |
| 8993 | + "listing_url": "https://pqokanagan.managebuilding.com/Resident/public/rentals", | |
| 8994 | + "sectors": "Kelowna, West Kelowna, Penticton, Salmon Arm, Sicamous", | |
| 8995 | + "connector": "bld_pqokanagan", | |
| 8996 | + "status": "actif", | |
| 8997 | + "region": "Canada (outside Québec)", | |
| 8998 | + "notes": "canada-expansion 2026-08-28 — buildium — 8 annonces Okanagan le 2026-08-28" | |
| 8999 | + }, | |
| 9000 | + { | |
| 9001 | + "id": "bld_highpoint", | |
| 9002 | + "name": "Highpoint Realty Ltd.", | |
| 9003 | + "url": "https://highpointrealtyltd.managebuilding.com/Resident/public/home", | |
| 9004 | + "listing_url": "https://highpointrealtyltd.managebuilding.com/Resident/public/rentals", | |
| 9005 | + "sectors": "Kelowna", | |
| 9006 | + "connector": "bld_highpoint", | |
| 9007 | + "status": "actif", | |
| 9008 | + "region": "Canada (outside Québec)", | |
| 9009 | + "notes": "canada-expansion 2026-08-28 — buildium — 11 annonces Kelowna le 2026-08-28 (secteur UBCO/Academy Way)" | |
| 9010 | + }, | |
| 9011 | + { | |
| 9012 | + "id": "bld_mvk", | |
| 9013 | + "name": "MVK Rental", | |
| 9014 | + "url": "https://mvkrental.ca", | |
| 9015 | + "listing_url": "https://mvkrental.managebuilding.com/Resident/public/rentals", | |
| 9016 | + "sectors": "Kamloops, Vernon, Merritt, Kelowna", | |
| 9017 | + "connector": "bld_mvk", | |
| 9018 | + "status": "actif", | |
| 9019 | + "region": "Canada (outside Québec)", | |
| 9020 | + "notes": "canada-expansion 2026-08-28 — buildium — 12 annonces BC (Kamloops 7, Vernon 5) le 2026-08-28" | |
| 9021 | + }, | |
| 9022 | + { | |
| 9023 | + "id": "bld_greenstone", | |
| 9024 | + "name": "Greenstone Properties", | |
| 9025 | + "url": "https://greenstoneproperties.managebuilding.com/Resident/public/home", | |
| 9026 | + "listing_url": "https://greenstoneproperties.managebuilding.com/Resident/public/rentals", | |
| 9027 | + "sectors": "Kamloops, Pouce Coupe", | |
| 9028 | + "connector": "bld_greenstone", | |
| 9029 | + "status": "actif", | |
| 9030 | + "region": "Canada (outside Québec)", | |
| 9031 | + "notes": "canada-expansion 2026-08-28 — buildium — 1 annonce BC (Pouce Coupe) le 2026-08-28 ; gestionnaire basé à Kamloops, petit inventaire variable" | |
| 9032 | + }, | |
| 9033 | + { | |
| 9034 | + "id": "bld_c21energy", | |
| 9035 | + "name": "Century 21 Energy Realty", | |
| 9036 | + "url": "https://c21energypropertymanagement.managebuilding.com/Resident/public/home", | |
| 9037 | + "listing_url": "https://c21energypropertymanagement.managebuilding.com/Resident/public/rentals", | |
| 9038 | + "sectors": "Prince George, Fort St. John, Chetwynd, Quesnel, Taylor", | |
| 9039 | + "connector": "bld_c21energy", | |
| 9040 | + "status": "actif", | |
| 9041 | + "region": "Canada (outside Québec)", | |
| 9042 | + "notes": "canada-expansion 2026-08-28 — buildium — 48 cartes BC (nord de la BC) le 2026-08-28, dont quelques stationnements à filtrer" | |
| 9043 | + }, | |
| 9044 | + { | |
| 9045 | + "id": "bld_nestpg", | |
| 9046 | + "name": "Nest Property Management and Real Estate Services Ltd.", | |
| 9047 | + "url": "https://nestrealtyltd.com", | |
| 9048 | + "listing_url": "https://nestpg.managebuilding.com/Resident/public/rentals", | |
| 9049 | + "sectors": "Prince George, Vancouver, Burnaby, Kitimat, Prince Rupert, Terrace, Surrey", | |
| 9050 | + "connector": "bld_nestpg", | |
| 9051 | + "status": "actif", | |
| 9052 | + "region": "Canada (outside Québec)", | |
| 9053 | + "notes": "canada-expansion 2026-08-28 — buildium — 76 annonces BC le 2026-08-28 (Prince George + Lower Mainland + nord-ouest BC) — gros volume" | |
| 9054 | + }, | |
| 9055 | + { | |
| 9056 | + "id": "bld_kidd", | |
| 9057 | + "name": "Kidd Management Ltd (KG Property)", | |
| 9058 | + "url": "https://kgproperty.managebuilding.com/Resident/public/home", | |
| 9059 | + "listing_url": "https://kgproperty.managebuilding.com/Resident/public/rentals", | |
| 9060 | + "sectors": "Prince George", | |
| 9061 | + "connector": "bld_kidd", | |
| 9062 | + "status": "actif", | |
| 9063 | + "region": "Canada (outside Québec)", | |
| 9064 | + "notes": "canada-expansion 2026-08-28 — buildium — 9 annonces Prince George le 2026-08-28" | |
| 9065 | + }, | |
| 9066 | + { | |
| 9067 | + "id": "bld_c21coastal", | |
| 9068 | + "name": "Century 21 Coastal Realty Property Management", | |
| 9069 | + "url": "https://c21.managebuilding.com/Resident/public/home", | |
| 9070 | + "listing_url": "https://c21.managebuilding.com/Resident/public/rentals", | |
| 9071 | + "sectors": "Abbotsford, Maple Ridge, Surrey, Richmond, Mission, Chilliwack, Coquitlam", | |
| 9072 | + "connector": "bld_c21coastal", | |
| 9073 | + "status": "actif", | |
| 9074 | + "region": "Canada (outside Québec)", | |
| 9075 | + "notes": "canada-expansion 2026-08-28 — buildium — 23 annonces BC (Fraser Valley) le 2026-08-28" | |
| 9076 | + }, | |
| 9077 | + { | |
| 9078 | + "id": "bld_homelifecv", | |
| 9079 | + "name": "Homelife Advantage Realty Ltd", | |
| 9080 | + "url": "https://homelifeadvantagecv.managebuilding.com/Resident/public/home", | |
| 9081 | + "listing_url": "https://homelifeadvantagecv.managebuilding.com/Resident/public/rentals", | |
| 9082 | + "sectors": "Chilliwack, Surrey", | |
| 9083 | + "connector": "bld_homelifecv", | |
| 9084 | + "status": "actif", | |
| 9085 | + "region": "Canada (outside Québec)", | |
| 9086 | + "notes": "canada-expansion 2026-08-28 — buildium — 6 annonces BC le 2026-08-28" | |
| 9087 | + }, | |
| 9088 | + { | |
| 9089 | + "id": "bld_cbexecutives", | |
| 9090 | + "name": "Coldwell Banker Executives Realty", | |
| 9091 | + "url": "https://executives-realty.managebuilding.com/Resident/public/home", | |
| 9092 | + "listing_url": "https://executives-realty.managebuilding.com/Resident/public/rentals", | |
| 9093 | + "sectors": "Vernon, Revelstoke", | |
| 9094 | + "connector": "bld_cbexecutives", | |
| 9095 | + "status": "actif", | |
| 9096 | + "region": "Canada (outside Québec)", | |
| 9097 | + "notes": "canada-expansion 2026-08-28 — buildium — 3 annonces BC (Revelstoke 2, Vernon 1) le 2026-08-28" | |
| 9098 | + }, | |
| 9099 | + { | |
| 9100 | + "id": "bld_synterra", | |
| 9101 | + "name": "Synterra Realty", | |
| 9102 | + "url": "https://synterrarealty.managebuilding.com/Resident/public/home", | |
| 9103 | + "listing_url": "https://synterrarealty.managebuilding.com/Resident/public/rentals", | |
| 9104 | + "sectors": "Calgary, Airdrie", | |
| 9105 | + "connector": "bld_synterra", | |
| 9106 | + "status": "actif", | |
| 9107 | + "region": "Canada (outside Québec)", | |
| 9108 | + "notes": "canada-expansion 2026-08-28 — buildium — 8 annonces AB (Calgary 6, Airdrie 2) le 2026-08-28" | |
| 9109 | + }, | |
| 9110 | + { | |
| 9111 | + "id": "bld_citysearch", | |
| 9112 | + "name": "Citysearch Rental Network Inc.", | |
| 9113 | + "url": "https://citysearchrental.managebuilding.com/Resident/public/home", | |
| 9114 | + "listing_url": "https://citysearchrental.managebuilding.com/Resident/public/rentals", | |
| 9115 | + "sectors": "Calgary", | |
| 9116 | + "connector": "bld_citysearch", | |
| 9117 | + "status": "actif", | |
| 9118 | + "region": "Canada (outside Québec)", | |
| 9119 | + "notes": "canada-expansion 2026-08-28 — buildium — 16 annonces Calgary le 2026-08-28" | |
| 9120 | + }, | |
| 9121 | + { | |
| 9122 | + "id": "bld_pinto", | |
| 9123 | + "name": "Pinto Properties", | |
| 9124 | + "url": "https://pintoproperties.managebuilding.com/Resident/public/home", | |
| 9125 | + "listing_url": "https://pintoproperties.managebuilding.com/Resident/public/rentals", | |
| 9126 | + "sectors": "Edmonton", | |
| 9127 | + "connector": "bld_pinto", | |
| 9128 | + "status": "actif", | |
| 9129 | + "region": "Canada (outside Québec)", | |
| 9130 | + "notes": "canada-expansion 2026-08-28 — buildium — 12 annonces Edmonton (Garneau et environs) le 2026-08-28" | |
| 9131 | + }, | |
| 9132 | + { | |
| 9133 | + "id": "bld_mylife", | |
| 9134 | + "name": "My Life Realty, Property Management", | |
| 9135 | + "url": "https://myliferealty.managebuilding.com/Resident/public/home", | |
| 9136 | + "listing_url": "https://myliferealty.managebuilding.com/Resident/public/rentals", | |
| 9137 | + "sectors": "Lethbridge", | |
| 9138 | + "connector": "bld_mylife", | |
| 9139 | + "status": "actif", | |
| 9140 | + "region": "Canada (outside Québec)", | |
| 9141 | + "notes": "canada-expansion 2026-08-28 — buildium — 3 annonces Lethbridge le 2026-08-28" | |
| 9142 | + }, | |
| 9143 | + { | |
| 9144 | + "id": "bld_grassrootssouth", | |
| 9145 | + "name": "Grassroots Property Management South", | |
| 9146 | + "url": "https://grassrootssouthpropertymanagement.managebuilding.com/Resident/public/home", | |
| 9147 | + "listing_url": "https://grassrootssouthpropertymanagement.managebuilding.com/Resident/public/rentals", | |
| 9148 | + "sectors": "Lethbridge, Magrath, Cardston", | |
| 9149 | + "connector": "bld_grassrootssouth", | |
| 9150 | + "status": "actif", | |
| 9151 | + "region": "Canada (outside Québec)", | |
| 9152 | + "notes": "canada-expansion 2026-08-28 — buildium — 6 annonces AB (Lethbridge 5, Magrath 1) le 2026-08-28" | |
| 9153 | + }, | |
| 9154 | + { | |
| 9155 | + "id": "bld_grassrootsgp", | |
| 9156 | + "name": "Grassroots Property Management (Grande Prairie)", | |
| 9157 | + "url": "https://grassrootspropertymanagement.managebuilding.com/Resident/public/home", | |
| 9158 | + "listing_url": "https://grassrootspropertymanagement.managebuilding.com/Resident/public/rentals", | |
| 9159 | + "sectors": "Grande Prairie, Clairmont, High Prairie", | |
| 9160 | + "connector": "bld_grassrootsgp", | |
| 9161 | + "status": "actif", | |
| 9162 | + "region": "Canada (outside Québec)", | |
| 9163 | + "notes": "canada-expansion 2026-08-28 — buildium — 28 annonces AB le 2026-08-28 ; même bannière que grassrootssouth mais compte Buildium distinct" | |
| 9164 | + }, | |
| 9165 | + { | |
| 9166 | + "id": "bld_gpprime", | |
| 9167 | + "name": "Prime Property Management (GP Prime)", | |
| 9168 | + "url": "https://gpprime.managebuilding.com/Resident/public/home", | |
| 9169 | + "listing_url": "https://gpprime.managebuilding.com/Resident/public/rentals", | |
| 9170 | + "sectors": "Grande Prairie", | |
| 9171 | + "connector": "bld_gpprime", | |
| 9172 | + "status": "actif", | |
| 9173 | + "region": "Canada (outside Québec)", | |
| 9174 | + "notes": "canada-expansion 2026-08-28 — buildium — 1 annonce Grande Prairie le 2026-08-28 ; inventaire variable" | |
| 9175 | + }, | |
| 9176 | + { | |
| 9177 | + "id": "bld_resremedies", | |
| 9178 | + "name": "Residential Remedies Inc. (3% Realty Fort McMurray)", | |
| 9179 | + "url": "https://residentialremedies.managebuilding.com/Resident/public/home", | |
| 9180 | + "listing_url": "https://residentialremedies.managebuilding.com/Resident/public/rentals", | |
| 9181 | + "sectors": "Fort McMurray", | |
| 9182 | + "connector": "bld_resremedies", | |
| 9183 | + "status": "actif", | |
| 9184 | + "region": "Canada (outside Québec)", | |
| 9185 | + "notes": "canada-expansion 2026-08-28 — buildium — 15 annonces Fort McMurray le 2026-08-28" | |
| 9186 | + }, | |
| 9187 | + { | |
| 9188 | + "id": "bld_mastergroup", | |
| 9189 | + "name": "Master Group Investments", | |
| 9190 | + "url": "https://mastergroupinvestments.managebuilding.com/Resident/public/home", | |
| 9191 | + "listing_url": "https://mastergroupinvestments.managebuilding.com/Resident/public/rentals", | |
| 9192 | + "sectors": "Edmonton, Stony Plain, Drayton Valley", | |
| 9193 | + "connector": "bld_mastergroup", | |
| 9194 | + "status": "actif", | |
| 9195 | + "region": "Canada (outside Québec)", | |
| 9196 | + "notes": "canada-expansion 2026-08-28 — buildium — 21 annonces AB le 2026-08-28" | |
| 9197 | + }, | |
| 9198 | + { | |
| 9199 | + "id": "bld_casawise", | |
| 9200 | + "name": "Casawise Property Management", | |
| 9201 | + "url": "https://casawise.managebuilding.com/Resident/public/home", | |
| 9202 | + "listing_url": "https://casawise.managebuilding.com/Resident/public/rentals", | |
| 9203 | + "sectors": "Edmonton, Leduc, St. Albert", | |
| 9204 | + "connector": "bld_casawise", | |
| 9205 | + "status": "actif", | |
| 9206 | + "region": "Canada (outside Québec)", | |
| 9207 | + "notes": "canada-expansion 2026-08-28 — buildium — 71 annonces AB le 2026-08-28 (Edmonton 52, Leduc 13, St. Albert 6) — gros volume" | |
| 9208 | + }, | |
| 9209 | + { | |
| 9210 | + "id": "bld_wpp", | |
| 9211 | + "name": "Western Premium Property Management", | |
| 9212 | + "url": "https://wppmanagement.managebuilding.com/Resident/public/home", | |
| 9213 | + "listing_url": "https://wppmanagement.managebuilding.com/Resident/public/rentals", | |
| 9214 | + "sectors": "Saskatoon, Warman, Biggar", | |
| 9215 | + "connector": "bld_wpp", | |
| 9216 | + "status": "actif", | |
| 9217 | + "region": "Canada (outside Québec)", | |
| 9218 | + "notes": "canada-expansion 2026-08-28 — buildium — 129 annonces SK le 2026-08-28 (Saskatoon 126) — plus gros candidat de la campagne" | |
| 9219 | + }, | |
| 9220 | + { | |
| 9221 | + "id": "bld_supreme", | |
| 9222 | + "name": "Supreme Consulting", | |
| 9223 | + "url": "https://supremeconsulting.managebuilding.com/Resident/public/home", | |
| 9224 | + "listing_url": "https://supremeconsulting.managebuilding.com/Resident/public/rentals", | |
| 9225 | + "sectors": "Regina, Yorkton, Prince Albert, Swift Current, North Battleford", | |
| 9226 | + "connector": "bld_supreme", | |
| 9227 | + "status": "actif", | |
| 9228 | + "region": "Canada (outside Québec)", | |
| 9229 | + "notes": "canada-expansion 2026-08-28 — buildium — 19 annonces SK le 2026-08-28" | |
| 9230 | + }, | |
| 9231 | + { | |
| 9232 | + "id": "bld_jml", | |
| 9233 | + "name": "JML Properties Ltd", | |
| 9234 | + "url": "https://jmlpropertiesltd.managebuilding.com/Resident/public/home", | |
| 9235 | + "listing_url": "https://jmlpropertiesltd.managebuilding.com/Resident/public/rentals", | |
| 9236 | + "sectors": "Regina, Saskatoon, Moose Jaw", | |
| 9237 | + "connector": "bld_jml", | |
| 9238 | + "status": "actif", | |
| 9239 | + "region": "Canada (outside Québec)", | |
| 9240 | + "notes": "canada-expansion 2026-08-28 — buildium — 9 annonces SK (Regina 7, Saskatoon 2) le 2026-08-28" | |
| 9241 | + }, | |
| 9242 | + { | |
| 9243 | + "id": "bld_kodiak", | |
| 9244 | + "name": "Kodiak Property Management Ltd.", | |
| 9245 | + "url": "https://kodiakpropertymanagement.managebuilding.com/Resident/public/home", | |
| 9246 | + "listing_url": "https://kodiakpropertymanagement.managebuilding.com/Resident/public/rentals", | |
| 9247 | + "sectors": "Regina, Moose Jaw", | |
| 9248 | + "connector": "bld_kodiak", | |
| 9249 | + "status": "actif", | |
| 9250 | + "region": "Canada (outside Québec)", | |
| 9251 | + "notes": "canada-expansion 2026-08-28 — buildium — 12 annonces SK le 2026-08-28" | |
| 9252 | + }, | |
| 9253 | + { | |
| 9254 | + "id": "bld_tree", | |
| 9255 | + "name": "TREE Property Management", | |
| 9256 | + "url": "https://treepropertymanagement.managebuilding.com/Resident/public/home", | |
| 9257 | + "listing_url": "https://treepropertymanagement.managebuilding.com/Resident/public/rentals", | |
| 9258 | + "sectors": "Moose Jaw", | |
| 9259 | + "connector": "bld_tree", | |
| 9260 | + "status": "actif", | |
| 9261 | + "region": "Canada (outside Québec)", | |
| 9262 | + "notes": "canada-expansion 2026-08-28 — buildium — 7 annonces Moose Jaw le 2026-08-28" | |
| 9263 | + }, | |
| 9264 | + { | |
| 9265 | + "id": "bld_3keys", | |
| 9266 | + "name": "3Keys Property Management", | |
| 9267 | + "url": "https://3keysproperty.managebuilding.com/Resident/public/home", | |
| 9268 | + "listing_url": "https://3keysproperty.managebuilding.com/Resident/public/rentals", | |
| 9269 | + "sectors": "Moose Jaw", | |
| 9270 | + "connector": "bld_3keys", | |
| 9271 | + "status": "actif", | |
| 9272 | + "region": "Canada (outside Québec)", | |
| 9273 | + "notes": "canada-expansion 2026-08-28 — buildium — 1 annonce Moose Jaw le 2026-08-28 ; inventaire habituel 5-10 selon Google, variable" | |
| 9274 | + }, | |
| 9275 | + { | |
| 9276 | + "id": "bld_clearwater", | |
| 9277 | + "name": "Clearwater Management", | |
| 9278 | + "url": "https://clearwatermanagement.managebuilding.com/Resident/public/home", | |
| 9279 | + "listing_url": "https://clearwatermanagement.managebuilding.com/Resident/public/rentals", | |
| 9280 | + "sectors": "Winnipeg, Portage la Prairie", | |
| 9281 | + "connector": "bld_clearwater", | |
| 9282 | + "status": "actif", | |
| 9283 | + "region": "Canada (outside Québec)", | |
| 9284 | + "notes": "canada-expansion 2026-08-28 — buildium — 18 annonces MB le 2026-08-28" | |
| 9285 | + }, | |
| 9286 | + { | |
| 9287 | + "id": "bld_premier204", | |
| 9288 | + "name": "Premier Property Solutions Inc", | |
| 9289 | + "url": "https://premier204.managebuilding.com/Resident/public/home", | |
| 9290 | + "listing_url": "https://premier204.managebuilding.com/Resident/public/rentals", | |
| 9291 | + "sectors": "Winnipeg", | |
| 9292 | + "connector": "bld_premier204", | |
| 9293 | + "status": "actif", | |
| 9294 | + "region": "Canada (outside Québec)", | |
| 9295 | + "notes": "canada-expansion 2026-08-28 — buildium — 57 annonces Winnipeg le 2026-08-28 — gros volume MB" | |
| 9296 | + }, | |
| 9297 | + { | |
| 9298 | + "id": "bld_joatmon", | |
| 9299 | + "name": "Joatmon Properties Ltd.", | |
| 9300 | + "url": "https://joatmonproperties.managebuilding.com/Resident/public/home", | |
| 9301 | + "listing_url": "https://joatmonproperties.managebuilding.com/Resident/public/rentals", | |
| 9302 | + "sectors": "Winnipeg", | |
| 9303 | + "connector": "bld_joatmon", | |
| 9304 | + "status": "actif", | |
| 9305 | + "region": "Canada (outside Québec)", | |
| 9306 | + "notes": "canada-expansion 2026-08-28 — buildium — 10 annonces Winnipeg le 2026-08-28" | |
| 9307 | + }, | |
| 9308 | + { | |
| 9309 | + "id": "bld_assetcore", | |
| 9310 | + "name": "AssetCore Properties", | |
| 9311 | + "url": "https://assetcore.managebuilding.com/Resident/public/home", | |
| 9312 | + "listing_url": "https://assetcore.managebuilding.com/Resident/public/rentals", | |
| 9313 | + "sectors": "Winnipeg", | |
| 9314 | + "connector": "bld_assetcore", | |
| 9315 | + "status": "actif", | |
| 9316 | + "region": "Canada (outside Québec)", | |
| 9317 | + "notes": "canada-expansion 2026-08-28 — buildium — 4 annonces Winnipeg le 2026-08-28" | |
| 9318 | + }, | |
| 9319 | + { | |
| 9320 | + "id": "bld_oakapple", | |
| 9321 | + "name": "Oak & Apple Inc.", | |
| 9322 | + "url": "https://oakandapple.managebuilding.com/Resident/public/home", | |
| 9323 | + "listing_url": "https://oakandapple.managebuilding.com/Resident/public/rentals", | |
| 9324 | + "sectors": "Winnipeg", | |
| 9325 | + "connector": "bld_oakapple", | |
| 9326 | + "status": "actif", | |
| 9327 | + "region": "Canada (outside Québec)", | |
| 9328 | + "notes": "canada-expansion 2026-08-28 — buildium — 2 annonces Winnipeg le 2026-08-28" | |
| 9329 | + }, | |
| 9330 | + { | |
| 9331 | + "id": "bld_ember", | |
| 9332 | + "name": "Ember Realty Group Ltd.", | |
| 9333 | + "url": "https://emberrealty.managebuilding.com/Resident/public/home", | |
| 9334 | + "listing_url": "https://emberrealty.managebuilding.com/Resident/public/rentals", | |
| 9335 | + "sectors": "Winnipeg", | |
| 9336 | + "connector": "bld_ember", | |
| 9337 | + "status": "actif", | |
| 9338 | + "region": "Canada (outside Québec)", | |
| 9339 | + "notes": "canada-expansion 2026-08-28 — buildium — 1 annonce Winnipeg le 2026-08-28 ; inventaire variable" | |
| 9340 | + }, | |
| 9341 | + { | |
| 9342 | + "id": "bld_padpicker", | |
| 9343 | + "name": "The Pad Picker Inc", | |
| 9344 | + "url": "https://padpicker.managebuilding.com/Resident/public/home", | |
| 9345 | + "listing_url": "https://padpicker.managebuilding.com/Resident/public/rentals", | |
| 9346 | + "sectors": "Halifax, Dartmouth, Bedford, Timberlea, Eastern Passage", | |
| 9347 | + "connector": "bld_padpicker", | |
| 9348 | + "status": "actif", | |
| 9349 | + "region": "Canada (outside Québec)", | |
| 9350 | + "notes": "canada-expansion 2026-08-28 — buildium — 15 annonces NS (grand Halifax) le 2026-08-28" | |
| 9351 | + }, | |
| 9352 | + { | |
| 9353 | + "id": "bld_anchorhfx", | |
| 9354 | + "name": "Anchor Property Management (Halifax)", | |
| 9355 | + "url": "https://anchorpropertieshfx.managebuilding.com/Resident/public/home", | |
| 9356 | + "listing_url": "https://anchorpropertieshfx.managebuilding.com/Resident/public/rentals", | |
| 9357 | + "sectors": "Halifax", | |
| 9358 | + "connector": "bld_anchorhfx", | |
| 9359 | + "status": "actif", | |
| 9360 | + "region": "Canada (outside Québec)", | |
| 9361 | + "notes": "canada-expansion 2026-08-28 — buildium — 4 annonces Halifax le 2026-08-28" | |
| 9362 | + }, | |
| 9363 | + { | |
| 9364 | + "id": "bld_urchin", | |
| 9365 | + "name": "Urchin Property Management Inc.", | |
| 9366 | + "url": "https://urchinpropertymanagementinc.managebuilding.com/Resident/public/home", | |
| 9367 | + "listing_url": "https://urchinpropertymanagementinc.managebuilding.com/Resident/public/rentals", | |
| 9368 | + "sectors": "Dartmouth, Halifax, Cole Harbour", | |
| 9369 | + "connector": "bld_urchin", | |
| 9370 | + "status": "actif", | |
| 9371 | + "region": "Canada (outside Québec)", | |
| 9372 | + "notes": "canada-expansion 2026-08-28 — buildium — 16 annonces NS (Dartmouth 13) le 2026-08-28" | |
| 9373 | + }, | |
| 9374 | + { | |
| 9375 | + "id": "bld_northdt", | |
| 9376 | + "name": "North DT Holdings", | |
| 9377 | + "url": "https://northdtholdings.managebuilding.com/Resident/public/home", | |
| 9378 | + "listing_url": "https://northdtholdings.managebuilding.com/Resident/public/rentals", | |
| 9379 | + "sectors": "Truro", | |
| 9380 | + "connector": "bld_northdt", | |
| 9381 | + "status": "actif", | |
| 9382 | + "region": "Canada (outside Québec)", | |
| 9383 | + "notes": "canada-expansion 2026-08-28 — buildium — 1 annonce Truro le 2026-08-28" | |
| 9384 | + }, | |
| 9385 | + { | |
| 9386 | + "id": "bld_safeguard", | |
| 9387 | + "name": "Safeguard Property Management & Services", | |
| 9388 | + "url": "https://safeguardservices.managebuilding.com/Resident/public/home", | |
| 9389 | + "listing_url": "https://safeguardservices.managebuilding.com/Resident/public/rentals", | |
| 9390 | + "sectors": "Wolfville, Windsor, Kentville, Middleton, New Minas, Annapolis Royal, Bridgetown", | |
| 9391 | + "connector": "bld_safeguard", | |
| 9392 | + "status": "actif", | |
| 9393 | + "region": "Canada (outside Québec)", | |
| 9394 | + "notes": "canada-expansion 2026-08-28 — buildium — 31 annonces NS (vallée d'Annapolis, Windsor→Middleton) le 2026-08-28" | |
| 9395 | + }, | |
| 9396 | + { | |
| 9397 | + "id": "bld_lighthouse", | |
| 9398 | + "name": "Rent With Lighthouse", | |
| 9399 | + "url": "https://rentwithlighthouse.managebuilding.com/Resident/public/home", | |
| 9400 | + "listing_url": "https://rentwithlighthouse.managebuilding.com/Resident/public/rentals", | |
| 9401 | + "sectors": "Truro, Dartmouth, New Minas, Amherst, Fall River", | |
| 9402 | + "connector": "bld_lighthouse", | |
| 9403 | + "status": "actif", | |
| 9404 | + "region": "Canada (outside Québec)", | |
| 9405 | + "notes": "canada-expansion 2026-08-28 — buildium — 11 annonces NS le 2026-08-28" | |
| 9406 | + }, | |
| 9407 | + { | |
| 9408 | + "id": "bld_hubcity", | |
| 9409 | + "name": "Hub City Property Management", | |
| 9410 | + "url": "https://hubcitypm.managebuilding.com/Resident/public/home", | |
| 9411 | + "listing_url": "https://hubcitypm.managebuilding.com/Resident/public/rentals", | |
| 9412 | + "sectors": "Moncton, Shediac, Dieppe, Miramichi, Sackville", | |
| 9413 | + "connector": "bld_hubcity", | |
| 9414 | + "status": "actif", | |
| 9415 | + "region": "Canada (outside Québec)", | |
| 9416 | + "notes": "canada-expansion 2026-08-28 — buildium — 26 cartes NB le 2026-08-28, dont quelques garages/commerciaux à filtrer" | |
| 9417 | + }, | |
| 9418 | + { | |
| 9419 | + "id": "bld_greenlight", | |
| 9420 | + "name": "GreenLight Property Management Inc", | |
| 9421 | + "url": "https://rentgreenlight.com", | |
| 9422 | + "listing_url": "https://greenlightpropertymanagementinc.managebuilding.com/Resident/public/rentals", | |
| 9423 | + "sectors": "Moncton, Dieppe", | |
| 9424 | + "connector": "bld_greenlight", | |
| 9425 | + "status": "actif", | |
| 9426 | + "region": "Canada (outside Québec)", | |
| 9427 | + "notes": "canada-expansion 2026-08-28 — buildium — 15 annonces NB le 2026-08-28" | |
| 9428 | + }, | |
| 9429 | + { | |
| 9430 | + "id": "bld_4rent", | |
| 9431 | + "name": "4 Rent Solutions Inc.", | |
| 9432 | + "url": "https://4rentsolutionsinc.managebuilding.com/Resident/public/home", | |
| 9433 | + "listing_url": "https://4rentsolutionsinc.managebuilding.com/Resident/public/rentals", | |
| 9434 | + "sectors": "Moncton, Shediac", | |
| 9435 | + "connector": "bld_4rent", | |
| 9436 | + "status": "actif", | |
| 9437 | + "region": "Canada (outside Québec)", | |
| 9438 | + "notes": "canada-expansion 2026-08-28 — buildium — 12 annonces NB le 2026-08-28" | |
| 9439 | + }, | |
| 9440 | + { | |
| 9441 | + "id": "bld_colpitts", | |
| 9442 | + "name": "Colpitts Developments", | |
| 9443 | + "url": "https://colpittsdevelopments.managebuilding.com/Resident/public/home", | |
| 9444 | + "listing_url": "https://colpittsdevelopments.managebuilding.com/Resident/public/rentals", | |
| 9445 | + "sectors": "Fredericton", | |
| 9446 | + "connector": "bld_colpitts", | |
| 9447 | + "status": "actif", | |
| 9448 | + "region": "Canada (outside Québec)", | |
| 9449 | + "notes": "canada-expansion 2026-08-28 — buildium — 43 annonces Fredericton le 2026-08-28 — gros volume NB (immeubles Manhattan Drive 82 unités)" | |
| 9450 | + }, | |
| 9451 | + { | |
| 9452 | + "id": "bld_freddybeach", | |
| 9453 | + "name": "Freddy Beach Property Management", | |
| 9454 | + "url": "https://freddybeachpm.managebuilding.com/Resident/public/home", | |
| 9455 | + "listing_url": "https://freddybeachpm.managebuilding.com/Resident/public/rentals", | |
| 9456 | + "sectors": "Fredericton, Moncton, Saint John", | |
| 9457 | + "connector": "bld_freddybeach", | |
| 9458 | + "status": "actif", | |
| 9459 | + "region": "Canada (outside Québec)", | |
| 9460 | + "notes": "canada-expansion 2026-08-28 — buildium — 13 cartes NB le 2026-08-28, dont 1-2 commerciaux/garages à filtrer" | |
| 9461 | + }, | |
| 9462 | + { | |
| 9463 | + "id": "bld_redsands", | |
| 9464 | + "name": "Red Sands Property Management", | |
| 9465 | + "url": "https://redsandsproperties.ca", | |
| 9466 | + "listing_url": "https://redsandsproperties.managebuilding.com/Resident/public/rentals", | |
| 9467 | + "sectors": "Charlottetown, Summerside, Kensington, Montague, Souris, O'Leary", | |
| 9468 | + "connector": "bld_redsands", | |
| 9469 | + "status": "actif", | |
| 9470 | + "region": "Canada (outside Québec)", | |
| 9471 | + "notes": "canada-expansion 2026-08-28 — buildium — 26 annonces PE (partout sur l'île, incl. locations hivernales saisonnières oct-mai — vérifier durée) le 2026-08-28" | |
| 9472 | + }, | |
| 9473 | + { | |
| 9474 | + "id": "bld_westroyalty", | |
| 9475 | + "name": "West Royalty Suites", | |
| 9476 | + "url": "https://westroyaltysuites.managebuilding.com/Resident/public/home", | |
| 9477 | + "listing_url": "https://westroyaltysuites.managebuilding.com/Resident/public/rentals", | |
| 9478 | + "sectors": "Charlottetown", | |
| 9479 | + "connector": "bld_westroyalty", | |
| 9480 | + "status": "actif", | |
| 9481 | + "region": "Canada (outside Québec)", | |
| 9482 | + "notes": "canada-expansion 2026-08-28 — buildium — 7 annonces Charlottetown (immeuble 20 Daniel Drive) le 2026-08-28" | |
| 9483 | + }, | |
| 9484 | + { | |
| 9485 | + "id": "bld_mpropgroup", | |
| 9486 | + "name": "M Property Management Group", | |
| 9487 | + "url": "https://mpropgroup.managebuilding.com/Resident/public/home", | |
| 9488 | + "listing_url": "https://mpropgroup.managebuilding.com/Resident/public/rentals", | |
| 9489 | + "sectors": "Summerside, Prince Albert", | |
| 9490 | + "connector": "bld_mpropgroup", | |
| 9491 | + "status": "actif", | |
| 9492 | + "region": "Canada (outside Québec)", | |
| 9493 | + "notes": "canada-expansion 2026-08-28 — buildium — 4 annonces le 2026-08-28 (Summerside PE 2, Prince Albert SK 2) — bi-provincial" | |
| 9494 | + }, | |
| 9495 | + { | |
| 9496 | + "id": "bld_metronl", | |
| 9497 | + "name": "Metro Property Management (St. John's)", | |
| 9498 | + "url": "https://metropropertymanagement.managebuilding.com/Resident/public/home", | |
| 9499 | + "listing_url": "https://metropropertymanagement.managebuilding.com/Resident/public/rentals", | |
| 9500 | + "sectors": "St. John's, Mount Pearl, Paradise, Torbay", | |
| 9501 | + "connector": "bld_metronl", | |
| 9502 | + "status": "actif", | |
| 9503 | + "region": "Canada (outside Québec)", | |
| 9504 | + "notes": "canada-expansion 2026-08-28 — buildium — 21 annonces NL (grand St. John's) le 2026-08-28 — seul client NL du registre" | |
| 9505 | + }, | |
| 9506 | + { | |
| 9507 | + "id": "bld_marco", | |
| 9508 | + "name": "Marco Toronto Property Management", | |
| 9509 | + "url": "https://marcotoronto.managebuilding.com/Resident/public/home", | |
| 9510 | + "listing_url": "https://marcotoronto.managebuilding.com/Resident/public/rentals", | |
| 9511 | + "sectors": "Toronto, East York, Mississauga", | |
| 9512 | + "connector": "bld_marco", | |
| 9513 | + "status": "actif", | |
| 9514 | + "region": "Canada (outside Québec)", | |
| 9515 | + "notes": "canada-expansion 2026-08-28 — buildium — 43 annonces ON (Toronto 40) le 2026-08-28 ; segment haut de gamme (jusqu'à 30 k$/mois)" | |
| 9516 | + }, | |
| 9517 | + { | |
| 9518 | + "id": "bld_camden", | |
| 9519 | + "name": "Camden Property Management", | |
| 9520 | + "url": "https://camdenpm.managebuilding.com/Resident/public/home", | |
| 9521 | + "listing_url": "https://camdenpm.managebuilding.com/Resident/public/rentals", | |
| 9522 | + "sectors": "Toronto", | |
| 9523 | + "connector": "bld_camden", | |
| 9524 | + "status": "actif", | |
| 9525 | + "region": "Canada (outside Québec)", | |
| 9526 | + "notes": "canada-expansion 2026-08-28 — buildium — 1 annonce Toronto (Annex) le 2026-08-28 ; inventaire variable" | |
| 9527 | + }, | |
| 9528 | + { | |
| 9529 | + "id": "bld_pmtoronto", | |
| 9530 | + "name": "Property Management Toronto Inc", | |
| 9531 | + "url": "https://propertymanagementtoronto.managebuilding.com/Resident/public/home", | |
| 9532 | + "listing_url": "https://propertymanagementtoronto.managebuilding.com/Resident/public/rentals", | |
| 9533 | + "sectors": "Toronto, Mississauga, Brampton, Oshawa, Kitchener, Brantford", | |
| 9534 | + "connector": "bld_pmtoronto", | |
| 9535 | + "status": "actif", | |
| 9536 | + "region": "Canada (outside Québec)", | |
| 9537 | + "notes": "canada-expansion 2026-08-28 — buildium — 23 annonces ON (GTA + Kitchener) le 2026-08-28" | |
| 9538 | + }, | |
| 9539 | + { | |
| 9540 | + "id": "bld_ckso", | |
| 9541 | + "name": "CKSO Properties", | |
| 9542 | + "url": "https://cksoproperties.managebuilding.com/Resident/public/home", | |
| 9543 | + "listing_url": "https://cksoproperties.managebuilding.com/Resident/public/rentals", | |
| 9544 | + "sectors": "Greater Sudbury", | |
| 9545 | + "connector": "bld_ckso", | |
| 9546 | + "status": "actif", | |
| 9547 | + "region": "Canada (outside Québec)", | |
| 9548 | + "notes": "canada-expansion 2026-08-28 — buildium — 21 annonces Grand Sudbury le 2026-08-28" | |
| 9549 | + }, | |
| 9550 | + { | |
| 9551 | + "id": "bld_superiorchoice", | |
| 9552 | + "name": "Superior Choice PM", | |
| 9553 | + "url": "https://tbay.managebuilding.com/Resident/public/home", | |
| 9554 | + "listing_url": "https://tbay.managebuilding.com/Resident/public/rentals", | |
| 9555 | + "sectors": "Thunder Bay", | |
| 9556 | + "connector": "bld_superiorchoice", | |
| 9557 | + "status": "actif", | |
| 9558 | + "region": "Canada (outside Québec)", | |
| 9559 | + "notes": "canada-expansion 2026-08-28 — buildium — 3 annonces Thunder Bay le 2026-08-28" | |
| 9560 | + }, | |
| 9561 | + { | |
| 9562 | + "id": "bld_hocking", | |
| 9563 | + "name": "Hocking Management Corporation", | |
| 9564 | + "url": "https://hmc.managebuilding.com/Resident/public/home", | |
| 9565 | + "listing_url": "https://hmc.managebuilding.com/Resident/public/rentals", | |
| 9566 | + "sectors": "Barrie", | |
| 9567 | + "connector": "bld_hocking", | |
| 9568 | + "status": "actif", | |
| 9569 | + "region": "Canada (outside Québec)", | |
| 9570 | + "notes": "canada-expansion 2026-08-28 — buildium — 4 annonces Barrie le 2026-08-28" | |
| 9571 | + }, | |
| 9572 | + { | |
| 9573 | + "id": "bld_spruce", | |
| 9574 | + "name": "Spruce Living Inc.", | |
| 9575 | + "url": "https://sprucelivinginc.managebuilding.com/Resident/public/home", | |
| 9576 | + "listing_url": "https://sprucelivinginc.managebuilding.com/Resident/public/rentals", | |
| 9577 | + "sectors": "Guelph", | |
| 9578 | + "connector": "bld_spruce", | |
| 9579 | + "status": "actif", | |
| 9580 | + "region": "Canada (outside Québec)", | |
| 9581 | + "notes": "canada-expansion 2026-08-28 — buildium — 8 annonces Guelph le 2026-08-28" | |
| 9582 | + }, | |
| 9583 | + { | |
| 9584 | + "id": "bld_guelphpm", | |
| 9585 | + "name": "Guelph PM", | |
| 9586 | + "url": "https://guelphpm.managebuilding.com/Resident/public/home", | |
| 9587 | + "listing_url": "https://guelphpm.managebuilding.com/Resident/public/rentals", | |
| 9588 | + "sectors": "Guelph", | |
| 9589 | + "connector": "bld_guelphpm", | |
| 9590 | + "status": "actif", | |
| 9591 | + "region": "Canada (outside Québec)", | |
| 9592 | + "notes": "canada-expansion 2026-08-28 — buildium — 2 annonces Guelph le 2026-08-28" | |
| 9593 | + }, | |
| 9594 | + { | |
| 9595 | + "id": "bld_sfour", | |
| 9596 | + "name": "S Four Inc.", | |
| 9597 | + "url": "https://sfourinc.managebuilding.com/Resident/public/home", | |
| 9598 | + "listing_url": "https://sfourinc.managebuilding.com/Resident/public/rentals", | |
| 9599 | + "sectors": "Kitchener, Waterloo", | |
| 9600 | + "connector": "bld_sfour", | |
| 9601 | + "status": "actif", | |
| 9602 | + "region": "Canada (outside Québec)", | |
| 9603 | + "notes": "canada-expansion 2026-08-28 — buildium — 23 annonces ON (Kitchener 14, Waterloo 9) le 2026-08-28" | |
| 9604 | + }, | |
| 9605 | + { | |
| 9606 | + "id": "bld_starliving", | |
| 9607 | + "name": "Starliving Management", | |
| 9608 | + "url": "https://starliving.managebuilding.com/Resident/public/home", | |
| 9609 | + "listing_url": "https://starliving.managebuilding.com/Resident/public/rentals", | |
| 9610 | + "sectors": "Brantford, Hamilton, Cambridge, Oshawa, St. Catharines", | |
| 9611 | + "connector": "bld_starliving", | |
| 9612 | + "status": "actif", | |
| 9613 | + "region": "Canada (outside Québec)", | |
| 9614 | + "notes": "canada-expansion 2026-08-28 — buildium — 4 annonces ON le 2026-08-28" | |
| 9615 | + }, | |
| 9616 | + { | |
| 9617 | + "id": "bld_rentaplex", | |
| 9618 | + "name": "Rentaplex Inc", | |
| 9619 | + "url": "https://rentaplexinc.managebuilding.com/Resident/public/home", | |
| 9620 | + "listing_url": "https://rentaplexinc.managebuilding.com/Resident/public/rentals", | |
| 9621 | + "sectors": "Oshawa, Whitby", | |
| 9622 | + "connector": "bld_rentaplex", | |
| 9623 | + "status": "actif", | |
| 9624 | + "region": "Canada (outside Québec)", | |
| 9625 | + "notes": "canada-expansion 2026-08-28 — buildium — 3 annonces Durham (Oshawa 2, Whitby 1) le 2026-08-28" | |
| 9626 | + }, | |
| 9627 | + { | |
| 9628 | + "id": "bld_harper", | |
| 9629 | + "name": "Harper Management Services Inc", | |
| 9630 | + "url": "https://harpermanagementservicesinc.managebuilding.com/Resident/public/home", | |
| 9631 | + "listing_url": "https://harpermanagementservicesinc.managebuilding.com/Resident/public/rentals", | |
| 9632 | + "sectors": "Sault Ste. Marie, Welland, St. Catharines, Fort Erie", | |
| 9633 | + "connector": "bld_harper", | |
| 9634 | + "status": "actif", | |
| 9635 | + "region": "Canada (outside Québec)", | |
| 9636 | + "notes": "canada-expansion 2026-08-28 — buildium — 15 annonces ON (SSM 8 + Niagara) le 2026-08-28" | |
| 9637 | + }, | |
| 9638 | + { | |
| 9639 | + "id": "bld_2cats", | |
| 9640 | + "name": "2 Cats Investor Services Inc.", | |
| 9641 | + "url": "https://2-cats.managebuilding.com/Resident/public/home", | |
| 9642 | + "listing_url": "https://2-cats.managebuilding.com/Resident/public/rentals", | |
| 9643 | + "sectors": "Brantford", | |
| 9644 | + "connector": "bld_2cats", | |
| 9645 | + "status": "actif", | |
| 9646 | + "region": "Canada (outside Québec)", | |
| 9647 | + "notes": "canada-expansion 2026-08-28 — buildium — 8 annonces Brantford (1 Wellington St.) le 2026-08-28" | |
| 9648 | + }, | |
| 9649 | + { | |
| 9650 | + "id": "bld_ska", | |
| 9651 | + "name": "SKA Apartments", | |
| 9652 | + "url": "https://ska-apartment-rentals.managebuilding.com/Resident/public/home", | |
| 9653 | + "listing_url": "https://ska-apartment-rentals.managebuilding.com/Resident/public/rentals", | |
| 9654 | + "sectors": "Chatham, Brantford, Leamington, Tillsonburg, Guelph", | |
| 9655 | + "connector": "bld_ska", | |
| 9656 | + "status": "actif", | |
| 9657 | + "region": "Canada (outside Québec)", | |
| 9658 | + "notes": "canada-expansion 2026-08-28 — buildium — 23 annonces ON (sud-ouest) le 2026-08-28" | |
| 9659 | + }, | |
| 9660 | + { | |
| 9661 | + "id": "bld_fourchambers", | |
| 9662 | + "name": "Four Chambers Property Management", | |
| 9663 | + "url": "https://fourchamberspropertymanagement.managebuilding.com/Resident/public/home", | |
| 9664 | + "listing_url": "https://fourchamberspropertymanagement.managebuilding.com/Resident/public/rentals", | |
| 9665 | + "sectors": "Hamilton, St. Catharines, Brantford", | |
| 9666 | + "connector": "bld_fourchambers", | |
| 9667 | + "status": "actif", | |
| 9668 | + "region": "Canada (outside Québec)", | |
| 9669 | + "notes": "canada-expansion 2026-08-28 — buildium — 9 annonces ON (Hamilton 7) le 2026-08-28" | |
| 8681 | 9670 | } |
| 8682 | 9671 | ], |
| 8683 | 9672 | "updated": "2026-08-27" |
added
rentka/connectors/realtor_ca.py
+338 −0
@@ -0,0 +1,338 @@ | ||
| 1 | +# ----------------------------------------------------------------------------- | |
| 2 | +# Rent-Ka — Rental listings aggregator (Canada, outside Québec) | |
| 3 | +# Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 4 | +# connectors/realtor_ca.py : REALTOR.ca (CREA) — annonces de location publiées | |
| 5 | +# par les COURTIERS immobiliers (MLS). C'est LA source pancanadienne des | |
| 6 | +# logements mis en location via courtier (condos en particulier), absente des | |
| 7 | +# portails de gestionnaires. | |
| 8 | +# | |
| 9 | +# API interne : POST https://api2.realtor.ca/Listing.svc/PropertySearch_Post | |
| 10 | +# (form-urlencoded, TransactionTypeId=3 = à louer, PropertySearchTypeId=1 = | |
| 11 | +# résidentiel). Protégée par Incapsula/Imperva → chaque requête passe par | |
| 12 | +# Scrapfly ASP + pool résidentiel (validé en live le 2026-08-28 : 200 OK, | |
| 13 | +# 7 779 locations dans le seul Grand Toronto). | |
| 14 | +# | |
| 15 | +# L'API plafonne à MaxRecords=600 par zone (3 pages × 200) : le fetch part de | |
| 16 | +# boîtes provinciales (ROC) et les DIVISE récursivement en quadrants tant que | |
| 17 | +# TotalRecords > 600 — couverture complète garantie, dédup par Id (les boîtes | |
| 18 | +# se chevauchent aux frontières). Les requêtes sont parallélisées (pool de | |
| 19 | +# threads, compteur verrouillé, garde-fou max_requests). | |
| 20 | +# | |
| 21 | +# Une annonce = un résultat de recherche : prix (LeaseRent), adresse complète | |
| 22 | +# avec GPS, chambres/SDB, photo, remarques publiques, et surtout le COURTIER | |
| 23 | +# (Individual + Organization = agence) exposé dans details.contact. Pas de | |
| 24 | +# visite des pages détail (40 k fiches × Scrapfly = hors budget) — la photo | |
| 25 | +# de couverture et les champs du résultat suffisent à publier. | |
| 26 | +# Échec HONNÊTE : si une part significative des requêtes échoue, on lève | |
| 27 | +# plutôt que de laisser l'ingestion archiver l'inventaire manquant. | |
| 28 | +# ----------------------------------------------------------------------------- | |
| 29 | +from __future__ import annotations | |
| 30 | + | |
| 31 | +import json | |
| 32 | +import os | |
| 33 | +import re | |
| 34 | +import threading | |
| 35 | +import time | |
| 36 | +from concurrent.futures import ThreadPoolExecutor | |
| 37 | +from urllib.parse import urlencode | |
| 38 | + | |
| 39 | +import requests | |
| 40 | + | |
| 41 | +from ..schema import Listing, normalize_unit_type | |
| 42 | +from .base import SCRAPFLY_API, BaseConnector | |
| 43 | + | |
| 44 | +_API = "https://api2.realtor.ca/Listing.svc/PropertySearch_Post" | |
| 45 | +_MAX_RECORDS = 600 # plafond serveur (Paging.MaxRecords) | |
| 46 | + | |
| 47 | +# Boîtes de départ — Canada hors Québec, généreuses (le Québec limitrophe est | |
| 48 | +# filtré au parse via ProvinceName). Chevauchements sans conséquence : dédup | |
| 49 | +# par Id. | |
| 50 | +_SEED_BOXES: list[tuple[float, float, float, float]] = [ | |
| 51 | + # (lat_min, lat_max, lng_min, lng_max) | |
| 52 | + (41.6, 47.6, -83.7, -74.3), # Ontario sud (Windsor→Ottawa) | |
| 53 | + (46.0, 57.0, -95.4, -79.0), # Ontario nord | |
| 54 | + (48.2, 60.0, -139.1, -114.0), # Colombie-Britannique | |
| 55 | + (48.9, 60.0, -120.0, -110.0), # Alberta | |
| 56 | + (48.9, 60.0, -110.0, -101.4), # Saskatchewan | |
| 57 | + (48.9, 60.0, -102.2, -95.0), # Manitoba | |
| 58 | + (43.3, 48.3, -69.1, -59.6), # NB + NS + IPE | |
| 59 | + (46.5, 60.5, -67.9, -52.5), # Terre-Neuve-et-Labrador | |
| 60 | + (60.0, 70.5, -141.0, -61.0), # YT + TNO + NU | |
| 61 | +] | |
| 62 | + | |
| 63 | +_PROVINCE_CODES = { | |
| 64 | + "ontario": "ON", "british columbia": "BC", "alberta": "AB", | |
| 65 | + "saskatchewan": "SK", "manitoba": "MB", "new brunswick": "NB", | |
| 66 | + "nova scotia": "NS", "prince edward island": "PE", | |
| 67 | + "newfoundland & labrador": "NL", "newfoundland and labrador": "NL", | |
| 68 | + "yukon": "YT", "northwest territories": "NT", "nunavut": "NU", | |
| 69 | +} | |
| 70 | + | |
| 71 | +# loyers non mensuels (rarissimes en résidentiel) : hors sujet | |
| 72 | +_NON_MONTHLY_RE = re.compile(r"/(week|night|dai|day|year|annum)", re.I) | |
| 73 | + | |
| 74 | +# « 600 sqft » ou « 500-599 sqft » — borne basse plausible seulement | |
| 75 | +_AREA_RE = re.compile(r"(\d[\d,]*)(?:\s*-\s*(\d[\d,]*))?\s*sqft", re.I) | |
| 76 | + | |
| 77 | +# types de bâtiment non résidentiels (filet — PropertySearchTypeId=1 est déjà | |
| 78 | +# résidentiel, mais quelques stationnements/locaux passent la maille) | |
| 79 | +_NON_RESIDENTIAL_RE = re.compile( | |
| 80 | + r"\b(parking|locker|storage|office|retail|commercial|warehouse|" | |
| 81 | + r"vacant land|land|farm|business|agriculture)\b", re.I) | |
| 82 | + | |
| 83 | + | |
| 84 | +class RealtorCaConnector(BaseConnector): | |
| 85 | + """REALTOR.ca — locations MLS des courtiers, Canada hors Québec.""" | |
| 86 | + | |
| 87 | + source_id = "realtor_ca" | |
| 88 | + use_detail_cache = False # tout vient des résultats de recherche | |
| 89 | + workers = 6 # requêtes Scrapfly simultanées | |
| 90 | + max_requests = 900 # garde-fou budget Scrapfly par sync | |
| 91 | + max_depth = 10 # profondeur de subdivision des quadrants | |
| 92 | + max_images = 1 # les résultats n'exposent que la couverture | |
| 93 | + | |
| 94 | + def fetch(self) -> list[Listing]: | |
| 95 | + self._lock = threading.Lock() | |
| 96 | + self._nreq = 0 | |
| 97 | + self._failures = 0 | |
| 98 | + seen: dict[str, Listing] = {} | |
| 99 | + queue: list[tuple[tuple[float, float, float, float], int]] = \ | |
| 100 | + [(b, 0) for b in _SEED_BOXES] | |
| 101 | + with ThreadPoolExecutor(max_workers=self.workers) as ex: | |
| 102 | + while queue: | |
| 103 | + wave, queue = queue[:24], queue[24:] | |
| 104 | + probes = list(ex.map( | |
| 105 | + lambda bd: self._search(bd[0], 1), wave)) | |
| 106 | + page_jobs: list[tuple[tuple, int]] = [] | |
| 107 | + for (box, depth), data in zip(wave, probes): | |
| 108 | + paging = (data or {}).get("Paging") or {} | |
| 109 | + total = int(paging.get("TotalRecords") or 0) | |
| 110 | + if not total: | |
| 111 | + continue | |
| 112 | + if total > _MAX_RECORDS and depth < self.max_depth: | |
| 113 | + queue.extend((q, depth + 1) | |
| 114 | + for q in _quadrants(box)) | |
| 115 | + continue | |
| 116 | + self._collect(data, seen) | |
| 117 | + pages = min(int(paging.get("TotalPages") or 1), 3) | |
| 118 | + page_jobs += [(box, p) for p in range(2, pages + 1)] | |
| 119 | + for d in ex.map(lambda bp: self._search(bp[0], bp[1]), | |
| 120 | + page_jobs): | |
| 121 | + self._collect(d, seen) | |
| 122 | + # échec honnête : trop d'échecs = inventaire incomplet, on n'archive pas | |
| 123 | + if self._failures > max(3, self._nreq // 20): | |
| 124 | + raise RuntimeError( | |
| 125 | + f"realtor_ca : {self._failures} échecs sur {self._nreq} " | |
| 126 | + f"requêtes — sync abandonné (inventaire incomplet)") | |
| 127 | + if self._nreq >= self.max_requests: | |
| 128 | + raise RuntimeError( | |
| 129 | + f"realtor_ca : garde-fou max_requests ({self.max_requests}) " | |
| 130 | + f"atteint — couverture incomplète, sync abandonné") | |
| 131 | + return list(seen.values()) | |
| 132 | + | |
| 133 | + # -- une requête de recherche (Scrapfly ASP, thread-safe) ------------------ | |
| 134 | + def _search(self, box: tuple, page: int) -> dict: | |
| 135 | + with self._lock: | |
| 136 | + if self._nreq >= self.max_requests: | |
| 137 | + return {} | |
| 138 | + self._nreq += 1 | |
| 139 | + key = os.environ.get("SCRAPFLY_KEY") | |
| 140 | + if not key: | |
| 141 | + raise RuntimeError("SCRAPFLY_KEY manquant (voir .env)") | |
| 142 | + lat_min, lat_max, lng_min, lng_max = box | |
| 143 | + body = urlencode({ | |
| 144 | + "ZoomLevel": "11", | |
| 145 | + "LatitudeMin": f"{lat_min:.5f}", "LatitudeMax": f"{lat_max:.5f}", | |
| 146 | + "LongitudeMin": f"{lng_min:.5f}", "LongitudeMax": f"{lng_max:.5f}", | |
| 147 | + "Sort": "6-D", "PropertyTypeGroupID": "1", | |
| 148 | + "TransactionTypeId": "3", "PropertySearchTypeId": "1", | |
| 149 | + "Currency": "CAD", "IncludeHiddenListings": "false", | |
| 150 | + "RecordsPerPage": "200", "ApplicationId": "1", | |
| 151 | + "CultureId": "1", "Version": "7.0", "CurrentPage": str(page), | |
| 152 | + }) | |
| 153 | + params = { | |
| 154 | + "key": key, "url": _API, "asp": "true", "country": "ca", | |
| 155 | + "proxy_pool": "public_residential_pool", | |
| 156 | + "headers[Content-Type]": | |
| 157 | + "application/x-www-form-urlencoded; charset=UTF-8", | |
| 158 | + "headers[Referer]": "https://www.realtor.ca/", | |
| 159 | + "headers[Origin]": "https://www.realtor.ca", | |
| 160 | + } | |
| 161 | + for attempt in range(3): | |
| 162 | + try: | |
| 163 | + resp = requests.post(SCRAPFLY_API, params=params, data=body, | |
| 164 | + timeout=180) | |
| 165 | + res = resp.json().get("result") or {} | |
| 166 | + if (res.get("status_code") or 0) == 200: | |
| 167 | + return json.loads(res.get("content") or "{}") | |
| 168 | + except (requests.RequestException, ValueError): | |
| 169 | + pass | |
| 170 | + if attempt < 2: | |
| 171 | + time.sleep(4 * (attempt + 1)) | |
| 172 | + with self._lock: | |
| 173 | + self._failures += 1 | |
| 174 | + return {} | |
| 175 | + | |
| 176 | + # -- accumulation dédupliquée (les boîtes se chevauchent) ------------------ | |
| 177 | + def _collect(self, data: dict, seen: dict[str, Listing]) -> None: | |
| 178 | + for r in (data or {}).get("Results") or []: | |
| 179 | + try: | |
| 180 | + lst = self._listing(r) | |
| 181 | + except Exception: | |
| 182 | + continue | |
| 183 | + if lst is not None and lst.external_id not in seen: | |
| 184 | + seen[lst.external_id] = lst | |
| 185 | + | |
| 186 | + # -- un résultat de recherche -> Listing ----------------------------------- | |
| 187 | + def _listing(self, r: dict) -> Listing | None: | |
| 188 | + prov = _PROVINCE_CODES.get( | |
| 189 | + (r.get("ProvinceName") or "").strip().lower()) | |
| 190 | + if not prov: | |
| 191 | + return None # Québec (ou inconnu) : hors champ | |
| 192 | + prop = r.get("Property") or {} | |
| 193 | + bld = r.get("Building") or {} | |
| 194 | + btype = (bld.get("Type") or prop.get("Type") or "").strip() | |
| 195 | + if _NON_RESIDENTIAL_RE.search(btype): | |
| 196 | + return None | |
| 197 | + rent = (prop.get("LeaseRent") or "").strip() | |
| 198 | + if _NON_MONTHLY_RE.search(rent): | |
| 199 | + return None # loyer non mensuel : hors sujet | |
| 200 | + | |
| 201 | + pid = str(r.get("Id") or "").strip() | |
| 202 | + mls = (r.get("MlsNumber") or "").strip() | |
| 203 | + if not pid: | |
| 204 | + return None | |
| 205 | + | |
| 206 | + # adresse « unité - rue|Ville (Secteur), Province CodePostal » | |
| 207 | + addr = prop.get("Address") or {} | |
| 208 | + text = (addr.get("AddressText") or "").strip() | |
| 209 | + street, _, tail = text.partition("|") | |
| 210 | + city, sector = "", "" | |
| 211 | + m = re.match(r"^([^(,]+?)\s*(?:\(([^)]+)\))?\s*,", tail) | |
| 212 | + if m: | |
| 213 | + city = m.group(1).strip() | |
| 214 | + sector = (m.group(2) or "").strip() | |
| 215 | + postal = (r.get("PostalCode") or "").strip() | |
| 216 | + full_addr = ", ".join(x for x in (street.strip(), city) if x) | |
| 217 | + if full_addr: | |
| 218 | + full_addr += f", {prov} {postal}".rstrip() | |
| 219 | + | |
| 220 | + try: | |
| 221 | + lat = float(addr.get("Latitude") or "") | |
| 222 | + lng = float(addr.get("Longitude") or "") | |
| 223 | + except (TypeError, ValueError): | |
| 224 | + lat = lng = None | |
| 225 | + | |
| 226 | + # prix : valeur brute du flux (mensuelle) | |
| 227 | + price = None | |
| 228 | + try: | |
| 229 | + v = float(str(prop.get("LeaseRentUnformattedValue") or "") | |
| 230 | + .replace(",", "")) | |
| 231 | + if 200 <= v <= 100000: | |
| 232 | + price = v | |
| 233 | + except (TypeError, ValueError): | |
| 234 | + pass | |
| 235 | + price_label = rent.replace("/Monthly", "/mo") if rent else "" | |
| 236 | + | |
| 237 | + # chambres « 2 + 1 » (TRREB : + den) -> 2 ; « 0 » -> studio | |
| 238 | + bedrooms = None | |
| 239 | + mb = re.match(r"\s*(\d+)", str(bld.get("Bedrooms") or "")) | |
| 240 | + if mb: | |
| 241 | + bedrooms = float(mb.group(1)) | |
| 242 | + bathrooms = None | |
| 243 | + try: | |
| 244 | + bathrooms = float(bld.get("BathroomTotal") or "") | |
| 245 | + except (TypeError, ValueError): | |
| 246 | + pass | |
| 247 | + if bedrooms is not None: | |
| 248 | + unit_type = "Studio" if bedrooms == 0 else \ | |
| 249 | + normalize_unit_type(f"{int(bedrooms)} bedrooms") | |
| 250 | + else: | |
| 251 | + unit_type = normalize_unit_type(btype) | |
| 252 | + | |
| 253 | + # superficie : « 600 sqft » ou plage « 500-599 sqft » (borne basse) | |
| 254 | + area = None | |
| 255 | + for src in (bld.get("SizeInterior") or "", | |
| 256 | + " ".join((fm or {}).get("Area") or "" | |
| 257 | + for fm in bld.get("FloorAreaMeasurements") | |
| 258 | + or [])): | |
| 259 | + ma = _AREA_RE.search(src) | |
| 260 | + if ma: | |
| 261 | + try: | |
| 262 | + v = float(ma.group(1).replace(",", "")) | |
| 263 | + if 80 <= v <= 20000: | |
| 264 | + area = v | |
| 265 | + break | |
| 266 | + except ValueError: | |
| 267 | + pass | |
| 268 | + | |
| 269 | + amenities = [a.strip() for a in | |
| 270 | + (bld.get("Ammenities") or "").split(",") if a.strip()] | |
| 271 | + | |
| 272 | + # courtier + agence — la valeur ajoutée « annonce par courtier » | |
| 273 | + details: dict = {"mls": mls} if mls else {} | |
| 274 | + agents = [] | |
| 275 | + for ind in r.get("Individual") or []: | |
| 276 | + nm = (ind.get("Name") or "").strip() | |
| 277 | + if nm and nm not in agents: | |
| 278 | + agents.append(nm) | |
| 279 | + org = ind.get("Organization") or {} | |
| 280 | + if org.get("Name") and "organization" not in details: | |
| 281 | + details["organization"] = org["Name"].strip() | |
| 282 | + for ph in org.get("Phones") or []: | |
| 283 | + if ph.get("PhoneNumber"): | |
| 284 | + details.setdefault("contact", {})["phone"] = \ | |
| 285 | + f"{ph.get('AreaCode', '')}-{ph['PhoneNumber']}" \ | |
| 286 | + .strip("-") | |
| 287 | + break | |
| 288 | + if agents: | |
| 289 | + details.setdefault("contact", {})["name"] = ", ".join(agents[:3]) | |
| 290 | + if prop.get("ParkingType"): | |
| 291 | + details["parking"] = prop["ParkingType"] | |
| 292 | + if prop.get("OwnershipType"): | |
| 293 | + details["ownership"] = prop["OwnershipType"] | |
| 294 | + | |
| 295 | + images = [p.get("HighResPath") or p.get("MedResPath") or "" | |
| 296 | + for p in prop.get("Photo") or []] | |
| 297 | + images = [u for u in images if u][: self.max_images] | |
| 298 | + | |
| 299 | + rel = r.get("RelativeDetailsURL") or r.get("RelativeURLEn") or "" | |
| 300 | + title = street.strip() or text | |
| 301 | + if unit_type and city: | |
| 302 | + title = f"{title} — {city}" | |
| 303 | + | |
| 304 | + return Listing( | |
| 305 | + source=self.source_id, | |
| 306 | + external_id=pid, | |
| 307 | + url=f"https://www.realtor.ca{rel}" if rel else | |
| 308 | + "https://www.realtor.ca", | |
| 309 | + title=title, | |
| 310 | + address=full_addr, | |
| 311 | + sector=sector, | |
| 312 | + city=city, | |
| 313 | + province=prov, | |
| 314 | + unit_type=unit_type, | |
| 315 | + bedrooms=bedrooms, | |
| 316 | + bathrooms=bathrooms, | |
| 317 | + price=price, | |
| 318 | + price_label=price_label, | |
| 319 | + area_sqft=area, | |
| 320 | + description=(r.get("PublicRemarks") or "").strip()[:900], | |
| 321 | + amenities=amenities[:25], | |
| 322 | + details=details, | |
| 323 | + images=images, | |
| 324 | + lat=lat, | |
| 325 | + lng=lng, | |
| 326 | + ) | |
| 327 | + | |
| 328 | + | |
| 329 | +def _quadrants(box: tuple) -> list[tuple]: | |
| 330 | + lat_min, lat_max, lng_min, lng_max = box | |
| 331 | + lat_mid = (lat_min + lat_max) / 2 | |
| 332 | + lng_mid = (lng_min + lng_max) / 2 | |
| 333 | + return [ | |
| 334 | + (lat_min, lat_mid, lng_min, lng_mid), | |
| 335 | + (lat_min, lat_mid, lng_mid, lng_max), | |
| 336 | + (lat_mid, lat_max, lng_min, lng_mid), | |
| 337 | + (lat_mid, lat_max, lng_mid, lng_max), | |
| 338 | + ] | |
modified
scripts/build_lift_registry.py
+12 −7
@@ -41,6 +41,9 @@ EXCLUDE_IDS = { | ||
| 41 | 41 | 17, # Effort Trust (rc_effort) |
| 42 | 42 | 53, # Sterling Karamar (rsgw_sterlingkaramar) |
| 43 | 43 | 4, # Drewlo (rsgw_drewlo) |
| 44 | + 1746, # « Sterling Karamar » (2e flux LiftSystem — déjà rsgw_sterlingkaramar) | |
| 45 | + 1198, # « (NEW WEBSITE) Drewlo Holdings2 » (déjà rsgw_drewlo) | |
| 46 | + 467, # « Minto Corp Services (Investors) » (déjà minto dédié) | |
| 44 | 47 | } |
| 45 | 48 | PROV_NAMES = { |
| 46 | 49 | "ON": "Ontario", "BC": "British Columbia", "AB": "Alberta", |
@@ -68,6 +71,15 @@ def main() -> None: | ||
| 68 | 71 | lift = json.loads(LIFT.read_text("utf-8")) |
| 69 | 72 | sources = json.loads(SOURCES.read_text("utf-8")) |
| 70 | 73 | |
| 74 | + # drop previously generated entries FIRST (idempotence), keep hand-written | |
| 75 | + # ones — coverage sets must be computed on the FILTERED lists, otherwise a | |
| 76 | + # re-run sees its own past output in have_names and re-adds nothing (bug | |
| 77 | + # found 2026-08-28: sources.json fell from 675 to 100 entries). | |
| 78 | + lift["clients"] = [c for c in lift["clients"] | |
| 79 | + if MARKER not in (c.get("notes") or "")] | |
| 80 | + sources["sources"] = [s for s in sources["sources"] | |
| 81 | + if MARKER not in (s.get("notes") or "")] | |
| 82 | + | |
| 71 | 83 | # existing coverage: ids + normalized names from lift registry and sources |
| 72 | 84 | have_cids = {c.get("client_id") for c in lift["clients"]} |
| 73 | 85 | have_slugs = {c["id"] for c in lift["clients"]} |
@@ -81,13 +93,6 @@ def main() -> None: | ||
| 81 | 93 | except (OSError, ValueError): |
| 82 | 94 | pass |
| 83 | 95 | |
| 84 | − # drop previously generated entries (idempotence), keep hand-written ones | |
| 85 | − lift["clients"] = [c for c in lift["clients"] | |
| 86 | − if MARKER not in (c.get("notes") or "")] | |
| 87 | − sources["sources"] = [s for s in sources["sources"] | |
| 88 | − if MARKER not in (s.get("notes") or "")] | |
| 89 | − have_cids = {c.get("client_id") for c in lift["clients"]} | |
| 90 | − | |
| 91 | 96 | added, skipped_cov, skipped_small = [], 0, 0 |
| 92 | 97 | for line in PROBE.read_text("utf-8").splitlines(): |
| 93 | 98 | try: |
added
scripts/merge_candidates.py
+96 −0
@@ -0,0 +1,96 @@ | ||
| 1 | +# ----------------------------------------------------------------------------- | |
| 2 | +# Rent-Ka — Rental listings aggregator (Canada, outside Québec) | |
| 3 | +# Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 4 | +# scripts/merge_candidates.py : merge data/<platform>_candidates.json (output | |
| 5 | +# of the discovery campaigns) into the live registries + sources.json. | |
| 6 | +# Platforms: appfolio (apf_), buildium (bld_). Dedup by id/subdomain and by | |
| 7 | +# normalized name across every platform registry (a manager already covered | |
| 8 | +# via LiftSystem/RentCafe/etc. must not be ingested twice). Idempotent. | |
| 9 | +# Usage: python scripts/merge_candidates.py | |
| 10 | +# ----------------------------------------------------------------------------- | |
| 11 | +from __future__ import annotations | |
| 12 | + | |
| 13 | +import json | |
| 14 | +import re | |
| 15 | +from pathlib import Path | |
| 16 | + | |
| 17 | +ROOT = Path(__file__).resolve().parents[1] | |
| 18 | +SOURCES = ROOT / "data" / "sources.json" | |
| 19 | +PLATFORMS = { # candidates file -> (registry file, source_id prefix) | |
| 20 | + "appfolio": ("appfolio_clients.json", "apf_"), | |
| 21 | + "buildium": ("buildium_clients.json", "bld_"), | |
| 22 | +} | |
| 23 | + | |
| 24 | + | |
| 25 | +def norm(s: str) -> str: | |
| 26 | + return re.sub(r"[^a-z0-9]", "", (s or "").lower()) | |
| 27 | + | |
| 28 | + | |
| 29 | +def main() -> None: | |
| 30 | + sources = json.loads(SOURCES.read_text("utf-8")) | |
| 31 | + have_names = {norm(s.get("name")) for s in sources["sources"]} | |
| 32 | + all_regs = ["appfolio_clients.json", "buildium_clients.json", | |
| 33 | + "liftsystem_clients.json", "rentcafe_clients.json", | |
| 34 | + "rentsyncgw_clients.json"] | |
| 35 | + for reg in all_regs: | |
| 36 | + try: | |
| 37 | + d = json.loads((ROOT / "data" / reg).read_text("utf-8")) | |
| 38 | + have_names |= {norm(c.get("name")) for c in d.get("clients") or []} | |
| 39 | + except (OSError, ValueError): | |
| 40 | + pass | |
| 41 | + | |
| 42 | + total_added = 0 | |
| 43 | + for plat, (reg_name, prefix) in PLATFORMS.items(): | |
| 44 | + cand_path = ROOT / "data" / f"{plat}_candidates.json" | |
| 45 | + if not cand_path.exists(): | |
| 46 | + print(f"[merge] {plat}: no candidates file, skipped") | |
| 47 | + continue | |
| 48 | + cands = json.loads(cand_path.read_text("utf-8")).get("clients") or [] | |
| 49 | + reg_path = ROOT / "data" / reg_name | |
| 50 | + reg = json.loads(reg_path.read_text("utf-8")) | |
| 51 | + have_ids = {c.get("id") for c in reg["clients"]} | |
| 52 | + have_subs = {c.get("subdomain") for c in reg["clients"]} | |
| 53 | + added = 0 | |
| 54 | + for c in cands: | |
| 55 | + if c.get("status") != "valide" or not c.get("subdomain"): | |
| 56 | + continue | |
| 57 | + if c["id"] in have_ids or c["subdomain"] in have_subs or \ | |
| 58 | + norm(c.get("name")) in have_names: | |
| 59 | + continue | |
| 60 | + reg["clients"].append(c) | |
| 61 | + have_ids.add(c["id"]) | |
| 62 | + have_subs.add(c["subdomain"]) | |
| 63 | + have_names.add(norm(c.get("name"))) | |
| 64 | + if plat == "appfolio": | |
| 65 | + listing_url = f"https://{c['subdomain']}.appfolio.com/listings" | |
| 66 | + else: | |
| 67 | + listing_url = (f"https://{c['subdomain']}.managebuilding.com" | |
| 68 | + f"/Resident/public/rentals") | |
| 69 | + regions = c.get("regions") or [] | |
| 70 | + sources["sources"].append({ | |
| 71 | + "id": f"{prefix}{c['id']}", | |
| 72 | + "name": c.get("name") or c["id"], | |
| 73 | + "url": c.get("site") or listing_url, | |
| 74 | + "listing_url": listing_url, | |
| 75 | + "sectors": ", ".join(regions) if isinstance(regions, list) | |
| 76 | + else str(regions), | |
| 77 | + "connector": f"{prefix}{c['id']}", | |
| 78 | + "status": "actif", | |
| 79 | + "region": "Canada (outside Québec)", | |
| 80 | + "notes": f"canada-expansion 2026-08-28 — {plat} — " | |
| 81 | + f"{c.get('notes', '')}"[:300], | |
| 82 | + }) | |
| 83 | + added += 1 | |
| 84 | + reg["updated"] = "2026-08-28" | |
| 85 | + reg_path.write_text(json.dumps(reg, ensure_ascii=False, indent=1)) | |
| 86 | + print(f"[merge] {plat}: +{added} clients " | |
| 87 | + f"(registry now {len(reg['clients'])})") | |
| 88 | + total_added += added | |
| 89 | + | |
| 90 | + SOURCES.write_text(json.dumps(sources, ensure_ascii=False, indent=2)) | |
| 91 | + print(f"[merge] sources.json now {len(sources['sources'])} entries " | |
| 92 | + f"(+{total_added})") | |
| 93 | + | |
| 94 | + | |
| 95 | +if __name__ == "__main__": | |
| 96 | + main() | |
added
scripts/probe_liftsystem_gaps.py
+107 −0
@@ -0,0 +1,107 @@ | ||
| 1 | +# ----------------------------------------------------------------------------- | |
| 2 | +# Rent-Ka — Rental listings aggregator (Canada, outside Québec) | |
| 3 | +# Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 4 | +# scripts/probe_liftsystem_gaps.py : probe LiftSystem client_ids NEVER probed — | |
| 5 | +# the gaps left by liftsystem_national.txt (enumeration was incomplete) plus | |
| 6 | +# the range beyond its max id. Unlike probe_liftsystem.py there is no name/ | |
| 7 | +# website input: both are read from the feed itself (each property embeds | |
| 8 | +# "client": {id, name, website}). Appends to the same resumable | |
| 9 | +# data/liftsystem_probe.jsonl; feed build_lift_registry.py afterwards. | |
| 10 | +# Usage: python scripts/probe_liftsystem_gaps.py [id_max] (default 3200) | |
| 11 | +# ----------------------------------------------------------------------------- | |
| 12 | +from __future__ import annotations | |
| 13 | + | |
| 14 | +import json | |
| 15 | +import sys | |
| 16 | +import time | |
| 17 | +from collections import Counter | |
| 18 | +from pathlib import Path | |
| 19 | + | |
| 20 | +import requests | |
| 21 | + | |
| 22 | +ROOT = Path(__file__).resolve().parents[1] | |
| 23 | +OUT = ROOT / "data" / "liftsystem_probe.jsonl" | |
| 24 | +LIFT = ROOT / "data" / "liftsystem_clients.json" | |
| 25 | +API = "https://api.theliftsystem.com/v2/search" | |
| 26 | +TOKEN = "sswpREkUtyeYjeoahA2i" | |
| 27 | +UA = {"User-Agent": "RentKaBot/1.0 (+https://www.rent-ka.com/bot; " | |
| 28 | + "contact@spboucher.ai)", | |
| 29 | + "Accept": "application/json"} | |
| 30 | +NONRES = {"office", "retail", "warehouse", "industrial", "commercial", "land", | |
| 31 | + "construction", "motel", "hotel", "parking", "storage"} | |
| 32 | + | |
| 33 | + | |
| 34 | +def probe(cid: int, tries: int = 2) -> dict | None: | |
| 35 | + """None = pas de client (404/vide) ; dict = record probe.jsonl.""" | |
| 36 | + for i in range(tries): | |
| 37 | + try: | |
| 38 | + r = requests.get(API, params={ | |
| 39 | + "client_id": str(cid), "auth_token": TOKEN, | |
| 40 | + "show_all_properties": "true", "limit": "1000", | |
| 41 | + }, headers=UA, timeout=25) | |
| 42 | + if r.status_code == 404: | |
| 43 | + return None | |
| 44 | + if r.status_code != 200: | |
| 45 | + time.sleep(1.5 * (i + 1)) | |
| 46 | + continue | |
| 47 | + props = r.json() | |
| 48 | + if not isinstance(props, list) or not props: | |
| 49 | + return None | |
| 50 | + client = (props[0].get("client") or {}) | |
| 51 | + provs: Counter = Counter() | |
| 52 | + residential = 0 | |
| 53 | + for p in props: | |
| 54 | + pc = ((p.get("address") or {}).get("province_code") | |
| 55 | + or "").upper() | |
| 56 | + if str(p.get("property_type") or "").strip().lower() in NONRES: | |
| 57 | + continue | |
| 58 | + residential += 1 | |
| 59 | + if pc: | |
| 60 | + provs[pc] += 1 | |
| 61 | + return {"client_id": cid, | |
| 62 | + "name": (client.get("name") or f"LiftSystem {cid}").strip(), | |
| 63 | + "website": (client.get("website") or "").strip(), | |
| 64 | + "n": len(props), "res": residential, | |
| 65 | + "provinces": dict(provs)} | |
| 66 | + except Exception: | |
| 67 | + time.sleep(1.5 * (i + 1)) | |
| 68 | + return {"client_id": cid, "error": True} | |
| 69 | + | |
| 70 | + | |
| 71 | +def main() -> None: | |
| 72 | + id_max = int(sys.argv[1]) if len(sys.argv) > 1 else 3200 | |
| 73 | + done: set[int] = set() | |
| 74 | + if OUT.exists(): | |
| 75 | + for line in OUT.read_text().splitlines(): | |
| 76 | + try: | |
| 77 | + done.add(json.loads(line)["client_id"]) | |
| 78 | + except Exception: | |
| 79 | + pass | |
| 80 | + try: | |
| 81 | + reg = json.loads(LIFT.read_text("utf-8")) | |
| 82 | + done |= {int(c["client_id"]) for c in reg.get("clients") or [] | |
| 83 | + if c.get("client_id")} | |
| 84 | + except (OSError, ValueError): | |
| 85 | + pass | |
| 86 | + todo = [i for i in range(1, id_max + 1) if i not in done] | |
| 87 | + print(f"[gaps] {len(todo)} ids to probe ({len(done)} already covered)", | |
| 88 | + flush=True) | |
| 89 | + hits = 0 | |
| 90 | + with OUT.open("a") as fh: | |
| 91 | + for i, cid in enumerate(todo, 1): | |
| 92 | + rec = probe(cid) | |
| 93 | + if rec is not None: | |
| 94 | + rec["ts"] = time.strftime("%Y-%m-%dT%H:%M:%S") | |
| 95 | + fh.write(json.dumps(rec, ensure_ascii=False) + "\n") | |
| 96 | + fh.flush() | |
| 97 | + if not rec.get("error"): | |
| 98 | + hits += 1 | |
| 99 | + if i % 100 == 0: | |
| 100 | + print(f"[gaps] {i}/{len(todo)} — {hits} live clients", | |
| 101 | + flush=True) | |
| 102 | + time.sleep(0.3) | |
| 103 | + print(f"[gaps] done — {hits} live clients found → {OUT}", flush=True) | |
| 104 | + | |
| 105 | + | |
| 106 | +if __name__ == "__main__": | |
| 107 | + main() | |
| 108 | ||