Date: 2026-01-14
Analysis Period: 2024-01-01 onwards (last 3 months for decay analysis)
Executive Summary
This analysis covers three key aspects of listing performance:
- Time on Market - How long listings take to close by category/city
- View Decay - How views decrease as listings age
- Contact Conversion Decay - How view-to-contact rates change over time
Key Findings
| Metric | Finding |
|---|
| Time on Market | Improved 50-60% from early 2024 to late 2025 |
| View Decay | 75% drop by Day 90, Day 2 is peak |
| Conversion Decay | Drops from 8.5% to 5.2% (-39%) over 90 days |
| Critical Window | First 2 weeks generate ~50% of all contacts |
1. Time on Market Analysis
Overview
Time on market measures days from published_at to close_time for listings that have been closed.
| Category | Closed | Median | P25 | P75 | P90 |
|---|
| Room for Rent | 4,594 | 27 | 8 | 80 | 145 |
| Big Flat for Rent | 17,791 | 34 | 14 | 70 | 121 |
| Apartment for Rent | 166,552 | 39 | 15 | 82 | 144 |
| Villa for Rent | 23,256 | 46 | 17 | 98 | 159 |
| Land for Sale | 68,011 | 89 | 33 | 148 | 235 |
| Big Flat for Sale | 20,623 | 88 | 37 | 149 | 235 |
| Villa for Sale | 75,864 | 88 | 37 | 155 | 249 |
| Apartment for Sale | 68,130 | 104 | 53 | 180 | 269 |
Insight: Rentals move 2-3x faster than sales
| City | Closed | Median | P25 | P75 |
|---|
| الرياض (Riyadh) | 302,701 | 53 | 19 | 111 |
| الظهران (Dhahran) | 2,638 | 58 | 23 | 117 |
| الهفوف (Hofuf) | 4,208 | 69 | 25 | 127 |
| جدة (Jeddah) | 72,524 | 76 | 30 | 143 |
| الدمام (Dammam) | 23,352 | 78 | 28 | 151 |
| مكة المكرمة (Makkah) | 8,787 | 94 | 35 | 167 |
Insight: Riyadh is the fastest market
Monthly Cohort Trends
| Cohort | Riyadh | Jeddah | Dammam |
|---|
| Jan 2024 | 51 | 62 | 57 |
| Jul 2024 | 39 | 39 | 33 |
| Jan 2025 | 33 | 37 | 33 |
| Oct 2025 | 32 | 35 | 30 |
Trend: Convergence to ~30-35 days across all cities
| Cohort | Riyadh | Jeddah | Dammam |
|---|
| Jan 2024 | 108 | 152 | 141 |
| Jul 2024 | 94 | 142 | 164 |
| Jan 2025 | 18 | 60 | 21 |
| Oct 2025 | 52 | 49 | 30 |
Trend: Major improvement from 108-152 days to 30-52 days
Query: Time on Market by Category
COUNT(*) AS closed_listings,
ROUND(AVG((l.close_time - l.published_at) / 86400), 1) AS avg_days,
median ((l.close_time - l.published_at) / 86400),
quantile (0.25) ((l.close_time - l.published_at) / 86400),
quantile (0.75) ((l.close_time - l.published_at) / 86400),
quantile (0.90) ((l.close_time - l.published_at) / 86400),
JOIN sadb_categories c FINAL ON l.category = c.category_id
l.close_time > l.published_at
AND l._peerdb_is_deleted = 0
AND (l.close_time - l.published_at) / 86400 BETWEEN 1 AND 730
AND toDate (l.published_at) >= '2024-01-01'
Query: Time on Market by City
COUNT(*) AS closed_listings,
ROUND(AVG((l.close_time - l.published_at) / 86400), 1) AS avg_days,
median ((l.close_time - l.published_at) / 86400),
quantile (0.25) ((l.close_time - l.published_at) / 86400),
quantile (0.75) ((l.close_time - l.published_at) / 86400),
JOIN sadb_districts d FINAL ON l.district_id = d.district_id
l.close_time > l.published_at
AND l._peerdb_is_deleted = 0
AND (l.close_time - l.published_at) / 86400 BETWEEN 1 AND 730
AND toDate (l.published_at) >= '2024-01-01'
Query: Monthly Cohort Analysis by Category + City
toStartOfMonth (toDate (l.published_at)) AS cohort_month,
COUNT(*) AS closed_listings,
median ((l.close_time - l.published_at) / 86400),
JOIN sadb_categories c FINAL ON l.category = c.category_id
JOIN sadb_districts d FINAL ON l.district_id = d.district_id
l.close_time > l.published_at
AND l._peerdb_is_deleted = 0
AND (l.close_time - l.published_at) / 86400 BETWEEN 1 AND 365
AND toDate (l.published_at) >= '2024-01-01'
AND c.name_en = 'Apartment for Rent'
AND d.city_name IN ('الرياض', 'جدة', 'الدمام')
2. View Decay Analysis
Overview
Views decrease significantly as listings age. Day 2 is typically the peak (not Day 1, due to indexing delays).
Overall View Decay Pattern
| Listing Age | Avg Views | Median Views | % of Peak |
|---|
| Day 1 | 28.9 | 18 | 73% |
| Day 2 | 39.6 | 25 | 100% |
| Day 3 | 33.7 | 21 | 85% |
| Day 7 | 26.8 | 16 | 68% |
| Day 14 | 21.7 | 13 | 55% |
| Day 30 | 17.2 | 10 | 43% |
| Day 60 | 12.3 | 7 | 31% |
| Day 90 | 9.6 | 5 | 24% |
View Decay by Category
| Category | Week 1 | Week 2 | Wk 3-4 | Mo 2 | Mo 3 | Decay |
|---|
| Apartment Rent | 39.8 | 29.9 | 24.5 | 19.8 | 16.8 | —58% |
| Villa Rent | 25.1 | 18.3 | 14.9 | 11.7 | 10.2 | —59% |
| Villa Sale | 20.4 | 14.8 | 12.3 | 10.6 | 8.6 | —58% |
| Land Sale | 11.3 | 7.5 | 6.0 | 4.9 | 4.0 | —65% |
| Apartment Sale | 11.2 | 8.9 | 8.0 | 6.0 | 4.7 | —58% |
View Decay by City
| City | Week 1 | Week 2 | Wk 3-4 | Mo 2 | Mo 3 | Decay |
|---|
| الدمام | 43.5 | 32.4 | 26.2 | 18.5 | 14.7 | —66% |
| الرياض | 31.7 | 23.3 | 19.0 | 14.7 | 11.4 | —64% |
| جدة | 27.2 | 21.0 | 17.5 | 13.5 | 10.6 | —61% |
| مكة | 23.9 | 19.7 | 16.6 | 12.4 | 7.2 | —70% |
Query: View Decay by Listing Age
s.day_time - toInt32 (l.published_at / 86400) AS listing_age_days,
COUNT(DISTINCT s.id) AS listings_count,
SUM(s.views) AS total_views,
ROUND(AVG(s.views), 2) AS avg_views_per_listing,
ROUND(median (s.views), 1) AS median_views
sadb_stats_listings_stats s FINAL
JOIN sadb_listings l FINAL ON s.id = l.id
toDate (s.day_time) >= today () - INTERVAL 3 MONTH
AND s.day_time >= toInt32 (l.published_at / 86400)
AND l._peerdb_is_deleted = 0
AND (s.day_time - toInt32 (l.published_at / 86400)) BETWEEN 0 AND 90
Query: View Decay by Category (Bucketed)
WHEN listing_age_days BETWEEN 0 AND 7 THEN '1. Week 1'
WHEN listing_age_days BETWEEN 8 AND 14 THEN '2. Week 2'
WHEN listing_age_days BETWEEN 15 AND 30 THEN '3. Week 3-4'
WHEN listing_age_days BETWEEN 31 AND 60 THEN '4. Month 2'
ROUND(AVG(views), 2) AS avg_views,
ROUND(median (views), 1) AS median_views
s.day_time - toInt32 (l.published_at / 86400) AS listing_age_days,
sadb_stats_listings_stats s FINAL
JOIN sadb_listings l FINAL ON s.id = l.id
toDate (s.day_time) >= today () - INTERVAL 3 MONTH
AND s.day_time >= toInt32 (l.published_at / 86400)
AND l._peerdb_is_deleted = 0
AND (s.day_time - toInt32 (l.published_at / 86400)) BETWEEN 0 AND 90
JOIN sadb_categories c FINAL ON t.category = c.category_id
Overview
Conversion rate (contacts / views) also decays over time, but less dramatically than raw views.
Overall Conversion Decay
| Listing Age | Avg Views | Avg Contacts | Conversion % |
|---|
| Day 0 | 20.9 | 2.42 | 11.6% |
| Day 2 | 39.6 | 3.37 | 8.5% |
| Day 7 | 26.8 | 1.80 | 6.7% |
| Day 14 | 21.7 | 1.40 | 6.4% |
| Day 30 | 17.2 | 1.02 | 6.0% |
| Day 60 | 12.3 | 0.67 | 5.4% |
| Day 90 | 9.6 | 0.50 | 5.2% |
Decay Comparison
| Metric | Week 1 | Month 3 | Decay |
|---|
| Views | 30 avg | 10 avg | —67% |
| Contacts | 2.3 avg | 0.5 avg | —78% |
| Conversion % | 7.5% | 5.3% | —29% |
Conversion by Category
| Category | Week 1 | Week 2 | Wk 3-4 | Mo 2 | Mo 3 | Decay |
|---|
| Apartment Rent | 8.0% | 7.0% | 6.6% | 6.2% | 6.1% | —24% |
| Villa Rent | 7.2% | 6.1% | 5.8% | 5.6% | 5.6% | —22% |
| Land Sale | 8.0% | 5.6% | 4.8% | 4.2% | 3.9% | -51% |
| Apartment Sale | 4.5% | 4.2% | 4.3% | 3.8% | 3.9% | —13% |
| Villa Sale | 4.3% | 3.1% | 3.0% | 2.7% | 2.5% | -42% |
Insight: Rentals maintain conversion better, Land sales have steepest decay
Conversion by City
| City | Week 1 | Week 2 | Wk 3-4 | Mo 2 | Mo 3 | Decay |
|---|
| مكة | 8.7% | 7.8% | 6.7% | 6.6% | 5.1% | —41% |
| الرياض | 7.9% | 6.7% | 6.4% | 5.9% | 5.5% | —30% |
| الدمام | 7.5% | 6.7% | 5.9% | 5.3% | 6.3% | —16% |
| جدة | 7.2% | 6.0% | 5.6% | 5.2% | 4.8% | —33% |
Query: Conversion by Listing Age
s.day_time - toInt32 (l.published_at / 86400) AS listing_age_days,
SUM(s.views) AS total_views,
SUM(s.calls + s.msgs + s.whatsapp) AS total_contacts,
100.0 * SUM(s.calls + s.msgs + s.whatsapp) / NULLIF(SUM(s.views), 0),
ROUND(AVG(s.views), 1) AS avg_views,
ROUND(AVG(s.calls + s.msgs + s.whatsapp), 2) AS avg_contacts
sadb_stats_listings_stats s FINAL
JOIN sadb_listings l FINAL ON s.id = l.id
toDate (s.day_time) >= today () - INTERVAL 3 MONTH
AND s.day_time >= toInt32 (l.published_at / 86400)
AND l._peerdb_is_deleted = 0
AND (s.day_time - toInt32 (l.published_at / 86400)) BETWEEN 0 AND 90
Query: Conversion by Category (Bucketed)
WHEN listing_age_days BETWEEN 0 AND 7 THEN '1. Week 1'
WHEN listing_age_days BETWEEN 8 AND 14 THEN '2. Week 2'
WHEN listing_age_days BETWEEN 15 AND 30 THEN '3. Week 3-4'
WHEN listing_age_days BETWEEN 31 AND 60 THEN '4. Month 2'
SUM(views) AS total_views,
SUM(contacts) AS total_contacts,
ROUND(100.0 * SUM(contacts) / NULLIF(SUM(views), 0), 2) AS conversion_pct,
ROUND(AVG(views), 1) AS avg_views,
ROUND(AVG(contacts), 2) AS avg_contacts
s.day_time - toInt32 (l.published_at / 86400) AS listing_age_days,
s.calls + s.msgs + s.whatsapp AS contacts
sadb_stats_listings_stats s FINAL
JOIN sadb_listings l FINAL ON s.id = l.id
toDate (s.day_time) >= today () - INTERVAL 3 MONTH
AND s.day_time >= toInt32 (l.published_at / 86400)
AND l._peerdb_is_deleted = 0
AND (s.day_time - toInt32 (l.published_at / 86400)) BETWEEN 0 AND 90
JOIN sadb_categories c FINAL ON t.category = c.category_id
Query: Conversion by City (Bucketed)
WHEN listing_age_days BETWEEN 0 AND 7 THEN '1. Week 1'
WHEN listing_age_days BETWEEN 8 AND 14 THEN '2. Week 2'
WHEN listing_age_days BETWEEN 15 AND 30 THEN '3. Week 3-4'
WHEN listing_age_days BETWEEN 31 AND 60 THEN '4. Month 2'
SUM(views) AS total_views,
SUM(contacts) AS total_contacts,
ROUND(100.0 * SUM(contacts) / NULLIF(SUM(views), 0), 2) AS conversion_pct
s.day_time - toInt32 (l.published_at / 86400) AS listing_age_days,
s.calls + s.msgs + s.whatsapp AS contacts
sadb_stats_listings_stats s FINAL
JOIN sadb_listings l FINAL ON s.id = l.id
toDate (s.day_time) >= today () - INTERVAL 3 MONTH
AND s.day_time >= toInt32 (l.published_at / 86400)
AND l._peerdb_is_deleted = 0
AND (s.day_time - toInt32 (l.published_at / 86400)) BETWEEN 0 AND 90
JOIN sadb_districts d FINAL ON t.district_id = d.district_id
d.city_name IN ('الرياض', 'جدة', 'الدمام', 'مكة المكرمة')
Business Implications
1. Listing Refresh Strategy
- Listings not converting by Day 30 are getting ~40% of peak traffic
- Consider automated refresh prompts at Day 14 and Day 30
2. Pricing Guidance
- If no contacts by Week 2, listing may be overpriced
- Sales listings (especially land) need pricing attention early
3. Category-Specific Strategies
- Rentals: High volume, maintain conversion - focus on response time
- Land Sales: Urgency-driven buyers - price aggressively early
- Villa Sales: Longer cycle expected - patience but monitor conversion
4. City-Specific Insights
- Riyadh: Fastest market, most competitive - quick response essential
- Makkah: High initial interest but fast decay - capture early
- Jeddah: Slower decay but lower baseline - quality over speed
Data Notes
- Analysis Period: 2024-01-01 onwards (regulatory changes make earlier data incomparable)
- View/Conversion Analysis: Last 3 months only for recency
- Time on Market: Filtered to 1-730 days (excludes outliers)
- day_time format: Days since Unix epoch (not Unix timestamp)
- published_at format: Unix timestamp (seconds)