{
 "_comment": "Immo-Ka — Registre des sources (agences de courtage immobilier, province de Québec). Un connecteur par agence. Auteur : Simon-Pierre Boucher — contact@spboucher.ai",
 "sources": [
  {
   "id": "remax_quebec",
   "name": "RE/MAX Québec",
   "url": "https://www.remax-quebec.com",
   "listing_url": "https://www.remax-quebec.com/fr/maison-a-vendre",
   "coverage": "Toute la province — ~5 000 courtiers, ~119 agences (bannière #1 au Québec)",
   "connector": "remax_quebec",
   "status": "actif",
   "type": "franchise"
  },
  {
   "id": "royal_lepage",
   "name": "Royal LePage (Québec)",
   "url": "https://www.royallepage.ca",
   "listing_url": "https://www.royallepage.ca/fr/search/homes/1/",
   "coverage": "Toute la province — ~2 233 courtiers, ~47 agences (Bridgemarq)",
   "connector": "royal_lepage",
   "status": "actif",
   "type": "franchise",
   "note": "Recherche par ville filtrable QC : GET /fr/search/homes/{page}/?search_str=<ville>, QC&prov_code=QC&city_name=<ville>&lat=&lng=&search_type=city -> 100% QC (46/page), classé par proximité, cap ~1250/recherche. Sharding par ~28 points d'ancrage QC + dédup MLS (= n° Centris dans /.../mls{no}/). Requêtes directes (pas de Firecrawl). Champs liste: adresse, ville, type, prix, CAC, SDB, coords (data-rlp-key), photo jumplisting, MLS."
  },
  {
   "id": "sutton",
   "name": "Groupe Sutton Québec",
   "url": "https://suttonquebec.com",
   "listing_url": "https://suttonquebec.com/maisons-a-vendre.html",
   "coverage": "Toute la province — ~1 300-1 500 courtiers, ~20 agences",
   "connector": "sutton",
   "status": "actif",
   "type": "franchise"
  },
  {
   "id": "via_capitale",
   "name": "Via Capitale",
   "url": "https://www.viacapitalevendu.com",
   "listing_url": "https://www.viacapitalevendu.com/recherche/residentiel/",
   "coverage": "Toute la province — ~5 300 propriétés, ~900-1 000 courtiers (québécoise, Bridgemarq)",
   "connector": "via_capitale",
   "status": "actif",
   "type": "franchise",
   "note": "ASP.NET rendu serveur derrière Cloudflare : accès via Firecrawl proxy=stealth. Résultats paginés ?page=N (34/page, ~155 pages). Parse: adresse, ville, secteur, région, type, prix, photos (images.viacapitale.info). CAC/SDB non captés à ce stade (icônes)."
  },
  {
   "id": "century21",
   "name": "Century 21 (Québec)",
   "url": "https://www.c21.ca",
   "listing_url": "https://listings.moxiworks.com/m214-1731446488/fr-ca",
   "coverage": "Toute la province — ~339 courtiers, ~22 agences",
   "connector": "century21",
   "status": "actif",
   "type": "franchise",
   "note": "Central c21.ca->moxiworks (company_uuid=3341197) : même flux search_v2 anonyme accessible, MAIS données Rest-of-Canada/MLS (pas Centris QC : Québec-ville=0). La couverture QC de C21 vient des sous-agences source.immo (c21_ag_*), déjà actives. Le central moxi n'ajoute rien au QC."
  },
  {
   "id": "proprio_direct",
   "name": "Proprio Direct",
   "url": "https://propriodirect.com",
   "listing_url": "https://propriodirect.com/propriete-a-vendre/",
   "coverage": "Toute la province — ~746 courtiers, agence unique (Bridgemarq)",
   "connector": "proprio_direct",
   "status": "actif",
   "type": "agence",
   "note": "Feed DDF (CREA) servi par API JSON interne POST propriodirect.com/fr/api/searchListings (corps {from:offset}, 30/page, champ total). ~3201 propriétés à vendre, données complètes + galeries photos. Hôte canonique sans www."
  },
  {
   "id": "exp_quebec",
   "name": "eXp Agence immobilière (Québec)",
   "url": "https://www.exprealty.ca",
   "listing_url": "https://www.exprealty.ca/fr-CA/search",
   "coverage": "Toute la province — ~400+ courtiers, agence virtuelle",
   "connector": "exp_quebec",
   "status": "a_faire",
   "type": "agence",
   "note": "Next.js + kvCORE/BoldTrail. Scrapfly asp+render_js rend la page mais ?state=QC NE filtre PAS (cartes = ON/Toronto par defaut, data-adm1st=ON) ; cartes marquees data-compliance-requirement=signIn (DDF gated). js_scenario scroll n'ajoute pas de cartes (18 data-listing, 6 uniques, ON). Pages region QC (/montreal-qc-real-estate) rendent 0 carte. Reste: API kvCORE authentifiee (provider-id 30000) filtree state=QC, non contournable sans session."
  },
  {
   "id": "kw_urbain",
   "name": "Keller Williams Urbain",
   "url": "https://www.kwurbain.ca",
   "listing_url": "https://www.kwurbain.ca/inscriptions/",
   "coverage": "Grand Montréal + Rive-Sud/Rive-Nord",
   "connector": "kw_urbain",
   "status": "actif",
   "type": "franchise",
   "note": "Cartes HTML rendues serveur (plateforme realestate.marketingwebsites.ca) — 349 inscriptions sur une page. Champs: adresse, ville, région, prix, chambres, sdb, photo."
  },
  {
   "id": "kw_distinction",
   "name": "Keller Williams Distinction",
   "url": "https://www.kwdistinction.com",
   "listing_url": "https://www.kwdistinction.com/sitemap.xml",
   "coverage": "Gatineau / Outaouais",
   "connector": "kw_distinction",
   "status": "actif",
   "type": "franchise",
   "note": "ASP.NET (tonikwebstudio) : grille/fiche en AJAX (prix/photos non rendus statiquement, ni fiablement via Firecrawl). Enumération via sitemap.xml (167 propr.) ; slug d'URL = ville/type/chambres/rue/no-Centris. Champs liste: adresse, ville, secteur, type, chambres, Centris. Prix/photos NON dispo."
  },
  {
   "id": "vendirect",
   "name": "Vendirect",
   "url": "https://vendirect.ca",
   "listing_url": "https://vendirect.ca/proprietes/",
   "coverage": "Toute la province — ~609 courtiers, commission réduite",
   "connector": "vendirect",
   "status": "actif",
   "type": "agence",
   "note": "WordPress + plugin source-immo. API publique api-v1.source.immo (en-têtes x-si-account/api/appId depuis _configs.json), pagination next_token. ~64 propriétés à vendre, données complètes (prix, ch., sdb, pi², année, coords, photo)."
  },
  {
   "id": "expert_immobilier_pm",
   "name": "L'Expert Immobilier P.M.",
   "url": "https://expertimmobilierpm.com",
   "listing_url": "https://expertimmobilierpm.com/proprietes/",
   "coverage": "Grand Montréal — ~305 courtiers, grosse indépendante",
   "connector": "expert_immobilier_pm",
   "status": "actif",
   "type": "agence",
   "note": "Vrai site QC trouve (l'ancienne URL lexpertimmobilier.com = agence de Casablanca). WordPress + plugin mw-properties2 (plateforme marketingwebsites.ca, comme KW Urbain). /proprietes/ rend 9 fiches serveur (inventaire complet derriere l'API REST mw-properties/v2 en 401). Cartes: adresse, ville, type, prix, chambres, sdb, superficie ; fiche detail: galerie complete (marketingwebsites) + description. external_id = no Centris."
  },
  {
   "id": "engel_volkers",
   "name": "Engel & Völkers Montréal / Québec",
   "url": "https://immobilier.evquebec.com",
   "listing_url": "https://immobilier.evquebec.com/property-sitemap.xml",
   "coverage": "Montréal, Québec, Tremblant — luxe #1 au Québec",
   "connector": "engel_volkers",
   "status": "actif",
   "type": "luxe",
   "note": "immobilier.evquebec.com : property-sitemap.xml (~1240 fiches FR /propriete/{no-centris}/). Fiche = JSON-LD (prix/adresse/description) ; galerie séquentielle media.evquebec.com/listings/{id}/NN.webp (sondée jusqu'au 1er trou). Enrichissement cache+plafond (IMMOKA_EV_DETAIL_LIMIT)."
  },
  {
   "id": "sothebys_quebec",
   "name": "Sotheby's International Realty Québec",
   "url": "https://sothebysrealty.ca",
   "listing_url": "https://sothebysrealty.ca/en/search-results/province-quebec-real-estate/",
   "coverage": "Toute la province — luxe",
   "connector": "sothebys_quebec",
   "status": "actif",
   "type": "luxe",
   "note": "Recherche rendue côté client. Fiches enumérées via pages de résultats (grid public plafonné ~40 fiches province-wide ; pagination AJAX non exposée en URL). Chaque fiche enrichie via son JSON-LD Product : prix, galerie S3 complète (35-75 photos), description, MLS (sku), type. Limite : couverture = set public courant (~40) ; coverage complète nécessiterait l'endpoint AJAX de pagination."
  },
  {
   "id": "profusion",
   "name": "Profusion Immobilier (Christie's)",
   "url": "https://www.profusion.global",
   "listing_url": "https://www.profusion.global/acheter/nos-inscriptions/",
   "coverage": "Grand Montréal + province — luxe, affiliée Christie's",
   "connector": "profusion",
   "status": "actif",
   "type": "luxe",
   "note": "WordPress DIVI ; nos-inscriptions liste ~357 fiches /propriete/{no-centris}/ (HTML). Fiche = JSON-LD RealEstateListing (adresse, description, prix, courtier) + galerie profusionimmo.ca. Enrichissement cache+plafond (IMMOKA_PROFUSION_DETAIL_LIMIT)."
  },
  {
   "id": "barnes_quebec",
   "name": "BARNES Québec",
   "url": "https://barnes-quebec.com",
   "listing_url": "https://barnes-quebec.com/property",
   "coverage": "Montréal + province — luxe international",
   "connector": "barnes_quebec",
   "status": "actif",
   "type": "luxe",
   "note": "Algolia (App HCW55VIQNM, index quebec_all). ~344 propriétés, prix/MLS/chambres/sdb/superficie/géoloc. Images non indexées (viendront de la page détail). Dédoublonnage FR/EN par adresse."
  },
  {
   "id": "m_immobilier",
   "name": "M Immobilier",
   "url": "https://www.mimmobilier.com",
   "listing_url": "https://www.mimmobilier.com/properties",
   "coverage": "Grand Montréal — indépendante primée (Leading RE)",
   "connector": "m_immobilier",
   "status": "actif",
   "type": "luxe",
   "note": "Cartes HTML rendues serveur (/properties, PAS /proprietes). ~65 propriétés à vendre (locations filtrées). Champs: ville, adresse, prix, chambres, sdb, photos Centris, no Centris. Type non exposé."
  },
  {
   "id": "via_ag_elite",
   "name": "Via Capitale Elite",
   "url": "https://viacapitaleelite.immo",
   "listing_url": "https://viacapitaleelite.immo/proprietes/",
   "coverage": "Sous-agence Via Capitale (source.immo)",
   "connector": "via_ag_elite",
   "status": "actif",
   "type": "franchise",
   "role": "backup"
  },
  {
   "id": "via_ag_select",
   "name": "Via Capitale Select",
   "url": "https://viacapitaleselect.com",
   "listing_url": "https://viacapitaleselect.com/proprietes/",
   "coverage": "Sous-agence Via Capitale (source.immo)",
   "connector": "via_ag_select",
   "status": "actif",
   "type": "franchise",
   "role": "backup"
  },
  {
   "id": "via_ag_dumontroyal",
   "name": "Via Capitale Dumontroyal",
   "url": "https://viacapitaledumontroyal.com",
   "listing_url": "https://viacapitaledumontroyal.com/proprietes/",
   "coverage": "Sous-agence Via Capitale (source.immo)",
   "connector": "via_ag_dumontroyal",
   "status": "actif",
   "type": "franchise",
   "role": "backup"
  },
  {
   "id": "via_ag_acces",
   "name": "Via Capitale Acces",
   "url": "https://viacapitaleacces.com",
   "listing_url": "https://viacapitaleacces.com/proprietes/",
   "coverage": "Sous-agence Via Capitale (source.immo)",
   "connector": "via_ag_acces",
   "status": "actif",
   "type": "franchise",
   "role": "backup"
  },
  {
   "id": "c21_ag_quebec",
   "name": "Century 21 Québec (All Quebec)",
   "url": "https://quebec.c21.ca",
   "listing_url": "https://quebec.c21.ca",
   "connector": "c21_ag_quebec",
   "status": "actif",
   "role": "sous-agence",
   "platform": "source.immo",
   "note": "Compte source.immo partagé (quebec/excel/immoplus) = inventaire provincial C21 complet (~1600 à vendre). Pagination st/nt. Dédup par n° Centris."
  },
  {
   "id": "c21_ag_vision",
   "name": "Century 21 Vision (Outaouais)",
   "url": "https://vision.c21.ca",
   "listing_url": "https://vision.c21.ca",
   "connector": "c21_ag_vision",
   "status": "actif",
   "role": "sous-agence",
   "platform": "source.immo",
   "note": "Century 21 Vision (Gatineau) — compte source.immo distinct (~139 à vendre)."
  },
  {
   "id": "duproprio",
   "name": "DuProprio (sans courtier)",
   "url": "https://duproprio.com",
   "listing_url": "https://duproprio.com/sitemaps/fr/index.xml.gz",
   "coverage": "Toute la province — vente par le propriétaire (FSBO), ~7 600 propriétés QC",
   "connector": "duproprio",
   "status": "actif",
   "type": "fsbo",
   "note": "FSBO. Enumeration via sitemaps FR par region QC (/sitemaps/fr/<region>-listings.xml.gz) : l'URL encode region/ville/type/id. Fiche detail JSON-LD Product (prix, description, galerie photos.duproprio.com). Fetch direct + Scrapfly ASP en secours. agency='DuProprio (sans courtier)'."
  },
  {
   "id": "realta",
   "name": "Réalta Agence Immobilière",
   "url": "https://www.realta.ca",
   "listing_url": "https://www.realta.ca/proprietes/",
   "coverage": "Agence indépendante (Québec)",
   "connector": "realta",
   "status": "actif",
   "type": "agence",
   "note": "Plateforme source.immo (API publique api-v1.source.immo, config auto _configs.json). 83 propriétés à vendre. Généré par agences_source_immo.py."
  },
  {
   "id": "immodev",
   "name": "Immodev Agence Immobilière",
   "url": "https://www.immodev.ca",
   "listing_url": "https://www.immodev.ca/proprietes/",
   "coverage": "Agence indépendante (Québec)",
   "connector": "immodev",
   "status": "actif",
   "type": "agence",
   "note": "Plateforme source.immo (API publique api-v1.source.immo, config auto _configs.json). 93 propriétés à vendre. Généré par agences_source_immo.py."
  },
  {
   "id": "gaillardetz",
   "name": "Gaillardetz Agence Immobilière",
   "url": "https://www.gaillardetz.ca",
   "listing_url": "https://www.gaillardetz.ca/proprietes/",
   "coverage": "Agence indépendante (Québec)",
   "connector": "gaillardetz",
   "status": "actif",
   "type": "agence",
   "note": "Plateforme source.immo (API publique api-v1.source.immo, config auto _configs.json). 13 propriétés à vendre. Généré par agences_source_immo.py."
  },
  {
   "id": "domicilia",
   "name": "Domicilia Agence Immobilière",
   "url": "https://www.domicilia.com",
   "listing_url": "https://www.domicilia.com/proprietes/",
   "coverage": "Agence indépendante (Québec)",
   "connector": "domicilia",
   "status": "actif",
   "type": "agence",
   "note": "Plateforme source.immo (API publique api-v1.source.immo, config auto _configs.json). 1427 propriétés à vendre. Généré par agences_source_immo.py."
  },
  {
   "id": "niddamour",
   "name": "Nid d'Amour Agence Immobilière",
   "url": "https://www.niddamour.ca",
   "listing_url": "https://www.niddamour.ca/proprietes/",
   "coverage": "Agence indépendante (Québec)",
   "connector": "niddamour",
   "status": "a_faire",
   "type": "agence",
   "note": "Plateforme source.immo (API publique api-v1.source.immo, config auto _configs.json). 0 propriétés à vendre. Généré par agences_source_immo.py."
  },
  {
   "id": "kw_prestige",
   "name": "Keller Williams Prestige",
   "url": "https://www.kwprestige.com",
   "listing_url": "https://www.kwprestige.com/sitemap.xml",
   "coverage": "Grand Montréal — bannière KW prestige",
   "connector": "kw_prestige",
   "status": "actif",
   "type": "franchise",
   "note": "Grille/fiche en widget JS (pagination AJAX non exploitable). Enumeration via sitemap.xml (277 fiches a-vendre) ; slug URL = type-a-vendre-ville-secteur-{noCentris}-detail-Fr. Champs liste: type, ville, secteur, n Centris. Prix/photos = widget JS (list cards rendus serveur mais pagination JS ; enrichissement futur via Scrapfly js_scenario)."
  },
  {
   "id": "coldwell_banker",
   "name": "Coldwell Banker Québec",
   "url": "https://coldwellbanker.ca",
   "listing_url": "https://coldwellbanker.ca/",
   "coverage": "Québec — franchise (L'Héritage, Prestige…)",
   "connector": "coldwell_banker",
   "status": "a_faire",
   "type": "franchise",
   "note": "moxiworks org m102181-1733247042 / company_uuid=4277740. FLUX ANONYME CRACKÉ : GET svc.moxiworks.com/service/v1/listing/search_v2?company_uuid=<id>&bounds_west/east/south/north=..&status=active (pas d'auth ; le WAF n'est que sur listings.moxiworks.com, pas sur svc). MAIS le feed = Rest-of-Canada/MLS (TREB Toronto : MLS C.../T...) ; couverture Québec/Centris ~nulle (Québec-ville=0, Montréal=4 fiches à MLS torontois). Non exploitable pour Immo-Ka (QC). CB Québec quasi inexistant sur ce feed."
  }
 ]
}