Which channel finds your tenant?
Challenge: A rental agency receives enquiries through five different doors: PropertyGuru chats, Mudah messages, Google and Meta ad leads, and WhatsApp referrals. Each platform reports only its own numbers. None of them can answer the one question the owner is paying to answer: which channel actually produces signed tenants, and what does each tenant cost to find? Without that, marketing budget is spent on the channel that looks busiest, not the one that works.
Solution: Property Lead Tracker collects every enquiry in one place, labels each one with where it came from, what it cost, and whether it led to a signed tenant, and follows it all the way through. It then answers three plain business questions: where the best leads come from, how much a tenant costs from each channel, and where to put next month's budget. The same data feeds two reports: a detailed dashboard for the agent, and a simple one-page report for each landlord.
Six months of data, every enquiry tagged with its source and followed to its outcome. Volume means nothing until it converts.
| Channel | Enquiries | Qualified | Tenancies | Cost per tenancy | Verdict |
|---|---|---|---|---|---|
| WhatsApp referral | 101 | 67% | 2 | RM 0 | Champion |
| PropertyGuru | 293 | 41% | 2 | RM 1,350 | Workhorse |
| Google Ads | 115 | 50% | 2 | RM 1,800 | Quality engine |
| Meta Ads | 172 | 27% | 1 | RM 2,400 | Rooms only |
| Mudah.my | 459 | 15% | 0 | Undefined | Volume trap |
The cheapest enquiries (Mudah, 40% of all volume) produced zero tenants. The most expensive enquiries (Google Ads, RM31 each) became the second-cheapest tenancies, because half of them were qualified. That is the difference between counting leads and counting tenants.
Ranks all five channels by cost per enquiry, qualified rate, cost per viewing, and cost per tenancy. The single table the owner reads to decide where the budget goes.
Watches how fast each unit attracts enquiries and flags any whose interest has dried up (one dropped 89% after two weeks) for a price review instead of more ad spend.
Keeps track of both where a lead came from (a portal, an ad, a friend's referral) and how it reached you (a chat, a WhatsApp, a phone call), so even phone enquiries get counted. Most tools miss those.
Surfaces that one in five enquiries arrives after 8pm or at weekends, and those go unanswered three times as often, roughly RM700 of paid leads dropped.
Generates a plain-language one-page report per listing from the same data, branded per agency through a single CSS skin block. No rebuild to add a landlord or a firm.
Threshold rules turn the month's numbers into written recommendations (reprice this listing, cap Meta to rooms, recover the after-hours leak) the agent edits and sends.
A simple set of rules reads each month's numbers and writes a plain note whenever something needs attention: too many enquiries going unanswered, a unit going quiet, or one channel costing far more per lead than the others. Every note points back to a real number, so it always agrees with the dashboard.
The draft notes can be tidied into smooth, ready-to-send wording by Claude AI, with every figure kept exactly as is. The system works fine without this step, so there is no extra cost unless you switch it on.
For tidy enquiry records like these, a clear rule beats a complicated model: it is consistent, you can check it, and it is free. The owner can see exactly why a unit was flagged or a channel was called a waste of money.
Every figure on every page comes from the same set of 1,140 enquiries. Change the data and the dashboard, the reports, and the notes all update together.
The honest part first: a spreadsheet can hold all of this. The data is four CSV files, and a disciplined agent could log every enquiry in a Sheet and build pivot tables. So the value is not storage. It is the five things that quietly break when a spreadsheet is the whole system.
The attribution only works because every enquiry carries a controlled source, contact method, qualification rule, and outcome from a fixed list. In a real Sheet, by week three one row says "FB", the next "facebook", the next "fb ads", the outcome column is half blank, and "qualified?" is filled by gut feel. The analysis dies from dirty categories, not missing formulas. Dropdowns, validation, and a written rule keep six months of data comparable.
The stale-listing flag and the after-hours leak surfaced on their own, because the system compares every listing's recent pace to its opening fortnight and timestamps every enquiry. In a Sheet, those insights exist only if the agent thinks to build that exact pivot, this month, and remembers to check it. The busy agent never does, which is precisely why the leak existed. Monitoring beats analysis-on-demand.
Cost per tenancy joins enquiries to listings to two differently-allocated cost tables (ad spend by segment, platform fees by days listed). In a Sheet that is VLOOKUP chains that silently break when a row is inserted, a listing renamed, or a month added. The number still displays; it is just wrong, and nobody knows. A real data model recalculates correctly by construction.
Ten landlords each expect a branded monthly report. In a Sheet that is ten copy-paste-screenshot sessions a month, with stale numbers and formatting drift. The system generates ten white-label one-pagers from the same data in seconds, and an eleventh listing means zero extra work. This alone is hours saved every month, and it is the deliverable that keeps owners and their exclusive listings loyal.
Ten listings is a spreadsheet's comfort zone. Fifty listings, three agents, two agency brands is where the Sheet becomes the full-time job of one unlucky person. The system absorbs growth by adding rows.
The fair threshold, stated openly: if you are one agent with three listings and twenty enquiries a month, use a Sheet, you do not need this. The breakpoint is when volume, recurrence, and multiple audiences arrive together: hundreds of enquiries, monthly owner reports, and budget decisions worth real ringgit. Our demo agency crossed it at 1,140 enquiries, where the Mudah inversion was invisible in raw rows and obvious in the dashboard. And the design concedes the point gracefully: Google Sheets stays the capture layer. We are not replacing the spreadsheet; we put enforcement underneath it and intelligence on top of it.
pandas, numpy, jinja2ui-1-internal-dashboard.html: the interactive internal dashboardui-3-case-study.html: the case study, which links to the dashboard and a sample owner reportowner-reports/out/: the generated branded owner reports