Skip to content

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

  1. Rental markets maintain stable contacts/listing despite inventory growth (30-140% YoY)
  2. Sales markets show severe contact dilution - contacts/listing dropped 40-68% YoY as inventory surged
  3. Land for Sale is the exception - inventory decreased 25-60% while contacts/listing shows mixed trends
  4. Correlation strengthens over time - negative correlation between inventory and contacts/listing became more pronounced in 2025, reaching -0.41 for Villa for Sale

Apartment for Rent (الشقق للإيجار)

PeriodInventoryContacts/ListingContact Rate %
Jan 202410,10131.374.30%
Jun 202410,53225.513.85%
Dec 202420,44419.894.74%
Jun 202525,13921.136.18%
Dec 202525,19823.766.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 (الشقق للبيع)

PeriodInventoryContacts/ListingContact Rate %
Jan 20244,45410.652.91%
Jun 20245,0178.172.91%
Dec 20247,12212.123.88%
Jun 20257,0146.353.69%
Dec 202510,3013.953.31%

Trend: Inventory increased 131%, contacts/listing collapsed 63%. Classic supply glut.

Inventory Growth: ██████████████████████████████████████████ +131%
Contacts/Listing: ████████████████████████ -63%
Contact Rate: ████████████ +14%

Villa for Rent (الفلل للإيجار)

PeriodInventoryContacts/ListingContact Rate %
Jan 20242,33712.673.70%
Jun 20242,09316.764.26%
Dec 20243,78111.194.47%
Jun 20253,63116.156.45%
Dec 20254,26413.486.12%

Trend: Inventory up 82%, contacts/listing stable (+6%). Healthy rental demand.

Inventory Growth: ██████████████████████████████ +82%
Contacts/Listing: ██ +6%
Contact Rate: ██████████████████████████████████ +65%

Villa for Sale (الفلل للبيع)

PeriodInventoryContacts/ListingContact Rate %
Jan 202415,9077.472.46%
Jun 202413,8497.702.66%
Dec 202417,0629.443.06%
Jun 202510,9037.932.75%
Dec 202517,7635.052.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 (الأدوار للإيجار)

PeriodInventoryContacts/ListingContact Rate %
Jan 20241,50222.483.45%
Jun 20241,28724.653.63%
Dec 20242,31616.794.06%
Jun 20252,49027.226.10%
Dec 20253,06820.305.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 (الأدوار للبيع)

PeriodInventoryContacts/ListingContact Rate %
Jan 20242,9707.933.49%
Jun 20243,8276.033.39%
Dec 20246,4218.424.22%
Jun 20256,2984.844.29%
Dec 20259,6952.693.37%

Trend: Inventory up 226%, contacts/listing collapsed 66%. Severe oversupply crisis.

Inventory Growth: ████████████████████████████████████████████████████████ +226%
Contacts/Listing: ████████████████████████ -66%
Contact Rate: ██ -3%

Land for Rent (الأراضي للإيجار)

PeriodInventoryContacts/ListingContact Rate %
Jan 20244497.464.33%
Jun 20244855.464.31%
Dec 20245846.805.38%
Jun 20255487.327.17%
Dec 20256936.847.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

PeriodInventoryContacts/ListingContact Rate %
Jan 202413,7686.254.22%
Jun 202410,0306.974.28%
Dec 20249,7108.984.46%
Jun 20256,4776.884.64%
Dec 20258,5986.775.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

CategoryInventory YoY RangeCPL YoY RangePattern
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

CategoryInventory YoY RangeCPL YoY RangePattern
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.


The correlation between inventory and contacts/listing at the district level:

Apartment for Rent

QuarterDistrictsCorrelationAvg InventoryAvg CPL
Q1 202497—0.38116075.36
Q2 2024101—0.34216376.24
Q3 2024109—0.39321189.68
Q4 2024108—0.32725864.82
Q1 2025117—0.38627352.30
Q2 2025122—0.36529068.07
Q3 2025124—0.34831176.97
Q4 2025126—0.33030969.14

Insight: Consistent negative correlation (~-0.35). High-inventory districts reliably show lower CPL.

Villa for Sale

QuarterDistrictsCorrelationAvg InventoryAvg CPL
Q1 2024101—0.29819221.56
Q2 2024102—0.29918922.71
Q3 2024107—0.29520729.69
Q4 2024104—0.35721531.98
Q1 202599—0.38517539.45
Q2 202598—0.39113229.89
Q3 2025103-0.39618427.24
Q4 2025107-0.40719519.48

Insight: Correlation strengthened from -0.30 to -0.41 over the period. Competition intensified significantly.

Big Flat for Sale

QuarterDistrictsCorrelationAvg InventoryAvg CPL
Q1 202440—0.3648834.76
Q2 202441—0.37711127.20
Q3 202448—0.38413439.97
Q4 202450—0.28615035.60
Q1 202556—0.38413040.89
Q2 202556-0.39412125.82
Q3 202572—0.33112728.77
Q4 202575-0.39413915.58

Insight: Strong negative correlation throughout. CPL collapsed from 35 to 16 as market expanded.

Land for Sale

QuarterDistrictsCorrelationAvg InventoryAvg CPL
Q1 2024110-0.00715315.03
Q2 2024106—0.11713118.40
Q3 2024110—0.04114621.36
Q4 2024108—0.22813421.84
Q1 2025106—0.13910326.30
Q2 202591-0.2658626.22
Q3 2025108—0.1809226.01
Q4 2025107—0.1829818.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

SeasonEffect
AugustPeak contacts - relocation season
FebruaryTrough - lowest engagement
Q4Softening - end-of-year decline
RamadanVariable 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

CategoryHealthInventory Δ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

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_pct
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
ORDER BY
category,
MONTH

Quarterly 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_listing
FROM
quarterly_district
GROUP BY
category,
quarter
HAVING
num_districts >= 10
ORDER BY
category,
quarter

Year-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_pct
FROM
monthly_agg
WHERE
YEAR IN (2024, 2025)
GROUP BY
category,
month_num
HAVING
inventory_2024 > 0
AND inventory_2025 > 0
ORDER BY
category,
month_num