eXp Luxury and LuxVT, member experience and revenue audit

Where eXp Luxury loses members

Eighteen leaks, found by walking the member product and reading the billing ledger, and confirmed against the behavioural data the client already collects. Original count the member product on two accounts and reading the full billing ledger of 5,309 subscriptions. One of them accounts for 50 per cent of every dollar this business has ever lost. Internal draft, 28 September 2026.

1. What this looked at, and what a member has to believe

The goal is more members, kept longer. We walked the member product on both platforms as a member does, using two accounts the client provided, and read the billing ledger directly. Every figure here is sourced to a live test on a stated date or to a full ledger read on 3 or 28 September 2026.

The trust model. A member pays USD 2,500 a year because they believe three things:

1. My listing actually reaches the international portals this membership advertises.
2. I can show my seller that it happened.
3. That helped me win or sell the listing.

Every leak below breaks one of those three, and they stack. If the first fails the second cannot happen, and if the second fails the third can never be argued at the listing appointment.

We covered the eXp Luxury and LuxVT membership core. The billing organisation also carries Sports and Entertainment, Land and Ranch and New Homes, 57 plans in total. Those three are named as out of scope rather than covered thinly, and they sit in the risk register in chapter 11.

Two products, one platform, one ledger

LuxVT is the marketing engine. eXp Luxury is the membership programme its parent company wraps around that engine, and LuxVT is also sold on its own. They share one codebase and one billing system, so every finding below is tagged by where it lives, and the money findings belong to both because the ledger does not separate them.

eXp Luxury  the membership programme
LuxVT  the standalone product and its marketing
Shared  the common platform or billing, affects both
Acquisition  the signup funnel across both sites

Features differ between the two and some are visibly under construction, for example a Microsite Creator marked Beta and MLS listings being fed into activation. Where a finding sits on something clearly still being built, we say so rather than scoring it.

2. The shape of the loss

More annual contract value has been cancelled in the lifetime of this business than is currently live, and the book is shedding close to half its own value every year.

USD 1.88Mof revenue walked out in the last 12 months
48.7%of the live book, lost annually
47.4%of members refuse their first renewal

1,045 subscriptions were cancelled in the twelve months to September 2026, carrying USD 1,879,838 of annual contract value between them. That is 48.7 per cent of the entire live book, gone in a year, at an average of USD 156,653 a month.

One projection, labelled as such. Everything else in this report is measured. This is the one forward-looking number, and it is a projection, not a fact. Measured part: 1,207 live subscriptions carrying USD 1,604,851 reach their renewal date within the next 180 days, and those dates are in the billing system today. Projected part: if the first-renewal refusal rate this business has run at, 47.4 per cent, holds, about USD 760,112 of that would not renew by March. That is a scenario to plan against, not a measured loss. For reference, one percentage point of renewal rate on that book is USD 16,049.
On profit rather than revenue. Every figure here is contract value, which is revenue. Converting it to profit needs one number this audit does not have: gross margin on a membership. It is worth asking for, because of one thing we did find. Media placement is the main variable cost of this business, and a member whose listing never leaves Draft never triggers any of it. The members who churn are therefore the cheapest to serve, which means the revenue lost on them is close to contribution lost rather than a fraction of it.
USD 3.86Mlive contract value today
USD 4.46Mcancelled to date
USD 2.23Mof that, lost in one 70 day window

Source: the client's own Zoho Billing subscription records, read 28 September 2026. Live and cancelled contract value are the sum of contract amount over live and cancelled subscriptions; the 70 day figure is the combined value of the 988 cancellations falling between day 330 and 400. Method and date range for each are itemised in chapter 3.

Date range: all time (every cancellation ever recorded), read from the full ledger on 28 September 2026.

Days since joiningCancellations
0 to 29270
30 to 179158
180 to 329208
330 to 35983
360 to 389876
390 to 41995
420 and beyond359

When cancellations happen, measured from the day each member joined. 2,052 cancellations carrying both dates, out of 2,222 total. Billing ledger, all time, read 28 September 2026.

This is not a gradual decline. It is two spikes. 270 members leave inside the first month and 988 leave at the first renewal. Between them they are 61.3 per cent of everyone who has ever left. The middle of the first year is comparatively quiet, which tells us the product is not annoying people out of the door. It is failing to give them a reason to stay in.

MonthNetSignups minus cancellations
Mar 2026+88
Apr 2026+26
May 2026-9
Jun 2026+1
Jul 2026-4
Aug 2026-27
Sep 2026-6

Net subscription movement by month, signups minus cancellations. Billing ledger, 28 September 2026.

The figures above are read directly from the client's own Zoho Billing system on 28 September 2026. Chapter 3 reproduces every source screen and states the method and date range behind each number.

3. How to read these numbers: proof and dates

Every figure in this report is one of two kinds. It is either shown on a screen in the client's own systems, in which case the screen is here, or it is counted from the client's own records, in which case the exact method and date range are stated. Nothing is estimated, and nothing is an industry benchmark. Where a number is a projection rather than a measurement, it is labelled as one and kept separate.

2A. Figures shown directly on the platform

These are read straight off the client's Zoho Billing screens, captured on 28 September 2026. The screens are reproduced in this report so any figure can be checked against its source.

FigureValueWhere it is shownDate range
Net Revenue$4,584,978.83zoho-revenue-receivables.png (Dashboard, Net Revenue tile)Last 12 months
Total Receivables$435,850.85zoho-revenue-receivables.png (Receivable Summary)As of 28 Sep 2026, 100% overdue
MRR$364,774.45Dashboard MRR tileLast 12 months
Active Subscriptions2,550Dashboard tileAs of 28 Sep 2026
Churn Rate (month to date)2.00%zoho-churn-ltv.png (Churn tile)On Sep 2026, month to date
Revenue Churn2.6%zoho-revenue-churn.png (Revenue Churn report)2025-09-01 to 2026-09-28
LTV (artefact)$7,153zoho-churn-ltv.png (LTV tile)On Sep 2026 (denominator is month-to-date churn)
Signups1,792zoho-subscription-summary.pngLast 12 months
Activations1,744zoho-subscription-summary.pngLast 12 months
Cancellations (12 mo)1,254zoho-subscription-summary.pngLast 12 months
Reactivations19zoho-subscription-summary.pngLast 12 months
Zoho Billing dashboard: Net Revenue and Receivables. Captured 28 September 2026.
Zoho Billing dashboard: Net Revenue and Receivables. Captured 28 September 2026.
Zoho Billing dashboard: Churn Rate and LTV tiles. Captured 28 September 2026.
Zoho Billing dashboard: Churn Rate and LTV tiles. Captured 28 September 2026.
Zoho Billing: Subscription Summary, last 12 months. Captured 28 September 2026.
Zoho Billing: Subscription Summary, last 12 months. Captured 28 September 2026.
Zoho Billing native Revenue Churn report. The date range is printed on the report: From September 01, 2025 To September 28, 2026. Captured 28 September 2026.
Zoho Billing native Revenue Churn report. The date range is printed on the report: From September 01, 2025 To September 28, 2026. Captured 28 September 2026.

2B. Figures counted from the client's records

The renewal cliff, the survival curve and the revenue-lost totals are not single tiles on a screen. They are counted from the client's own subscription records, all 5,309 of them, read through the billing system's own data interface on 28 September 2026. The method and window for each is stated here and repeated on each finding. The platform's native Revenue Churn report above corroborates the monthly shape of these figures.

FigureValueHow it is computedDate range
Total subscriptions ever created5,309count of all subscription recordsAll time, read 28 Sep 2026
Live subscriptions2,369count status=liveAs of 28 Sep 2026
Cancelled (status, all time)2,222count status=cancelledAll time
ARR live$3,861,237sum of contract amount over live subscriptionsAs of 28 Sep 2026
ARR cancelled (lifetime)$4,458,325sum of contract amount over cancelled subscriptionsAll time
Dated cancellations2,052cancellations carrying both created and cancelled datesAll time
Renewal cliff (day 330-400)988 subs, $2,229,013dated cancellations where days-lived is 330 to 400; sum of their contract amountAll time
Early churn (adjusted)~223 subs, $463,802dated cancellations <=30 days, excluding Course Enrollee (95 one-time purchases, median 1 day)All time
Trailing 12-mo revenue lost$1,879,838, 1,045 subssum of contract amount where cancelled_at in trailing 12 monthsSep 2025 to Aug 2026
Overdue invoices423, $380,596invoice status=overdue, sum of balanceAs of 28 Sep 2026
At-risk contract value$227,364sum amount over unpaid+dunning+non_renewingAs of 28 Sep 2026
First-renewal refusal rate47.4%988 refused at renewal / (988 + 1,098 who survived past 400 days)All time cohort
Brand tier ARR$141,817, 318 livesum amount over Brand/BAM/BrandCA/BMCA live subsAs of 28 Sep 2026
Pay-at-Close contingent$387,500155 live PAC subs x $2,500 published at-closing feeAs of 28 Sep 2026, contingent

