Back to Case Studies
Real Estate / PropTech

AI-Powered Customer Segmentation Inside a Real Estate CRM: 38% Better Campaign Conversion

March 30, 2026
9 min read

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.

PropstackXMachine LearningK-MeansCustomer SegmentationPythonSupabaseReal EstateCRMBehavioral Analytics

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:

SignalPoints
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:

SegmentCharacteristics
HotHigh engagement score, recent site visit, mid-late pipeline, specific unit interest
WarmModerate engagement, expressed interest, no site visit yet, responsive to outreach
Price SensitiveHigh activity but enquiries concentrated on discounts and payment plans
Early ResearcherLow recent activity, long tenure in database, still worth periodic nurturing
ColdNo 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:

  1. A significant CRM event occurs (site visit logged, campaign response received, pipeline stage change)
  2. Nightly batch refresh at 01:00 (applies decay to all leads)
  3. 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:

HotSite visit last week · Responded to last campaign

ColdNo 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:

MetricBefore segmentationAfter segmentationChange
Campaign conversion rate (lead stage advancement within 14 days)Baseline+38%+38% lift
Opt-out rate per campaignBaseline−61%Significant drop
Broadcast vs targeted campaign ratio91% broadcast23% broadcastShift 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

Not Sure Where to Start? Start Here.

We offer a free 30-minute strategy session with a senior data or AI architect — not a sales rep. Bring your current challenge, your stack, or just a vague sense that your data situation needs to improve. We'll give you an honest assessment of where to begin.

No pitch. No obligation. Just a useful conversation.

Typically responds within 1 business day · Available for India, US, UK & Canada