Skip to content

Bookings Supply & Demand Dynamics 2025

Date: 2026-01-20 Analysis Period: January - December 2025 Data Sources: sadb_listings, sadb_daily_renting_listing_bookings, sadb_daily_renting_listing_register, sadb_user_listing_views


This analysis examines the supply-demand dynamics of Aqar’s daily rental (bookings) marketplace throughout 2025, focusing on inventory growth, demand patterns, and market equilibrium.

Metric Value Trend
Total Bookings 22,052 +76% vs H2 2024
Gross Merchandise Value SAR 5.15M +103% vs 2024
Active Inventory (Dec) 7,481 listings +39% from Jul
View-to-Booking Rate 0.52% avg Stable
Nights Booked (2025) 263,787 -
Indicator Status Assessment
Supply Growth Strong +39% inventory growth H2 2025
Demand Growth Strong Bookings peaked at 2,530 in September
Conversion Rate Improving 0.70% in December (best month)
Market Balance Riyadh-heavy 60% of bookings in one city

The bookings inventory grew significantly throughout 2025, with the availability register showing:

Month Active Listings Available Nights Total Registered Availability Rate
Jul 2025 5,391 75,816 89,543 84.7%
Aug 2025 5,896 145,138 173,240 83.8%
Sep 2025 6,366 160,711 184,342 87.2%
Oct 2025 6,838 176,695 205,247 86.1%
Nov 2025 7,129 174,108 209,905 83.0%
Dec 2025 7,481 191,446 226,905 84.4%

Growth Rate: +38.8% in active listings from July to December 2025

SELECT
toStartOfMonth(toDate(r.day_date)) AS MONTH,
count(DISTINCT r.listing_id) AS listings_in_inventory,
countIf (r.availability = 1) AS available_nights,
count(*) AS total_nights_registered,
round(
countIf (r.availability = 1) * 100.0 / count(*),
2
) AS availability_rate
FROM
sadb_daily_renting_listing_register r FINAL
WHERE
r._peerdb_is_deleted = 0
AND toYear(r.day_date) = 2025
GROUP BY
MONTH
ORDER BY
MONTH
Month Apartments Studios Chalets Villas Tents Farms
Jan 2025 514 182 58 22 9 3
Feb 2025 354 129 52 11 6 0
Mar 2025 371 142 124 6 1 4
Apr 2025 352 130 68 6 3 2
May 2025 339 118 58 4 0 5
Jun 2025 380 136 61 6 1 2
Jul 2025 346 150 44 11 4 2
Aug 2025 276 86 57 2 3 1
Sep 2025 302 106 44 9 5 2
Oct 2025 312 103 40 10 5 1
Nov 2025 178 56 33 8 9 4
Dec 2025 204 75 48 4 17 2

Key Finding: New supply slowed significantly in November (289 total) but recovered in December (352). Apartment and Studio categories dominate supply growth consistently.

Not all new listings remain active. Here’s the survival rate:

Month Created New Listings Still Active Retention Rate
Jan 2025 788 143 18.1%
Feb 2025 552 138 25.0%
Mar 2025 648 204 31.5%
Apr 2025 562 223 39.7%
May 2025 526 183 34.8%
Jun 2025 586 258 44.0%
Jul 2025 559 244 43.6%
Aug 2025 425 186 43.8%
Sep 2025 469 260 55.4%
Oct 2025 471 298 63.3%
Nov 2025 289 177 61.2%
Dec 2025 352 231 65.6%

Key Finding: Retention improves for newer listings (natural decay). Early 2025 cohorts show ~25-40% retention after 6+ months.

Period 2024 New Listings 2025 New Listings YoY Change
Q1 1,125 1,988 +76.7%
Q2 2,534 1,674 -34.0%
Q3 3,199 1,453 -54.6%
Q4 2,126 1,112 -47.7%

Key Finding: 2025 saw a significant slowdown in new supply compared to 2024’s rapid growth phase. This suggests market maturation or saturation in key areas.


Month Total Bookings Completed Canceled Cancel Rate GMV (SAR) Avg Value
Jan 1,021 181 72 7.1% 288,761 283
Feb 1,385 190 55 4.0% 406,618 294
Mar 2,076 175 107 5.2% 309,869 149
Apr 1,673 208 83 5.0% 470,556 281
May 1,711 215 64 3.7% 429,145 251
Jun 1,612 178 52 3.2% 466,640 289
Jul 2,352 242 84 3.6% 541,447 230
Aug 2,246 223 69 3.1% 404,828 180
Sep 2,530 164 48 1.9% 330,478 131
Oct 1,606 162 58 3.6% 350,730 218
Nov 2,345 244 210 9.0% 817,301 349
Dec 1,495 145 58 3.9% 337,853 226

Seasonality Patterns:

  • Peak Months: July (2,352), September (2,530), November (2,345)
  • Trough Months: January (1,021), December (1,495)
  • Best GMV Month: November (SAR 817K) - likely driven by National Day events

