1<!-- Author: Simon-Pierre Boucher — contact@spboucher.ai -->23# Rent-Ka45**www.rent-ka.com** — Apartments and homes for rent across **Canada outside6Québec** (Ontario first, national expansion in progress). A Groupe KA7service, sister site of [Lou-Ka](https://www.lou-ka.com) (Québec rentals)8and [House-Ka](https://www.house-ka.com) (Canadian homes for sale).910Rent-Ka continuously aggregates rental listings published by Canadian11property managers, REITs and national portals: every listing keeps its12photos, price, availability and a direct link to the original ad.1314## Architecture1516Forked from Lou-Ka on 2026-08-27 (the Ontario expansion paused there — 6517sources, ~5,850 listings — moved here and went live, with every Québec-only18layer removed). The Python package is `rentka/`.1920- **Backend** — FastAPI + SQLite (`data/rentka.db`): connectors → `ingest`21 → geocoding (Nominatim) → dedup → `quality` (completeness score +22 publication gate + Québec exclusion) → API.23- **Connectors** (81) — three families:24 - **Platform generators** (53): LiftSystem/Rentsync (`lift_*`), RentCafe25 (`rc_*`), Rentsync gateway (`rsgw_*`), Buildium (`bld_*`), AppFolio26 (`apf_*`) — one JSON registry per platform in `data/*_clients.json`;27 adding a property manager anywhere in Canada = adding one client row28 (optional `"province"` key, default `"ON"`).29 - **National landlords** (12): Boardwalk, CAPREIT, Centurion, Cogir,30 Hazelview, InterRent, MetCap, Minto, Morguard, Realstar, Akelius,31 Killam… — whole portfolio outside Québec (AB/SK/BC/MB/NS/NB included).32 - **National portals** (5): Rentals.ca, Zumper, Kijiji, Apartments.com,33 Facebook Marketplace — major metros in every province.34- **Frontend** — React/Vite, **English (en-CA)**, cobalt skin. Routes: `/`,35 `/listing/{uid}`, `/city/{slug}[/{type}]`, `/cities`, `/stats`,36 `/sources`, `/privacy`, `/terms`. Map = Ka Maps (`@groupe-ka/ka-maps`,37 expected at `../../ka-maps`).38- **SEO** — `rentka/seo.py` renders server-side HTML (meta, JSON-LD,39 sitemaps) in English.40- **Enrichment kept** (Canada-wide, no Québec dependency): KA Scores41 (OSM Walk/Transit/Bike/Quiet/Services), fair rental value, building42 passport, listing history, re-listed-unit detection, Winter Score,43 photo audit, manager profiles (SerpApi).44- **Removed vs Lou-Ka** — everything Québec-only: Hydro-Québec estimates,45 rent registry (registre des loyers), TAL history, BDZI flood, RSQAQ air,46 gazquebec, quartier (QC census), real-cost breakdown, movers directory,47 the whole short-term subsystem, and ~300 QC connectors.4849## Canonical unit types (English)5051`Studio | 1 bedroom | 2 bedrooms | 3 bedrooms | 4 bedrooms | 5+ bedrooms |52Loft | Penthouse | Condo | Townhouse | House | Room` — see53`rentka/normalize.py`. Québec «n½» input converts automatically54(n½ = n−2 bedrooms), and a central FR→EN label funnel in55`schema.finalize()` translates amenities/availability/price labels coming56from fr-ca page templates — the DB is uniformly English.5758## Run5960```bash61python run.py sync [source ...] # sync listings62python run.py watch [minutes] # sync loop (default 60 min)63python run.py serve [port] # API + frontend (default 8125)64python run.py list # registered connectors65python run.py geocode [n] # geocode listings missing coordinates66python run.py quality # recompute publication gate67```6869pm2 (node M4M36): `rent-ka-web` (serve 8125) · `rent-ka-sync` (watch 60) ·70`rent-ka-ngrok` (`ngrok http --url=www.rent-ka.com 8125`).7172## Tests7374```bash75python -m pytest tests/76```7778Connector snapshot tests replay recorded fixtures (`tests/fixtures/`);79re-record with `python run.py record <source>` after changing a connector.8081## Expansion playbook8283The fastest way to add coverage is the platform registries: find property84managers whose sites run LiftSystem/RentCafe/Rentsync/Buildium/AppFolio85(signatures documented in `gestion-immobiliere-ontario.md` §10) and append86a client entry with its `province`. `docs/canada-sources.md` tracks the87national source inventory.88