Skip to content

Real Estate Project Interest Leads & WhatsApp Qualification Funnel

Date: 2026-06-17 Period: 2026-01-01 to 2026-06-17 (H1 2026) Data Sources: sadb_real_estate_project_interested_users, sadb_real_estate_project_interest_responses, sadb_real_estate_projects, sadb_districts

The real estate project interest feature (lead capture for development projects — both READY and OFF_PLAN — distinct from regular listings) generated 81,902 leads from 52,458 unique users across 454 projects in H1 2026.

Each lead can trigger a 4-question WhatsApp qualification conversation (purpose, timing, payment method, budget). Of the 23,896 conversations created, 13,026 (54.5%) were fully completed — and once a user answers the first question, 75% finish all four, typically within 2 minutes.

Key findings:

  • Lead intent is strong and bottom-of-funnel. 80% of qualified leads want a home to live in, 47% intend to buy within a month, and 58% have a budget under SAR 1M — a high-volume, ready-to-transact, mid-market buyer pool.
  • In-app (aqar) is the dominant and highest-quality source — 43% of all leads and 100% “confirmed” — while paid social (Snapchat, TikTok, Instagram) drives volume at much lower confirmation rates (21–33%).
  • One source path, aqar_location (20% of all leads), has no confirmation flow today — it produces zero confirmations and zero WhatsApp conversations by design, so it should be reported separately rather than diluting blended confirmation rates.
  • Highly concentrated geographically: 68% of leads are for Riyadh projects and 84% for Riyadh + Jeddah combined. By project type, 64% of interest is in READY projects vs 35% OFF_PLAN.
  • A returning minority drives volume and converts far better. 74% of users submit just one lead, but the 26% who return generate 53% of all leads and convert dramatically better: 75% ever confirm and 69% complete the WhatsApp flow, vs 48% / 41% for single-lead users. Separately, 11% of all leads are duplicates (same user re-pinging a project they already engaged) — inflating raw “lead” counts. Note the WhatsApp flow fires once per user per rolling 3-month window, not per project — a new response is only created if a user returns >3 months after their last one.
  • Reservation/transaction outcomes are not captured here (has_reserved, transaction_id, qualified, qualified_at are unused columns), so conversion beyond the WhatsApp qualification stage must be measured elsewhere.
StageCount% of leads
Leads created81,902100%
→ linked to a WhatsApp conversation35,90843.8%
→ “confirmed” lead42,84552.3%
→ conversation started (≥1 answer)17,28721.1%
→ conversation fully completed (4/4 answers)13,02615.9%

Reservation/transaction outcome is not tracked on these tables — see caveats.

SourceLeads%ConfirmedConfirm %Notes
aqar (in-app)35,34143.1%35,341100%All have a broker assigned; 20,067 had searcher info requested
snapchat17,96921.9%3,81221.2%Paid social
aqar_location16,75520.5%0n/aNo confirmation flow built yet (by design)
tiktok6,6408.1%2,00430.2%Paid social
instagram5,1976.3%1,68832.5%Paid social

Interpretation:

  • In-app leads (aqar) convert to “confirmed” at 100% — these are logged-in, verified users inside Aqar, and they are the only source that gets a broker assigned and searcher info requested.
  • Paid social leads confirm at only 21–33%. This is expected for top-of-funnel ad traffic, but it means ~70–80% of social-sourced leads never reach a contactable/verified state. Snapchat is the largest social channel by volume but has the lowest confirmation rate of the three.
  • aqar_location has no confirmation flow today. These 16,755 leads (1 in 5 of all leads) never enter the WhatsApp qualification path, so they show 0 confirmations and 0 responses by design — not a bug. Its volume almost exactly matches the 16,752 leads with whatsapp_status = 'completed' and no response link. Because it can’t be qualified yet, it should be reported separately so it doesn’t drag down blended confirmation/qualification rates — and is the obvious candidate if we want to extend the qualification flow to more lead types.

Geography is resolved by joining leads → sadb_real_estate_projects (on project_id) → sadb_districts (on district_id). The lead table’s own rega_* location columns are empty, so the project record is the source of truth for city/district.

CityLeads%ConfirmedConfirm %Projects
الرياض (Riyadh)55,86168.2%31,63156.6%299
جدة (Jeddah)13,04715.9%4,69336.0%41
الدمام (Dammam)4,4395.4%2,01645.4%41
الخبر (Khobar)4,4315.4%1,77940.1%28
المدينة المنورة (Madinah)1,2541.5%79663.5%12
الظهران (Dhahran)1,1621.4%87475.2%4
مكة المكرمة (Makkah)8221.0%54866.7%7