2.2 Stay Duration Analysis (Nights Booked)

Section titled “2.2 Stay Duration Analysis (Nights Booked)”
Month Bookings Total Nights Unique Listings Avg Stay
Jan 1,123 8,392 626 7.5
Feb 1,183 12,054 595 10.2
Mar 1,810 17,470 825 9.7
Apr 1,720 19,733 836 11.5
May 1,465 18,333 783 12.5
Jun 1,628 20,537 864 12.6
Jul 2,213 27,187 1,066 12.3
Aug 2,256 26,184 1,073 11.6
Sep 2,142 37,739 1,048 17.6
Oct 1,860 34,444 1,002 18.5
Nov 2,101 22,751 1,101 10.8
Dec 1,465 18,963 852 12.9

Key Finding: September and October have the longest average stays (17-18 nights), suggesting corporate/relocation demand in these months.

Category Bookings Completed GMV (SAR) Avg Value Avg Stay
Apartment 13,231 1,402 3,890,348 294 14.8 nights
Studio 5,169 694 929,132 180 13.0 nights
Chalet 3,172 197 226,279 71 2.3 nights
Villa 321 15 90,345 281 10.7 nights
Tent 128 15 12,107 95 1.8 nights
Farm 28 4 6,016 215 2.1 nights

Key Finding: Apartments and Studios dominate with 84% of bookings and 93% of GMV. Chalets have high volume but very short stays (weekend use case).


Month Views Bookings Conversion Listings Viewed Listings Booked
Jan 228,246 1,021 0.45% 3,894 537
Feb 281,024 1,385 0.49% 3,229 655
Mar 316,525 2,076 0.66% 3,535 837
Apr 346,826 1,673 0.48% 3,687 819
May 360,351 1,711 0.47% 3,782 855
Jun 391,390 1,612 0.41% 3,977 860
Jul 461,396 2,352 0.51% 4,272 1,085
Aug 466,982 2,246 0.48% 4,333 1,073
Sep 369,521 2,530 0.68% 4,300 1,130
Oct 345,753 1,606 0.46% 4,424 902
Nov 362,229 2,345 0.65% 4,507 1,173
Dec 213,840 1,495 0.70% 4,387 834

Key Finding: December achieved the highest conversion rate (0.70%) despite lowest views, indicating more qualified traffic during holiday season.

WITH
monthly_views AS (
SELECT
toStartOfMonth(toDate(v.createdAt)) AS MONTH,
count(*) AS views,
count(DISTINCT v.listing_id) AS listings_viewed
FROM
sadb_user_listing_views v FINAL
JOIN sadb_listings l FINAL ON v.listing_id = l.id
WHERE
l.daily_rentable = 1
AND v._peerdb_is_deleted = 0
AND l._peerdb_is_deleted = 0
AND toYear(v.createdAt) = 2025
GROUP BY
MONTH
),
monthly_bookings AS (
SELECT
toStartOfMonth(toDate(b.createdAt)) AS MONTH,
count(*) AS bookings,
count(DISTINCT b.listing_id) AS listings_booked,
round(sum(b.total_amount), 0) AS gmv
FROM
sadb_daily_renting_listing_bookings b FINAL
WHERE
b._peerdb_is_deleted = 0
AND toYear(b.createdAt) = 2025
GROUP BY
MONTH
)
SELECT
v.month,
v.views,
b.bookings,
round(b.bookings * 100.0 / v.views, 2) AS view_to_booking_rate,
b.gmv
FROM
monthly_views v
JOIN monthly_bookings b ON v.month = b.month
ORDER BY
v.month
City Active Listings Bookings GMV (SAR) Booked Listings Utilization Bookings/Listing
Riyadh 2,024 13,311 4,032,354 2,559 126.4% 6.6
Jeddah 596 3,665 524,557 692 116.1% 6.1
Khobar 126 812 117,761 166 131.7% 6.4
Dammam 110 812 116,846 139 126.4% 7.4
Madinah 101 661 116,038 148 146.5% 6.5
Abha 80 494 59,768 84 105.0% 6.2
Taif 100 473 47,089 100 100.0% 4.7
Diriyah 18 132 38,949 25 138.9% 7.3
Buraydah 38 362 35,798 71 186.8% 9.5
Bahah 20 90 9,030 20 100.0% 4.5

Key Findings:

  • Riyadh dominates: 60% of all bookings, 78% of GMV
  • Undersupplied markets: Buraydah (9.5 bookings/listing), Dammam (7.4), Diriyah (7.3)
  • Oversupplied markets: Taif (4.7), Bahah (4.5)

Note: Utilization >100% means bookings came from listings that have since become inactive.