2C. Why the date ranges differ, and how to line them up

Three windows appear in this report, each chosen for a reason. When two figures look like they should match but do not, this is almost always why.

Last 12 months  1 Sep 2025 to 28 Sep 2026. Used for run-rate figures, and it is what every Zoho dashboard tile shows by default.
All time  every record ever created, read 28 Sep 2026. Used for structural patterns like the renewal cliff, because the pattern needs the full history to be visible.
As of today  a snapshot on 28 Sep 2026. Used for balances, live counts and what is at risk right now.
The reconciliations worth knowing

Cancellations. All correct; different windows. Each figure in the report now states its window.

ARR. Zoho's MRR-based ARR (MRR x 12 = ~$4.38M) annualises monthly plans differently. We use the sum-of-contracts figure and say so.

Churn. Different windows; both shown on platform.

What we removed because it was an assumption

Three things in earlier drafts were estimates, and estimates do not belong in this report. All three are gone.

Removed. 'Every 1 in 10 renewals saved = $222,901' and similar recovery-rate figures in money bands
Now. Money-lost figures are the measured loss only. Recovery/improvement rates removed from all bands.

Removed. '$130k-$217k recoverable' from a 30-50% industry recovery band
Now. Removed. We hold no data on this client's recovery rate.

Removed. 'Expected to walk out by March $760,112'
Now. Kept only as a clearly-labelled forward scenario, separated from measured figures, marked 'projection, not a measured number'.

4. Who this happens to

The first month leaver

Joined, looked, left inside 30 days. 270 of them, USD 1,821 each.

Signed up after a brokerage event expecting the tools to be obvious. Opened the dashboard, saw a webinar replay and an advertisement for a paid add on, opened Create Listing, met 38 fields across four tabs, and closed the tab.

I have paid for this and I still do not know what it does. I will come back when I have a listing worth the effort.

The renewal refuser

Stayed the full year. 988 of them, USD 2,256 each.

Built a listing at some point, never finished Tour Submission, never saw it go anywhere. Heard nothing from the product for twelve months because there is no membership page and no delivery record. Then a USD 2,500 charge appeared.

What did I actually get for this? I cannot point to a single thing it did for a client.

The involuntary leaver

Never chose to go. 75 in payment failure right now.

Card expired between one annual charge and the next. No warning before the attempt, no banner in the product, no billing page to fix it on. The emails, if they arrive, look like the rest of the marketing.

I did not cancel anything. I assumed it was still running.

5. What the briefs said, and what we found

Two documents told us what was wrong before we looked: the July 2026 UX framework with its signal scan, and the Diagnosis and Engagement Plan. We tested every assertion in both. They are directionally right more often than not, two of their findings have already been fixed since they were written, and the largest one is confirmed and considerably bigger than stated.

Their claimSourceWhat we testedVerdictWhere it goes
New members never launch a campaign and cancel at first renewalJuly UX framework, H-CF2Full billing ledger plus both accounts walked, 28 Sep 2026Confirmed and largerTrue, and now measured: 48.2 per cent of cancellations fall in the renewal window. Leaks 1 and 2
Agents are confused between the Classic and Pro tiersJuly UX framework, H-CS2Live test of the Pricing page, 28 Sep 2026Different problemThe page carries no price at all. Absence, not confusion
The dashboard is cluttered and complexTargeted Platform Audit proposalLive capture of both dashboards, 28 Sep 2026Partly confirmedThe eXp dashboard is well built but mis-ordered. The Create Listing form is the complex surface. Leaks 9 and 12
Entry to the programme is USD 950Diagnosis and Engagement Plan, 12.2Published plans page at join.expluxury.com, 28 Sep 2026ConfirmedLuxury Brand is published at USD 950. We marked this Not supported in an earlier draft by checking only the billing catalogue. That was our error
LuxVT is not named in agent facing materialDiagnosis and Engagement Plan, 12.5Page titles across the member product, 28 Sep 2026Not supportedLuxVT appears in page titles the member sees, inconsistently
The flagship claim is stated as both 60+ and 80+ on one pageJuly signal scan, PS-2All four tier pages read on 28 Sep 2026Confirmed and largerNot fixed. It moved. Home and Classic say 80+, Premier says 60+, so the dearer tier claims less. Leak 8
Seven of ten images carry placeholder alt textJuly signal scan, PS-11Live test, 28 Sep 2026Confirmed, since fixedAll seven images on the rebuilt page carry real alt text
Login and support links are served insecurelyJuly signal scan, PS-9Live test inside the member product, 28 Sep 2026ConfirmedStill present, and now confirmed inside the paid product. Leak 11
The login field says Username but registration collects an emailJuly signal scan, PS-8Live test, 28 Sep 2026ConfirmedUnchanged
The Brand tier excludes listing syndicationDiagnosis and Engagement Plan, 12.3Published plans page, verbatim, 28 Sep 2026Confirmed and largerThe page states it outright, and 318 live members sit on that tier. Leak 4

6. The leaks

1

Half of everyone who leaves does so at the first renewal, and the product never mentions it

eXp LuxuryP0Product, billing and leadership
988cancellations in one 70 day window
Days since joiningCancellations
0 to 29270
30 to 179158
180 to 329208
330 to 35983
360 to 389876
390 to 41995
420 and beyond359

When cancellations happen, measured from the day each member joined. Full ledger read of 5,309 subscriptions, 28 September 2026.

✗ The first year, as a member lives it
Join eXp Luxury
Submit
1. Pays USD 2,500 and joinsProofBilling ledger, 28 September 2026. Primary Agent is USD 2,500 a year, 869 liveHarmThe membership sells distribution to 80 or more international portals
→
Doubt
2. Builds a listing. It saves as DraftProofLive test both accounts, 28 September 2026. 4 of 4 listings read Status: DraftHarmNothing tells the member Draft is not finished
→
0
3. Twelve months pass with no proof of anythingProofLive test, 28 September 2026. No billing, renewal or delivery surface exists in the productHarmThe member cannot see what they received or what they pay
→
!

Renewal charge

4. The card is charged againProofBilling ledger, 28 September 2026. Median time to cancel on this plan is 365 daysHarmThis is the first moment the membership becomes visible again
→
Cancelled
Lost here
5. They cancel

Why the cliff is exactly where it is

The plan is annual. Day 365 is the first time money is asked for twice.

Between the two charges the product shows the member nothing about the membership. No price, no renewal date, no record of what was delivered.

So the renewal is not a decision the member has been preparing for. It is the moment they remember they are paying.

And they have no evidence the year was worth it, because leak 2 means the listing very likely never went out.

The harm: the business is not losing members gradually through dissatisfaction. It is losing them in one predictable moment, once a year, having given them no reason in the preceding twelve months to say yes.
Money spentUSD 2,229,013cancelled in the day 330 to 400 window, all time
Money lostUSD 2,229,013is the measured loss from this one window, all time
How we worked this out

Of 2,052 cancellations carrying both a start and an end date, 988 (48.1 per cent) fall between day 330 and day 400. That 70 day window holds 50 per cent of all annual contract value ever lost, USD 2,229,013, at an average of USD 2,256 each. It is not a gradual decline, it is one cliff at the first renewal. Both figures are the same measured loss stated two ways: the count and the money. This is contract value read from the subscription records, all time, not an estimate and not a projection. Date range: all cancellations ever recorded, read 28 September 2026. See chapter 3 for the method.

What to change

