Skip to content

SOV Advertiser Retention

  • SOV keeps few advertisers month to month. Of advertisers whose first charged SOV day was in a given month, 26% are active again the next month, 11% in month 3, 8% in month 6 and 7% in month 12. The curve flattens after month 6 into a small core of about 5–7% that keeps buying.
  • Revenue holds up better than the advertiser count. Month-12 spend is 19% of the cohort’s first-month spend (month 1: 44%). The advertisers who stay spend about 2.7× as much as the cohort average did in its first month.
  • Use is short and on/off, not a subscription. The median advertiser buys 5 charged days in total, and 79% of first campaigns last 3 days or less. Still, 48% come back after a gap of more than 7 days (median 55 days later), and reactivated advertisers make up about 30% of each month’s active base.
  • Owners churn about twice as fast as brokers after the first month. Owners are advertisers whose first SOV listing went through Aqar’s owner licensing flow (licensing_requests). They are a third of advertisers. They return in month 1 at the same rate as brokers (25% vs 27%), but by month 12 only 4.6% are still buying, against 8.5% of brokers. Owner revenue retention at month 12 is 13%, against 22% for brokers. Owners’ share of SOV spend fell from about 35% in mid-2024 to 14% in September 2026.
  • Retention has not improved. Month-1 retention has stayed at 24–31% for every quarterly cohort since 2024. Month-12 retention dropped from 11% (2024 Q1 cohort) to about 5% (2025 cohorts).
  • Advertiser = user_id in sadb_sov_daily_biddings.
  • Charged SOV day = a bidding row with status = 4 and non_chargeable = false, the same filter as the SOV pricing simulator. This drops campaigns that were created but never ran: 22.1k users created a campaign, 14.6k were ever charged.
  • Cohort = the calendar month of an advertiser’s first charged day (from 2024-03, the first full month of SOV).
  • Month-k logo retention = share of the cohort with at least one charged day in calendar month k after the cohort month. Calendar months flatter month 1 slightly, because a campaign that starts on the 30th and runs into the next month counts as retained.
  • Revenue retention = cohort spend in month k ÷ cohort spend in month 0 (budget is in points; 100 points = 1 SAR).
  • Only cohorts old enough to observe month k are included. October 2026 (partial) is excluded.
Month k Eligible advertisers Active in month k Logo retention Revenue retention Came back at any point by month k
1 14,229 3,755 26.4% 43.5% 26.4%
2 13,847 1,974 14.3% 27.2% 31.8%
3 13,487 1,496 11.1% 22.5% 35.4%
6 12,484 1,012 8.1% 19.4% 41.5%
12 10,634 758 7.1% 19.1% 48.0%
18 8,278 488 5.9% 17.9% 52.7%
24 5,526 299 5.4% 17.8% 57.4%

The gap between the last two columns shows the on/off pattern. By month 12 about half the cohort has bought SOV again at some point, but only 7% are buying in any given month.

WITH
um AS (
SELECT
user_id,
toStartOfMonth(start_datetime) m,
sum(budget) / 100 sar
FROM
sadb_sov_daily_biddings FINAL
WHERE
_peerdb_is_deleted = 0
AND status = 4
AND non_chargeable = 0
AND start_datetime >= '2024-03-01'
AND start_datetime < '2026-10-01'
GROUP BY
user_id,
m
),
f AS (
SELECT
user_id AS uid,
argMin(m, m) cohort,
argMin(sar, m) sar0
FROM
um
GROUP BY
user_id
),
j AS (
SELECT
f.uid AS uid,
f.cohort AS cohort,
dateDiff('month', f.cohort, um.m) k,
um.sar AS sar
FROM
um
JOIN f ON um.user_id = f.uid
),
ks AS (
SELECT
arrayJoin([1, 2, 3, 6, 12, 18, 24]) kk
),
base AS (
SELECT
kk,
uniqExact(uid) eligible,
sum(sar0) sar0
FROM
f
CROSS JOIN ks
WHERE
cohort <= addMonths(toDate('2026-09-01'), - kk)
GROUP BY
kk
),
act AS (
SELECT
kk,
uniqExactIf (uid, k = kk) active,
sumIf (sar, k = kk) sar_k,
uniqExactIf (
uid,
k >= 1
AND k <= kk
) ever_back
FROM
j
CROSS JOIN ks
WHERE
cohort <= addMonths(toDate('2026-09-01'), - kk)
GROUP BY
kk
)
SELECT
kk,
eligible,
active,
round(active / eligible * 100, 1) logo_ret,
round(sar_k / sar0 * 100, 1) rev_ret,
round(ever_back / eligible * 100, 1) returned_within_k
FROM
base
JOIN act USING kk
ORDER BY
kk

