SPB Git forge

spb/house-ka

Public
18commits 1branches 0releases
1.9 MBsize
maindefault branch
19 days agolast push
Python 67% TypeScript 18.2% CSS 14.4%
ZIP tar.gz
NameLast commitUpdated
.claude House-Ka v1 — English homes-for-sale aggregator for Canada outside... 27 days ago
data [ka2] fix connecteur rp_ag_greybruce: ré-application du fix archive... 22 days ago
docs docs: README ultra détaillé + visite guidée en 10 captures 26 days ago
frontend feat(ka-id): connexion KA ID + compte + favoris (hub groupe-ka) 27 days ago
immoka archive 2026-09-04 : état final avant retrait du cluster (bannière... 19 days ago
scripts feat(canada): couverture pan-canadienne hors Québec 27 days ago
.env.example House-Ka v1 — English homes-for-sale aggregator for Canada outside... 27 days ago
.gitignore House-Ka v1 — English homes-for-sale aggregator for Canada outside... 27 days ago
c21_canada.py feat(canada): couverture pan-canadienne hors Québec 27 days ago
normalize.py feat(canada): couverture pan-canadienne hors Québec 27 days ago
README.md archive 2026-09-04 : état final avant retrait du cluster (bannière... 19 days ago
requirements.txt House-Ka v1 — English homes-for-sale aggregator for Canada outside... 27 days ago
run.py House-Ka v1 — English homes-for-sale aggregator for Canada outside... 27 days ago
sources.json [ka2] fix connecteur rp_ag_greybruce: ré-application du fix archive... 22 days ago
README.md source

# House-Ka

⚠️ Application archivée le 2026-09-04 — l'URL live (https://www.house-ka.com) est hors fonction ; l'app a été retirée du cluster MacLustr (registre mld, admin-ka, gardiens, site groupe-ka). Ce dépôt spbgit reste la source de vérité pour une remise en service. www.house-ka.comEvery home for sale. One place.

Homes-for-sale aggregator for Canada outside Québec, Ontario first — a Groupe KA service and the English-language sister site of Immo-Ka (Québec). House-Ka continuously aggregates homes publicly listed by Canadian real-estate brokerages, teams and national networks, with photos, details, maps, live mortgage rates and a direct link back to each source's original listing.

House-Ka is an independent aggregator: it is not a brokerage, does not represent buyers or sellers, and is not affiliated with the sources it indexes. Prices and availability are those displayed by each source.

# At a glance (live, 2026-08-28)

Metric Value
Homes published (deduplicated) ~258,000
Cities & towns 5,991
Active sources 28 CREA DDF brokerage feeds (247 offices)
Average asking price ~$913,000 (from $360 to $79M)
Average data completeness 77.6 / 100
Coverage 9 provinces + 2 territories (all of Canada except Québec & Nunavut)
Launched 2026-08-27

# Guided tour

Ten screenshots of the live site (in docs/screenshots/).

# 1 — Home: search every home in one place

https://www.house-ka.com/

Home page

The landing page states the mission — "Every home for sale. One place." — above the live counters (homes indexed, cities & towns, average and highest price). A scrolling ticker streams per-source volumes in real time (Century 21 Ontario, The Cody Group, Century 21 BC…). Below, the search bar ("Where do you want to live?") combines city, property type and price-range filters with one-tap type chips (House, Land, Condo, Townhouse, Multi-family, Mobile home, Farm), and the result header offers sorting plus a List / Map toggle. The pine-green / cream / serif skin is deliberately distinct from Immo-Ka's cherry theme.

# 2 — Property page: full listing detail

https://www.house-ka.com/property/c21_ab%3Ac21123293118/2-amp-72-highways-rural-rocky-view-county

Property page

A listing detail page (/property/{uid}/{slug}) — here a $2,900,000 land parcel in Rural Rocky View County, Alberta from the Century 21 Canada — Alberta feed. Photo gallery on top, then asking price with the canonical type badge, address with province, a favorites heart (KA ID accounts), breadcrumb navigation, and a Location card rendered by Ka Maps with the price marker and the listing's building/lot highlighted. The DOM order follows the Groupe KA detail-page standard (gallery → price → description → details → analyses → map), identical on mobile and desktop.

# 3 — Live mortgage rates

https://www.house-ka.com/rates

Mortgage rates

The /rates page publishes the rates actually posted by the big Canadian institutions (banks, virtual lenders, monolines), collected continuously by the shared Groupe KA mortgage engine. The market overview shows the best rate per term (fixed 1/3/4/5/10 years, 5-year variable) with the median and 30-day trend, plus every institution's prime rate. The comparison table lists each product with its kind (posted or special offer), freshness and a link to the official source — never an invented rate, never a stale one without a warning.

# 4 — Platform statistics & data quality

https://www.house-ka.com/stats

Platform statistics

The /stats dashboard exposes the platform's own numbers live: homes for sale, cities, average price, source count — and, unusually for a listings site, its full data-quality layer: active vs published listings, quarantine size, average completeness score, and a per-source table with listing counts, completeness and anomaly flags. Every listing gets a completeness score (photos, description, specs, coordinates); listings without a plausible price or a known city are quarantined until the next enrichment pass completes them.

# 5 — Sources by brokerage

https://www.house-ka.com/agencies

Brokerages

The /agencies registry lists every covered brokerage and team — 28 banners, 247 offices — with expandable per-banner listing counts (Century 21 Canada by province, The Cody Group, Revel Realty, Grapevine…). Each source publishes its board's full inventory through the CREA DDF feed; the same property published on several sites is only counted once (deduplication by DDF number). Clicking a source filters the search to its homes.

# 6 — Contact

https://www.house-ka.com/contact

Contact

The contact page, with the House-Ka identity and the Groupe KA footer linking to the sister services.

# 7 — Map view: the whole country on one map

https://www.house-ka.com/?view=map

Map view

The split list/map view powered by Ka Maps (@groupe-ka/ka-maps, the shared Groupe KA Mapbox framework). Clusters show the listing count with the approximate median price underneath; "search this area" re-queries the viewport, and the list panel stays in sync with the markers by construction (single /api/listings search backend). 2D/3D toggle, drawing tool and geolocation included.

# 8 — Account: KA ID single sign-on

https://www.house-ka.com/account

Account

The /account page plugs into KA ID, the central Groupe KA identity (groupe-ka.com): one member identifier valid across the whole ecosystem. Signed-in users get cross-site favorites ("My Ka universe"). The footer presents the ecosystem: Groupe-Ka portal, Immo-Ka (homes for sale in Québec), Lou-Ka (rentals in Québec), Vrai-Prix (Québec market-value estimates).

# 9 — Terms of use

https://www.house-ka.com/terms

Terms

Terms of use — including the independent-aggregator disclaimer and the rules for source attribution and linking back to original listings.

# 10 — Privacy policy

https://www.house-ka.com/privacy

Privacy

Privacy policy: what is collected (KA ID account data, favorites), what is not, and how the analytics distinguish human traffic.


# Features

  • Nationwide search — by city/town (5,991 of them), property type, price range and free-text query; quick type chips; newest-first and price sorting; list or map view.
  • Programmatic SEO pages/for-sale/{city} and /for-sale/{city}/{type} city pages plus /type/{type} pages, all server-rendered with meta, JSON-LD and sitemaps (in English, en_CA).
  • Listing pages — gallery, price, canonical type, specs, description, nearby commerce banners adapted to each province, Ka Maps location card, link to the original listing.
  • Live mortgage rates — national Canadian rates with kind, freshness and official source per product (shared immoka/mortgage/ engine, see docs/mortgage-engine.md).
  • Transparent statistics — public /stats dashboard including the quality layer (quarantine, completeness, anomaly flags per source).
  • KA ID accounts & favorites — Groupe KA single sign-on, cross-site favorites hub.
  • Data quality pipeline — completeness scoring, quarantine, image audit, coordinate guard covering all of Canada, cross-site dedup.

# Data & sources

All 28 active sources are Canadian brokerage / team / network sites whose inventories come from the CREA DDF feed:

  • RealtyPress connector (immoka/connectors/realtypress.py) — one generic connector covers every brokerage or team site running the RealtyPress WordPress plugin (Revel Realty, The Cody Group, Grapevine, Sutton Ottawa, Hanlon Realty…). Each site exposes its board's full inventory; cross-site duplicates are masked by DDF number (external_id = ddf<id>, dedup by MIN(uid)).
  • Century 21 Canada connector (immoka/connectors/c21_canada.py) — one provincial source per region: BC, AB, SK, MB, ON, NB, NS, PE, NL, YT, NT. (Saskatchewan has no polygon API and is searched via ~30 cities; the Alberta watcher uses adaptive sleep for cycles longer than 24 h.)

DDF list cards carry no property type: most listings get their type when their detail page is fetched (IMMOKA_RP_DETAIL_LIMIT per source per sync). Sources are declared in data/sources.json and the site census lives in data/canada_agencies.json; the checked-in sources.json documents the initial registry.

# Canonical property types (English)

House, Condo, Townhouse, Semi-detached, Duplex, Triplex, Multi-family, Cottage, Mobile home, Land, Farm, Commercial, Parking — see immoka/normalize.py.

# Architecture

Forked from Immo-Ka on 2026-08-27 (the Ontario expansion paused there moved here — see the immo-ka repo's docs/ONTARIO-PAUSE.md). The Python package keeps its historical name immoka.

  • Backend — FastAPI + SQLite (data/immoka.db), same pipeline as Immo-Ka: connectors → ingest → dedup → quality (relaxed publication rule: price + city; type/description enrich over time via detail passes) → API. Sync loop runs every 240 minutes under PM2.
  • Frontend — React/Vite, English, pine/cream/serif skin (deliberately different from Immo-Ka's cherry). SPA routes: /, /property/{uid}[/{slug}], /rates, /agencies, /stats, /account, /contact, /terms, /privacy; SEO routes /for-sale/{city}[/{type}] and /type/{type} are resolved server-side. Map = Ka Maps (@groupe-ka/ka-maps, expected at ../../ka-maps).
  • SEOimmoka/seo.py renders server-side HTML (meta, JSON-LD, sitemaps, robots.txt) in English.
  • Mortgage engine — shared with Immo-Ka (immoka/mortgage/), national Canadian rates. See docs/mortgage-engine.md.
  • Removed vs Immo-Ka — everything Québec-only: Hydro-Québec estimates, BDZI flood, RSQAQ air, gazquebec, rental registry, quartier (census), Vrai-Prix, movers/inspectors directories, PDF listing sheets, all QC connectors.

# Repository layout

text
run.py                  CLI entry point (sync / watch / serve / list / geocode / mortgage-sync)
immoka/                 Python package (historical name kept from the Immo-Ka fork)
  web.py                FastAPI app: API + SEO HTML + SPA fallback
  ingest.py, quality.py, normalize.py, schema.py, db.py
  seo.py                English server-side SEO (meta, JSON-LD, sitemaps)
  geocode.py, imgaudit.py, stats.py, commerces.py, poi.py
  auth.py, kaid.py, favorites.py, hubfav.py, hubprofile.py   (KA ID SSO + favorites)
  mortgage/             shared Groupe KA mortgage-rate engine (+ /api/mortgage)
  connectors/           realtypress.py, c21_canada.py, base.py, jsonld.py, _detailutil.py, _resilient.py
frontend/               React/Vite SPA (src/pages: Home, Listing, Rates, Stats, Agencies, Account, Contact, Legal)
scripts/                scouting & maintenance (scout_canada_rp*.py, gen_connector_docs.py, …)
docs/                   mortgage-engine.md, ontario-agencies.md, screenshots/
data/                   SQLite DB + live registries (not committed)

# API

Route Description
GET /api/listings search (city, type, price, text, bbox/polygon, sort, pagination)
GET /api/listings/{uid} full listing detail
GET /api/listings.geojson map markers/clusters feed
GET /api/facets cities, property types, sources facets
GET /api/agencies brokerage/office registry with counts
GET /api/stats live platform + quality statistics
GET /api/stats/catalog, /dashboard, /report stats module (kacharts/kapdf, custom reports via POST /api/stats/report/custom)
GET /api/mortgage live mortgage rates
GET /api/commerces nearby commerce banners per province
/api/auth, /api/favorites KA ID session + favorites
GET /api/sources, POST /api/sync connector registry & manual sync
GET /api/seo/resolve, /sitemap.xml, /sitemaps/{name}, /robots.txt SEO plumbing

# Run

bash
python run.py sync [source ...]   # sync listings
python run.py watch [minutes]     # sync loop (default 60 min; prod uses 240)
python run.py serve [port]        # API + frontend (default 8098)
python run.py list                # registered connectors
python run.py geocode [n]         # geocode listings missing coordinates
python run.py mortgage-sync       # collect mortgage rates

.env (see .env.example, never committed): IMMOKA_BASE_URL=https://www.house-ka.com, IMMOKA_RP_DETAIL_LIMIT=<n> (detail pages fetched per source per sync), plus optional scraping/SSO/mortgage-engine settings.

# Deployment

Node M4M64b, ~/apps/house-ka, PM2:

Process Role
house-ka-web run.py serve on port 8098
house-ka-sync run.py watch 240 (sync loop every 4 h)
house-ka-ngrok tunnel → www.house-ka.com

Remote-first: the repo on the node is the source of truth (never the laptop copies); origin = spbgit, the personal git server (gitsrv:srv/git/house-ka.git, bare repos on M3U96a). Edit over SSH, build, pm2 restart, then commit & push from the node (agent forwarding).

# Adding sources (rest of Canada)

RealtyPress sites exist across Canada. Census & instructions: docs/ontario-agencies.md (method transposes to any province). Add the site to data/canada_agencies.json + an entry in data/sources.json, then python run.py sync <id>. The coordinate guard covers all of Canada.

# Groupe KA ecosystem

House-Ka is one of the Groupe KA platforms (groupe-ka.com): Immo-Ka (homes for sale, Québec), Lou-Ka (rentals, Québec), Rent-Ka (rentals, Canada outside Québec), Vrai-Prix (market-value estimates), Auto-Ka, Food-Ka, Resto-Ka, Sorti-Ka, Job-Ka, Trouve-Ka, Crea-Ka, Fabri-Ka — all sharing KA ID, the ka-ui design system, Ka Maps and the stats/PDF modules.

# Contact

Simon-Pierre Boucher — contact@spboucher.ai — © 2026 Groupe-Ka