AI-Powered Customer Segmentation Inside a Real Estate CRM: 38% Better Campaign Conversion
Sending the same message to your entire lead database is not marketing — it is noise. We built a behavioral segmentation engine inside PropstackX that automatically clusters leads by intent and engagement patterns, cutting opt-out rates and lifting conversions significantly.
The Problem with Broadcast Campaigns
When we launched PropstackX's campaign engine, users immediately started sending campaigns. Most were doing the same thing: select all leads, write a message, send to everyone.
The data told the story within weeks:
- Open / read rates: 11% (industry benchmark for real estate: 18–22%)
- Response rate: 2.4%
- Opt-out rate: climbing after every broadcast
The problem was not the message. It was the audience. A lead who enquired 8 months ago, never responded, and has likely bought elsewhere was getting the exact same message as someone who visited the project site last week, asked detailed questions about the floor plan, and hasn't had a follow-up call yet.
These are not the same buyer. Treating them the same wastes the hot lead and annoys the cold one.
This is built inside our own product, PropstackX. Every implementation decision was validated under real client usage.
The Segmentation Engine
We built a three-layer segmentation system on top of PropstackX's CRM event data.
Layer 1: Behavioral Engagement Score (per lead)
Every lead receives a continuous engagement score based on their activity signals in the CRM, with time decay:
| Signal | Points |
|---|---|
| Physical site visit | +40 |
| Responded to campaign (last 7 days) | +25 |
| Inbound WhatsApp message | +20 |
| Phone call answered | +15 |
| Campaign message read | +10 |
| Days since last activity | −2 per day (decay) |
The decay term is critical. A lead who visited 4 months ago and has been silent since is ranked below a lead who opened a message yesterday. Recency matters as much as the signal itself.
Layer 2: Intent Clustering (K-Means)
Beyond individual scores, we cluster leads into behavioral segments using K-Means on a feature vector derived from CRM event logs:
- Engagement score (from Layer 1)
- Budget range stated (or inferred from project page interest)
- Property type interest (apartment, villa, plot, commercial)
- Pipeline stage (New, Contacted, Site Visit Scheduled, Site Visited, Negotiation)
- Recency of last activity
- Lead source (portals, referrals, and direct web traffic produce distinct intent profiles)
- Number of touchpoints to date
Choosing the number of clusters: Silhouette scoring was run across k=3 to k=10 for each tenant's lead corpus. For most PropstackX tenants, k=5 to k=7 emerges as optimal. The resulting clusters map naturally to recognisable buyer personas:
| Segment | Characteristics |
|---|---|
| Hot | High engagement score, recent site visit, mid-late pipeline, specific unit interest |
| Warm | Moderate engagement, expressed interest, no site visit yet, responsive to outreach |
| Price Sensitive | High activity but enquiries concentrated on discounts and payment plans |
| Early Researcher | Low recent activity, long tenure in database, still worth periodic nurturing |
| Cold | No activity in 60+ days — re-engagement flow or archive |
Layer 3: Automated Segment Assignment
New leads are scored and assigned to a segment within 60 seconds of creation. The assignment is re-evaluated on three triggers:
- A significant CRM event occurs (site visit logged, campaign response received, pipeline stage change)
- Nightly batch refresh at 01:00 (applies decay to all leads)
- Monthly K-Means refit (centroids updated on the full corpus as the database grows)
Segments are first-class objects in PropstackX. The campaign audience builder shows segment filters prominently: "Send to: Hot Leads + Warm Leads who haven't been contacted in the last 5 days."
Implementation Details
Feature Pipeline
The nightly batch runs as a Supabase scheduled function (pg_cron) that materializes the engagement score and feature vector for every active lead into a lead_segments table.
For real-time segment updates (a site visit is logged, a WhatsApp reply arrives), a Supabase database trigger fires a Supabase Edge Function that recalculates the affected lead's score and segment assignment immediately — no waiting for the nightly batch.
Explainability in the UI
Each lead's CRM profile shows their current segment badge with the two primary contributing factors in plain English:
Hot — Site visit last week · Responded to last campaign
Cold — No activity in 74 days · 3 unanswered follow-up attempts
Agents and managers can verify the classification themselves. They do not have to trust a number they cannot interpret.
Monthly Centroid Refit
K-Means centroids are recalculated monthly using the full active lead corpus per tenant. This ensures segments remain meaningful as the database grows and the tenant's lead mix evolves seasonally (launch months vs off-season produce very different lead distributions).
Results
Post-deployment, measured over 90 days:
| Metric | Before segmentation | After segmentation | Change |
|---|---|---|---|
| Campaign conversion rate (lead stage advancement within 14 days) | Baseline | +38% | +38% lift |
| Opt-out rate per campaign | Baseline | −61% | Significant drop |
| Broadcast vs targeted campaign ratio | 91% broadcast | 23% broadcast | Shift to targeted |
| Agent time on hot / warm leads | ~35% of day | ~62% of day | +1.8x focus |
The opt-out rate drop is as commercially important as the conversion lift. High opt-out rates damage WhatsApp Business account health scores — enough opt-outs and Meta restricts or suspends the sending account. Relevant, well-timed messages protect the channel as much as they improve conversion.
What This Demonstrates
This is not a generic "we applied ML to CRM" story. It is a specific, domain-grounded system:
- Behavioral decay scoring that weights recency appropriately for a long-cycle sales business
- K-Means with silhouette validation to determine the right number of segments rather than assuming a fixed number
- Real-time segment assignment via database triggers, not batch-only
- Segment-driven campaign targeting integrated directly into the campaign builder UI — the insight changes the workflow, it does not sit in a separate analytics dashboard
The same pattern — behavioral scoring → automated clustering → real-time assignment → targeted action — applies to any CRM with interaction data: SaaS customer health scoring, retail customer lifetime value segmentation, financial services lead prioritization, healthcare patient engagement.
Not Sure Where to Start?
Book a free 30-minute strategy session with a senior data architect — no pitch, no obligation.
Schedule Your Free Strategy Session