An advertiser is an owner if the listing on their first charged SOV day has a row in licensing_requests, the table behind Aqar’s flow for issuing ad licenses to owners. Everyone else is a broker: their listing carries a license they got through REGA themselves. licensing_requests is only in MySQL, so the queries in this section run on Metabase database 2 against the MySQL sov_daily_biddings. With the same filters, the MySQL counts match ClickHouse exactly (14,229 advertisers eligible for month 1).

Owners make up 4,791 of the 14,229 advertisers (34%). Only 121 of the 7.6k owner-flow listings promoted with SOV never got a license issued, so including unissued requests makes no practical difference.

Month k Broker eligible Broker logo Broker revenue Broker came back by k Owner eligible Owner logo Owner revenue Owner came back by k
1 9,438 26.9% 43.6% 26.9% 4,791 25.3% 43.3% 25.3%
2 9,179 15.9% 29.6% 33.4% 4,668 11.0% 22.2% 28.8%
3 8,934 12.5% 24.5% 37.6% 4,553 8.3% 18.3% 31.1%
6 8,270 9.3% 22.1% 44.6% 4,214 5.8% 13.6% 35.4%
12 6,966 8.5% 22.2% 52.5% 3,668 4.6% 12.7% 39.5%
18 5,346 7.2% 19.7% 57.4% 2,932 3.4% 14.2% 44.0%
24 3,604 6.5% 21.1% 62.2% 1,922 3.3% 11.0% 48.4%

Both groups look the same in month 1, then split. An owner usually has one property to sell or rent, so once it is gone there is nothing left to promote. Brokers keep getting new inventory, and 62% of them come back at some point within two years.

Advertisers with a first charged day before 2026-09:

Metric Broker Owner
Advertisers 9,438 4,791
Lifetime spend (SAR) 6.92 M 2.21 M
Average lifetime spend per advertiser (SAR) 733 462
Average charged days 22.2 13.3
Lifetime ≤ 7 charged days 61.0% 71.3%
Ran 2+ campaigns 62.4% 48.3%
Average listings promoted 4.21 1.77
Promoted 2+ listings 55.6% 25.9%

One in four owners promoted more than one listing. These are likely owners with several properties, or small brokers who list through the owner flow.

The category is the one targeted on the advertiser’s first charged day. Only segments with at least 150 advertisers are shown.

Category Segment n (M1) Month 1 Month 3 n (M12) Month 12
Apartment for Rent Broker 1,416 27.7% 14.0% 1,056 11.9%
Apartment for Rent Owner 1,800 24.7% 7.7% 1,342 4.4%
Land for Sale Broker 1,698 25.6% 10.9% 1,292 8.0%
Land for Sale Owner 780 26.8% 8.9% 614 4.4%
Villa for Sale Broker 1,880 28.7% 13.8% 1,386 7.0%
Villa for Sale Owner 547 28.7% 10.1% 433 3.7%
Apartment for Sale Broker 1,691 29.7% 14.5% 1,237 8.7%
Apartment for Sale Owner 362 29.3% 9.0% 275 6.2%
Villa for Rent Broker 245 23.7% 13.7% 181 9.4%
Villa for Rent Owner 293 22.2% 6.1% 225 3.6%
Building for Sale Broker 526 25.5% 8.5% 367 8.7%
Building for Sale Owner 176 19.9% 6.5% 131 4.6%
Big Flat for Rent Owner 166 23.5% 4.4% 122 5.7%
Big Flat for Sale Broker 451 29.0% 13.4% 293 6.1%
Building for Rent Broker 306 27.1% 10.2% 219 9.6%
Apartment for booking Broker 291 15.1% 6.2% 260 2.7%

The owner gap holds in every category. It is not caused by owners being concentrated in low-retention categories. Apartment for Rent shows the biggest gap: it is the only category with more owner advertisers than broker advertisers, and brokers keep 11.9% at month 12 against 4.4% for owners.

Month Owner advertisers Broker advertisers Owner share of spend
2024-04 373 583 37.6%
2024-08 530 1,106 27.4%
2024-12 419 881 24.3%
2025-04 285 766 21.5%
2025-08 286 977 20.6%
2025-12 275 838 21.6%
2026-04 292 988 18.2%
2026-08 275 972 14.7%
2026-09 287 933 14.1%