Treat the renewal as a journey that starts eleven months before the charge, not an event on the day. Put a membership page in the product showing what the member pays, when it renews and what has been delivered so far, because none of that exists today. Send a renewal notice at sixty and fourteen days that leads with delivery rather than billing: listings published, portals reached, media kits produced. And make the first ninety days produce one visible result, because a member who has seen the product work once has a reason to renew and a member who has not is deciding in the dark.

For the product team

The delivery record already exists in fragments: listing status, the Seller Media Kit and the Activity Report are all modelled. None is aggregated to the member or surfaced against the subscription. The renewal date sits in the billing system and is never read by the product.

✓ After the fix
0
1. A delivery record the member can see all year
→
Your membership renews in 60 days. Here is what it did.now
2. A renewal notice 60 days out, leading with what was delivered
→
✓
Thank you
Success
3. The renewal is a decision, not a surpriseOutcomeMembers reach renewal having seen what they bought, and fewer refuse it.How we will knowCancellations in the day 330 to 400 window. Today 988 of 2,052, worth USD 2,229,013.
2

There are two ways to get a listing live, and the manual one dead-ends

Shared platformP0Product team
4 of 4manual listings stuck at Draft
Corrected since the first draft. An earlier version said there was no way to activate a listing at all. That was too broad. There are two paths. Listings fed from the MLS appear on the Activate Listings screen with a working Activate this listing link, and that path works. The manual path, for a listing an agent builds by hand, is the one that dead-ends: it saves as Draft with no route forward. Both audit accounts held only manual drafts, which is why the Activate screen showed nothing to activate.
✗ The manual path
Create Listing
Submit
1. Fills the Create Listing formProofLive test, 28 September 2026. 38 fields across 4 tabs, ending in Tour SubmissionHarmOnly 19 fields sit on the first tab. The submission step is the fourth
→
0
Doubt
2. The listing saves as DraftProofLive test, 28 September 2026. 4 of 4 listings on both accounts read Status: DraftHarmNo screen says which of the four tabs is unfinished
→
3. Listing Overview offers Edit and nothing elseProofFull control inventory, 28 September 2026. Visible: Manage Listings, Edit, 5 accordions, Explore GuideHarmNo activate, publish or submit control anywhere on the page
→
!

No listing found for activation

Lost here
4. Activate Listings contradicts itselfProofLive capture, 28 September 2026. Reads: No listing found for activationHarmThe same screen reads: you are currently using 3 of your 10 allowed listings
Activate Listings, live capture 28 September 2026. The page states three of ten listings are in use and that a listing can be activated below, then reports that none was found.
Activate Listings, live capture 28 September 2026. The page states three of ten listings are in use and that a listing can be activated below, then reports that none was found.
Listing Overview for a Draft listing, live capture 28 September 2026. Status reads Draft. The only actions are Edit and Manage Listings.
Listing Overview for a Draft listing, live capture 28 September 2026. Status reads Draft. The only actions are Edit and Manage Listings.

Why members drop out here

The listing page never says what Draft means or what is missing.

The Activate screen contradicts itself: a quota is in use, yet nothing is available to activate.

Returning to finish always restarts at tab one. Later tabs cannot be linked to directly.

Nothing names Tour Submission as the step that completes a listing.

The harm: this is the mechanism behind leak 1. A member who never gets a listing live arrives at renewal with nothing to show for the year, and 48.1 per cent of all cancellations happen in that window.
Money spentNonethese are members already paying, USD 3.86M of live contract value
Money lostNot countedwe cannot yet count listings that never reached the portals
How we worked this out

Every listing on both audited accounts sits at Draft, so neither member has received the syndication the membership sells. We will not extrapolate two accounts to the whole base. One query prices this exactly: the number of live subscriptions whose listings have never reached Active Campaign, and their combined annual value. If that share resembles what these two accounts show, this is the largest priced leak in the report.

What to change

Make the manual path reach the same place the MLS path does. A Draft listing should name the unfinished tab and link to it, and offer the activate step once complete. The Activate screen should never report that nothing was found while a quota is in use; it should list the Draft listings and the single thing each one needs. A visible status ladder would let a member see where a listing stopped.

For the product team

The five statuses already exist in the Manage Listings filter: DRAFT, IN PROGRESS, ACTION NEEDED, ACTIVE CAMPAIGN, INACTIVE CAMPAIGN. The ladder is modelled in the data and never surfaced on the listing or the activation screen.

✓ After the fix
0
1. The listing names the step that is missing
→
Finish Tour Submission
Send
2. One tap to the unfinished tab
→
✓
Thank you
Success
3. The listing goes live to the portal networkOutcomeMembers receive the distribution they paid for, and can see that they did.How we will knowShare of listings reaching Active Campaign. Today it is 0 of 4 on the audited accounts.
What we could not test, and why

Completing Tour Submission writes to live client data, and the client instructed us to make no changes. We stopped at that boundary. We can evidence that every listing sits at Draft and that no screen names the missing step. We cannot evidence what Tour Submission itself requires. A sandbox account settles it.

3

The product a member pays for never mentions the payment

eXp LuxuryP0Product and billing
14 of 14membership pages return 404

There is no billing page, no subscription page, no membership page, no invoice history and no renewal notice anywhere inside the member product. We checked this two ways. We requested fourteen likely paths directly, and every one returned a 404. Then we walked the live navigation: the Settings menu, the one place such a page could sit, expands to exactly three items, Settings, Edit Profile and Logout, and a sweep of the whole live page for the words billing, subscription, invoice, renewal, payment or membership returned nothing. The only account destinations in the product are the agent profile and the profile editor.

The fourteen paths we tested, and what they returned

/settings, /user/ID/settings, /billing, /user/ID/billing, /subscription, /user/ID/subscription, /membership, /user/ID/membership, /account, /user/ID/account, /invoices, /user/ID/invoices, /renew, /my-membership. Every one returned HTTP 404 on 28 September 2026. Settings appears in the navigation and expands to sub items; no billing or membership destination exists under it: expanded live on 29 September 2026, its submenu holds only Settings, Edit Profile and Logout. A full-page text sweep for billing, subscription, invoice, renewal, payment and membership returned zero matches. The dashboard text contains no instance of renew, expire, cancel or billing.

What a member cannot find out from inside the product

What they pay, or what tier they are on beyond a label in the header.

When the membership renews, or that it renews at all.

What the membership delivered: listings published, portals reached, enquiries received.

How to cancel. Which is why cancellation goes through support, and why no reason is ever recorded.

The harm: the membership is invisible for 364 days and then arrives as a charge. That is the shape of the cliff in leak 1, drawn by the product itself.
Money spentNoneno advertising is involved
Money lostNot countedthe absence causes no direct loss, but it explains leak 1
How we worked this out

We tested fourteen candidate paths inside the member product and all fourteen return 404. A member cannot discover what they pay, when it renews, what they received, or how to leave, from inside the product they pay for. This is unpriced on its own. It is here because it is the reason USD 2,229,013 leaves at renewal without warning.

What to change

Add one page. It shows the plan, the price, the renewal date, the invoice history and a delivery summary for the current term. Link it from the member name in the header, where every comparable product puts it. Add a cancellation route on that page, because the alternative is not retention: it is a member cancelling through support with no reason captured and no chance to offer anything.

4

318 members pay for a luxury marketing membership that excludes the marketing

eXp LuxuryP0Commercial and product
318members on a tier with no syndication

The published plans page states it plainly. Luxury Brand at USD 950 a year: Does not include listing syndication. Syndication is the LuxVT media engine. It is the thing the whole membership advertises.

318live members on the Brand tier
USD 141,817of contract value on that tier
USD 950a year, syndication excluded

What this means for the member

They joined a programme sold on global exposure and bought the tier that has none of it.

Nothing in the product marks their tier as excluding syndication. The header shows a tier name and an Upgrade link.

At renewal they are asked to pay again for a year in which the headline benefit was never available to them.

The harm: the tier is not mispriced, it is mis-set. A member who wanted exposure and picked the cheaper option gets a Canva login and a mastermind, then judges the whole programme on that.
Money spentUSD 141,817of contract value sits on a tier with no syndication
Money lostNot countedwe cannot yet split Brand churn from Premium churn at renewal
How we worked this out

The published page is explicit and the tier is working as designed, so this is not a billing error. It is a comprehension and expectation problem: 318 members are paying for a luxury marketing membership whose marketing engine is switched off. What would price it: the renewal rate of Brand members against Premium members, which the ledger can produce in one query and which we would expect to differ sharply.

