Property Lead Tracker
Lead attribution system: which channel signs tenants, what each costs
A lead source intelligence system for a property rental agency. One data model of 1,140 enquiries, two outputs: a detailed internal dashboard for the agent, and a white-label one-page report for each landlord.
The problem it targets is attribution. A rental agency takes enquiries through five channels (PropertyGuru, Mudah.my, Google Ads, Meta Ads, WhatsApp referral), and standard analytics counts leads rather than tenants and misses phone calls entirely. The fix is to separate two fields the platforms blur: the source a lead came from, and the contact method it arrived by, whether portal chat, WhatsApp, phone call, or lead form. That separation is what turns a pile of messages into a channel scoreboard.
The build is deliberately backend-light:
- Python + pandas analytics over a seed-fixed, reproducible dataset
- A Chart.js five-tab internal dashboard: source comparison, listing velocity, lead quality, responsiveness
- A Jinja2 template that renders a branded owner report per listing and month, white-labelled per agency through one CSS block
- A threshold-rule insight engine that writes the month's recommendations, with optional Claude polish
- A Power BI data model and DAX spec mirroring the dashboard for a Microsoft-BI client
The intelligence layer is rules, not a model. For fully structured enquiry records, a transparent rule beats a black box: consistent, auditable, free, and the owner can see exactly why a listing was flagged stale or a channel was called a volume trap. The same yardstick produces the headline the agent reads, cost per signed tenancy, which ranged from RM0 for referrals to RM2,400 for Meta.
A spreadsheet could hold all of this; the data is four CSV files. What a Sheet cannot do is enforce the taxonomy (by week three the source column reads FB, facebook, and fb ads), flag a stale listing or an after-hours leak without someone building that exact pivot, or turn ten monthly owner reports into anything but ten copy-paste sessions. The honest threshold: one agent with three listings should use a Sheet; this earns its place when hundreds of enquiries, monthly owner reports, and real budget decisions arrive together.
Everything clones: a new listing is one row, a new landlord is one generated report, a new agency is one colour change.