Here each charged day is classified by its own listing, not by the advertiser’s first listing. The number of owner advertisers per month has held at about 250–300 since 2025, but their share of spend keeps falling. Owners now spend less per advertiser, while broker spend grows.

-- Metabase database 2 (MySQL): retention curve by owner/broker
WITH
b AS (
SELECT
user_id,
listing_id,
start_datetime,
budget
FROM
sov_daily_biddings
WHERE
status = 4
AND non_chargeable = 0
AND start_datetime >= '2024-03-01'
AND start_datetime < '2026-10-01'
),
fl AS (
SELECT
user_id,
listing_id
FROM
(
SELECT
user_id,
listing_id,
ROW_NUMBER() OVER (
PARTITION BY
user_id
ORDER BY
start_datetime,
listing_id
) rn
FROM
b
) t
WHERE
rn = 1
),
lr AS (
SELECT DISTINCT
listing_id
FROM
licensing_requests
),
seg AS (
SELECT
fl.user_id,
IF(lr.listing_id IS NULL, 'broker', 'owner') seg
FROM
fl
LEFT JOIN lr ON lr.listing_id = fl.listing_id
),
um AS (
SELECT
user_id,
DATE(DATE_FORMAT(start_datetime, '%Y-%m-01')) m,
SUM(budget) / 100 sar
FROM
b
GROUP BY
user_id,
m
),
f AS (
SELECT
user_id,
MIN(m) cohort
FROM
um
GROUP BY
user_id
),
j AS (
SELECT
um.user_id,
seg.seg,
f.cohort,
TIMESTAMPDIFF(MONTH, f.cohort, um.m) k,
um.sar
FROM
um
JOIN f ON f.user_id = um.user_id
JOIN seg ON seg.user_id = um.user_id
),
ks AS (
SELECT
1 kk
UNION ALL
SELECT
2
UNION ALL
SELECT
3
UNION ALL
SELECT
6
UNION ALL
SELECT
12
UNION ALL
SELECT
18
UNION ALL
SELECT
24
)
SELECT
seg,
kk,
COUNT(DISTINCT j.user_id) eligible,
COUNT(
DISTINCT CASE
WHEN k = kk THEN j.user_id
END
) active,
ROUND(
COUNT(
DISTINCT CASE
WHEN k = kk THEN j.user_id
END
) / COUNT(DISTINCT j.user_id) * 100,
1
) logo_ret,
ROUND(
SUM(
CASE
WHEN k = kk THEN sar
END
) / SUM(
CASE
WHEN k = 0 THEN sar
END
) * 100,
1
) rev_ret,
ROUND(
COUNT(
DISTINCT CASE
WHEN k BETWEEN 1 AND kk THEN j.user_id
END
) / COUNT(DISTINCT j.user_id) * 100,
1
) back_by_k
FROM
j
JOIN ks ON j.cohort <= DATE_SUB ('2026-09-01', INTERVAL ks.kk MONTH)
GROUP BY
seg,
kk
ORDER BY
seg,
kk

The category split uses the same b/fl/lr/seg/um/f/j CTEs, with listing_category carried through fl, grouped by cat, seg with the month 1/3/12 conditions from the category × city query above. The usage table aggregates b per user (COUNT(*), COUNT(DISTINCT sov_campaign_id), COUNT(DISTINCT listing_id), SUM(budget) / 100) and joins seg. The monthly share query:

-- Metabase database 2 (MySQL): owner share of monthly SOV (classified per charged day)
SELECT
DATE_FORMAT(b.start_datetime, '%Y-%m') m,
COUNT(
DISTINCT CASE
WHEN lr.listing_id IS NOT NULL THEN b.user_id
END
) owner_users,
COUNT(
DISTINCT CASE
WHEN lr.listing_id IS NULL THEN b.user_id
END
) broker_users,
ROUND(
SUM(
CASE
WHEN lr.listing_id IS NOT NULL THEN b.budget
END
) / SUM(b.budget) * 100,
1
) owner_spend_pct
FROM
sov_daily_biddings b
LEFT JOIN (
SELECT DISTINCT
listing_id
FROM
licensing_requests
) lr ON lr.listing_id = b.listing_id
WHERE
b.status = 4
AND b.non_chargeable = 0
AND b.start_datetime >= '2024-03-01'
AND b.start_datetime < '2026-10-01'
GROUP BY
m
ORDER BY
m
First-charge quarter Advertisers Month 1 Month 3 Month 6 Month 12
2024 Q1 (Mar only) 1,450 25.7% 14.8% 14.3% 11.2%
2024 Q2 1,909 30.5% 13.9% 10.1% 7.7%
2024 Q3 2,167 26.1% 10.0% 7.0% 8.0%
2024 Q4 1,563 24.2% 8.4% 7.8% 6.2%
2025 Q1 1,189 24.1% 10.3% 6.5% 5.7%
2025 Q2 1,115 26.0% 10.5% 5.9% 4.9%
2025 Q3 1,241 25.9% 10.3% 5.2% 4.5%
2025 Q4 1,002 26.5% 10.3% 8.0%
2026 Q1 848 28.9% 11.4% 6.2%
2026 Q2 1,003 25.1% 10.1%
2026 Q3 (Jul–Aug) 742 26.3%