What to change

Say it in the product, not only on the sales page. A Brand member should see, on the dashboard and on any listing they create, that syndication is not included on their tier and what it would take to add it. Today the product shows them an Activate Listings screen that will never work for them and never explains why. Then reconsider the tier itself: a luxury marketing membership without the marketing is a hard thing to renew.

5

Nobody has ever recorded why a member left

Shared billingP0Billing and support
2,222cancellations, none with a reason
✗ What happens today
1. A member decides to leaveProof2,222 cancelled subscriptions on file, 28 September 2026HarmThe decision is already made before anyone sees it
→

Please cancel my membership

2. They contact support, because the product has no cancel routeProofLive test, 28 September 2026. No cancellation flow exists in the product, see leak 3HarmNo question is asked at either exit
→
0
Lost here
3. The record is written with no reasonProofAPI read, 28 September 2026. cancel_reason is absent from the subscription schema entirelyHarm2,222 of 2,222 cancellations carry no reason

Why this matters more than its size suggests

The field does not exist on the record. This is structural, not a habit.

Because there is no cancel route in the product, every cancellation goes through a person, and that route asks nothing either.

Win back is almost never attempted: 19 reactivations against 2,222 cancellations.

The harm: the single largest movement in this business, USD 4,458,325 of contract value leaving, has no recorded cause. Every retention decision is an opinion, and no fix can be proved to have worked.
Money spentNoneno advertising is involved
Money lostNot countedno reason has ever been recorded, so no cause can be sized
How we worked this out

This is the leak that prevents every other leak from being measured, including the ones in this report. 2,222 members have left and the business holds no record of why any of them did. We have shown that 48.1 per cent go at renewal, but the ledger can only tell us when, never why. Zoho Billing already supports custom fields on a subscription and this account uses none, so the first step is configuration rather than development.

What to change

Add a required cancellation reason to the subscription record. Keep it to six options that cannot overlap: price, not using it, did not get results, moved to a competitor, left the brokerage, other. Add one free text box asking what would have kept them. Cover both exits. Resist a longer survey: response collapses and the field stops being trustworthy.

For the billing team

The subscription schema exposes custom_fields and custom_field_hash, both unused on this account. A required picklist plus one text field is configuration. Historic signal can be partly recovered with one question emailed to the last six months of cancellations, which doubles as reactivation outreach.

✓ After the fix

Why are you cancelling?

Submit
1. One required question at the moment of leaving
→
What would have kept you?
Send
2. One box: what would have kept you?
→
✓
Thank you
Success
3. The reason is stored against the subscriptionOutcomeEvery future cancellation carries a reason and a sentence in the member own words.How we will knowShare of cancellations with a reason recorded. Today it is 0 per cent.
6

One in eight members leaves inside the first month

eXp LuxuryP0Product and onboarding
~223gone within 30 days

The survival curve in leak 1 has two spikes, not one. The second is at renewal. The first is immediate.

Corrected figure. An earlier draft put this at 270 members and USD 491,579. Checking plan by plan showed that some of those are one time purchases recorded as subscriptions rather than churn: Course Enrollee alone is 95 cancellations at a median of one day, with none ever live. Excluding it, genuine early churn is about 223 members and USD 463,802. Excluding every plan whose median time to cancel is under thirty days it is about 151 and USD 383,188. We use the first, more conservative adjustment below.
✗ The first thirty days
1. Joins and reaches the dashboardProofLive test, 28 September 2026. Onboarding is one of three equal Quick Access cardsHarmThe largest thing on screen is a webinar replay
→
↓
Doubt
2. Looks for where to beginProofLive test, 28 September 2026. Launch Your Listing is a collapsed heading below the foldHarmThree collapsed headings, none marked as the starting point
→
Enquire
Submit
3. Starts a listing, meets 38 fields across four tabsProofLive test, 28 September 2026. 19 fields on the first tab aloneHarmInternal operations fields appear among them, including a competitor listing ID
→
Cancelled within 30 days
Lost here
4. Leaves before month two
The harm: these members pay, look, and go. They never experience the service at all, which means nothing about the service caused it. The first session did.
Money spentNonethese members were already paying, no ad cost
Money lostUSD 463,802of contract value lost in the first 30 days, all time, adjusted
How we worked this out

270 members (13.2 per cent of all dated cancellations) leave within 30 days of joining, at an average of USD 1,821 each. They never reach the renewal cliff because they never reach month two. The money spent line is their own contract value rather than an advertising figure, because no ad accounts were provided. The second figure prices a quarter of them being saved, not all of them.

What to change

Make the first session produce one finished thing. Today a new member meets a dashboard that sells, then a 38 field form. Replace the first run with a short guided path that creates one listing with the minimum viable fields and defers everything optional. Name the first milestone and show progress toward it. The measure is not satisfaction, it is whether a member has one listing live by day thirty.

7

Members are leaving because a card failed, not because they chose to

Shared billingP0Finance and tech
423overdue invoices
✗ What happens today
1. An annual card is charged once every twelve monthsProofAPI read, 28 September 2026. 5,247 of 5,267 subscriptions hold a cardHarmA card has had a year to expire, be reissued or hit a limit
→
!

Payment failed

Doubt
2. The charge fails and nothing warns the memberProofLive test, 28 September 2026. No banner or in product signal exists, see leak 3Harm75 subscriptions are in payment failure right now
→
0
3. The balance ages and nobody sees itProofInvoice ledger, 28 September 2026. 423 overdue invoices, USD 380,596HarmDunning fell and unpaid rose between our two reads. Nothing recovered
→
Lapsed
Lost here
4. The subscription lapses without a decision
The harm: the business is losing members who never decided to leave, and the balance grew while nobody acted on it.
Money spentNonethese members were already won and already paying
Money lostUSD 227,364of contract value in unpaid, dunning and non renewing right now
How we worked this out

423 invoices are overdue carrying USD 380,596 of balance, counted from the invoice ledger line by line. Separately, subscriptions in unpaid, dunning and non renewing carry USD 227,364 of annual contract value. Almost every subscription holds a card, so these are failed collections rather than unpaid invoices, which is involuntary churn: the member never decided to leave. Between 3 and 28 September the dunning count fell from 31 to 21 while unpaid rose from 44 to 53, so failures are ageing into deeper failure rather than recovering. We have not applied a recovery percentage because we have no data on this client past recovery rate, and a published industry band is not evidence about them.

What to change

In order of return. Warn before the charge: notify at sixty, thirty and seven days when a card expires first, with one tap to update it. Turn on an account updater so reissued cards refresh with no member action. Spread retries across days one, three, five, seven and fourteen rather than repeating on the same date. Give the member somewhere to land, which today does not exist because there is no billing page at all. Before any of it, confirm the dunning email is being delivered and not suppressed.

A discrepancy worth resolving first

The billing dashboard reports total receivables of USD 435,851. Counting the invoice ledger line by line gives USD 380,596 across 423 overdue invoices. The two disagree by about USD 55,255. We have used the line by line figure throughout because it is verifiable per invoice. The gap should be explained before either number is quoted externally.

8

The premium tier advertises less reach than the cheaper one

LuxVTP0Marketing
60+ vs 80+on the same website
PageThe claim, verbatimNumber
elite.luxvt.com, homePlacement in 80+ international real estate sites in key investor markets80+
elite.luxvt.com /classicDigital ad placements across 80+ international luxury real estate publishers80+
elite.luxvt.com /premierPlacement across 60+ international real estate portals in key investor markets60+

Premier is the more expensive tier. It advertises fewer portals than Classic. A buyer comparing the two sees the upgrade offering less.

Three more claims that do not line up

The homepage says Trusted by 10,000+ Elite Agents Worldwide. The billing system holds 2,369 live subscriptions and 5,309 ever created.

Three tier vocabularies are live at once: Classic, Premier and Pro on one site; Luxury Brand, Luxury Premium and Premium Pay at Close on the other; and Classic in the product header.

The page titled Premier describes a product it calls LUXVT PRO Volume, which is also what the Pro page describes.

The harm: the single capability the membership is sold on cannot be stated consistently, and the tier ladder cannot be compared. An agent deciding between tiers is reading two different products.
Money spentNot countedno analytics were provided for the marketing site
Money lostNot countedwe cannot measure comparison abandonment without funnel data
How we worked this out

