SPB Git forge

spb/rent-ka

Public
8commits 1branches 0releases
7.4 MBsize
maindefault branch
19 days agolast push
Python 68.8% TypeScript 18.6% CSS 8.7% JavaScript 3.3% HTML 0.6%

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>
Simon-Pierre Boucher committed 27 days ago (Aug 28, 2026) parent 575ff9c

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