Early retention (months 1 and 3) has held steady. Long-term retention was higher for the March 2024 launch cohort, which probably held the most committed early adopters. New-advertiser volume has also fallen, from about 2,000 a quarter in 2024 to about 1,000 in 2026.

WITH
um AS (
SELECT
user_id,
toStartOfMonth(start_datetime) m,
sum(budget) / 100 sar
FROM
sadb_sov_daily_biddings FINAL
WHERE
_peerdb_is_deleted = 0
AND status = 4
AND non_chargeable = 0
AND start_datetime >= '2024-03-01'
AND start_datetime < '2026-10-01'
GROUP BY
user_id,
m
),
f AS (
SELECT
user_id AS uid,
min(m) cohort
FROM
um
GROUP BY
user_id
),
j AS (
SELECT
f.uid AS uid,
toStartOfQuarter(f.cohort) q,
f.cohort AS cohort,
dateDiff('month', f.cohort, um.m) k
FROM
um
JOIN f ON um.user_id = f.uid
)
SELECT
q,
uniqExact(uid) users,
round(
uniqExactIf (uid, k = 1) / uniqExact(uid) * 100,
1
) m1,
if(
max(cohort) <= '2026-06-01',
round(
uniqExactIf (uid, k = 3) / uniqExact(uid) * 100,
1
),
NULL
) m3,
if(
max(cohort) <= '2026-03-01',
round(
uniqExactIf (uid, k = 6) / uniqExact(uid) * 100,
1
),
NULL
) m6,
if(
max(cohort) <= '2025-09-01',
round(
uniqExactIf (uid, k = 12) / uniqExact(uid) * 100,
1
),
NULL
) m12
FROM
j
WHERE
cohort <= '2026-08-01'
GROUP BY
q
ORDER BY
q

Segments are set by the targeting (listing_category, city_id) of the advertiser’s first charged day. The table shows segments with at least 150 advertisers.

Category City n (M1) Month 1 Month 3 Month 12
Apartment for Rent Riyadh 1,998 26.9% 11.3% 9.1%
Villa for Sale Riyadh 1,269 31.0% 14.7% 6.6%
Apartment for Sale Jeddah 855 30.8% 14.3% 8.4%
Land for Sale Riyadh 812 26.7% 11.1% 5.9%
Apartment for Rent Jeddah 599 25.4% 7.5% 6.7%
Apartment for Sale Riyadh 586 31.4% 13.9% 9.9%
Big Flat for Sale Riyadh 453 30.2% 14.8% 6.6%
Land for Sale Jeddah 397 29.0% 10.5% 7.0%
Villa for Rent Riyadh 375 25.9% 11.7% 7.7%
Villa for Sale Jeddah 333 26.4% 8.9% 6.5%
Apartment for Rent Khobar 235 26.4% 9.3% 2.5%
Big Flat for Rent Riyadh 232 24.6% 6.9% 7.2%
Villa for Sale Dammam 208 27.4% 11.1% 4.2%
Apartment for booking Riyadh 202 14.4% 6.4% 2.7%
Building for Rent Riyadh 197 29.9% 12.2% 12.4%
Building for Sale Riyadh 196 27.6% 12.2% 11.3%
Apartment for Sale Dammam 195 32.3% 12.0% 6.4%
Building for Sale Jeddah 164 22.0% 7.1% 9.7%
Land for Sale Madinah 161 24.2% 12.5% 5.6%
  • Sale listings retain better early. Apartments, villas and big flats for sale in Riyadh, Jeddah and Dammam reach 30–32% in month 1 and about 14% in month 3. Rentals sit at 25–27% and 7–11%.
  • Buildings (rent and sale) have the stickiest long-term core, at 10–12% in month 12. These are likely professional brokers with recurring inventory.
  • Bookings units retain worst: 14% in month 1 and 3% in month 12 for Riyadh apartments for booking.
  • The Eastern Province (Khobar rentals, Dammam villas) loses advertisers faster after month 3.
