Skip to content

Rent vs Booking Apartment User Overlap

Date: 2026-02-16 Analysis Period: Nov 17, 2025 – Feb 16, 2026 (limited by sadb_user_listing_event_logs retention) Data Source: sadb_user_listing_event_logs (logged-in user views only)

This analysis examines the overlap between logged-in users who view Apartments for Rent (category 1, monthly rental listings) and Apartments for Booking (category 101, short-term bookable units). The goal is to understand whether these are distinct audiences or the same users exploring both options.

Metric Value
Apartment for Rent viewers 701,882
Apartment for Booking viewers 67,363
Overlap (viewed both) 53,316
% of booking viewers who also view rent 79.2%
% of rent viewers who also view bookings 7.6%

The booking audience is largely a subset of the rent audience. Nearly 4 in 5 users who browse bookable apartments also browse traditional rental listings, while booking is a niche interest for rent viewers.

Segment Users % of Total
Rent Only 648,566 90.6%
Both (Overlap) 53,316 7.4%
Booking Only 14,047 2.0%

Only ~14K users exclusively browse booking apartments without also looking at rental listings. The “booking-only” audience is very small.

City Rent Users Booking Users Overlap % Booking→Rent % Rent→Booking
الرياض (Riyadh) 410,981 37,100 27,509 74.1% 6.7%
جدة (Jeddah) 133,697 11,848 7,580 64.0% 5.7%
الخبر (Khobar) 68,277 5,892 3,041 51.6% 4.5%
الدمام (Dammam) 79,402 4,948 3,475 70.2% 4.4%
المدينة المنورة (Madinah) 31,578 3,378 1,767 52.3% 5.6%
بريدة (Buraydah) 16,259 2,538 1,051 41.4% 6.5%
مكة المكرمة (Makkah) 22,499 1,754 957 54.6% 4.3%
الطائف (Taif) 9,160 1,111 458 41.2% 5.0%
ابها (Abha) 11,844 904 497 55.0% 4.2%
الهفوف (Hofuf) 13,872 752 535 71.1% 3.9%

Notable patterns:

  • Riyadh dominates booking demand with 55% of all booking viewers
  • Al Jubail has the highest overlap rate at 75.1% — suggesting booking supply doesn’t meet demand there
  • Buraydah and Taif have the lowest overlap (~41%) — indicating more distinct booking-focused audiences, likely driven by tourism/recreation

Among the 53,316 overlap users, which category did they explore first?

Journey Users %
Rent first → then Booking 27,440 51.5%
Same day 16,480 30.9%
Booking first → then Rent 9,396 17.6%

Over half of overlap users start with rental browsing and later discover bookings. This suggests bookings are a secondary consideration for most users — they come to Aqar for rentals and then explore short-term options.

Metric Rent Only Both Booking Only
Users 648,566 53,316 14,047
Avg views 81.3 170.1 32.7
Avg phone actions 2.04 4.00 0.57
Avg WhatsApp actions 3.35 6.29 0.72
Avg 30s+ sessions 21.27 42.63 8.80
% making any contact 37.9% 51.5% 57.1%

Key observations:

  • Overlap users are power users — 2x the views, 2x the contact actions, and 2x the session depth vs rent-only users
  • Booking-only users have the highest contact rate (57.1%) but lowest absolute engagement — they tend to be purpose-driven with fewer but more targeted views
  • Overlap users are the most valuable segment with both high volume and high conversion
Pattern Users % Avg Rent Views Avg Booking Views
Heavy Rent, Light Booking 32,682 61.3% 118.5 2.6
Light Both 13,995 26.2% 4.2 2.4
Heavy Both (10+ each) 5,200 9.8% 170.2 26.3
Light Rent, Heavy Booking 1,439 2.7% 4.1 21.9

61% of overlap users are primarily rental browsers who casually explore bookings (averaging just 2.6 booking views). Only ~10% are deeply engaged with both categories.

