# Rent-Ka **www.rent-ka.com** — Apartments and homes for rent across **Canada outside Québec** (Ontario first, national expansion in progress). A Groupe KA service, sister site of [Lou-Ka](https://www.lou-ka.com) (Québec rentals) and [House-Ka](https://www.house-ka.com) (Canadian homes for sale). Rent-Ka continuously aggregates rental listings published by Canadian property managers, REITs and national portals: every listing keeps its photos, price, availability and a direct link to the original ad. ## Architecture Forked from Lou-Ka on 2026-08-27 (the Ontario expansion paused there — 65 sources, ~5,850 listings — moved here and went live, with every Québec-only layer removed). The Python package is `rentka/`. - **Backend** — FastAPI + SQLite (`data/rentka.db`): connectors → `ingest` → geocoding (Nominatim) → dedup → `quality` (completeness score + publication gate + Québec exclusion) → API. - **Connectors** (81) — three families: - **Platform generators** (53): LiftSystem/Rentsync (`lift_*`), RentCafe (`rc_*`), Rentsync gateway (`rsgw_*`), Buildium (`bld_*`), AppFolio (`apf_*`) — one JSON registry per platform in `data/*_clients.json`; adding a property manager anywhere in Canada = adding one client row (optional `"province"` key, default `"ON"`). - **National landlords** (12): Boardwalk, CAPREIT, Centurion, Cogir, Hazelview, InterRent, MetCap, Minto, Morguard, Realstar, Akelius, Killam… — whole portfolio outside Québec (AB/SK/BC/MB/NS/NB included). - **National portals** (5): Rentals.ca, Zumper, Kijiji, Apartments.com, Facebook Marketplace — major metros in every province. - **Frontend** — React/Vite, **English (en-CA)**, cobalt skin. Routes: `/`, `/listing/{uid}`, `/city/{slug}[/{type}]`, `/cities`, `/stats`, `/sources`, `/privacy`, `/terms`. Map = Ka Maps (`@groupe-ka/ka-maps`, expected at `../../ka-maps`). - **SEO** — `rentka/seo.py` renders server-side HTML (meta, JSON-LD, sitemaps) in English. - **Enrichment kept** (Canada-wide, no Québec dependency): KA Scores (OSM Walk/Transit/Bike/Quiet/Services), fair rental value, building passport, listing history, re-listed-unit detection, Winter Score, photo audit, manager profiles (SerpApi). - **Removed vs Lou-Ka** — everything Québec-only: Hydro-Québec estimates, rent registry (registre des loyers), TAL history, BDZI flood, RSQAQ air, gazquebec, quartier (QC census), real-cost breakdown, movers directory, the whole short-term subsystem, and ~300 QC connectors. ## Canonical unit types (English) `Studio | 1 bedroom | 2 bedrooms | 3 bedrooms | 4 bedrooms | 5+ bedrooms | Loft | Penthouse | Condo | Townhouse | House | Room` — see `rentka/normalize.py`. Québec «n½» input converts automatically (n½ = n−2 bedrooms), and a central FR→EN label funnel in `schema.finalize()` translates amenities/availability/price labels coming from fr-ca page templates — the DB is uniformly English. ## Run ```bash python run.py sync [source ...] # sync listings python run.py watch [minutes] # sync loop (default 60 min) python run.py serve [port] # API + frontend (default 8125) python run.py list # registered connectors python run.py geocode [n] # geocode listings missing coordinates python run.py quality # recompute publication gate ``` pm2 (node M4M36): `rent-ka-web` (serve 8125) · `rent-ka-sync` (watch 60) · `rent-ka-ngrok` (`ngrok http --url=www.rent-ka.com 8125`). ## Tests ```bash python -m pytest tests/ ``` Connector snapshot tests replay recorded fixtures (`tests/fixtures/`); re-record with `python run.py record ` after changing a connector. ## Expansion playbook The fastest way to add coverage is the platform registries: find property managers whose sites run LiftSystem/RentCafe/Rentsync/Buildium/AppFolio (signatures documented in `gestion-immobiliere-ontario.md` §10) and append a client entry with its `province`. `docs/canada-sources.md` tracks the national source inventory.