SPB Git

spb/rent-ka

Public

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 (Aug 28, 2026) parent 575ff9c Browse files

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).", 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", 3+ "updated": "2026-08-28",
4− "clients": [ 4+ "clients": [
5− { 5+ {
6− "id": "fusepm", 6+ "id": "fusepm",
7− "name": "Fuse Property Management", 7+ "name": "Fuse Property Management",
8− "site": "https://fusepm.ca", 8+ "site": "https://fusepm.ca",
9− "subdomain": "fusepm", 9+ "subdomain": "fusepm",
10− "regions": [ 10+ "regions": [
11− "Barrie", 11+ "Barrie",
12− "Orillia", 12+ "Orillia",
13− "Oro-Medonte", 13+ "Oro-Medonte",
14− "Simcoe" 14+ "Simcoe"
15− ], 15+ ],
16− "status": "valide", 16+ "status": "valide",
17− "listings_on": 25, 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" 18+ "notes": "25 annonces ON le 2026-08-27 (Barrie/Orillia/Oro-Medonte), page unique sans pagination ; sous-domaine trouvé dans fusepm.ca"
19− }, 19+ },
20− { 20+ {
21− "id": "regency", 21+ "id": "regency",
22− "name": "Regency Property Management", 22+ "name": "Regency Property Management",
23− "site": "https://regencypm.com", 23+ "site": "https://regencypm.com",
24− "subdomain": "regencypropmgmt", 24+ "subdomain": "regencypropmgmt",
25− "regions": [ 25+ "regions": [
26− "Regina" 26+ "Regina"
27− ], 27+ ],
28− "province": "SK", 28+ "province": "SK",
29− "status": "valide", 29+ "status": "valide",
30− "notes": "canada-expansion 2026-08-27 — /listings 200 avec inventaire (vérifié live)" 30+ "notes": "canada-expansion 2026-08-27 — /listings 200 avec inventaire (vérifié live)"
31− } 31+ }
32− ] 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.", 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", 3+ "updated": "2026-08-28",
4− "clients": [ 4+ "clients": [
5− { 5+ {
6− "id": "richmond", 6+ "id": "richmond",
7− "name": "Richmond Property Management", 7+ "name": "Richmond Property Management",
8− "site": "https://richmondpm.ca", 8+ "site": "https://richmondpm.ca",
9− "subdomain": "richmondmanagement", 9+ "subdomain": "richmondmanagement",
10− "regions": [ 10+ "regions": [
11− "Windsor" 11+ "Windsor"
12− ], 12+ ],
13− "status": "valide", 13+ "status": "valide",
14− "listings_on": 52, 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" 15+ "notes": "52 annonces ON le 2026-08-27, toutes Windsor (MultiFamily 47, SingleFamily 3, CondoTownhome 2) ; mise en page moderne"
16− }, 16+ },
17− { 17+ {
18− "id": "dreampm", 18+ "id": "dreampm",
19− "name": "Dream Property Management", 19+ "name": "Dream Property Management",
20− "site": "https://rentalsdreampm.com", 20+ "site": "https://rentalsdreampm.com",
21− "subdomain": "dreampm", 21+ "subdomain": "dreampm",
22− "regions": [ 22+ "regions": [
23− "Sarnia" 23+ "Sarnia"
24− ], 24+ ],
25− "status": "valide", 25+ "status": "valide",
26− "listings_on": 9, 26+ "listings_on": 9,
27− "notes": "9 annonces ON (Sarnia) le 2026-08-27 ; mise en page moderne" 27+ "notes": "9 annonces ON (Sarnia) le 2026-08-27 ; mise en page moderne"
28− }, 28+ },
29− { 29+ {
30− "id": "grem", 30+ "id": "grem",
31− "name": "Guardian Real Estate Management (GREM)", 31+ "name": "Guardian Real Estate Management (GREM)",
32− "site": "https://grem.ca", 32+ "site": "https://grem.ca",
33− "subdomain": "guardianrealestatemanagement", 33+ "subdomain": "guardianrealestatemanagement",
34− "regions": [ 34+ "regions": [
35− "Sarnia", 35+ "Sarnia",
36− "West Nipissing" 36+ "West Nipissing"
37− ], 37+ ],
38− "status": "valide", 38+ "status": "valide",
39− "listings_on": 44, 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)" 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− }, 41+ },
42− { 42+ {
43− "id": "elite", 43+ "id": "elite",
44− "name": "Elite Property Group", 44+ "name": "Elite Property Group",
45− "site": "https://elitepropertygroup.org", 45+ "site": "https://elitepropertygroup.org",
46− "subdomain": "elitepropertygroup", 46+ "subdomain": "elitepropertygroup",
47− "regions": [ 47+ "regions": [
48− "Sarnia" 48+ "Sarnia"
49− ], 49+ ],
50− "status": "valide", 50+ "status": "valide",
51− "listings_on": 34, 51+ "listings_on": 34,
52− "notes": "34 annonces ON (Sarnia) le 2026-08-27 ; mise en page moderne" 52+ "notes": "34 annonces ON (Sarnia) le 2026-08-27 ; mise en page moderne"
53− }, 53+ },
54− { 54+ {
55− "id": "paragon", 55+ "id": "paragon",
56− "name": "Paragon Property Management & Maintenance", 56+ "name": "Paragon Property Management & Maintenance",
57− "site": "https://paragonproperty.ca", 57+ "site": "https://paragonproperty.ca",
58− "subdomain": "paragonpropertymgt", 58+ "subdomain": "paragonpropertymgt",
59− "regions": [ 59+ "regions": [
60− "Chatham-Kent" 60+ "Chatham-Kent"
61− ], 61+ ],
62− "status": "valide", 62+ "status": "valide",
63− "listings_on": 34, 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)" 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− }, 65+ },
66− { 66+ {
67− "id": "panadew", 67+ "id": "panadew",
68− "name": "Panadew Property Management", 68+ "name": "Panadew Property Management",
69− "site": "https://panadew.ca", 69+ "site": "https://panadew.ca",
70− "subdomain": "panadew", 70+ "subdomain": "panadew",
71− "regions": [ 71+ "regions": [
72− "Kingston" 72+ "Kingston"
73− ], 73+ ],
74− "status": "valide", 74+ "status": "valide",
75− "listings_on": 7, 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" 76+ "notes": "8 cartes ON le 2026-08-27 dont 1 ParkingSpace (filtrée) = 7 résidentielles (Kingston) ; mise en page moderne"
77− }, 77+ },
78− { 78+ {
79− "id": "tag", 79+ "id": "tag",
80− "name": "TAG Property Management", 80+ "name": "TAG Property Management",
81− "site": "https://tagpropertymanagement1.managebuilding.com/Resident/public/home", 81+ "site": "https://tagpropertymanagement1.managebuilding.com/Resident/public/home",
82− "subdomain": "tagpropertymanagement1", 82+ "subdomain": "tagpropertymanagement1",
83− "regions": [ 83+ "regions": [
84− "Cobourg", 84+ "Cobourg",
85− "Port Hope" 85+ "Port Hope"
86− ], 86+ ],
87− "status": "valide", 87+ "status": "valide",
88− "listings_on": 10, 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" 89+ "notes": "10 annonces ON (Cobourg/Port Hope) le 2026-08-27 ; portail Buildium = seul site public ; mise en page moderne"
90− }, 90+ },
91− { 91+ {
92− "id": "genedco", 92+ "id": "genedco",
93− "name": "Genedco Property Management (GRANITE)", 93+ "name": "Genedco Property Management (GRANITE)",
94− "site": "https://genedco.ca", 94+ "site": "https://genedco.ca",
95− "subdomain": "genedco", 95+ "subdomain": "genedco",
96− "regions": [ 96+ "regions": [
97− "Cobourg", 97+ "Cobourg",
98− "Port Hope", 98+ "Port Hope",
99− "Peterborough" 99+ "Peterborough"
100− ], 100+ ],
101− "status": "valide", 101+ "status": "valide",
102− "listings_on": 9, 102+ "listings_on": 9,
103− "notes": "9 annonces ON le 2026-08-27 ; mise en page moderne" 103+ "notes": "9 annonces ON le 2026-08-27 ; mise en page moderne"
104− }, 104+ },
105− { 105+ {
106− "id": "rentcorp", 106+ "id": "rentcorp",
107− "name": "RentCorp Property Management", 107+ "name": "RentCorp Property Management",
108− "site": "https://www.rentcorp.ca", 108+ "site": "https://www.rentcorp.ca",
109− "subdomain": "rentcorppropertymanagement", 109+ "subdomain": "rentcorppropertymanagement",
110− "regions": [ 110+ "regions": [
111− "Waterloo", 111+ "Waterloo",
112− "North Bay", 112+ "North Bay",
113− "London" 113+ "London"
114− ], 114+ ],
115− "status": "valide", 115+ "status": "valide",
116− "listings_on": 26, 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" 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− }, 118+ },
119− { 119+ {
120− "id": "sleepwell", 120+ "id": "sleepwell",
121− "name": "Sleepwell Property Management", 121+ "name": "Sleepwell Property Management",
122− "site": "https://www.sleepwellmanagement.com", 122+ "site": "https://www.sleepwellmanagement.com",
123− "subdomain": "sleepwellpropertymanagement", 123+ "subdomain": "sleepwellpropertymanagement",
124− "regions": [ 124+ "regions": [
125− "Ottawa" 125+ "Ottawa"
126− ], 126+ ],
127− "status": "valide", 127+ "status": "valide",
128− "listings_on": 130, 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" 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− }, 130+ },
131− { 131+ {
132− "id": "athena", 132+ "id": "athena",
133− "name": "Athena Property Management", 133+ "name": "Athena Property Management",
134− "site": "https://athenapropertymanagementinc1.managebuilding.com/Resident/public/home", 134+ "site": "https://athenapropertymanagementinc1.managebuilding.com/Resident/public/home",
135− "subdomain": "athenapropertymanagementinc1", 135+ "subdomain": "athenapropertymanagementinc1",
136− "regions": [ 136+ "regions": [
137− "Hamilton", 137+ "Hamilton",
138− "St. Catharines" 138+ "St. Catharines"
139− ], 139+ ],
140− "status": "valide", 140+ "status": "valide",
141− "listings_on": 29, 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" 142+ "notes": "29 annonces ON le 2026-08-27 (Hamilton surtout) ; découvert via Serper pendant la validation ; mise en page moderne"
143− }, 143+ },
144− { 144+ {
145− "id": "gooddoors", 145+ "id": "gooddoors",
146− "name": "GoodDoors Property Management", 146+ "name": "GoodDoors Property Management",
147− "site": "https://gooddoors.com", 147+ "site": "https://gooddoors.com",
148− "subdomain": "gooddoors", 148+ "subdomain": "gooddoors",
149− "regions": [ 149+ "regions": [
150− "Regina", 150+ "Regina",
151− "Saskatoon" 151+ "Saskatoon"
152− ], 152+ ],
153− "province": "SK", 153+ "province": "SK",
154− "status": "valide", 154+ "status": "valide",
155− "notes": "canada-expansion 2026-08-27 — 18 annonces live (SK), page publique 200 sans anti-bot" 155+ "notes": "canada-expansion 2026-08-27 — 18 annonces live (SK), page publique 200 sans anti-bot"
156− }, 156+ },
157− { 157+ {
158− "id": "imperial", 158+ "id": "imperial",
159− "name": "Imperial Properties", 159+ "name": "Imperial Properties",
160− "site": "https://imperialproperties.ca", 160+ "site": "https://imperialproperties.ca",
161− "subdomain": "ip", 161+ "subdomain": "ip",
162− "regions": [ 162+ "regions": [
163− "Winnipeg", 163+ "Winnipeg",
164− "Regina" 164+ "Regina"
165− ], 165+ ],
166− "province": "MB", 166+ "province": "MB",
167− "status": "valide", 167+ "status": "valide",
168− "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage (inventaire variable)" 168+ "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage (inventaire variable)"
169− }, 169+ },
170− { 170+ {
171− "id": "frontenac", 171+ "id": "frontenac",
172− "name": "Frontenac Property Management", 172+ "name": "Frontenac Property Management",
173− "site": "https://frontenacproperty.com", 173+ "site": "https://frontenacproperty.com",
174− "subdomain": "frontenacproperty", 174+ "subdomain": "frontenacproperty",
175− "regions": [ 175+ "regions": [
176− "Kingston" 176+ "Kingston"
177− ], 177+ ],
178− "province": "ON", 178+ "province": "ON",
179− "status": "valide", 179+ "status": "valide",
180− "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage" 180+ "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage"
181− }, 181+ },
182− { 182+ {
183− "id": "universalrealty", 183+ "id": "universalrealty",
184− "name": "Universal Realty Group", 184+ "name": "Universal Realty Group",
185− "site": "https://universalrealty.net", 185+ "site": "https://universalrealty.net",
186− "subdomain": "universalrealty", 186+ "subdomain": "universalrealty",
187− "regions": [ 187+ "regions": [
188− "Halifax" 188+ "Halifax"
189− ], 189+ ],
190− "province": "NS", 190+ "province": "NS",
191− "status": "valide", 191+ "status": "valide",
192− "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage" 192+ "notes": "canada-expansion 2026-08-27 — page publique 200, 0 annonce au moment du sondage"
193− } 193+ },
194− ] 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 "province": "ON", 8392 "province": "ON",
8393 "status": "valide", 8393 "status": "valide",
8394 "notes": "canada-expansion 2026-08-27 — probe live: 111 propriétés résidentielles hors QC (ON 93, AB 10, NS 8)" 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 {"client_id": 2495, "name": "Les Immeubles Logis Belanger", "website": "", "n": 2, "res": 2, "provinces": {"QC": 2}, "ts": "2026-08-27T20:13:33"} 1141 {"client_id": 2495, "name": "Les Immeubles Logis Belanger", "website": "", "n": 2, "res": 2, "provinces": {"QC": 2}, "ts": "2026-08-27T20:13:33"}
1142 {"client_id": 2497, "name": "Spire Development", "website": "www.spiredevelopment.ca", "n": 1, "res": 1, "provinces": {"BC": 1}, "ts": "2026-08-27T20:13:34"} 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 {"client_id": 2500, "name": "Coletara Developments", "website": "", "n": 1, "res": 1, "provinces": {"ON": 1}, "ts": "2026-08-27T20:13:35"} 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 "sources": [ 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 "id": "cogir", 16 "id": "cogir",
6 "name": "Cogir Immobilier", 17 "name": "Cogir Immobilier",
@@ -8678,6 +8689,984 @@
8678 "status": "actif", 8689 "status": "actif",
8679 "region": "Ontario / Alberta / Nova Scotia — LiftSystem", 8690 "region": "Ontario / Alberta / Nova Scotia — LiftSystem",
8680 "notes": "canada-expansion 2026-08-27 — API LiftSystem client_id 2471" 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 "updated": "2026-08-27" 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 17, # Effort Trust (rc_effort) 41 17, # Effort Trust (rc_effort)
42 53, # Sterling Karamar (rsgw_sterlingkaramar) 42 53, # Sterling Karamar (rsgw_sterlingkaramar)
43 4, # Drewlo (rsgw_drewlo) 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 PROV_NAMES = { 48 PROV_NAMES = {
46 "ON": "Ontario", "BC": "British Columbia", "AB": "Alberta", 49 "ON": "Ontario", "BC": "British Columbia", "AB": "Alberta",
@@ -68,6 +71,15 @@ def main() -> None:
68 lift = json.loads(LIFT.read_text("utf-8")) 71 lift = json.loads(LIFT.read_text("utf-8"))
69 sources = json.loads(SOURCES.read_text("utf-8")) 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 # existing coverage: ids + normalized names from lift registry and sources 83 # existing coverage: ids + normalized names from lift registry and sources
72 have_cids = {c.get("client_id") for c in lift["clients"]} 84 have_cids = {c.get("client_id") for c in lift["clients"]}
73 have_slugs = {c["id"] for c in lift["clients"]} 85 have_slugs = {c["id"] for c in lift["clients"]}
@@ -81,13 +93,6 @@ def main() -> None:
81 except (OSError, ValueError): 93 except (OSError, ValueError):
82 pass 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 added, skipped_cov, skipped_small = [], 0, 0 96 added, skipped_cov, skipped_small = [], 0, 0
92 for line in PROBE.read_text("utf-8").splitlines(): 97 for line in PROBE.read_text("utf-8").splitlines():
93 try: 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
Menu

Theme