Pau Analytics · Portfolio Build · Project Outline v1.0

Which channel finds your tenant?

A lead source intelligence system for a Klang Valley rental agency running 10 listings across 5 enquiry channels. Multi-source attribution, lead quality tracking, and a two-audience white-label reporting layer, modeled on a real Upwork market demand signal.

StatusDataset generated · Pre-build
Data windowDec 2025 – May 2026
Market evidenceUpwork batch 5 Jun 26, job #11
Date11 June 2026
01 · Project Definition

What this project is

At its heart, the system answers one question for a rental agency: where do our leads actually come from, and which sources are worth the money?

A property agent receives enquiries through many doors: portal chats, WhatsApp messages, phone calls, ad lead forms. Each platform only sees its own door. This system collects every enquiry into one place, tags it with its source, its cost, and its outcome, and presents the combined picture in two formats: a detailed internal dashboard for the agent, and a simple white-label report for each property owner.

Audience (defined first)

Primary

The agency principal / agent. Decides monthly where marketing ringgit goes, which listings need price reviews, and whether enquiries are being lost. Needs operational detail.

Secondary

The property owner (landlord). Receives a monthly branded one-page report proving the agent is actively marketing their unit. Needs plain language and confidence, not metrics.

Market evidence

Sourced from a live Upwork posting: a UK marketing agency seeking a white-label, multi-source reporting system with call tracking, lead quality analysis, two-audience dashboards, and monthly written insights, cloneable across clients. This build transplants every demanded mechanism into the Malaysian rental property vertical: attribution across paid and free channels, the untracked-phone-lead problem, the volume-versus-quality trap, and the clone-per-client architecture (here, clone-per-listing and clone-per-owner).

02 · Scope

Portfolio and lead sources

10 listings, two segments

IDListingAreaSegmentRent (RM/mo)Role in dataset
L01Arte Mont KiaraMont KiaraWhole unit1,749Signed Feb · PropertyGuru
L02Nexus Residence (room)CherasRoom899Signed Apr · Meta Ads
L03J.Dupion (female room)CherasRoom799Active · mismatch pattern host
L0428 Boulevard studioAmpangStudio1,599Active
L05Nexus Residence (whole unit)CherasWhole unit2,999Signed May · comparison anchor for L09
L06J.Dupion (master room)CherasRoom1,200Signed Mar · Referral
L07Lavile Kuala LumpurMaluriWhole unit1,800Star performer · signed in 3 weeks
L08M Vertica (room)MaluriRoom850Signed Apr · Referral
L09Sunway Velocity TwoMaluriWhole unit3,400Planted stale listing
L10Razak City studioSungai BesiStudio1,350Signed Mar · Google Ads

All identities fictionalized: agent persona "Adeline Khoo (PEA 9183), Klang Valley Homes Realty". Listing structures modeled on real KL market patterns.

5 lead sources across 4 categories

SourceCategoryCost structureAnalytical role
PropertyGuruPlatformSubscription + boostsPremium portal workhorse
Mudah.myPlatformNear-free + bumpsHigh volume, low quality trap
Google AdsSearch adCampaign spendCleanest cost-per-lead channel, intent leads
Meta AdsSocial mediaCampaign spendVisual targeting, room segment specialist
WhatsApp referralReferralRM0Quality benchmark, the invisible champion

Source (where they came from) and contact method (portal chat, WhatsApp, phone call, lead form) are tracked as separate columns. That separation is the attribution layer.

03 · Funnel & Qualification

Lead lifecycle taxonomy

1
Enquiry
Any inbound contact about a listing
2
Responded
Agent replied; gap = response time
3
Viewing booked
Date and time committed
4
Viewing attended
Prospect showed up
5
Tenancy signed
The conversion. The yardstick for cost per conversion by source.

Qualified enquiry: the written rule

An enquiry is qualified when the prospect's requirement matches the listing (gender rule, occupancy, fit), the intended move-in is within 30 days, and they remain responsive past the first exchange. Everything else is raw volume.

Dead-end outcomes

no_replylowballrequirement_mismatchbudget_mismatchno_showlost_to_otherunansweredstill_opentenancy_signed

"Unanswered" is the missed-lead category: a lead the agency paid for and never replied to. It inherits the call-tracking DNA of the source job.

04 · KPI Dictionary

Every metric, one formula

KPIFormulaAudience
Enquiries / Qualified enquiriesCounts; qualified per written ruleBoth / Internal
Cost per enquiry (CPE)Source cost ÷ enquiriesInternal
Cost per qualified enquirySource cost ÷ qualified enquiriesInternal
Cost per viewing bookedSource cost ÷ viewings bookedBoth
Cost per tenancy (conversion)Source cost ÷ tenancies signedBoth · headline
Enquiry-to-viewing rateViewings booked ÷ enquiriesBoth
Viewing show-up rateAttended ÷ bookedInternal
Source quality scoreQualified ÷ total, per sourceInternal
Median response timemedian(first response − enquiry time)Internal
Unanswered rateUnanswered ÷ enquiries (split by after-hours)Internal
Days on marketSigned date (or today) − listed dateBoth
Enquiry velocity / stale flagEnquiries per week, 4-week trend; flag if down ≥50% vs first 2 weeks and still openInternal