WITH
um AS (
SELECT
user_id,
toStartOfMonth(start_datetime) m,
sum(budget) / 100 sar,
argMin(listing_category, start_datetime) cat0,
argMin(city_id, start_datetime) city0
FROM
sadb_sov_daily_biddings FINAL
WHERE
_peerdb_is_deleted = 0
AND status = 4
AND non_chargeable = 0
AND start_datetime >= '2024-03-01'
AND start_datetime < '2026-10-01'
GROUP BY
user_id,
m
),
f AS (
SELECT
user_id AS uid,
min(m) cohort,
argMin(cat0, m) cat,
argMin(city0, m) city
FROM
um
GROUP BY
user_id
),
j AS (
SELECT
f.uid uid,
f.cat cat,
f.city city,
f.cohort cohort,
dateDiff('month', f.cohort, um.m) k
FROM
um
JOIN f ON um.user_id = f.uid
),
cities AS (
SELECT
city_id,
any(city_name) city_name
FROM
sadb_districts FINAL
GROUP BY
city_id
)
SELECT
cg.name_en category,
ci.city_name city,
uniqExactIf (uid, cohort <= '2026-08-01') n_m1,
round(
uniqExactIf (
uid,
k = 1
AND cohort <= '2026-08-01'
) / n_m1 * 100,
1
) m1,
uniqExactIf (uid, cohort <= '2026-06-01') n_m3,
round(
uniqExactIf (
uid,
k = 3
AND cohort <= '2026-06-01'
) / n_m3 * 100,
1
) m3,
uniqExactIf (uid, cohort <= '2025-09-01') n_m12,
round(
uniqExactIf (
uid,
k = 12
AND cohort <= '2025-09-01'
) / n_m12 * 100,
1
) m12
FROM
j
LEFT JOIN sadb_categories cg FINAL ON cg.category_id = j.cat
LEFT JOIN cities ci ON ci.city_id = j.city
GROUP BY
category,
city
HAVING
n_m1 >= 150
ORDER BY
n_m1 DESC
LIMIT
25

Advertisers whose first charged day was before 2026-09 (14,229):

Metric Value
Ran 1 campaign only 42.1%
Ran 2+ campaigns 57.9%
Ran 5+ campaigns 23.9%
Median campaigns per advertiser 2
Median charged days, lifetime 5
Median charged days, first campaign 2
First campaign ≤ 3 days 78.9%
Lifetime ≤ 7 charged days 64.3%
Lifetime ≥ 90 charged days 3.2%

Activity is grouped into spells: runs of charged days with gaps of no more than 7 days. Advertisers with a first charged day before 2026-07 (13,487):

Metric Value
Came back after a gap of more than 7 days 47.5%
…within 90 days of the first charged day 29.8%
Median days from first day to return 55
Average spells per advertiser 2.59
4+ spells 19.0%

Most advertisers try SOV for a day or two. The ones who come back use it in short bursts, most likely when they have a new listing to push, rather than as an always-on budget.

