ForgeQubit.
← Case Studies/Real Estate Investment/CS-04

SwissPropertyLeadIntelligencePlatform

A mid-market Swiss investment firm sourced deals from Flatfox, Homegate, and ImmoScout24 — via inbox alerts and spreadsheets. We replaced the copy-paste layer with an orchestrated pipeline: intake, portal-specific extraction, structured normalisation, contact enrichment, and a single sheet the team could trust.

/headline-outcome
48h → 5malert to enriched lead
/industryReal Estate Investment
/system-typeLead Intelligence
/outcomeTime Reduction
/read-time12 min read
/context

Context.

A Swiss real estate investment and property-management firm running acquisition research across three national listing portals. Alerts were fast; the internal process to turn alerts into actionable, enriched leads was not.

/businessRE investment & property management · Switzerland
/sourcesFlatfox · Homegate · ImmoScout24
/scale-before~30 listings/day/analyst · manual ceiling ~40
/engagementAutomation build · 8 weeks · live Q2 2025
/existing-stack
  • ·Gmail (listing alerts · three monitored inboxes)
  • ·Flatfox / Homegate / ImmoScout24 (listing pages · mixed static & dynamic HTML)
  • ·n8n (orchestration)
  • ·Apify (headless extraction for JS-heavy portals)
  • ·OpenAI (structured extract + enrichment)
  • ·Google Sheets (central lead repository)
/problem

Problem.

System view — not vague business talk.

Lead generation was email-native but ops-native to spreadsheets. Analysts triaged the same alert three different ways, re-opened every listing in-browser, and hand-copied fields into siloed tabs — with no deduplication, no audit trail, and no standard contact record.

  1. /01

    Inbox as queue

    Alerts from all three portals landed as email. There was no canonical event — only forwards, screenshots, and rows pasted into separate workbooks. Duplication across team members was routine.

  2. /02

    Portal heterogeneity

    Flatfox yielded relatively static HTML; Homegate and ImmoScout24 required rendered pages. Each portal needed a different manual path, so throughput capped on analyst attention, not market volume.

  3. /03

    Thin contact records

    Roughly six in ten leads lacked a usable agency email. Analysts burned time on Google and LinkedIn tangents; outreach failed on incomplete rows as often as on bad deals.

  4. /04

    No validation or policy gates

    Temporary and non-target listings (e.g. befristet rentals) consumed the same attention as core inventory. Formatting drift between portals made aggregation and reporting a second manual project.

  5. /05

    Latency vs. competition

    End-to-end time from alert to sheet-ready lead routinely ran 24–48 hours. The firm was competing on judgement while the process guaranteed they would always be late to fresh inventory.

/before-system

Before.

Workflow as it existed, with failure points marked.

A six-step ritual repeated for every batch of alerts: read mail, open each portal, extract fields by hand, chase contacts, normalise nothing, file into category-specific sheets — then argue about which version was current.

/before-state · manual · unobserved
  1. 01

    Alert email triage

    3 senders · forward / copy · no idempotency

    manual
  2. 02

    Open listing in source portal

    8–12 min/listing · 3 UX patterns

    bottleneck
  3. 03

    Manual field extraction

    address · price · specs · CHF & DE terminology

    manual
  4. 04

    Contact research

    5–10 min when email missing · browser sprawl

    bottleneck
  5. 05

    Spreadsheet entry & sort

    commercial / residential / private · 3 tabs

    manual
  6. 06

    Validation & reporting

    ad hoc · no lineage · quarterly rebuild

    broken
/after-system

After. Forged architecture.

Trigger · Decision · Execution · Data · Observability.

One intake path from Gmail, deterministic portal routing, parallel extractors (HTTP + Apify), a structured LLM normalisation pass with explicit nulls for unknown fields, conditional enrichment with confidence scoring, and append-only audit metadata into Sheets.

/L-01

Trigger

Listing alerts as canonical events

  • · node
    Gmail poller

    API watch on three alert mailboxes; HTML body and links normalised into a single `listing.alert` payload within ~60s of arrival

  • · node
    Attachment / link harvest

    Listing URL extracted reliably; downstream idempotency keyed on portal + listing id

