# eXp Agence immobilière (Québec) (`exp_ag_qc`) *Généré le 2026-08-28 22:22 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.* ## Registre (`data/sources.json`) - **Site** : https://expquebec.com - **Recherche** : https://expquebec.com/fr/properties/ - **Couverture** : Toute la province — agence virtuelle (~1000+ inscriptions) - **Type** : agence - **Statut** : actif > Site officiel eXp QC (expquebec.com, WordPress + MW Properties). API cliente marketingwebsites.ca bloquée (whitelist IP) MAIS inventaire complet en SSR sur /fr/properties/?pages=N (9/page, param 'pages', stop après 3 pages vides). Carte: data-href mls={Centris}, data-price ($US), data-address, data-pic. Fiche détail /fr/properties/mls/{Centris}/ server-rendered et riche: galerie complète pleine résolution (ancres data-lightbox), remarque+addendum, inclusions/exclusions, icônes (CAC/SDB/superficie MC|PC/année), tables BÂTIMENT/ÉVALUATION/DÉPENSES/CARACTÉRISTIQUES, pièces, GPS exact (embed Street View), courtier+tél. Enrich plafonné IMMOKA_EXP_DETAIL_LIMIT (400/cycle) + cache BD; repli ville via map-property.php (IMMOKA_EXP_CITY_LIMIT). source_id _ag_ = dédup Centris. ## Mécanique (introspection du code) - Module : `immoka/connectors/exp_quebec.py` — classe `ExpQuebecConnector` - Délai entre requêtes : 0.4 s ; cache détail BD : oui - Budgets env (enrichissement détail plafonné/exécution) : `IMMOKA_EXP_DETAIL_LIMIT` (défaut 400), `IMMOKA_EXP_CITY_LIMIT` (défaut 1200) **En-tête du module :** > Immo-Ka — Agrégateur de maisons à vendre (province de Québec) > Auteur : Simon-Pierre Boucher — contact@spboucher.ai > connectors/exp_quebec.py : eXp Realty Québec (expquebec.com) — toute la province. > L'API cliente realestate.marketingwebsites.ca/api.php est verrouillée par > whitelist IP (impasse, même via proxy). MAIS le serveur WordPress (autorisé > sur l'API) rend l'inventaire COMPLET côté serveur sur > /fr/properties/?pages={N} (9 fiches/page, param « pages » uniquement). > Chaque carte porte data-href /fr/properties/mls/{MLS}, data-price ($US), > data-address (rue) et data-pic (property-images/{MLS}/). Le n° MLS = n° Centris. > FICHE DÉTAIL /fr/properties/mls/{MLS}/ : server-rendered elle aussi > (requêtes directes, aucun anti-bot) et TRÈS riche — galerie complète en > pleine résolution (~1728px, ancres data-lightbox="gallery-item"), remarque > du courtier + addendum, inclusions/exclusions, icônes (chambres/sdb/ > superficie MC|PC/année), tables th/td par section (BÂTIMENT, ÉVALUATION, > DÉPENSES, CARACTÉRISTIQUES, DÉTAILS DE PIÈCE), GPS exact dans l'embed > Street View, courtier inscripteur (photo alt + tel: du bloc latéral). > Enrichissement via _detailutil.enrich (cache BD + plafond > IMMOKA_EXP_DETAIL_LIMIT, ~400/cycle). > La VILLE vient de la fiche détail (en-tête h2) ; repli sur l'endpoint SSR > /wp-content/themes/canvas/load/map-property.php?mls={MLS}&lang=fr pour les > fiches au-delà du budget détail (cache « city » déjà peuplé). > ⚠ PLAFOND : le SSR reflète le limit=1000 de l'API sous-jacente → au plus > ~1000 fiches (pages 1..~114, crawl vérifié). C'est l'inventaire pratique > complet ; si eXp QC dépasse un jour 1000 inscriptions, segmenter par région > (params MW_region / MW_q du formulaire), chaque segment ayant son propre cap. > source_id « exp_ag_qc » : infixe _ag_ = dédup Centris (db.refresh_dedup) — > les fiches co-listées avec une bannière couverte sont masquées. ## Volumétrie & complétude (BD live) | Indicateur | Valeur | |---|---| | Annonces en base (toutes) | 1 163 | | Actives | 1 008 | | Visibles (après dédup) | 892 | | Masquées par la dédup | 116 | | GPS (lat/lng) | 99.9 % | | Photos | 100.0 % | | Prix | 99.8 % | | CAC (chambres) | 90.7 % | | SDB (salles de bains) | 89.2 % | | Année de construction | 89.9 % (dont rôle : 2.2 %) | | Taxes / évaluation municipale | 100.0 % | | Estimation Vrai-Prix (rôle) | 99.0 % | ## Synchronisation - **Dernier sync** : 2026-08-28 22:17 — trouvé 1 000, +8 / ~10 / -0 — OK - **Erreurs récentes** : 0 sur les 10 derniers syncs Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).