Category Avg Daily Price Median Price P25 P75
Hall SAR 5,447 SAR 9,358 SAR 66 SAR 9,358
Farm SAR 4,122 SAR 1,101 SAR 771 SAR 2,202
Villa SAR 3,509 SAR 1,046 SAR 720 SAR 1,651
Chalet SAR 2,031 SAR 840 SAR 550 SAR 1,320
Apartment SAR 1,058 SAR 371 SAR 275 SAR 550
Studio SAR 956 SAR 275 SAR 210 SAR 330
Tent SAR 910 SAR 716 SAR 440 SAR 1,101

Booking Frequency Users % of Users
1 booking 9,303 71.2%
2 bookings 2,071 15.8%
3-5 bookings 1,338 10.2%
6+ bookings 358 2.7%

Key Finding: 28.8% of users are repeat bookers, indicating moderate retention. Power users (6+ bookings) represent high-value segment to nurture.

Start Day Type Bookings Avg Value Avg Stay
Weekday Start 14,493 SAR 232 13.2 nights
Weekend Start (Thu-Fri) 6,599 SAR 208 11.9 nights

Key Finding: Weekday bookings have higher value (+12%) and longer stays, indicating business/relocation use cases. Weekend bookings are leisure-focused.

Month Cancel Rate Canceled by Host Canceled by Guest
Jan 7.1% - -
Feb 4.0% - -
Mar 5.2% - -
Apr 5.0% - -
May 3.7% - -
Jun 3.2% - -
Jul 3.6% - -
Aug 3.1% - -
Sep 1.9% - -
Oct 3.6% - -
Nov 9.0% - -
Dec 3.9% - -

Key Finding: November had an unusually high cancellation rate (9.0%), likely due to National Day booking conflicts or speculative bookings.


  1. Inventory growth is healthy (+39% H2 2025), but new listing creation slowed vs 2024
  2. Retention needs work - only 25-40% of listings remain active after 6 months
  3. Geographic concentration risk - Riyadh has 60%+ of activity
  1. Clear seasonality - Summer (Jul-Aug) and late autumn (Nov) are peak periods
  2. Long-stay segment is growing - September/October saw 17-18 night average stays
  3. Conversion improving - December hit 0.70% view-to-booking rate
  1. Undersupplied cities: Buraydah, Dammam, Diriyah need more inventory
  2. Oversupplied cities: Taif, Bahah may have excess capacity
  3. Riyadh is critical - 78% of GMV, must maintain supply quality
Priority Action Rationale
High Acquire supply in Buraydah 9.5 bookings/listing indicates unmet demand
High Improve listing retention 25-40% survival rate leaves value on table
Medium Diversify outside Riyadh 78% GMV concentration is business risk
Medium Target long-stay segment Sep/Oct shows corporate relocation demand
Low Investigate November cancellations 9% cancel rate is 3x normal

SELECT
toStartOfMonth(toDate(FROM_UNIXTIME(l.create_time))) AS created_month,
c.name_en AS category,
count(DISTINCT l.id) AS new_listings,
countIf (
l.status IN (0, 4)
AND l.published = 1
AND l.hidden = 0
) AS still_active
FROM
sadb_listings l FINAL
JOIN sadb_categories c FINAL ON l.category = c.category_id
WHERE
l.daily_rentable = 1
AND l._peerdb_is_deleted = 0
AND toYear(FROM_UNIXTIME(l.create_time)) = 2025
GROUP BY
created_month,
c.name_en
ORDER BY
created_month,
new_listings DESC
WITH
supply AS (
SELECT
d.city_name,
count(DISTINCT l.id) AS total_listings,
countIf (
l.status IN (0, 4)
AND l.published = 1
AND l.hidden = 0
) AS active_listings
FROM
sadb_listings l FINAL
JOIN sadb_districts d FINAL ON l.district_id = d.district_id
WHERE
l.daily_rentable = 1
AND l._peerdb_is_deleted = 0
GROUP BY
d.city_name
),
demand AS (
SELECT
d.city_name,
count(*) AS total_bookings,
round(sum(b.total_amount), 0) AS gmv,
count(DISTINCT b.listing_id) AS listings_with_bookings
FROM
sadb_daily_renting_listing_bookings b FINAL
JOIN sadb_listings l FINAL ON b.listing_id = l.id
JOIN sadb_districts d FINAL ON l.district_id = d.district_id
WHERE
b._peerdb_is_deleted = 0
AND l._peerdb_is_deleted = 0
AND toYear(b.createdAt) = 2025
GROUP BY
d.city_name
)
SELECT
s.city_name,
s.active_listings,
COALESCE(d.total_bookings, 0) AS total_bookings,
COALESCE(d.gmv, 0) AS total_gmv,
round(
COALESCE(d.total_bookings, 0) * 1.0 / s.active_listings,
1
) AS bookings_per_listing
FROM
supply s
LEFT JOIN demand d ON s.city_name = d.city_name
WHERE
s.active_listings > 10
ORDER BY
total_gmv DESC