Riyadh is the engine of this product — over two-thirds of all leads and 299 of the 454 active projects. Riyadh + Jeddah together account for 84% of leads. Notably, Jeddah confirms at only 36% vs Riyadh’s 57%, worth a closer look (likely a heavier paid-social mix there).

Project TypeLeads%ConfirmedConfirm %Projects
READY52,49964.1%29,65056.5%343
OFF_PLAN28,43534.7%12,60744.3%69
(unspecified)9681.2%58842

Interest skews toward READY (move-in-ready) projects, which also confirm at a higher rate (57% vs 44%). OFF_PLAN projects are fewer (69) but draw outsized volume per project — consistent with the near-term purchase intent seen in the qualification answers.

MonthLeadsConfirmedWith ResponseUnique UsersActive Projects
2026-0113,2167,5626,2309,541243
2026-0212,6367,6456,2848,848250
2026-038,7665,3994,6836,271201
2026-0415,4118,3467,21411,385267
2026-0521,5218,6457,19715,724311
2026-06*10,3525,2484,3007,794292

*June is partial (through the 17th).

The May spike is paid-social-driven. Snapchat leads jumped from 3,506 (April) to 7,527 (May), with TikTok and Instagram also climbing. In-app (aqar) volume stayed flat (~6,400–7,000/month) throughout. So growth in total leads is coming almost entirely from ad campaigns — which is also why the confirmed count grew far less than total leads in May (more low-confirmation social traffic).

Monthaqaraqar_locationsnapchattiktokinstagram
2026-016,9813,3801,4361,153266
2026-026,5852,7992,150546556
2026-034,9992,263975355174
2026-046,7002,9463,5061,264995
2026-056,4453,5147,5272,4721,563
2026-06*3,6311,8532,3758501,643

The qualification flow asks 4 fixed multiple-choice questions over WhatsApp (Saudi colloquial Arabic, with an English variant). Question set:

  1. Purpose of purchase — Living / Renting / Resale (وش ناوي تسوي بالعقار؟)
  2. Expected purchase timing — < 1 month / 1–3 months / > 3 months (متى تشوف نفسك جاهز تشتري؟)
  3. Payment method — Cash / Bank finance (كيف تفضل تدفع؟)
  4. Budget — < 1M / 1–3M / > 3M SAR (كم الميزانية اللي حاطها في بالك؟)
StatusConversations%
Completed13,03254.5%
Pending (in progress)6,60927.7%
Incomplete (abandoned)4,25517.8%
Total created23,896100%
StepAnsweredRetention from prev.Retention from Q1
Q1 (Purpose)17,287100%
Q2 (Timing)14,83885.8%85.8%
Q3 (Payment)13,86493.4%80.2%
Q4 (Budget)13,02694.0%75.4%

The biggest drop-off is Q1 → Q2 (14% lost); once past Q2, completion is near-certain (>93% per step). Of the 23,896 conversations created, only 72% ever answer Q1 — getting the user to the first reply is the main leak, not the question count.

  • Median time to complete the full conversation: 2 minutes.
  • 77% of answered conversations were completed within 1 hour of creation.
  • p90: ~4.8 hours; only 1,077 (6%) took longer than 24 hours.

This is a fast, low-friction flow — when users engage, they engage immediately.

Buyer Intent Profile (Completed Conversations)

Section titled “Buyer Intent Profile (Completed Conversations)”

These distributions describe the qualified buyer pool and are the most commercially useful output.

AnswerCount%
Living (السكن)13,72479.4%
Renting (التأجير)2,96117.1%
Resale (إعادة البيع)6023.5%

End-user / owner-occupier demand dominates. Only ~3.5% are flippers.

AnswerCount%
Within 1 month (خلال شهر)6,91446.6%
1–3 months5,46236.8%
More than 3 months2,46216.6%

83% intend to buy within 3 months; nearly half within a month. This is a hot, near-term pipeline.

AnswerCount%
Bank finance (تمويل بنكي)8,80263.5%
Cash (نقدًا)5,06236.5%

→ Roughly 2 in 3 need mortgage financing — a clear hook for a financing/pre-approval partnership.

AnswerCount%
Under SAR 1M7,49857.6%
SAR 1–3M5,03038.6%
Over SAR 3M4983.8%

