Inventory Impact on Contacts: Riyadh Temporal Analysis
Date: 2026-01-15 Analysis Period: 2024-01-01 to 2026-01-15 Focus: Riyadh - Villa, Apartment, Big Flat, Land (Sale & Rent) Filter: Listings with ≥10 views/month only (excludes low-visibility listings)
Executive Summary
This analysis examines how inventory levels affect contact rates over time in Riyadh across four key property categories. By filtering to listings with meaningful visibility (≥10 views/month), we focus on active market participants.
Key Findings
- Rental markets maintain stable contacts/listing despite inventory growth (30-140% YoY)
- Sales markets show severe contact dilution - contacts/listing dropped 40-68% YoY as inventory surged
- Land for Sale is the exception - inventory decreased 25-60% while contacts/listing shows mixed trends
- Correlation strengthens over time - negative correlation between inventory and contacts/listing became more pronounced in 2025, reaching -0.41 for Villa for Sale
Monthly Trends by Category
Apartment for Rent (الشقق للإيجار)
| Period | Inventory | Contacts/Listing | Contact Rate % |
|---|---|---|---|
| Jan 2024 | 10,101 | 31.37 | 4.30% |
| Jun 2024 | 10,532 | 25.51 | 3.85% |
| Dec 2024 | 20,444 | 19.89 | 4.74% |
| Jun 2025 | 25,139 | 21.13 | 6.18% |
| Dec 2025 | 25,198 | 23.76 | 6.62% |
Trend: Inventory increased 149%, contacts/listing dropped 24%, but contact rate improved 54%.
Inventory Growth: ████████████████████████████████████████████████ +149%Contacts/Listing: ██████████ -24%Contact Rate: ██████████████████████████ +54%Apartment for Sale (الشقق للبيع)
| Period | Inventory | Contacts/Listing | Contact Rate % |
|---|---|---|---|
| Jan 2024 | 4,454 | 10.65 | 2.91% |
| Jun 2024 | 5,017 | 8.17 | 2.91% |
| Dec 2024 | 7,122 | 12.12 | 3.88% |
| Jun 2025 | 7,014 | 6.35 | 3.69% |
| Dec 2025 | 10,301 | 3.95 | 3.31% |
Trend: Inventory increased 131%, contacts/listing collapsed 63%. Classic supply glut.
Inventory Growth: ██████████████████████████████████████████ +131%Contacts/Listing: ████████████████████████ -63%Contact Rate: ████████████ +14%Villa for Rent (الفلل للإيجار)
| Period | Inventory | Contacts/Listing | Contact Rate % |
|---|---|---|---|
| Jan 2024 | 2,337 | 12.67 | 3.70% |
| Jun 2024 | 2,093 | 16.76 | 4.26% |
| Dec 2024 | 3,781 | 11.19 | 4.47% |
| Jun 2025 | 3,631 | 16.15 | 6.45% |
| Dec 2025 | 4,264 | 13.48 | 6.12% |
Trend: Inventory up 82%, contacts/listing stable (+6%). Healthy rental demand.
Inventory Growth: ██████████████████████████████ +82%Contacts/Listing: ██ +6%Contact Rate: ██████████████████████████████████ +65%Villa for Sale (الفلل للبيع)
| Period | Inventory | Contacts/Listing | Contact Rate % |
|---|---|---|---|
| Jan 2024 | 15,907 | 7.47 | 2.46% |
| Jun 2024 | 13,849 | 7.70 | 2.66% |
| Dec 2024 | 17,062 | 9.44 | 3.06% |
| Jun 2025 | 10,903 | 7.93 | 2.75% |
| Dec 2025 | 17,763 | 5.05 | 2.86% |
Trend: Inventory fluctuated, ending +12%. Contacts/listing dropped 32%. Market saturation evident.
Inventory Growth: ████ +12%Contacts/Listing: ████████████ -32%Contact Rate: ██████████████ +16%Big Flat for Rent (الأدوار للإيجار)
| Period | Inventory | Contacts/Listing | Contact Rate % |
|---|---|---|---|
| Jan 2024 | 1,502 | 22.48 | 3.45% |
| Jun 2024 | 1,287 | 24.65 | 3.63% |
| Dec 2024 | 2,316 | 16.79 | 4.06% |
| Jun 2025 | 2,490 | 27.22 | 6.10% |
| Dec 2025 | 3,068 | 20.30 | 5.65% |
Trend: Inventory doubled (+104%), contacts/listing stable (-10%). Strong demand resilience.
Inventory Growth: ████████████████████████████████████████ +104%Contacts/Listing: ████ -10%Contact Rate: ██████████████████████████████████ +64%Big Flat for Sale (الأدوار للبيع)
| Period | Inventory | Contacts/Listing | Contact Rate % |
|---|---|---|---|
| Jan 2024 | 2,970 | 7.93 | 3.49% |
| Jun 2024 | 3,827 | 6.03 | 3.39% |
| Dec 2024 | 6,421 | 8.42 | 4.22% |
| Jun 2025 | 6,298 | 4.84 | 4.29% |
| Dec 2025 | 9,695 | 2.69 | 3.37% |
Trend: Inventory up 226%, contacts/listing collapsed 66%. Severe oversupply crisis.
Inventory Growth: ████████████████████████████████████████████████████████ +226%Contacts/Listing: ████████████████████████ -66%Contact Rate: ██ -3%Land for Rent (الأراضي للإيجار)
| Period | Inventory | Contacts/Listing | Contact Rate % |
|---|---|---|---|
| Jan 2024 | 449 | 7.46 | 4.33% |
| Jun 2024 | 485 | 5.46 | 4.31% |
| Dec 2024 | 584 | 6.80 | 5.38% |
| Jun 2025 | 548 | 7.32 | 7.17% |
| Dec 2025 | 693 | 6.84 | 7.55% |
Trend: Modest growth (+54%), contacts/listing stable (-8%). Niche market consistency.
Inventory Growth: ██████████████████████ +54%Contacts/Listing: ███ -8%Contact Rate: ██████████████████████████████ +74%Land for Sale (الأراضي للبيع) ⭐ Unique Pattern
| Period | Inventory | Contacts/Listing | Contact Rate % |
|---|---|---|---|
| Jan 2024 | 13,768 | 6.25 | 4.22% |
| Jun 2024 | 10,030 | 6.97 | 4.28% |
| Dec 2024 | 9,710 | 8.98 | 4.46% |
| Jun 2025 | 6,477 | 6.88 | 4.64% |
| Dec 2025 | 8,598 | 6.77 | 5.32% |
Trend: Inventory contracted 38%, contacts/listing increased 8%. Supply reduction may reflect regulatory changes.
Inventory Change: ███████████████ -38%Contacts/Listing: ███ +8%Contact Rate: ██████████████████████████ +26%Year-over-Year Comparison (2024 vs 2025)
Rental Categories - Resilient Demand
| Category | Inventory YoY Range | CPL YoY Range | Pattern |
|---|---|---|---|
| Apartment for Rent | +23% to +139% | —36% to +20% | Demand scaling |
| Villa for Rent | +13% to +74% | —10% to +21% | Healthy balance |
| Big Flat for Rent | +33% to +94% | —28% to +25% | Strong absorption |
| Land for Rent | +4% to +30% | —10% to +38% | Stable niche |
Pattern: Rental markets absorbed 50-100%+ inventory growth while maintaining contacts per listing within ±30%.
Sales Categories - Supply Glut Crisis
| Category | Inventory YoY Range | CPL YoY Range | Pattern |
|---|---|---|---|
| Apartment for Sale | +11% to +56% | —67% to +60% | H2 collapse |
| Villa for Sale | —50% to +4% | —46% to +157% | Volatile, declining |
| Big Flat for Sale | +23% to +111% | —68% to +66% | Severe H2 dilution |
| Land for Sale | —59% to -11% | —29% to +136% | Contracting supply |
Pattern: Sales markets experienced dramatic contact dilution in H2 2025, with CPL dropping 40-68% YoY.
Quarterly Correlation Trends
The correlation between inventory and contacts/listing at the district level:
Apartment for Rent
| Quarter | Districts | Correlation | Avg Inventory | Avg CPL |
|---|---|---|---|---|
| Q1 2024 | 97 | —0.381 | 160 | 75.36 |
| Q2 2024 | 101 | —0.342 | 163 | 76.24 |
| Q3 2024 | 109 | —0.393 | 211 | 89.68 |
| Q4 2024 | 108 | —0.327 | 258 | 64.82 |
| Q1 2025 | 117 | —0.386 | 273 | 52.30 |
| Q2 2025 | 122 | —0.365 | 290 | 68.07 |
| Q3 2025 | 124 | —0.348 | 311 | 76.97 |
| Q4 2025 | 126 | —0.330 | 309 | 69.14 |
Insight: Consistent negative correlation (~-0.35). High-inventory districts reliably show lower CPL.
Villa for Sale
| Quarter | Districts | Correlation | Avg Inventory | Avg CPL |
|---|---|---|---|---|
| Q1 2024 | 101 | —0.298 | 192 | 21.56 |
| Q2 2024 | 102 | —0.299 | 189 | 22.71 |
| Q3 2024 | 107 | —0.295 | 207 | 29.69 |
| Q4 2024 | 104 | —0.357 | 215 | 31.98 |
| Q1 2025 | 99 | —0.385 | 175 | 39.45 |
| Q2 2025 | 98 | —0.391 | 132 | 29.89 |
| Q3 2025 | 103 | -0.396 | 184 | 27.24 |
| Q4 2025 | 107 | -0.407 | 195 | 19.48 |
Insight: Correlation strengthened from -0.30 to -0.41 over the period. Competition intensified significantly.
Big Flat for Sale
| Quarter | Districts | Correlation | Avg Inventory | Avg CPL |
|---|---|---|---|---|
| Q1 2024 | 40 | —0.364 | 88 | 34.76 |
| Q2 2024 | 41 | —0.377 | 111 | 27.20 |
| Q3 2024 | 48 | —0.384 | 134 | 39.97 |
| Q4 2024 | 50 | —0.286 | 150 | 35.60 |
| Q1 2025 | 56 | —0.384 | 130 | 40.89 |
| Q2 2025 | 56 | -0.394 | 121 | 25.82 |
| Q3 2025 | 72 | —0.331 | 127 | 28.77 |
| Q4 2025 | 75 | -0.394 | 139 | 15.58 |
Insight: Strong negative correlation throughout. CPL collapsed from 35 to 16 as market expanded.
Land for Sale
| Quarter | Districts | Correlation | Avg Inventory | Avg CPL |
|---|---|---|---|---|
| Q1 2024 | 110 | -0.007 | 153 | 15.03 |
| Q2 2024 | 106 | —0.117 | 131 | 18.40 |
| Q3 2024 | 110 | —0.041 | 146 | 21.36 |
| Q4 2024 | 108 | —0.228 | 134 | 21.84 |
| Q1 2025 | 106 | —0.139 | 103 | 26.30 |
| Q2 2025 | 91 | -0.265 | 86 | 26.22 |
| Q3 2025 | 108 | —0.180 | 92 | 26.01 |
| Q4 2025 | 107 | —0.182 | 98 | 18.94 |
Insight: Started with near-zero correlation, shifted moderately negative as supply contracted.
Key Insights & Implications
1. Rental vs Sales Divergence
The rental market demonstrates network effects:
- More inventory → more seekers → stable per-listing engagement
- Contact rate improving (4.3% → 6.6% for apartments)
The sales market shows supply dilution:
- Fixed buyer pool spread across growing inventory
- Per-listing engagement dropping 40-68%
2. Seasonal Patterns
| Season | Effect |
|---|---|
| August | Peak contacts - relocation season |
| February | Trough - lowest engagement |
| Q4 | Softening - end-of-year decline |
| Ramadan | Variable impact by category |
3. 2025 Sales Market Warning Signs
The dramatic CPL drops signal:
- Oversupply crisis in apartments and big flats for sale
- Price adjustment pressure expected
- Promotion opportunity - SOV/Golden campaigns more valuable
4. Land Market Anomaly
Unlike other categories, Land for Sale:
- Inventory decreased 38% (regulatory? consolidation?)
- CPL remained stable
- May indicate shift to institutional holdings
Market Health Summary
| Category | Health | Inventory Δ | CPL Δ | Recommendation |
|---|---|---|---|---|
| Apartment for Rent | ✅ Strong | +149% | —24% | Expand in undersupplied districts |
| Villa for Rent | ✅ Healthy | +82% | +6% | Stable growth opportunity |
| Big Flat for Rent | ✅ Growing | +104% | —10% | Monitor for 2026 saturation |
| Land for Rent | ✅ Stable | +54% | —8% | Niche, maintain levels |
| Apartment for Sale | ⚠️ Oversupplied | +131% | —63% | Price pressure, promote |
| Villa for Sale | ⚠️ Saturated | +12% | —32% | Differentiation needed |
| Big Flat for Sale | 🔴 Crisis | +226% | —66% | Expect corrections |
| Land for Sale | 📊 Contracting | —38% | +8% | Monitor regulatory impact |
SQL Queries Used
Monthly Trends (Filtered for ≥10 views/month)
WITH monthly_listing_stats AS ( SELECT s.id AS listing_id, l.category AS category_id, l.district_id, toStartOfMonth (toDate (s.day_time)) AS MONTH, sum(s.views) AS monthly_views, sum(s.calls + s.whatsapp + s.msgs) AS monthly_contacts FROM sadb_stats_listings_stats s FINAL JOIN sadb_listings l FINAL ON s.id = l.id JOIN sadb_districts d FINAL ON l.district_id = d.district_id WHERE l._peerdb_is_deleted = 0 AND toDate (s.day_time) >= '2024-01-01' AND d.city_name = 'الرياض' GROUP BY s.id, l.category, l.district_id, MONTH HAVING monthly_views >= 10 -- Filter: minimum 10 views per month )SELECT c.name_en AS category, mls.month, count(DISTINCT mls.listing_id) AS inventory, sum(mls.monthly_contacts) AS total_contacts, sum(mls.monthly_views) AS total_views, round( sum(mls.monthly_contacts) / count(DISTINCT mls.listing_id), 2 ) AS contacts_per_listing, round( sum(mls.monthly_contacts) / nullIf(sum(mls.monthly_views), 0) * 100, 2 ) AS contact_rate_pctFROM monthly_listing_stats mls JOIN sadb_categories c FINAL ON mls.category_id = c.category_idWHERE c.name_en IN ( 'Villa for Sale', 'Villa for Rent', 'Apartment for Sale', 'Apartment for Rent', 'Big Flat for Sale', 'Big Flat for Rent', 'Land for Sale', 'Land for Rent' )GROUP BY c.name_en, mls.monthORDER BY category, MONTHQuarterly District Correlation (Filtered for ≥30 views/quarter)
WITH quarterly_listing_stats AS ( SELECT s.id AS listing_id, l.category AS category_id, d.district_name, toStartOfQuarter (toDate (s.day_time)) AS quarter, sum(s.views) AS quarterly_views, sum(s.calls + s.whatsapp + s.msgs) AS quarterly_contacts FROM sadb_stats_listings_stats s FINAL JOIN sadb_listings l FINAL ON s.id = l.id JOIN sadb_districts d FINAL ON l.district_id = d.district_id WHERE l._peerdb_is_deleted = 0 AND toDate (s.day_time) >= '2024-01-01' AND d.city_name = 'الرياض' GROUP BY s.id, l.category, d.district_name, quarter HAVING quarterly_views >= 30 -- ~10 views/month * 3 months ), quarterly_district AS ( SELECT c.name_en AS category, qls.quarter, qls.district_name, count(DISTINCT qls.listing_id) AS inventory, sum(qls.quarterly_contacts) AS total_contacts FROM quarterly_listing_stats qls JOIN sadb_categories c FINAL ON qls.category_id = c.category_id WHERE c.name_en IN ( 'Villa for Sale', 'Villa for Rent', 'Apartment for Sale', 'Apartment for Rent', 'Big Flat for Sale', 'Big Flat for Rent', 'Land for Sale', 'Land for Rent' ) GROUP BY c.name_en, qls.quarter, qls.district_name HAVING inventory >= 10 )SELECT category, quarter, count(*) AS num_districts, round(corr(inventory, total_contacts / inventory), 3) AS corr_inv_contacts_per_listing, round(avg(inventory), 0) AS avg_inventory, round(avg(total_contacts / inventory), 2) AS avg_contacts_per_listingFROM quarterly_districtGROUP BY category, quarterHAVING num_districts >= 10ORDER BY category, quarterYear-over-Year Comparison (Filtered)
WITH monthly_listing_stats AS ( SELECT s.id AS listing_id, l.category AS category_id, toMonth (toDate (s.day_time)) AS month_num, toYear (toDate (s.day_time)) AS YEAR, sum(s.views) AS monthly_views, sum(s.calls + s.whatsapp + s.msgs) AS monthly_contacts FROM sadb_stats_listings_stats s FINAL JOIN sadb_listings l FINAL ON s.id = l.id JOIN sadb_districts d FINAL ON l.district_id = d.district_id WHERE l._peerdb_is_deleted = 0 AND toDate (s.day_time) >= '2024-01-01' AND d.city_name = 'الرياض' GROUP BY s.id, l.category, month_num, YEAR HAVING monthly_views >= 10 ), monthly_agg AS ( SELECT c.name_en AS category, mls.month_num, mls.year, count(DISTINCT mls.listing_id) AS inventory, round( sum(mls.monthly_contacts) / count(DISTINCT mls.listing_id), 2 ) AS contacts_per_listing FROM monthly_listing_stats mls JOIN sadb_categories c FINAL ON mls.category_id = c.category_id WHERE c.name_en IN ( 'Villa for Sale', 'Villa for Rent', 'Apartment for Sale', 'Apartment for Rent', 'Big Flat for Sale', 'Big Flat for Rent', 'Land for Sale', 'Land for Rent' ) GROUP BY c.name_en, mls.month_num, mls.year )SELECT category, month_num, maxIf (inventory, YEAR = 2024) AS inventory_2024, maxIf (contacts_per_listing, YEAR = 2024) AS cpl_2024, maxIf (inventory, YEAR = 2025) AS inventory_2025, maxIf (contacts_per_listing, YEAR = 2025) AS cpl_2025, round( ( maxIf (inventory, YEAR = 2025) - maxIf (inventory, YEAR = 2024) ) / maxIf (inventory, YEAR = 2024) * 100, 1 ) AS inventory_yoy_pct, round( ( maxIf (contacts_per_listing, YEAR = 2025) - maxIf (contacts_per_listing, YEAR = 2024) ) / maxIf (contacts_per_listing, YEAR = 2024) * 100, 1 ) AS cpl_yoy_pctFROM monthly_aggWHERE YEAR IN (2024, 2025)GROUP BY category, month_numHAVING inventory_2024 > 0 AND inventory_2025 > 0ORDER BY category, month_num