Every claim here was read from the live pages on 28 September 2026 and is quoted verbatim. We cannot size the loss because no analytics access was provided for either marketing site. What would price it: sessions that view two or more tier pages and then leave without reaching a form.

What to change

Establish the true portal count once, from the placement contracts, and use that one number everywhere. Pick one tier vocabulary and apply it to both sites and the product header. Fix the Premier page, which currently describes the Pro product. Then substantiate or retire the 10,000 agent claim, because the subscription ledger does not support it.

9

The dashboard sells add-ons above the one action the membership exists for

eXp LuxuryP1Product team
Below the foldand collapsed, on every visit
Member dashboard, live capture 28 September 2026. Two carousels and three Quick Access cards sit above Launch Your Listing, which is a collapsed heading.
Member dashboard, live capture 28 September 2026. Two carousels and three Quick Access cards sit above Launch Your Listing, which is a collapsed heading.

What the order of this screen says

The largest element is a webinar replay. The second is a Concierge Services advertisement with its own call to action.

Concierge Services is a paid add on. The member is sold to before they have received what they already bought.

Launch Your Listing, Win The Listing and Master Your Branding are collapsed headings at the bottom, visually identical, none marked as the place to start.

The Onboarding card is genuinely good. It is one of three equal cards, competing with Most Popular for attention.

The harm: the information hierarchy inverts the business economics. The action that prevents USD 2,229,013 of renewal churn is collapsed at the bottom; the upsell is at the top. A member in their first week clicks the largest thing, and the largest thing is not the product.
Money spentNonethe traffic is members who already pay
Money lostNot countedno dashboard interaction is tracked
How we worked this out

The dashboard is the first screen on every visit, so its order is the strongest signal the product sends about what matters. We cannot price this because no dashboard interaction is instrumented. What would price it: clicks on each dashboard element, and the share of members who reach Create Listing within their first 30 days.

What to change

Give the dashboard one primary action that changes with the member state. A member with no listing sees Create your first listing. A member with a Draft sees Finish your listing, and which step. A member with a live campaign sees its results. Move Concierge Services below that, because selling an add on to a member who has not yet received the core service is the wrong order commercially as well as experientially.

10

Pay at Close contracts are recorded at the enrolment fee only

Shared billingP1Billing operations
USD 387,500of contract value outside the reported numbers

The published contract for Premium Pay at Close is a USD 500 enrolment fee plus USD 2,500 at the next closing. The billing system records the USD 500 and nothing else.

155live Pay at Close members
USD 77,540recorded as contract value
USD 387,500contingent value not recorded
The harm: every revenue figure in this business, including the ones in this report, understates the Pay at Close cohort. It also means nobody can see whether those closings are actually being collected, because the obligation is not modelled anywhere.
Money spentNoneno advertising is involved
Money lostUSD 387,500of contingent contract value not visible in any report
How we worked this out

155 live Pay at Close subscriptions are recorded at the USD 500 enrolment fee. The published contract adds USD 2,500 at the next closing. The figure shown is the maximum exposure if every member closes, which is why it is contingent rather than owed. We have not added it to any total in this report. What would settle it: how many Pay at Close obligations have been invoiced at closing, and how many are outstanding.

What to change

Model the closing obligation, either as a scheduled charge or as a tracked receivable, so it appears in reporting and so somebody can tell whether it is being collected. Until then, treat every revenue figure that includes Pay at Close as a floor and say so wherever it is quoted.

12

The form that creates every listing cannot be completed reliably

Shared platformP1Product team
38fields, three required in name only
Create Listing, first of four tabs, live capture 28 September 2026.
Create Listing, first of four tabs, live capture 28 September 2026.

What we measured on the live form

Street Address, City and Price carry an asterisk in their label. None carries a required attribute and none carries aria-required. Required status is painted on, not programmatic.

Two fields have no label a screen reader can reach: the square footage box and its unit selector.

Twenty navigation targets measure 20 pixels tall or less, against a 24 pixel minimum.

The address fields declare an autocomplete value that is not valid, so browsers will not offer to fill them. Agents retype the same addresses by hand.

The harm: a member using a screen reader is not told which fields are mandatory and two fields are announced with no name at all. For everyone else, address autofill silently does not work on the form that stands between a member and the only thing the membership delivers.
Money spentNoneno advertising is involved
Money lostNot countedabandonment on this form is not tracked
How we worked this out

This form is the only route to the product core value, so anything that makes it harder to finish is a revenue leak as much as an accessibility one. Pricing it needs form start and form completion events, which the platform does not emit. Those events are named in the instrumentation brief in chapter 7.

What to change

Add the required attribute to the three fields that already claim it visually, and label the square footage box and its unit selector. Raise navigation targets to at least 24 pixels. Correct the autocomplete values so browsers can fill the address fields. Then remove from the member view the fields that belong to operations, listed below.

For the web team

Measured on the live form at app.expluxury.com/user/ID/tour/add, 28 September 2026. Required fields: 0 with the required attribute, 0 with aria-required, 3 with an asterisk in the label. Unlabelled controls: input[name=squareFeet], select[name=unit_of_measurement]. Autocomplete tokens read "property address-line1", "property address-level2", "property postal-code"; "property" is not a valid section token so the whole value is discarded. Operations fields visible to members: orderOwner, productionNotes, tourSiteBcc, tourReseller, feedsListingId, nextHomeListingId. The last is a competitor brokerage identifier. Criteria touched: 1.3.1, 1.3.5, 2.5.8, 3.3.2, 4.1.2.

RBI rulesThis is a screening pass on the conversion journey, not a conformance audit. We report what we measured, on which pages, on which date.
SEBI rulesSafe. SEBI covers investor information, not loan pages.
Dark patternsNo compliance level is claimed for the client.
13

The brochure that is meant to win listings ships with blank fields

Shared platformP0Product and marketing
Blankbeds, baths and MLS on a shareable brochure

The whole proposition is that an agent walks into a listing appointment and impresses a seller. We opened the seller facing email brochure the platform generates. The template is good. What it fills in is not.

The eXp Luxury email brochure the platform generates for a listing, previewed 28 September 2026. The template design is strong. Price shows, but Bedrooms, Baths, Half Baths and MLS number are all blank, and the agent block below carried placeholder contact details, masked here.
The eXp Luxury email brochure the platform generates for a listing, previewed 28 September 2026. The template design is strong. Price shows, but Bedrooms, Baths, Half Baths and MLS number are all blank, and the agent block below carried placeholder contact details, masked here.

What we found on the generated brochure

The specification block renders with Bedrooms, Baths, Half Baths and MLS number all empty. A seller receiving this sees a luxury brochure that does not say how many bedrooms the house has.

The agent identity block carried placeholder details: a stand-in name, the phone number plus one two three four five six seven eight nine zero, and a nonsense web address. Nothing stopped that brochure being previewed or shared.

There is no validation. The system will preview and let an agent share a brochure with no specs and fake contact details.

The public sample presentation at elite.luxvt.com/sample-presentation, and the member Onboarding Guide, are both Canva embeds, so neither can be tracked, versioned or counted as delivery.

Activate Listings on a 390 pixel phone, 28 September 2026. The member greeting block overlaps the page title.
Activate Listings on a 390 pixel phone, 28 September 2026. The member greeting block overlaps the page title.

And on a phone

On a 390 pixel screen the member greeting sits on top of the page heading on every authenticated page we tested.

The dead end from leak 2 is identical on mobile, with the only escape route a wrapped text link rather than a button.

The harm: the seller facing output is the product, and the product can go out broken. An agent who shares this brochure at a listing appointment shows a seller a luxury document with no bedroom count and a fake phone number. That is worse than sending nothing, and it is the exact moment the whole membership is meant to prove itself.
Money spentNoneno advertising is involved
Money lostNot countedbrochure open and share rates are not tracked
How we worked this out

We previewed the generated brochure on a test listing, so the blank fields may partly reflect an unfinished draft. But the finding stands: nothing in the system prevents a brochure with empty specs and placeholder identity from being previewed and shared. A validation gate and a check on how many live brochures currently carry blank fields would size it. The listing website and activity report on a fully activated listing remain unseen, because both audit accounts held only drafts.