Mid-market concentration: 96% have a budget under SAR 3M, and the majority under SAR 1M.

The 81,930 leads come from 52,476 unique users (every lead is tied to a registered user — there are no anonymous/user_id = 0 leads). Grouping by user reveals that a small, highly engaged minority drives a disproportionate share of volume.

Important: the WhatsApp qualification flow fires once per user per rolling 3-month windownot once per project or per lead. A user’s response record is reused (and denormalized onto all their leads, so a 174-lead user can show 166 leads carrying the same response_id) for ~3 months; only if they submit interest in a new project more than 3 months after their last response is a fresh response created. This means lead-level “response” counts are not additive, and engagement must be measured per user (did this user ever respond), not per lead. Within this 5.5-month window only 205 users (0.4%) have a second response — and those pairs sit a median of 200 days apart (204 of 205 ≥90 days), consistent with the 3-month TTL re-triggering after the prior response aged out.

Leads generatedUsers% of usersTotal leads% of leads
138,82074.0%38,82047.4%
27,99315.2%15,98619.5%
32,6105.0%7,8309.6%
4–51,8683.6%8,1029.9%
6–109271.8%6,6798.2%
11–202150.4%3,0273.7%
21+430.1%1,4861.8%

Three-quarters of users submit exactly one lead, but they account for less than half of all volume. The other half comes from the 26% who come back — and the long tail is real: 258 users (0.5%) generated 11+ leads each, totaling ~4,500 leads.

Rates below are measured per user (share of users who ever confirmed / ever responded to the WhatsApp flow), which is the correct denominator given the once-per-user flow:

SegmentUsersLeads% users ever confirmed% users ever responded
Single-lead users38,820 (74%)38,820 (47.4%)47.7%41.4%
Repeat users (2+)13,656 (26%)43,110 (52.6%)74.7%69.0%

Repeat users not only generate the majority of leads, they convert dramatically better: 75% ever confirm vs 48%, and 69% complete the WhatsApp flow vs 41% — a ~27 pt gap on both. Engagement compounds; returning users are warmer, not noisier. (The earlier draft’s lead-level “response rate” understated this, because a repeat user’s many leads share a single response record.)

A user generating many leads can mean two very different things — exploring many projects, or re-pinging the same project. Both happen:

MetricValue
Avg. distinct projects per user1.39
Single-project users41,777 (79.6%)
Multi-project users (comparison shoppers)10,681 (20.4%)
Users interested in 5+ projects1,087
Duplicate leads (same user + same project, repeated)8,974 (11.0% of all leads)

So 1 in 5 users compares multiple developments, and separately 11% of all leads are duplicate submissions for a project the user had already shown interest in — worth de-duplicating before counting “leads” as demand. (Note this does not create extra WhatsApp traffic: the flow fires only once per user per 3-month window, so duplicate leads are a demand-counting issue, not a messaging-cost one.)

Distinct sourcesUsers% of usersTotal leads
146,43588.5%59,795
25,55210.6%18,873
34450.8%2,823
4440.1%439

Most users (88.5%) arrive through a single channel, but the 11.5% who touch multiple sources generate ~27% of all leads — these are cross-channel users who, for example, see a Snapchat/TikTok ad and later engage in-app. This multi-touch group is small but high-volume.

Power users are genuine high-intent shoppers, not bots

Section titled “Power users are genuine high-intent shoppers, not bots”

The top users span many distinct projects, confirm at near-100%, and each completed the WhatsApp flow (1 distinct response within the window, as expected under the 3-month reuse) — they look like serious buyers (or real-estate professionals scouting), not automated noise:

user_idLeadsDistinct projectsSourcesConfirmed %Distinct responses
2278082174124tiktok, snapchat, aqar99%1
53118508876aqar100%1
4611236959aqar100%1
126926648aqar100%1
21674154717instagram, snapchat, aqar_location, aqar55%2

