Immo·Ka
Toutes les propriétés à vendre du Québec — maisons, condos, plex et terrains — réunies au même endroit, toujours à jour.
Immo-Ka est un agrégateur immobilier indépendant pour la province de Québec. Chercher une propriété, c'est normalement jongler entre les sites de RE/MAX, Royal LePage, Sutton, Via Capitale, Century 21, DuProprio et des dizaines d'autres bannières — chacun avec sa navigation, ses filtres et son format. Immo-Ka retourne le problème : un connecteur dédié par source (123 connecteurs enregistrés — flux centraux de bannières, sous-agences en plan B, plateformes sans courtier) visite chaque site, normalise chaque annonce vers un schéma unique (PropertyListing), déduplique par numéro Centris et détecte les changements en continu, avec lien direct vers l'annonce originale.
Les sites d'agences n'offrent pas de webhooks : Immo-Ka en reproduit l'équivalent par synchronisation périodique + hash de contenu — ajouts, changements de prix et retraits (propriété vendue) détectés automatiquement, avec délai de grâce contre les ratés ponctuels. Couverture (métriques de l'agrégat) : 70 500+ propriétés actives (70 535 au 2026-08-28), 66 sources, 22 bannières, 159 sous-agences, 3 331 villes. C'est le pendant « à vendre » de Lou-Ka (location), branché sur le moteur d'estimation Vrai-Prix et sur le compte unique KA ID du Groupe KA.
Visite guidée
Captures du 2026-08-28 — desktop 1440×900 · mobile 390×844.
🗄️ Les captures de la refonte v2 (2026-08-25, webp) sont conservées dans
docs/screenshots/desktop/etdocs/screenshots/mobile/; les captures d'époque dansdocs/archive/.
Nouveautés front-end (2026-08-25)
- Refonte éditoriale v2 — accueil et fiche propriété en DA premium « sans boîtes » ; grille desktop uniforme, header sans débordement.
- Tabbar mobile flottante — même langage que Lou-Ka v2 ; ordre DOM = ordre visuel sur la fiche.
- Dédup courtier — priorité au courtier + box « Aussi publiée sur… » sur la fiche.
- Géocodage rigoureux — validation par références de ville (grappes + Nominatim).
- Annuaires — inspecteurs en bâtiment (542) et déménageurs (565, partagé avec Lou·Ka).
- Widget ka-agent v4 — cartes d'annonces cliquables et choix en boutons.
Fonctionnalités
- Recherche & filtres — texte libre (adresse, ville, n° MLS), ville + secteur, type, agence, prix, chambres, salles de bain, superficie ; tri par prix ou récence ; état encodé dans l'URL (partageable).
- Carte Ka Maps — framework carto maison du Groupe KA (moteur Mapbox GL 3D) : grappes de prix, marqueurs colorés selon l'écart au Vrai-Prix, « rechercher en déplaçant la carte », bascule 2D/3D.
- Fiche complète — galerie + lightbox, caractéristiques Centris, pièces & dimensions par étage, inclusions, description, mini-carte d'emplacement.
- Estimation Vrai-Prix — valeur marchande estimée (modèle hédonique + comparables) : jauge P10–P90, verdict sur-évalué / aligné / sous l'estimation.
- Rôle d'évaluation foncière — valeur au rôle terrain/bâtiment, année de construction et superficies officielles, jointes localement depuis la base Vrai-Prix.
- Historique de prix — baisses et hausses du prix demandé horodatées (table
price_log) + jours sur le marché. - Taux hypothécaires & financement — page
/taux-hypothecaires: taux courants par prêteur, calculateur de paiements et « intelligence » de financement (/api/mortgage/*) appliqués au prix de la fiche. - Quartier — aire de diffusion du recensement : revenu médian, loyer moyen, % locataires, proximité épiceries/parcs/soins (StatCan), îlot de chaleur (INSPQ).
- Couches territoriales — registre des loyers, zones inondables (BDZI), qualité de l'air, prix de l'essence, commerces et transport en commun, estimation Hydro-Québec précalculée lors de la sync.
- Stats — tableau de bord
/stats: volumes par type et bannière, écart prix demandé vs estimation Vrai-Prix, panneaux territoire + rapport PDF Groupe-KA. - Agences — registre par bannière → sous-agence, comptes d'annonces dédupliqués.
- Annuaires pratiques — inspecteurs en bâtiment (
/inspecteurs) et déménageurs (/demenageurs, base partagée avec Lou·Ka). - KA ID & favoris — SSO du hub groupe-ka.com (JWT HS256), favoris partagés sur toutes les plateformes Ka ; widget de chat KA Agent intégré.
- SEO programmatique — HTML complet rendu côté serveur, une page indexable par ville / type / ville+type, route canonique
/propriete/:uid/:slug, sitemaps et données structurées.
API principale
Toutes les données servies au frontend passent par une API JSON publique (FastAPI) :
| Endpoint | Rôle |
|---|---|
GET /api/listings |
recherche paginée : texte libre, ville, type, agence, prix, chambres/sdb, superficie, tri |
GET /api/listings/{uid} |
fiche complète d'une annonce (photos, pièces, enrichissements, estimation) |
GET /api/listings.geojson |
flux GeoJSON pour la carte Ka Maps (grappes + marqueurs) |
GET /api/facets |
facettes dynamiques (villes, types, agences, fourchettes de prix) |
GET /api/sources · GET /api/agencies |
état des connecteurs et registre bannières → sous-agences |
GET /api/mortgage/providers · POST /api/mortgage/calculate · /api/mortgage/intelligence |
taux hypothécaires par prêteur, calculateur et analyse de financement |
GET /api/hydro · /api/commerces · /api/air · /api/gaz · /api/inondation |
couches territoriales d'une fiche |
GET /api/stats · /api/stats/dashboard |
métriques agrégées et tableau de bord |
GET /api/stats/report · /api/stats/catalog · POST /api/stats/report/custom |
rapports PDF Groupe-KA (standard et personnalisés) |
GET /api/auth/me · /api/favorites · POST /api/favorites/toggle |
session KA ID et favoris partagés |
POST /api/sync |
déclenchement d'une synchronisation |
GET /robots.txt · /sitemap.xml · /sitemaps/{name} · /api/seo/resolve |
infrastructure SEO |
Connecteurs & sources
123 connecteurs enregistrés (paquet immoka/connectors/), un par source, orchestrés par la boucle d'ingestion :
| Famille de sources | Exemples | Technique d'extraction |
|---|---|---|
| Flux centraux de bannières | RE/MAX Québec, Royal LePage, Sutton, Via Capitale, Century 21, Proprio Direct | API JSON internes (Meilisearch, Algolia, source.immo, wp-json) |
| Sous-agences (plan B) | 159 bureaux — KW Distinction/Prestige/Urbain, eXp Québec, Barnes, Engel & Völkers, BHHS… | API du site du bureau, JSON-LD, sitemaps |
| Sans courtier / petites annonces | DuProprio, Kijiji, LesPAC, Facebook Marketplace | API publiques + extraction dédiée |
| Sites vitrines & SPA anti-bot | agences boutique (Charisma, Imcha, Immeubles Stuart…), GuideHabitation | JSON-LD génériques, sitemaps, Firecrawl en secours |
| Extension Ontario (en pause) | connecteur générique RealtyPress + monstres CREA DDF (revelrealty, codygroup…) | CREA DDF / RealtyPress — suspendue (docs/ONTARIO-PAUSE.md), rien d'effacé |
- Normalisation : chaque annonce est projetée vers le schéma unique
PropertyListing(immoka/schema.py). - Dédup : par numéro Centris (
dup_hidden) — une propriété affichée par 3 sites = 1 fiche, sources créditées ; en front, priorité au courtier + box « Aussi publiée sur… ». - Détection de changements : upsert par hash de contenu ; retraits avec délai de grâce contre les ratés ponctuels d'un site.
- Qualité : couche
quality.py+imgaudit.py— annonces publiées vs quarantaine (fiches incomplètes ou douteuses retenues), audit des images (placeholders, doublons, formats), golden record par propriété. - Cadence : resynchronisation complète aux 4 heures (
run.py watch 240, processusimmo-ka-sync), enrichissements (géocodage, POI, quartier, Vrai-Prix, Hydro-Québec) appliqués au fil de la sync.
Architecture
| Composant | Rôle |
|---|---|
immoka/connectors/ |
123 connecteurs enregistrés (API JSON internes — Meilisearch, Algolia, source.immo, wp-json —, JSON-LD, sitemaps, Firecrawl pour les sites SPA/anti-bot) |
immoka/ingest.py + normalize.py + schema.py |
boucle de sync : normalisation vers PropertyListing, upsert par hash de contenu, dédup Centris (dup_hidden), délai de grâce sur les retraits |
immoka/web.py + seo.py |
FastAPI : API JSON, rendu SEO serveur, service du build frontend |
| Enrichissement | geocode.py, poi.py, quartier.py, vraiprix.py/vraiprix_local.py, hydro.py, inondation.py, air.py, gaz.py, commerces.py, quality.py/imgaudit.py (couche qualité + quarantaine) |
| Base de données | SQLite en mode WAL : data/immoka.db (annonces) + bases annexes (quartier.db, vraiprix.db, hydro.db, air.db, gaz.db, commerces.db, inondation.db, transit.db, rdl.db) |
| Frontend | React 18 + Vite + TypeScript, react-router, design system ka-ui, cartes @groupe-ka/ka-maps (Mapbox GL 3.28) |
Processus PM2 (production) :
| Processus | Commande | Rôle |
|---|---|---|
immo-ka-web |
.venv/bin/python run.py serve 8096 |
API + frontend + SSR SEO |
immo-ka-sync |
.venv/bin/python run.py watch 240 |
resynchronisation des sources aux 4 h |
immo-ka-ngrok |
ngrok http --url=www.immo-ka.com 8096 |
tunnel vers le domaine public |
Structure du repo
| Répertoire | Contenu |
|---|---|
immoka/ |
paquet Python : connecteurs, ingestion, API/SSR, enrichissements, stats |
frontend/ |
SPA React 18 + Vite + TypeScript (pages, composants, ka-maps, ka-ui) |
data/ |
bases SQLite (immoka.db + bases annexes) et registres d'agences JSON |
docs/ |
captures d'écran (visite guidée + archives), docs des connecteurs, rapports de validation |
scripts/ |
outillage (génération des docs connecteurs, rafraîchissement Via Capitale, validation du rendu) |
run.py / requirements.txt |
point d'entrée CLI (sync, watch, serve, list, geocode, poi, quartier, …) et dépendances backend |
Documentation
- Guide d'utilisation en ligne : www.immo-ka.com/doc/ — visite pas à pas du site (accueil, recherche filtrée, fiche détail, carte), avec captures annotées.
- Guide PDF téléchargeable : immo-ka-documentation.pdf — la même documentation, mise en page aux couleurs du site.
- Les captures du guide sont versionnées dans
frontend/public/doc/img/(servies telles quelles par le site).
Développement (remote-first)
La source de vérité est le repo git sur le nœud M4M64a (~/apps/immo-ka) — immo-ka n'a aucune copie laptop. Toute modification se fait sur le nœud via SSH : édition, build, redémarrage, puis commit/push depuis le nœud (agent forwarding actif).
- Remote
origin= spbgit, le git perso (git.spboucher.ai) : alias SSHgitsrvconfiguré sur le nœud →gitsrv:srv/git/immo-ka.git(bare repo hébergé sur M3U96a).
ssh M4M64a
cd ~/apps/immo-ka
# Backend
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
# Frontend
cd frontend && npm install && npm run build && cd ..
# Ingestion et service
.venv/bin/python run.py list # lister les connecteurs
.venv/bin/python run.py sync # synchroniser (ou : sync <source> …)
.venv/bin/python run.py serve 8096 # API + frontend
# Après un changement en prod
pm2 restart immo-ka-web # (ou immo-ka-sync selon le changement)
git add <fichiers> && git commit && git push origin mainDéploiement
En production sur le nœud M4M64a du cluster MacLustr (~/apps/immo-ka), servi sur le port 8096 et exposé via un tunnel ngrok sur www.immo-ka.com. Trois processus PM2 : immo-ka-web (serveur), immo-ka-sync (boucle de sync aux 4 h), immo-ka-ngrok (tunnel). La base data/ de prod est resynchronisée en continu — ne jamais l'écraser.
Écosystème Groupe KA
| Plateforme | Univers |
|---|---|
| groupe-ka.com | portail & KA ID |
| lou-ka.com | logements à louer |
| immo-ka.com | propriétés à vendre |
| vrai-prix.com | estimation immobilière |
| auto-ka.com | véhicules |
| fabri-ka.com | produits québécois |
| food-ka.com | épicerie/alimentation |
| resto-ka.com | restaurants |
| sorti-ka.com | sorties et événements |
| job-ka.com | emplois |
| crea-ka.com | créateurs |
| trouve-ka.com | petites annonces |
| api-ka.com | API de données |
Contact
Simon-Pierre Boucher — fondateur, Groupe KA 📧 contact@spboucher.ai
© Groupe KA — Simon-Pierre Boucher · contact@spboucher.ai Ce repo vit sur spbgit (git.spboucher.ai).