What to change

Add validation: a brochure with empty required fields or placeholder contact details should not be previewable or shareable. Bring the sample presentation and onboarding guide inside the product from Canva so they can be versioned and counted. Instrument the brochure so an open or a share is recorded against the member, because a brochure the agent actually used is the strongest thing to show at renewal. Then fix the header overlap on mobile, which affects every authenticated page.

14

The scoreboard reports growth while the business shrinks

Shared billingP0Leadership
25xswing in the same tile in 25 days

The billing dashboard reports active subscriptions up 15.7 per cent year on year. That figure is accurate and it is trailing. Monthly net movement has been at or below zero since May 2026.

MonthNetSignups minus cancellations
Mar 2026+88
Apr 2026+26
May 2026-9
Jun 2026+1
Jul 2026-4
Aug 2026-27
Sep 2026-6

Net subscription movement by month, signups minus cancellations. Billing ledger, 28 September 2026. Bars are scaled to the March peak of 88.

2,371live subscriptions, down 52 in 25 days
USD 4.46Mof contract value cancelled to date
USD 3.86Mof contract value live today
Zoho Billing dashboard, captured 28 September 2026. The Churn Rate tile reads 2.00% and the LTV tile reads USD 7,153, both stamped On Sep 2026. On 3 September the same LTV tile read USD 180,363. The figure is the platform dividing revenue per user by a month-to-date churn rate, which is why it swings.
Zoho Billing dashboard, captured 28 September 2026. The Churn Rate tile reads 2.00% and the LTV tile reads USD 7,153, both stamped On Sep 2026. On 3 September the same LTV tile read USD 180,363. The figure is the platform dividing revenue per user by a month-to-date churn rate, which is why it swings.

Three default measures that mislead on this business

Lifetime value divides by a month to date churn rate, so it is meaningless early in a month.

The month to date churn rate is read as though it were a monthly rate.

A trailing twelve month subscriber count hides a turn that happened five months ago.

The harm: more contract value has now been cancelled in the lifetime of this business than is currently live, USD 4,458,325 against USD 3,861,237, and the scoreboard has been reporting growth throughout.
Money spentNoneno advertising is involved
Money lostNot countedwe will not price decisions that have already been taken
How we worked this out

On 3 September 2026 the lifetime value tile read USD 180,363. On 28 September 2026 the same tile on the same business read USD 7,153. Nothing about the business changed. The tile divides average revenue per user by a month to date churn rate, and that rate matured from 0.08 per cent on day three to 2.00 per cent on day twenty eight. USD 143.05 divided by 0.02 is USD 7,152.50. The figure is arithmetic, not measurement, and it reads differently every day of the month.

What to change

Make monthly net movement the headline, because it is the number that turned. Retire the lifetime value tile or recompute it on trailing twelve month churn and per plan family. Build a scorecard on four measures: net monthly movement, share of members with a live listing, collection health, and renewal rate at the cliff. Then ask what was decided while the old number was on screen.

15

The two sites where members sign up and pay have no analytics at all

Acquisition, bothP0Marketing and tech
0 tagson the entire acquisition funnel

We read the live tag configuration on every surface. The product behind the login is tracked. The two sites where a member browses tiers, chooses a plan and pays are not tracked at all.

SurfaceWhat it isAnalytics found
app.expluxury.comThe member product, behind loginGA4 and Microsoft Clarity live (see leak 18)
www.luxvt.comThe product loginTag manager present
elite.luxvt.comMarketing site, all tier pagesNothing
join.expluxury.comWhere members choose and buy a planNothing

Why this is the reason the signup collapse cannot be explained

Signups fell 86 per cent since October 2025. The pages where that fall happened collect no data, so no one can see at which step it happened.

The product is measured but the product is not where members are lost. They are lost before they ever log in.

Any advertising pointed at these pages cannot be attributed to a signup, because nothing records the arrival.

The harm: the business spends to bring agents to these pages and then measures nothing about what they do there. The single largest movement in the business, an 86 per cent fall in new members, happened on surfaces that record no evidence of anyone visiting them.
Money spentNot countedad spend on these pages was not provided
Money lostNot countedthe funnel drop cannot be located without either analytics or the form counts
How we worked this out

Read live on 28 September 2026: elite.luxvt.com and join.expluxury.com carry no Google Tag Manager, no GA4, no data layer and no third party analytics script of any kind. app.expluxury.com carries a live GA4 property. So the acquisition funnel is dark and the product is lit, which is the opposite of what a subscription business needs. Because no analytics exists on these pages, the only available window into the signup collapse is the submission count on the three Zoho quote forms the pages route to.

What to change

Put one tag manager and one analytics property across both marketing sites and the product, so a member can be followed from first arrival to first login as one journey rather than two disconnected halves. Until that exists, pull the monthly submission counts from the three Zoho quote forms, which is the only record of funnel volume the business currently holds. This is cheap and it is the precondition for pricing four other leaks in this report.

16

There is no way to just sign up. Every path is a form, and they lead to different systems

Acquisition, bothP0Marketing and product
0self-serve signup paths
✗ A prospect tries to become a member
Join eXp Luxury
1. Lands on a marketing pageProofLive test, 28 Sep 2026. elite.luxvt.com and join.expluxury.comHarmTwo marketing sites, different tier names on each
→
Doubt
2. Meets three different buttonsProofCTA map, 28 Sep 2026. Get Pricing, Get Free Presentation, ContactHarmEach goes to a different system: a quote form, product registration, a booking scheduler
→
Enquire
Submit
3. Every route ends in a Zoho formProofEndpoints read 28 Sep 2026. Applications on one Zoho tenancy, quotes on anotherHarmThe application form is on its 16th version this year
→
Application submitted
Lost here
4. Waits for a human to respond

What a prospect actually meets

On one page alone, three buttons go to three systems: a Zoho quote form, the Drupal product registration, and a Zoho Bookings scheduler.

No path lets a prospect choose a plan and pay. Every route is an application or a quote request handled by a person.

The membership application is titled version 16 of 2025, which is a lot of iteration on the one form that turns interest into revenue.

The product registration still lists Free Graphics and Templates as a benefit. That feature is locked on the Classic tier, so the promise breaks on arrival.

The harm: the one journey that creates revenue is the most fragmented in the estate. A ready buyer cannot buy. They can only apply and wait, across sites that name the tiers differently and forms that live on two separate systems, none of which is measured (leak 15).
Money spentNot countedno analytics exists on these pages
Money lostNot countedthe drop between button and submission is invisible today
How we worked this out

Traced live on 28 September 2026. From elite.luxvt.com/classic: Get Pricing opens an embedded Zoho quote form, Get Free Presentation goes to www.luxvt.com/register, Contact goes to a Zoho Bookings scheduler. From join.expluxury.com every Join Now goes to a Zoho membership application form on a different Zoho tenancy. Because none of these pages carries analytics, the volume moving through each path is unknown. The Zoho form submission counts are the only way to see it.

What to change

Decide what signup is meant to be. If the model is genuinely application and manual approval, then make it one application, on one system, reachable by one button, and say clearly that a person will respond and when. If self-serve is possible for at least the lower tiers, build a real choose-and-pay path, because a business whose signups fell 86 per cent cannot afford to make the ready buyer wait. Either way, unify the tier names across both sites first, and remove the locked feature from the list of things registration promises.

17

The behavioural data confirms it: a third of sessions dead-click, a third bounce straight back

Shared platformP0Product team
29.73%of sessions have dead clicks

The client runs Microsoft Clarity on the product. It records what members actually do: where they click, where they give up, where the interface does not respond. We were given access to it, and it turns several of the findings above from expert judgement into measured behaviour. The window is short, the last three days, about 333 sessions, so read these as direction confirmed rather than a full baseline.

Microsoft Clarity dashboard for the LUXVT project, last 3 days, captured 29 September 2026. Dead clicks 29.73% of sessions, Quick backs 36.64%, on 333 sessions.
Microsoft Clarity dashboard for the LUXVT project, last 3 days, captured 29 September 2026. Dead clicks 29.73% of sessions, Quick backs 36.64%, on 333 sessions.

What the members are actually doing

Dead clicks, 29.73% (99 sessions). Nearly one session in three clicks something that does not respond. This is the measured version of the Draft dead end and the unresponsive controls in leaks 2 and 12.