-- campaigns per advertiser
WITH
c AS (
SELECT
user_id,
sov_campaign_id,
count() cdays,
min(start_datetime) st
FROM
sadb_sov_daily_biddings FINAL
WHERE
_peerdb_is_deleted = 0
AND status = 4
AND non_chargeable = 0
AND start_datetime >= '2024-03-01'
GROUP BY
user_id,
sov_campaign_id
),
u AS (
SELECT
user_id,
count() campaigns,
sum(cdays) tdays,
argMin(cdays, st) first_days,
min(st) first_st
FROM
c
GROUP BY
user_id
)
SELECT
count() users,
round(countIf (campaigns = 1) / count() * 100, 1) one_campaign_pct,
round(countIf (campaigns >= 2) / count() * 100, 1) repeat_pct,
round(countIf (campaigns >= 5) / count() * 100, 1) ge5_pct,
quantileExact(0.5) (campaigns) med_campaigns,
quantileExact(0.5) (tdays) med_total_days,
quantileExact(0.5) (first_days) med_first_campaign_days,
round(countIf (first_days <= 3) / count() * 100, 1) first_le3days_pct,
round(countIf (tdays <= 7) / count() * 100, 1) lifetime_le7days_pct,
round(countIf (tdays >= 90) / count() * 100, 1) lifetime_ge90days_pct
FROM
u
WHERE
first_st < '2026-09-01'
-- spells (gaps > 7 days start a new spell)
WITH
d AS (
SELECT
user_id,
groupArray(DISTINCT toDate(start_datetime)) ds
FROM
sadb_sov_daily_biddings FINAL
WHERE
_peerdb_is_deleted = 0
AND status = 4
AND non_chargeable = 0
AND start_datetime >= '2024-03-01'
GROUP BY
user_id
),
s AS (
SELECT
user_id,
arraySort(ds) a,
arrayFilter(
(x, i) -> i = 1
OR dateDiff('day', a[i - 1], x) > 7,
a,
arrayEnumerate(a)
) spell_starts,
a[1] first_day
FROM
d
)
SELECT
count() users,
round(
countIf (length(spell_starts) >= 2) / count() * 100,
1
) came_back_after_7d_gap_pct,
round(
countIf (
length(spell_starts) >= 2
AND dateDiff('day', first_day, spell_starts[2]) <= 90
) / count() * 100,
1
) back_within_90d_pct,
quantileExactIf (0.5) (
dateDiff('day', first_day, spell_starts[2]),
length(spell_starts) >= 2
) med_days_to_return,
round(avg(length(spell_starts)), 2) avg_spells,
round(
countIf (length(spell_starts) >= 4) / count() * 100,
1
) ge4_spells_pct
FROM
s
WHERE
first_day < '2026-07-01'
Month Active New Continuing (active last month) Reactivated (gap ≥ 1 month) New share
2025-01 1,149 410 439 300 35.7%
2025-04 1,038 346 386 306 33.3%
2025-07 1,215 406 433 376 33.4%
2025-10 1,173 370 485 318 31.5%
2026-01 1,078 290 438 350 26.9%
2026-04 1,276 376 447 453 29.5%
2026-07 1,222 360 495 367 29.5%
2026-08 1,240 382 495 363 30.8%
2026-09 1,214 308 520 386 25.4%

The active base is flat at about 1,100–1,250 advertisers a month. It is now less dependent on new advertisers (36% → 25–30%). The continuing segment grew from about 440 to about 500, while new-advertiser acquisition shrank.

WITH
um AS (
SELECT DISTINCT
user_id,
toStartOfMonth(start_datetime) m
FROM
sadb_sov_daily_biddings FINAL
WHERE
_peerdb_is_deleted = 0
AND status = 4
AND non_chargeable = 0
AND start_datetime >= '2024-03-01'
AND start_datetime < '2026-10-01'
),
x AS (
SELECT
user_id,
m,
min(m) OVER (
PARTITION BY
user_id
) first_m,
lagInFrame(m) OVER (
PARTITION BY
user_id
ORDER BY
m ROWS BETWEEN 1 PRECEDING
AND CURRENT ROW
) prev_m
FROM
um
)
SELECT
m,
count() active,
countIf (m = first_m) new_users,
countIf (
m <> first_m
AND prev_m = addMonths(m, -1)
) continuing,
countIf (
m <> first_m
AND prev_m < addMonths(m, -1)
) reactivated,
round(countIf (m = first_m) / count() * 100, 1) new_pct
FROM
x
WHERE
m >= '2025-01-01'
GROUP BY
m
ORDER BY
m
  • The first 30 days decide retention. Most churn happens immediately, after a 1–3 day trial. Things to try: a first-campaign nudge (show results after day 2 and suggest extending), or a minimum first package such as the 7-day fixed price.
  • Win-back is a real lever. Half of churned advertisers return on their own, typically about 2 months later. A reminder when an advertiser publishes a new listing could pull that return earlier.
  • Revenue depends on a small core. About 7% of each cohort is still buying a year later and supplies most of the long-term revenue. Building and sale-listing brokers in Riyadh and Jeddah are the segments to protect.
  • Treat owners and brokers as different products. Owners are one-off buyers whose need ends when their property is sold or rented. Optimise their first purchase (packages, price) rather than retention. Retention and win-back efforts belong with brokers, who keep getting new inventory to promote.
  • Acquisition is falling. New advertisers per quarter have halved since 2024 while retention stayed flat, so the active base is held up by returning users, not growth.