Skip to content

Execution Plan — March to July 2026

Current State (March 2026)

ComponentStatus
Public listings~660 (Kijiji only)
Scraper DB (raw)~760 raw listings
Phone numbers unmasked409 (93% success rate on backfill)
Listings without phone~316 (not shown as actionable)
PipelineBullMQ — scrape every 30 min, staleness check every 4h
FrontendBilingual FR/EN, Google Maps, search/filters, favorites
AuthJWT, landlord CRUD, image upload
AdminFastify + HTMX at :3002, Bull Board at /queues
ScrapersKijiji only (Playwright + __NEXT_DATA__ parsing)

Target State (July 2026)

ComponentTarget
Public listings2,000+ actionable (with phone number)
SourcesKijiji + Kangalou + Craigslist (3 scrapers)
Organic landlord listingsFirst 50+ via "Claim your listing"
RevenueFirst dollars during July 1 peak season
SEOPage 1 for key Montreal rental queries (FR + EN)
Monthly visitors5,000 → 10,000+

Execution Timeline

March 2026: Data Expansion

Goal: Triple listing count via new scrapers.

TaskEffortExpected Listings
Kangalou scraper (HTTP + cheerio)3-5 days~7,500
Craigslist MTL scraper1-2 days~100-200
Cross-platform deduplication2-3 days
Phone-only import filter1 day
Description normalization1-2 days

Kangalou scraper details:

  • HTTP-only — no Playwright needed (zero anti-bot protection)
  • POST /:lang/api/search for discovery → GET detail pages for full data
  • Coordinates embedded in HTML (no geocoding needed)
  • Phone numbers: create real free account, use auth API (skip for v1 if needed)
  • See Kangalou Analysis for full technical spec

Deduplication:

  • Fuzzy match on: normalized address + price + bedrooms
  • Same listing on Kijiji + Kangalou → keep the one with more data
  • Store cross-platform links in scraper.dedupe_clusters table

Import filter:

  • Only import listings with phone numbers to public site
  • Listings without phone still useful for market data / analytics
  • Reduces "dead listing" perception for tenants

Description normalization (copyright risk mitigation):

  • Don't reproduce verbatim descriptions from source sites
  • Normalize/summarize: extract key facts (size, amenities, date, conditions)
  • Reduces copyright exposure while preserving useful information

April 2026: Product & Trust

Goal: Features that make tenants come back.

FeatureImpactEffort
"Claim your listing" flowLandlord → organic transition3-5 days
CMHC data integration"Is this rent fair?"2-3 days
Saved search alerts (email)Retention + habit3-4 days
SEO landing pagesAcquisition3-5 days
Anti-discrimination filterLegal compliance2 days

"Claim your listing":

  1. Landlord signs up, searches for their property
  2. Verify ownership via phone number match (we have the phone from scraping)
  3. Landlord gains edit access — listing transitions from scraped → organic
  4. This is the legal on-ramp — permission obtained, no more gray zone for that listing

CMHC data integration:

  • Import neighborhood rent averages and vacancy rates
  • Show "Avg rent for 2BR in Plateau: $1,433/mo" on listing detail
  • "This listing is 15% below average" — drives urgency for tenants
  • Data is public (CMHC reports), no scraping needed

SEO landing pages:

  • /en/apartments/plateau-mont-royal + /fr/appartements/plateau-mont-royal
  • One page per neighborhood × bedroom count × language = ~200+ pages
  • Auto-generated from listing data + CMHC stats
  • Target: "apartments for rent in [neighborhood]" in both languages

Anti-discrimination filter:

  • Scan listing descriptions for prohibited phrases (FR + EN dictionaries)
  • Quebec Charter protected grounds: race, sex, age, religion, disability, etc.
  • Flag for manual review or auto-redact before publishing
  • Required for legal compliance in Quebec

May 2026: Landlord Acquisition

Goal: First organic listings and first revenue product.