The #1 user touched 124 distinct projects across 3 ad channels with 99% of leads confirmed — an extreme but real comparison shopper. Every one of these power users completed the WhatsApp flow exactly once in the window (the “distinct responses” column = 1, consistent with the 3-month reuse design), so high lead counts reflect genuine repeated browsing, not flow-spam. These outliers are rare enough (43 users at 21+ leads) that they don’t distort the aggregate intent picture.

  1. Extend the qualification flow to aqar_location (20% of leads). This path has no confirmation flow today, so 1 in 5 leads is never qualified. It’s the single largest untapped pool — building a WhatsApp flow for it (or routing it into the existing one) would meaningfully grow the qualified funnel. In the meantime, report it separately so it doesn’t depress blended confirmation rates.
  2. Optimize the Q1 step. The funnel’s main leak is getting users to send their first WhatsApp reply (only 72% do). The question count itself is not the problem — post-Q1 completion is >93%/step.
  3. Lean into financing. 64% of qualified buyers need bank finance and 47% plan to buy within a month — a strong case for an integrated mortgage pre-approval flow tied to project interest.
  4. Re-evaluate paid social efficiency. Snapchat drove the May volume spike but confirms at only 21%. Compare cost-per-confirmed-lead (not cost-per-lead) across Snapchat/TikTok/Instagram before scaling spend further.
  5. Watch Jeddah’s low confirmation rate (36% vs Riyadh’s 57%). As the #2 market by volume, closing that gap is leverage — diagnose whether it’s source mix, broker coverage, or project quality.
  6. De-duplicate before counting demand. 11% of leads are the same user re-pinging a project they already engaged, so report demand on distinct user-project pairs rather than raw lead counts. (Messaging cost is already controlled — the flow fires only once per user per 3-month window.)
  7. Re-evaluate the 3-month re-qualification interval. Intent decays faster than the flow refreshes: 47% of users said they’d buy “within a month,” yet their answers are reused for 3 months and across different projects. For high-intent, fast-timeline buyers a shorter refresh (or a per-project re-ask) may capture more accurate budget/timing — worth testing against the cost of extra messages.
  • Query deviation from the original request: the source query omitted FINAL and the _peerdb_is_deleted = 0 filter. Per project guidelines these were added to all queries below for CDC-accurate (de-duplicated, non-deleted) results.
  • Geography comes from the project, not the lead. The lead table’s rega_* location columns are 100% empty, so city/district were resolved by joining to sadb_real_estate_projects (via project_id) → sadb_districts.
  • Reservation/transaction/qualification columns are unused: has_reserved, transaction_id, qualified, and qualified_at carry no data on these tables and were excluded. Conversion past the WhatsApp qualification stage must be measured from other tables.
  • The confirmed flag’s meaning differs by source path (auto-true for in-app aqar, conditional for social), so cross-source confirmation rates measure verification/contactability, not a uniform quality bar.
  • Answer distributions combine the Arabic and English variants of the same option.
  • June 2026 is partial (1st–17th).