The owner report uses only the "Both" rows, translated to plain language: 12 people enquired, 5 viewed, here is what we are doing next.

05 · Cost Model

RM9,060 over six months

SourceRM / month6-month totalAllocation rule
PropertyGuru4502,700Portfolio-level: spread by days listed
Mudah.my60360Portfolio-level: spread by days listed
Google Ads6003,600Campaign-level: 3 campaigns by segment
Meta Ads4002,400Campaign-level: 2 campaigns by segment
WhatsApp referral00Goodwill cost excluded, stated in README
Total1,5109,060All assumptions stated openly
The honest answer to "what did this listing really cost to market" is an allocation rule, not a guess.
06 · Planted Insights

What the dashboard is built to find

Eight patterns were written into the data generator deliberately, then verified after generation. They become the case study's findings.

1

The Mudah inversion (headline). 40% of all enquiry volume, 15% qualified rate, 5% viewing rate, zero tenancies in six months. The chart everyone remembers.

2

Google Ads: pay more, get tenants. Highest cost per enquiry (RM31) but ~50% qualified and the best paid-channel viewing rate. Two tenancies at RM1,800 each.

3

Referral: the invisible champion. 9% of volume, 67% qualified, two tenancies at RM0. Justifies formalizing a referral ask at every signing.

4

The stale listing. Sunway Velocity Two (RM3,400) collapses ~70% in enquiry velocity after week 2 while comparable Nexus at RM2,999 keeps moving. Recommendation: reprice toward RM3,000 to 3,100.

5

The after-hours leak. Unanswered rate runs 20% after-hours versus 7% in office hours, roughly 3x. Quantified as ~RM700 of paid leads lost.

6

Channel x segment. Meta converts for rooms only; Google for whole units and studios. Stop running every listing on every channel.

7

The star performer. Lavile (RM1,800, Maluri) signs within 3 weeks via Google Ads, giving the dashboard a healthy benchmark and the owner report a success story.

8

Portfolio sell-through. Monthly volume falls from 299 (Feb) to 64 (May) as 7 of 10 listings sign. The insight layer flags a restock warning: success creates its own pipeline problem.

Cost per tenancy: the headline table

SourceTenanciesCost per tenancyVerdict
WhatsApp referral2RM 0Champion
PropertyGuru2RM 1,350Workhorse
Google Ads2RM 1,800Quality engine
Meta Ads1RM 2,400Rooms only
Mudah.my0UndefinedVolume trap
07 · Dataset

Four tables, ~1,140 enquiries, seed-reproducible

FileGrainKey columns
listings.csv1 row per listing (10)listing_id, property_name, area, segment, asking_rent_myr, gender_rule, listed_date, status, signed_date, signed_source
enquiries.csv1 row per enquiry (~1,140)enquiry_id, listing_id, datetime, source, contact_method, campaign, move_in_days, qualified, responded, first_response_min, after_hours, viewing_booked, viewing_attended, outcome
ad_spend.csvmonth x campaign (30)month, source, campaign, spend_myr, target_segment
platform_costs.csvmonth x platform (12)month, source, cost_myr

Window: 1 Dec 2025 to 31 May 2026. Generator: Python (pandas, numpy), fixed seed 2026, all assumptions and planted patterns documented in README.md. Realism rules include weekly seasonality, Jan to Feb intake bump, new-listing lifecycle curves, and after-hours enquiry timing.

08 · Deliverables & Build Plan

Two outputs, one data model

Deliverable 1

Internal agency dashboard · Power BI

  • Overview: portfolio KPIs, monthly trend, tenancy wins
  • Source comparison: CPE, quality score, cost per tenancy
  • Listing performance: velocity, days on market, stale flags
  • Lead quality: outcomes, mismatch analysis, funnel by source
  • Responsiveness: response time, after-hours leak, unanswered loss
Deliverable 2

Owner report · white-label HTML one-pager

  • This month for your property: enquiries, viewings, status
  • What we did: channels run, spend categories
  • Plain-language explanation of what the numbers mean
  • Next steps and recommendation
  • Brand-skinnable: swap palette and logo per agency, proving white-label

Plus the insights layer

A monthly written-recommendations section driven by metric thresholds, with AI-drafted summaries the agent edits. This reuses the KPI Composite Builder's AI-summary engine.

Build phases

P1done

Planning pack. Funnel taxonomy, KPI dictionary, cost model, planted insights, this outline.

P2done

Dataset. Generator built, run, and validated against all eight planted patterns.

P3

Data model + internal dashboard. Power BI star schema (enquiries fact, listings dim, cost tables), DAX measures from the KPI dictionary, five pages.

P4

Owner report. Refined Trust HTML one-pager per listing, demonstrated on two listings with two brand skins.

P5

Insights layer. Threshold rules plus AI-drafted monthly notes; sample month of generated recommendations.

P6

Case study. Refined Trust case study page: audience first, decisions and money framing, the cost-per-tenancy table as hero, cloning playbook section.

Success criteria: the build must prove