/L-02

Decision

Portal routing, classification, policy filters

  • · node
    Sender + URL classifier

    Routes to Flatfox, Homegate, or ImmoScout24 pathways without human triage

  • · node
    Listing policy gate

    Keyword and structured rules drop befristet / non-target inventory before enrichment spend

  • · node
    Tier routing

    Commercial, residential, and private-rental buckets drive which Sheet tab receives the row

/L-03

Execution

Extract, normalise, enrich, persist

  • · node
    Static extractor

    HTTP fetch + CSS parsing for Flatfox-shaped pages

  • · node
    Dynamic extractor

    Apify actors + dataset polling for JS-rendered Homegate / ImmoScout24 content

  • · node
    Structured extract

    LLM emits schema-locked JSON — addresses, CHF amounts, areas, floors (EG / OG normalisation), equipment arrays

  • · node
    Contact enrichment

    Conditional web-assisted lookup when HTML lacks email; high / medium / low confidence recorded with source attribution

  • · node
    Sheets sync

    Google Sheets API writes 50+ fields per row with timestamps and processing lineage

/L-04

Data

One repository, typed columns, audit fields

  • · node
    Central workbook

    Category tabs aligned to investment tiers; dashboard-ready columns

  • · node
    Lineage

    Source portal, extract method, model version, and enrichment provenance stored per lead

/L-05

Observability

Operational confidence, not inbox hope

  • · node
    Per-run logging

    n8n execution history plus structured error paths; failed listings don't stall batch

  • · node
    Quality metrics

    Extraction accuracy and contact-completion tracked against targets; alerts on error-rate spikes

/what-we-built

Components.

/c-01n8n · Gmail

Alert intake workflow

Polls three mailboxes, parses HTML, emits normalised alert events with stable keys for deduplication.

/c-02Decision layer

Portal router

Sender- and pattern-based switch to Flatfox, Homegate, or ImmoScout24 extractors — parallel where possible.

/c-03Extraction

Dual-path scrapers

Direct fetch + selector pipeline for static pages; Apify-backed headless flow for dynamic portals with async completion waits.

/c-04LLM service

Structured normaliser

Schema-constrained JSON output for multilingual Swiss market copy; nulls for missing data instead of invented fields.

/c-05Conditional AI

Enrichment gate

Skips expensive lookup when email already present; scores and attributes enriched contacts for outreach prioritisation.

/c-06Persistence

Sheets projection

Real-time sync to categorised tabs; timestamps and audit columns for compliance and replay.

/outcomes

Outcomes. Measured.

Numbers out of the production system — not testimonials.

/m-01−99%
48h → 5malert to sheet-ready lead

Wall-clock from mailbox delivery to enriched row available for outreach — down from one-to-two days of queued manual work.

/m-02+32 pts
62% → 94%contact-complete leads

Share of rows with actionable agency contact after enrichment, vs. manual baseline.

/m-03same team
10×daily listing capacity

System sustained 300+ listings/day across portals vs. ~30 manual before process breakdown.

/m-04batch effort
~98%manual handling time removed

Analyst time reduced to monitoring and edge exceptions vs. multi-hour copy-paste cycles (measured on ~30-listing batches).

/system-insight
The portals were never the bottleneck — the absence of a pipeline was. Once alerts became events, extraction became a product surface, and enrichment became a gated service, the team stopped competing on who could tolerate the most tabs. They competed on which deals to call first.
/keep-reading

Adjacent systems.

CS-01Logistics Systems

Logistics Dispatch System

A regional 3PL with 400+ daily shipments ran dispatch through a spreadsheet, a call rota, and the judgement of three senior planners. We replaced the judgement with an engineered decision layer.

48h → 2hView system
CS-02E-commerce Systems

E-commerce Fulfillment System

A DTC health & beauty brand scaled from 50 to 500 orders a day using humans as the integration layer. We rebuilt the spine so the next 5× happened without adding headcount.

3.2M ops / yrView system
/next

Want your system redesigned?

Every case on this site started as an audit. If this study described a system that looks like yours, the fastest next step is a formal operations diagnostic.