FeatureImpactEffort
Free direct listing flowOrganic supply3-4 days
Featured listing productFirst revenue3-4 days
Landlord dashboardRetention4-5 days
PM company outreachVolumeOngoing

Featured listing product:

  • $5/day (Basic) — highlighted in search results
  • $10/day (Plus) — top of search + neighborhood page
  • $15/day (Premium) — top of search + homepage spotlight
  • Benchmarked against StreetEasy ($7-22/day) and Kangalou paid boosts
  • Stripe integration, cancel anytime
  • Revenue target: 20 landlords × $10/day × 30 days = $6,000/mo

Property management company outreach:

  • Montreal has ~200-300 PM companies managing 10-100+ units each
  • Offer: bulk listing upload, branded presence, inquiry routing
  • Value prop: "your listings are already on our platform via Kangalou/Kijiji — manage them here"
  • Target: 5-10 PM companies by end of May

June-July 2026: Peak Season & Revenue

Goal: Capture Moving Day momentum, generate first revenue.

FeatureImpactEffort
Moving Day featuresViral potential, PR3-4 days
Featured listing revenueFirst dollarsLive
Tenant screening integrationRevenue stream 23-5 days
Conversion funnel optimizationGrowthOngoing

Moving Day features (July 1):

  • Countdown timer on homepage (cultural resonance)
  • Moving checklist (Hydro-Québec, internet, address change, insurance)
  • Utility setup guide (partner referrals for Hydro, internet providers)
  • "Last-minute listings" section (urgent, high-conversion)
  • PR hook: "X% of Montreal listings on our platform" — media angle

Tenant screening:

  • Partner with Naborly (Canadian, $14.99-24.99/check) or similar
  • Landlords pay per credit/background check
  • Revenue: 10% of 62,700 annual turnovers × $25 = ~$157K/year at scale
  • Even 1% capture = $15.7K/year — meaningful for a startup

Q3-Q4 2026: Platform Maturity

FeatureImpact
In-app messaging (tenant → landlord)Reduce friction, capture data
Digital lease (TAL bail form)Deep platform lock-in
Price history & market analyticsData moat
Moving services referral partnershipsRevenue diversification
Expand to Quebec City, GatineauGeographic growth

Scraping Risk Management

Risk Assessment by Source

SourceRiskWhyIf C&D Received
KijijiLow-MediumAdevinta doesn't litigate small scrapers; blocks IPs insteadComply within 48h, propose data partnership
KangalouMediumCORPIQ is organized but small; ToS prohibits scrapingComply immediately, offer partnership
CraigslistLowLow volume; they only pursue large-scale commercial scrapersComply
Realtor.caHIGHCREA has lawyers + motivation; MLS data is licensedDon't scrape
FacebookHIGHMeta actively litigates; aggressive detectionDon't scrape

The good news:

  • ToS breach = contract claim, not criminal → practical consequence is a C&D letter, not prosecution
  • Reading public HTML / __NEXT_DATA__ is not circumvention under Copyright Act
  • Nobody sues a 2-person startup over 7,500 listings — risk scales with visibility

The real risk:

  • Copyright Act s.41.1 (anti-circumvention) — bypassing paywalls, login walls, or CAPTCHAs programmatically is the statutory risk
  • reCAPTCHA phone reveal in real browser context = gray area (we're using the browser's own reCAPTCHA, not solving it externally)
  • Kangalou phone API: create a real free account, don't solve CAPTCHA programmatically

What we're NOT doing:

  • Not scraping Realtor.ca / Centris (CREA litigation history)
  • Not scraping Facebook Marketplace (Meta litigation history, aggressive detection)
  • Not bypassing login walls or solving CAPTCHAs programmatically
  • Not reproducing verbatim descriptions (normalize/summarize instead)

Engineering Mitigations

  1. Per-source kill switch — instantly remove all data from a specific source (admin toggle)
  2. Rate limiting — respectful scraping, don't impact source servers
  3. Description normalization — don't reproduce verbatim (reduces copyright exposure)
  4. Data minimization — only store what's needed for the listing (Law 25 compliance)
  5. Add genuine value — map, price analysis, CMHC context, cross-platform dedup