-- Overall funnel
SELECT
count() AS total_leads,
uniqExact(user_id) AS unique_users,
uniqExact(project_id) AS unique_projects,
countIf(confirmed = true) AS confirmed,
countIf(real_estate_project_interest_response_id > 0) AS with_response_link
FROM sadb_real_estate_project_interested_users FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01';
-- Source breakdown
SELECT source, count() AS leads,
countIf(confirmed = true) AS confirmed,
countIf(searcher_info_requested_at > '2000-01-01') AS info_requested,
countIf(broker_user_id > 0) AS has_broker
FROM sadb_real_estate_project_interested_users FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01'
GROUP BY source ORDER BY leads DESC;
-- Geographic distribution (geo resolved via the project record)
SELECT d.city_name AS city, count() AS leads,
countIf(iu.confirmed = true) AS confirmed,
uniqExact(iu.project_id) AS projects
FROM sadb_real_estate_project_interested_users iu FINAL
LEFT JOIN sadb_real_estate_projects p FINAL ON p.id = iu.project_id
LEFT JOIN sadb_districts d FINAL ON d.district_id = p.district_id
WHERE iu._peerdb_is_deleted = 0 AND iu.createdAt > '2026-01-01'
GROUP BY city ORDER BY leads DESC;
-- Project type (READY vs OFF_PLAN)
SELECT p.project_type, count() AS leads, countIf(iu.confirmed = true) AS confirmed
FROM sadb_real_estate_project_interested_users iu FINAL
LEFT JOIN sadb_real_estate_projects p FINAL ON p.id = iu.project_id
WHERE iu._peerdb_is_deleted = 0 AND iu.createdAt > '2026-01-01'
GROUP BY p.project_type ORDER BY leads DESC;
-- Monthly trend by source
SELECT toStartOfMonth(createdAt) AS month,
countIf(source='aqar') AS aqar,
countIf(source='aqar_location') AS aqar_location,
countIf(source='snapchat') AS snapchat,
countIf(source='tiktok') AS tiktok,
countIf(source='instagram') AS instagram
FROM sadb_real_estate_project_interested_users FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01'
GROUP BY month ORDER BY month;
-- Conversation completion + step retention
SELECT
count() AS total_responses,
countIf(length(answer_1) > 0) AS a1,
countIf(length(answer_2) > 0) AS a2,
countIf(length(answer_3) > 0) AS a3,
countIf(length(answer_4) > 0) AS a4
FROM sadb_real_estate_project_interest_responses FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01';
-- Answer distributions (per question)
SELECT answer_1, count() FROM sadb_real_estate_project_interest_responses FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01' AND length(answer_1) > 0
GROUP BY answer_1 ORDER BY count() DESC; -- repeat for answer_2..answer_4
-- Response speed
SELECT
median(dateDiff('minute', createdAt, last_answered_at)) AS median_min,
countIf(dateDiff('hour', createdAt, last_answered_at) < 1) AS within_1h
FROM sadb_real_estate_project_interest_responses FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01'
AND last_answered_at > '2000-01-01' AND last_answered_at >= createdAt;
-- Leads per user distribution
SELECT multiIf(leads=1,'1',leads=2,'2',leads=3,'3',leads<=5,'4-5',leads<=10,'6-10',leads<=20,'11-20','21+') AS bucket,
count() AS users, sum(leads) AS total_leads
FROM (SELECT user_id, count() AS leads FROM sadb_real_estate_project_interested_users FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01' GROUP BY user_id)
GROUP BY bucket ORDER BY min(leads);
-- Duplicate leads (same user + same project)
SELECT count() AS total_leads,
uniqExact((user_id, project_id)) AS distinct_pairs,
count() - uniqExact((user_id, project_id)) AS duplicate_leads
FROM sadb_real_estate_project_interested_users FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01';
-- WhatsApp flow fires once per user per 3-month window: distinct responses per user
SELECT distinct_responses, count() AS users FROM (
SELECT user_id, uniqExactIf(real_estate_project_interest_response_id,
real_estate_project_interest_response_id > 0) AS distinct_responses
FROM sadb_real_estate_project_interested_users FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01' GROUP BY user_id)
GROUP BY distinct_responses ORDER BY distinct_responses;
-- Verify the 3-month TTL: gap between the 2 responses of users who have 2 (no date filter on responses)
WITH multi_users AS (
SELECT user_id FROM sadb_real_estate_project_interested_users FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01'
GROUP BY user_id
HAVING uniqExactIf(real_estate_project_interest_response_id, real_estate_project_interest_response_id > 0) >= 2
)
SELECT count() AS users, median(gap_days) AS median_gap_days, countIf(gap_days >= 90) AS gap_ge_90d
FROM (
SELECT r.user_id, dateDiff('day', min(r.createdAt), max(r.createdAt)) AS gap_days
FROM sadb_real_estate_project_interest_responses r FINAL
WHERE r._peerdb_is_deleted = 0 AND r.user_id IN (SELECT user_id FROM multi_users)
GROUP BY r.user_id HAVING count() >= 2
);
-- Repeat vs single-lead users: PER-USER confirm/response rates (ever confirmed / ever responded)
SELECT multiIf(lead_cnt=1,'single','repeat') AS segment, count() AS users, sum(lead_cnt) AS leads,
round(100*countIf(ever_confirmed)/count(),1) AS pct_users_confirmed,
round(100*countIf(ever_responded)/count(),1) AS pct_users_responded
FROM (SELECT user_id, count() AS lead_cnt,
maxIf(1, confirmed = true) AS ever_confirmed,
maxIf(1, real_estate_project_interest_response_id > 0) AS ever_responded
FROM sadb_real_estate_project_interested_users FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01' GROUP BY user_id)
GROUP BY segment;
-- Power users (distinct responses confirms the once-per-user flow)
SELECT user_id, count() AS leads, uniqExact(project_id) AS projects,
arrayStringConcat(groupUniqArray(source), ', ') AS sources,
round(100*countIf(confirmed = true)/count(),0) AS confirmed_pct,
uniqExactIf(real_estate_project_interest_response_id,
real_estate_project_interest_response_id > 0) AS distinct_responses
FROM sadb_real_estate_project_interested_users FINAL
WHERE _peerdb_is_deleted = 0 AND createdAt > '2026-01-01'
GROUP BY user_id ORDER BY leads DESC LIMIT 12;