Week Rent Viewers Booking Viewers Booking as % of Rent
Nov 16, 2025 117,284 9,601 8.2%
Nov 23 138,489 12,162 8.8%
Nov 30 144,133 11,281 7.8%
Dec 7 138,844 9,900 7.1%
Dec 14 139,538 5,987 4.3%
Dec 21 148,454 5,591 3.8%
Dec 28 144,660 4,993 3.5%
Jan 4, 2026 142,787 4,720 3.3%
Jan 11 145,447 4,207 2.9%
Jan 18 155,522 4,649 3.0%
Jan 25 150,487 4,515 3.0%
Feb 1 147,406 5,999 4.1%
Feb 8 143,402 4,953 3.5%

Notable: Booking viewership peaked in late November 2025 and declined through January — this could be seasonal (post-holiday travel demand) or related to supply changes.

Note on booking status classification: CLOSED_NOT_PAID represents a booking attempt where payment was never completed. These are counted as attempted bookings, not actual bookings. Only CONFIRMED and COMPLETED are counted as actual bookings.

Stage Overlap Booking Only
Booking listing viewers 53,713 14,114
Attempted booking (CLOSED_NOT_PAID) 1,530 (2.85%) 586 (4.15%)
Actual booking (CONFIRMED/COMPLETED) 176 (0.33%) 89 (0.63%)
Attempt → Booking conversion 11.5% 15.2%

Booking-only users convert at ~2x the rate at every stage of the funnel. They are 1.5x more likely to attempt a booking (4.15% vs 2.85%), and among those who attempt, they are 1.3x more likely to successfully complete payment (15.2% vs 11.5%).

The vast majority of booking interactions are attempted bookings that fail at payment:

Metric Total Overlap Booking Only Other*
Attempted bookings (CLOSED_NOT_PAID) 2,722 users 1,530 (56%) 586 (22%) 606 (22%)
Actual bookings (CONFIRMED/COMPLETED) 332 users 176 (53%) 89 (27%) 67 (20%)

*Other = users with rent-only views or no booking category views in event logs

For every user who successfully books, roughly 8 users attempt but fail at payment. This ratio is consistent across segments, making the payment funnel the single largest conversion bottleneck.

City Segment Viewers Attempters Bookers
الرياض (Riyadh) Overlap 27,646 865 (3.1%) 127 (0.46%)
Booking Only 9,651 321 (3.3%) 60 (0.62%)
جدة (Jeddah) Overlap 7,608 277 (3.6%) 20 (0.26%)
Booking Only 4,291 109 (2.5%) 15 (0.35%)
الدمام (Dammam) Overlap 3,491 89 (2.5%) 2 (0.06%)
Booking Only 1,475 16 (1.1%) 3 (0.20%)
المدينة المنورة (Madinah) Overlap 1,776 86 (4.8%) 9 (0.51%)
Booking Only 1,635 48 (2.9%) 4 (0.24%)
الخبر (Khobar) Overlap 3,054 84 (2.8%) 8 (0.26%)
Booking Only 2,872 27 (0.9%) 3 (0.10%)

Riyadh dominates with 70%+ of all booking attempts and completions. The booking-only advantage in actual booking rate is consistent in Riyadh (0.62% vs 0.46%) and Jeddah (0.35% vs 0.26%).

  1. Cross-sell opportunity is real but asymmetric — 79% of booking users already browse rentals, but only 7.6% of rental users explore bookings. There’s a large untapped pool of rental browsers who could be surfaced booking options.

  2. Overlap users are the most engaged and valuable — they view 2x more listings and make 2x more contacts. Identifying and nurturing this segment could drive significant engagement gains.

  3. Most overlap is casual — 61% of overlap users are heavy rental browsers who glance at bookings (avg 2.6 views). Better booking discovery within the rental journey could convert these casual explorers.

  4. Booking-only users are purpose-driven — small audience (14K) but highest contact rate (57.1%). These users know what they want and convert efficiently.

  5. City-level variation matters — tourism/recreation cities (Buraydah, Taif) have more distinct booking audiences, while business cities (Riyadh, Dammam) show higher overlap, suggesting different use cases.

  6. Booking-only users convert at 2x the rate — 0.63% vs 0.33% successful booking rate. They’re purpose-driven and more prepared to complete transactions.

  7. Payment failure is the #1 conversion blocker — for every successful booking, ~8 users attempt but fail at payment (CLOSED_NOT_PAID). Fixing the payment funnel would have a far greater impact on bookings than improving discovery or user targeting.