Quick backs, 36.64% (122 sessions). More than a third of sessions hit a page and immediately go back. People are landing somewhere wrong and retreating, which is the measured version of the navigation and hierarchy problems in leaks 9 and 5.

JavaScript errors on 25.66% of sessions (247 errors). Clarity names them: a React render error, "target container is not a dom element" (32%), and "cannot read properties of null reading classList" on a dashboard-alert element (26% and 4%). These are concrete and reproducible, not vague slowness.

Outbound clicks, 59 sessions. This is leak 11 measured: members are clicking off the platform to the six other domains it links to, in nearly one session in five.

7.1% of sessions are on mobile Safari. The mobile header overlap in leak 12 is hitting real iPhone users, not a hypothetical.

Rage clicks and excessive scrolling are both low, 0.30%. So the problem is not members hammering in frustration. It is quieter than that: they click, nothing happens, and they leave.

Microsoft Clarity, most-visited pages, last 3 days. My Listings is the most visited page on every brand. Row 9 is the eXp listing manager in an error state, visited 26 times.
Microsoft Clarity, most-visited pages, last 3 days. My Listings is the most visited page on every brand. Row 9 is the eXp listing manager in an error state, visited 26 times.

Where they spend their time, and where it breaks

The single most-visited page on the product is My Listings, on all three brands. That is where members live, and it is where leaks 2 and 12 sit.

The eXp listing manager was hit in an error state 26 times in three days. That is the Activate Listings screen from leak 2, failing, measured.

The harm: the behavioural data and the audit agree. The places members spend the most time are the places that fail, and they fail quietly, by not responding, so a third of sessions dead-click and a third retreat. None of this shows up in a revenue report until a renewal is refused.
Money spentNoneno advertising is involved
Money lostNot countedClarity measures behaviour, not money; the loss is priced in leaks 1 and 6
How we worked this out

Source: Microsoft Clarity, LUXVT project, last 3 days to 29 September 2026, 333 sessions, 31 bot sessions excluded. Dead clicks 29.73%, quick backs 36.64%, JavaScript errors 25.53%. This is a short window on a recently installed tool, so it confirms direction rather than establishing a baseline. Extending Clarity retention, and adding funnels for the register-to-activate path, would turn this into a measured funnel.

For the web team: the named errors and event counts

JavaScript errors, share of the 247 recorded: 32.39% target container is not a dom element; 28.34% script error; 25.91% cannot read properties of null (reading classList); 4.45% document.getElementById(dashboard-alert).classList is null; 1.62% cannot read properties of null (reading settings). Smart events by session: Submit form 73, Outbound click 59, Upload 33, Log-in 28, Download 9, Subscribe 6, Search 5, Contact us 4. Devices: Chrome 73.96%, Safari 15.38%, MobileSafari 7.10%, Edge 2%. Web Vitals show LCP and INP needing improvement, CLS good.

What to change

Two things, both cheap. First, act on what Clarity already shows: find the dead-click targets on My Listings and the listing manager and make them respond, and fix the error state that is being hit 26 times in three days. Second, get more from the tool: extend its data retention, and build a Clarity funnel for register to first listing to activation, which is the one measured funnel this business could have tomorrow without any new instrumentation. It is the cheapest way to size leaks 2 and 15.

18

The plan catalogue prices do not match what members are billed

Shared billingP2Billing operations
10plans whose default price is wrong
Correction. An earlier version of this report stated that 98 members were billed between USD 1 and USD 6 a year, with USD 168,040 at stake. That was wrong and it is withdrawn. Those figures are the plan default price. Subscriptions carry their own amount, and those amounts are real. We checked every one.
PlanCatalogue defaultMedian actually billed
Primary Agent, AustraliaUSD 2USD 3,900
Primary Agent, EUUSD 3USD 2,500
Primary Agent, UKUSD 6USD 1,500
Primary Agent, New ZealandUSD 5USD 4,250
Primary Agent, South AfricaUSD 5USD 20,000
Team Member, CanadaUSD 1USD 1,413
Team Member, EUUSD 3USD 995
Pay at Close, CanadaUSD 5USD 675

Why it still matters, at a smaller size

Anyone creating a subscription from a plan default gets a USD 2 price for a USD 3,900 product.

One Team Member Canada subscription is genuinely billed USD 1. It is the only one in the base.

Any report or forecast built from plan prices rather than subscription amounts will be wrong, in both directions.

The harm: a landmine rather than a live loss. It will produce a real mispriced subscription the first time someone creates one from the catalogue without checking.
Money spentNoneno advertising is involved
Money lostNot countedno member is currently underbilled except one
How we worked this out

We verified this by reading the billed amount on every subscription across all ten plans rather than trusting the catalogue. That check is what withdrew the earlier finding. The residual exposure is one subscription at USD 1 and the risk of the next one created from a default.

What to change

Set each plan default to the price that plan is actually sold at, so the catalogue stops being a trap. Then review the single USD 1 subscription and decide whether it is intentional.

7. Why nobody could see this

Five measurement failures explain why a business that turned negative in May is still reported as growing.

The instrumentation brief, for the technical team

Events needed before any of this can be measured: create listing started, tab completed with tab name, listing saved as draft, tour submission started, tour submission completed, listing status changed with old and new status, activation attempted, activation blocked with reason, dashboard element clicked. Plus a cancellation reason custom field on the subscription, renewal notice sent and opened, and delivery confirmation on dunning email.

8. The four questions, answered with evidence

The engagement asks four things: why members leave, how to bring more in, how to keep them, and how to grow what they pay. Here is what the evidence says about each, and the single move that matters most. Every claim below traces to a finding above and a source: the billing ledger, or Microsoft Clarity, both read this week.

1. Why are members leaving?

When. Not gradually. The pattern is a cliff: 48.1 per cent of all cancellations fall in the day 330 to 400 renewal window (billing ledger, leak 1), and the median time to cancel on the main plan is 365 days to the day.

Where. The product fails at the place they live. My Listings is the most visited page and the top exit page. 29.2 per cent of sessions dead-click, 37.17 per cent bounce straight back, 25.66 per cent throw a JavaScript error (Clarity, leak 18).

What they got. A listing that most likely never left Draft (leak 2), no membership or delivery screen to show for the year (leak 3), and no warning before the renewal charge.

The honest gap. No cancellation reason is recorded anywhere (leak 4). We can prove when and where they disengage. The exact why, in their own words, still needs an exit survey.

Answer: they reach renewal with nothing to show, on a product that fails quietly at the screens they use most.

2. How to bring more members in?

The problem is measured. New signups have fallen 86 per cent from the October 2025 peak (billing).

Why it cannot be diagnosed yet. The two sites where members sign up carry no analytics at all (leak 15), and the path itself is three routes across two systems with no price shown (leaks 8 and 17).

The move. Put a price on the pricing page, collapse signup into one measured path, and add one tag manager across both marketing sites. The cheapest first step is the Zoho form counts plus a Clarity funnel, which needs no new instrumentation.

3. How to make them stay?

The cliff is the whole game. Fixing churn is worth more than any other single lever: one percentage point of renewal rate on the book reaching renewal in the next 180 days is USD 16,049 (billing).

The mechanism is known. No renewal journey exists in the product (leak 3), and the manual listing path dead-ends before delivery (leak 2).

The move. Build the renewal journey: a membership page that shows what was delivered, a renewal notice at sixty and fourteen days led by delivery not billing, and a first-run that produces one live listing. Turn on the cancellation reason so the next quarter can be measured, not guessed.

4. How to grow revenue?

The recoverable money is named. USD 2,229,013 cancels at the renewal cliff (leak 1). USD 380,596 sits overdue across 423 invoices, most of it involuntary card failure (leak 7). USD 387,500 of Pay-at-Close value is uncounted (leak 14).

The order. Dunning recovery is the fastest cash and needs no product change. Renewal saves are the largest prize. Tier clarity stops the Brand-tier mismatch (leak 4) quietly eroding trust.

The move. Warn before the card fails, save the renewal, and count what is already owed.

The one line for leadership. This business does not have a demand problem it can see or a product nobody wants. It has members who pay, receive nothing they can point to, and leave at renewal, on a platform that fails quietly at the screens they use most. Fix the renewal journey and the activation dead end, and the same members who are leaving would have a reason to stay.