The Transition Strategy

Scraped listings (temporary, gray zone)
  → Attract tenants (content moat, SEO)
    → Attract landlords ("your listing already has views")
      → "Claim your listing" (permission obtained, legal)
        → Direct organic listings (fully clean, no scraping needed)

Goal: scraping becomes supplementary by Q4 2026, replaceable by Q2 2027.

Key insight: Every "claim" converts a gray-zone listing into a fully legitimate one. The faster we drive claims, the faster we exit the gray zone.


Quebec Law 25 (Privacy)

  • [ ] Privacy policy covering scraped data collection and purpose
  • [ ] Data minimization — only store what's needed for the listing
  • [ ] PIA (Privacy Impact Assessment) for scraper system
  • [ ] Honor removal requests within 48 hours (admin tool)
  • [ ] Data residency — keep all data in Canada (current: local PostgreSQL)
  • [ ] Designate "person in charge of protection of personal information"

Anti-Discrimination (Quebec Charter)

  • [ ] Auto-detect prohibited phrases in listing descriptions (FR + EN)
  • [ ] Flag/require correction before publishing
  • [ ] Don't enable search filtering by protected characteristics
  • [ ] Document compliance approach for potential TAL inquiries

TAL Compliance (Future Lease Features)

  • [ ] Mandatory lease form fields preserved in digital version
  • [ ] "Notice to new lessee" disclosure (last rent paid + date)
  • [ ] Audit logs for lease acceptance (timestamps, versions)
  • [ ] Legal review before launch

Revenue Model with Benchmarks

Revenue StreamPriceVolume DriverAnnual Revenue @ 10% Market Share
Featured listings$5-15/dayLandlord urgencyTBD (need landlord base first)
Tenant screening$15-25/check62,700 turnovers/yr~$94K-157K
Moving referrals$50-100/referral68,000 July 1 moversLarge, seasonal
Lead generation$5-15/leadInquiry volumeScales with traffic
Display adsCPM-basedMonthly visitorsRequires 50K+ visits

Revenue Benchmarks from Similar Markets

PlatformMarketRevenue ModelScale
StreetEasyNYCFeatured listings $7-22/day~$100M+ ARR (Zillow subsidiary)
Rentals.caCanadaFreemium landlord toolsGrowing, venture-backed
NaborlyCanadaTenant screening $15-25/checkMillions ARR
KangalouMontrealCORPIQ membership + paid boosts~$40-540/listing

PMF Indicators

  • Median time-to-first-inquiry per listing — landlord value signal
  • Repeat posting rate — do landlords come back for next vacancy?
  • Claim rate — scraped → organic conversion (transition metric)
  • Spam/duplicate rate — trust signal for tenants
  • SEO traffic growth — month-over-month organic visits
  • Saved search count — tenant engagement / retention proxy

Montreal-Specific Moat

Why this can't be easily replicated by a US or national platform:

FactorBarrier HeightWhy
Quebec rental lawHighTAL, mandatory bail, rent-fixing %, "notice to new lessee" = deep compliance work
Bilingual requirementHighFR-first is table stakes, not a nice-to-have; full translation of all content
Moving Day (July 1)MediumUnique cultural event, 68K moves in one day, needs specific product features
Law 25 (Privacy)MediumStricter than PIPEDA, requires PIA and data residency
Local market knowledgeHigh37+ neighborhoods with specific rent dynamics, not a national average
Airbnb restrictionsMediumMontreal limits STR (since 2025), pushing supply to long-term rental market
CORPIQ ecosystemMediumKangalou is locked into an industry association; independent platforms can serve both sides

Combined effect: A US platform (Zillow, Apartments.com, Zumper) would need 6-12 months of localization work to compete effectively in Montreal. This window is our advantage.