SELECT
CASE
WHEN viewed_rent
AND viewed_booking THEN 'Both'
WHEN viewed_rent THEN 'Rent Only'
ELSE 'Booking Only'
END as segment,
count() as users
FROM
(
SELECT
user_id,
countIf (category = 1) > 0 as viewed_rent,
countIf (category = 101) > 0 as viewed_booking
FROM
sadb_user_listing_event_logs
WHERE
type
= 'view'
AND category IN (1, 101)
AND toDate(createdAt) >= '2024-01-01'
AND user_id > 0
AND _peerdb_is_deleted = 0
GROUP BY
user_id
)
GROUP BY
segment
SELECT
city_name,
countIf (
viewed_rent
AND viewed_booking
) as overlap_users,
countIf (viewed_rent) as total_rent_users,
countIf (viewed_booking) as total_booking_users,
round(
countIf (
viewed_rent
AND viewed_booking
) / countIf (viewed_booking) * 100,
1
) as pct_booking_also_rent
FROM
(
SELECT
e.user_id,
e.city_id,
countIf (e.category = 1) > 0 as viewed_rent,
countIf (e.category = 101) > 0 as viewed_booking
FROM
sadb_user_listing_event_logs e
WHERE
e.type = 'view'
AND e.category IN (1, 101)
AND toDate(e.createdAt) >= '2024-01-01'
AND e.user_id > 0
AND e._peerdb_is_deleted = 0
GROUP BY
e.user_id,
e.city_id
) sub
JOIN (
SELECT DISTINCT
city_id,
city_name
FROM
sadb_districts FINAL
WHERE
_peerdb_is_deleted = 0
) cities ON sub.city_id = cities.city_id
GROUP BY
city_name
HAVING
total_booking_users > 100
ORDER BY
total_booking_users DESC
-- Attempted bookings = CLOSED_NOT_PAID (payment never completed)
-- Actual bookings = CONFIRMED or COMPLETED only
-- Step 1: classify bookers/attempters by their viewer segment
SELECT
CASE
WHEN viewed_rent
AND viewed_booking THEN 'Overlap'
WHEN viewed_booking THEN 'Booking Only'
WHEN viewed_rent THEN 'Rent Only'
ELSE 'No booking category views'
END as segment,
count() as users
FROM
(
SELECT
b.user_id,
countIf (
e.category = 1
AND e.type = 'view'
) > 0 as viewed_rent,
countIf (
e.category = 101
AND e.type = 'view'
) > 0 as viewed_booking
FROM
(
SELECT DISTINCT
user_id
FROM
sadb_daily_renting_listing_bookings
WHERE
_peerdb_is_deleted = 0
AND user_id > 0
AND status IN ('CONFIRMED', 'COMPLETED') -- or 'CLOSED_NOT_PAID' for attempts
AND toDate(createdAt) >= '2025-11-17'
) b
LEFT JOIN sadb_user_listing_event_logs e ON b.user_id = e.user_id
AND e._peerdb_is_deleted = 0
GROUP BY
b.user_id
)
GROUP BY
segment
-- Step 2: compute rates using viewer segment counts as denominators
SELECT
CASE
WHEN first_rent < first_booking THEN 'Rent first → Booking'
WHEN first_booking < first_rent THEN 'Booking first → Rent'
ELSE 'Same day'
END as journey_direction,
count() as users
FROM
(
SELECT
user_id,
minIf (toDate(createdAt), category = 1) as first_rent,
minIf (toDate(createdAt), category = 101) as first_booking
FROM
sadb_user_listing_event_logs
WHERE
type
= 'view'
AND category IN (1, 101)
AND toDate(createdAt) >= '2024-01-01'
AND user_id > 0
AND _peerdb_is_deleted = 0
GROUP BY
user_id
HAVING
countIf (category = 1) > 0
AND countIf (category = 101) > 0
)
GROUP BY
journey_direction