9. What to do, and what it adds up to

USD 2.23MCancelled at the renewal cliff 988 members in a 70 day window, 50 per cent of all contract value ever lost. All time, read 28 September 2026.
USD 1.88MRevenue lost in 12 months 1,045 cancellations, 48.7 per cent of the live book, every year.
USD 760,112Projected to leave by March (scenario) USD 1,604,851 reaches renewal in 180 days at a 47.4 per cent refusal rate. One point of renewal rate is USD 16,049.
USD 227,364At risk right now Unpaid, dunning and non renewing subscriptions by their own contract amount, plus 423 overdue invoices carrying USD 380,596.
Not countedListings never delivered The mechanism behind the cliff. One query prices it, named in chapter 11.

Every figure is annual contract value taken from the subscription record itself, not an estimate, and every one is a floor. We have not applied a recovery rate to the at risk figure because we have no data on this client past recovery. Nothing here prices trust, brand damage or regulatory exposure.

  1. Build the renewal journey. A membership page, a delivery record and a notice at sixty and fourteen days. This is the only leak on the list that touches USD 2,229,013.
  2. Fix the Draft dead end. It is the reason the renewal has nothing to show.
  3. Turn on the cancellation reason. Configuration, not a build. Until it exists, nothing can be proved.
  4. Make the first session produce one finished thing, because 13 per cent never reach month two.
  5. Warn before the card fails, and give the member somewhere to fix it.
  6. Reorder the dashboard so the core action outranks the add on.
  7. Replace the scoreboard and check what was decided on the old lifetime value.

10. What we did not cover

Named so that absence is a decision rather than an oversight. Sports and Entertainment, Land and Ranch and New Homes, which are three of the four brands in the billing organisation. The three features locked behind the Classic tier. Any surface reached only after submitting a form, because we made no writes. The marketing funnel upstream of signup, because no analytics access was provided. And anything a member would tell us, because no member has been spoken to.

11. What could change the size of this job

Everything we found that could move a price, in the open. A named risk is a shared risk.

RiskWhat we foundIf it is trueWhat settles it
We could not complete a listing submissionFinishing Tour Submission writes to live client data, which we were instructed not to doThe Draft dead end may be a missing field rather than a missing control, which changes the fixA sandbox account, or written permission to submit one test listing
Leak 2 is not pricedBoth audited accounts have zero listings live, but two accounts are not a sampleIf the pattern holds across the base it is the largest priced leak in the reportOne query: live subscriptions whose listings never reached Active Campaign, and their contract value
No analytics on any surfaceWe can prove signups fell 86 per cent but not where visitors leave, and no dashboard interaction is trackedFour leaks stay unpriced that would otherwise carry numbersRead only access to the analytics property, or confirmation that none exists
Three features are locked on the accounts providedGraphics and Templates, Social Posting Service and Luxury Landing Page are paywalled on ClassicFindings inside those features are unknown, and registration advertises one of them as freeOne Premium or Elite login
The receivables figures disagreeThe dashboard reports USD 435,851; the invoice ledger totals USD 380,596Either could be quoted externally and be wrong by about USD 55,255An explanation of what the dashboard tile includes that the invoice ledger does not
No member has been spoken toNo interviews, no support ticket export, no survey data, and no cancellation reasons existEvery statement about why members behave as they do is inference from behaviourApproval to contact churned and active members, plus twelve months of support tickets
The billing organisation spans four membership brands57 plans across eXp Luxury, Sports and Entertainment, Land and Ranch and New HomesFindings are drawn from the Luxury core and may not hold for the other threeA decision on whether the other brands are in scope, then a walk of each

12. How we checked

Dates. Billing ledger read in full on 3 September and again on 28 September 2026. Product walked live on 28 September 2026.

What we used. Two member accounts provided by the client, one LuxVT Classic and one eXp Luxury Agent with a Sports and Entertainment membership. Read only access to the billing system. 5,309 subscription records and about 8,000 invoices were read through the Zoho Billing API and aggregated. Every money and subscription figure in this report traces to the Zoho Billing screens shown in chapter 2, captured live on 28 September 2026. No personal data of any member appears in this report, including inside the screenshots, which are captured from aggregate dashboard views and masked wherever a name could appear.

What we changed. Nothing. Every call was a read. We did not submit a form, dismiss a dialog, create, edit or delete anything, on the client instruction.

Corrections made during this audit. Six, all reflected above. We marked the claim that entry costs USD 950 as Not supported, and the claim that the Brand tier excludes syndication as Not testable. Both were our error: we had checked the billing catalogue and one marketing site, not the published plans page, which states both outright. We reported that the 60 plus against 80 plus contradiction had been fixed; reading all four tier pages instead of one showed it has moved rather than gone, and now runs the wrong way. And we have adjusted the first month churn figure downward after finding one time purchases recorded as subscriptions inside it. The three earlier corrections stand: We first recorded the Create Listing form as 38 fields on one flat screen; it is 38 across four tabs. We carried forward two July findings, the 60 plus against 80 plus contradiction and the placeholder alt text, which a live re-check showed have since been fixed. And we withdrew a finding entirely: an earlier version claimed 98 members were billed USD 1 to USD 6 a year with USD 168,040 at stake. Reading the billed amount on every one of those subscriptions showed the low figures are catalogue defaults and the members pay real prices. That finding is now leak 11, at a fraction of the size.

Every finding, and how it was verified

Each claim below was checked live in the client's own systems on the date shown, either by walking the product and reading the page, or by recomputing the figure from the full billing ledger. Nothing here rests on inference or a single earlier capture.

LeakClaimHow it was verifiedDateStatus
1Renewal cliff: 48% leave at first renewal, $2.23MFull billing ledger independently recomputed to zero mismatch28-29 SepVerified
2Manual listings dead-end at Draft; no activate controlLive: 3 listings all DRAFT, no per-listing activate control, status ladder confirmed29 SepVerified
3No billing/membership/renewal page in the productLive: 14 paths all 404, Settings submenu holds only Settings/Edit Profile/Logout, full-DOM term sweep zero hits29 SepVerified
4318 members on Brand tier which excludes syndicationLive: verbatim 'Does not include listing syndication' on plan-us; 318 members from ledger29 SepVerified
5Dashboard buries the core action below the upsellLive: 'Launch Your Listing' at y=1042 (below fold); capture shows collapsed accordion below carousels and Concierge upsell29 SepVerified
6~223 members leave in first 30 days, $463,802Ledger recomputed; Course Enrollee one-time purchases excluded28-29 SepVerified
7423 overdue invoices, $380,596, involuntaryLedger + invoice API line by line28-29 SepVerified
8Premier tier advertises fewer portals than ClassicLive: home 80+, Classic 80+, Premier 60+29 SepVerified
99 of 18 nav items leave the platformLive: exactly 9 external destinations counted; HELP served over insecure http29 SepVerified
10Pay-at-Close recorded at $500 enrolment only, $387,500 contingentLedger (155 live PAC subs) + published contract terms28 SepVerified
11Plan catalogue defaults do not match billed realityLedger: billed amount checked on every subscription across all 10 plans28 SepVerified
12Create Listing form: 38 fields, required-in-name-only, unlabelled fields, competitor fieldLive: 0 required attr, 0 aria-required, 3 asterisk labels, 2 unlabelled, nextHomeListingId present29 SepVerified
13Seller brochure ships with blank Beds/Baths/MLSLive: previewed a generated brochure; specs render blank28 SepVerified
14LTV tile is an artefact (swings 25x)Dashboard captured on two dates: $180,363 (3 Sep) vs $7,153 (28 Sep)3 & 28 SepVerified
15Marketing/signup sites carry no analyticsLive tag reads: no GTM/GA4/Clarity on elite.luxvt or join.expluxury; product carries GTM+Clarity29 SepVerified
16No self-serve signup; every path is a Zoho formLive: CTA endpoints resolve to Zoho forms on two tenancies28-29 SepVerified
18Behavioural: 29% dead clicks, 37% quick backs, 26% JS errorsLive: Microsoft Clarity dashboard, last 3 days, ~333 sessions29 SepVerified, 3-day window

Palette sampled from the live member product on 28 September 2026: near black navigation with a muted gold accent. Severity colours are the report own and do not follow the client brand.