What the dataset is, how we value a single customer, and the number that matters most at the point of sale: when someone signs up, how much are they worth to us on average? Then we set that result next to the planning model month by month.
An earlier version of this doc reported the per-type Dx+MM values too high. The fix and the corrected numbers are here; the rest of the method is unchanged.
What was wrong. We tagged a customer as Dx+MM only once they attended the combined appointment. Anyone who signed up for Dx+MM and then no-showed never got the tag, so they were filed as a diagnosis no-show instead. That left the Dx+MM group missing its no-shows, with a 98% show-up rate, when the real first-appointment rate is about 75%. With the low-value no-shows left out, the Dx+MM values read about a third too high. The fix adds those no-shows back at the 75% rate, which both our quiz data and the planning model agree on.
Three numbers to keep straight, used the same way throughout this doc:
Two values were already right and don't move: the blended $236 (any new customer) and the diagnosis-only $195, both of which already counted their no-shows. Everything that changed is on the Dx+MM side:
| Dx+MM value | Firing now | Our earlier figure | Corrected |
|---|---|---|---|
| Checkout, all states | per state ↓ | $662 | $480 |
| T1 states | $609 | $691 | $503 |
| T2 states | $565 | $626 | $454 |
| T3 states | $457 | $548 | $395 |
| T4 / T5 states | $350 / $350 | $420 / $498 | $300 / $358 |
The firing values for T1 to T3 sit above the corrected figures, so what we pass back today is still too high and should come down toward the corrected column. T4 and T5 rest on 7 and 10 customers, too few to trust, so the architecture already floors them to $350. The full per-cell version of this table is in section 5.
It is margin-adjusted, so it sits below topline revenue and reads differently from a standard LTV figure. It takes what a customer pays us and subtracts what we pay clinicians to see them.
Revenue comes straight from payments, with no modelling. The only constructed piece is the clinical cost, which we apply with a short set of rules.
One export, one row per customer, covering sign-ups from January 2025 to April 2026, current as of the 17 April 2026 snapshot. It carries each customer's payments, appointments attended, sign-up date, state, and quiz answers.
There are two groups that both involve not showing up, and only one is excluded.
The second group is not free to us. If someone cancels inside 24 hours or no-shows, we keep the deposit but still pay the provider for the slot: the 45-minute doctor rate for a Dx+MM booking, the 15-minute clinician rate for a diagnosis-only booking. About 1,100 of the 3,602 carry one of those fees, so after they're counted the group averages roughly $28 each, not the deposit on its own. The rule for inclusion is still simple: paid something, in; paid nothing, out.
Two appointment lengths, two rates. A 45-minute Dx+MM appointment with a doctor costs $112. Every 15-minute appointment with a clinician costs $38, whether it's a diagnosis-only first visit or an ongoing med-management check-in.
A Dx+MM customer who attends costs $112 + $38 × (n − 1) across n appointments. A diagnosis-only customer costs $38 × n, since all of their visits are 15-minute. Someone who books and then no-shows or cancels late costs the single provider fee for the slot they booked, even though we keep the deposit. The two rates ($112 and $38) are the judgement calls in the method. Everything else is money that came in or went out.
The cost side covers provider fees only. It does not include:
So mLTV is margin over clinical cost, not profit per customer. It tells us how customer types stack up against each other and sets a ceiling on what we can spend to acquire them.
One thing the collected view captures without being asked: whether people show up. It counts only appointments that happened and money that was paid, plus the provider fee on a no-show or late cancellation. So a customer who booked and didn't attend lands in the data at their real value, low or slightly negative, already inside the average. We never assume a show-up rate, because the real one is baked in. The planning model is the reverse, since it has to assume a show-up rate as an input (around 75% for first appointments) because it forecasts before anything has happened.
To see the calculation end to end, take one customer who books a Dx+MM appointment, shows up, opts into ongoing care, and stays six months. This is a best case, not a typical one:
Someone who books a diagnosis-only appointment and doesn't continue:
The reason to compute mLTV is to answer one question at the point of sale: someone just signed up and paid a deposit, how much are they worth? The answer has to include everyone who signs up, the no-shows and the one-and-dones along with the people who stay. Across the matured cohort (Jan to Oct 2025 sign-ups, 6 to 15 months to pay), that average is:
Split by the path they are on, two of the three values stand as measured and one needs the correction from the top of this doc:
The diagnosis-only $195 is a true expected value as it stands, because that bucket already carries its no-shows, so it reads the same before and after the correction. The Dx+MM number is the one that was overstated: our earlier figure was $662, but that counted only the customers who reached the combined appointment. About three in four show up, so the corrected expected value of a Dx+MM sign-up is about $480. The planning model's figure for the dual type is $324, lower than ours because it caps at twelve months and separates the dual and full-service types where we blend them.
These two are aggregates, shown to make the split legible. They are not the values that fire to the ad platforms. What fires is the per-state version of the Dx+MM and diagnosis-only numbers, the ten cells in section 5.
Within the diagnosis-only path, the $195 is itself a blend of two outcomes:
At checkout you can't tell which of the two a person will become, so $195 is the honest number for that path. For bidding and value pass-back, use these expected values, not the higher conditional ones. The conditional figure ($662 for Dx+MM) is what a customer who reaches treatment is worth, which is a different question from what a sign-up is worth, and using it to set bids would have us paying for customers as if none of them ever no-showed.
This reads like the planning model's mLTV tab. Each column is a sign-up month. The top rows show the booking mix, and the blended rows below show where collected and projected land. As the share booking the higher-value Dx+MM appointment rises, the blended value rises with it.
| Sign-up cohort | Jan '25 | Feb '25 | Mar '25 | Apr '25 | May '25 | Jun '25 | Jul '25 | Aug '25 | Sep '25 | Oct '25 | Nov '25 | Dec '25 | Jan '26 | Feb '26 | Mar '26 | Apr '26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Months to pay | 15.5 | 14.5 | 13.5 | 12.5 | 11.5 | 10.5 | 9.5 | 8.5 | 7.5 | 6.5 | 5.5 | 4.5 | 3.5 | 2.5 | 1.5 | 0.5 |
| Booking mix | ||||||||||||||||
| Booked Dx + MM | 0% | 0% | 0% | 1% | 2% | 5% | 7% | 13% | 19% | 24% | 44% | 54% | 73% | 92% | 93% | 94% |
| Booked diagnosis only | 97% | 99% | 100% | 99% | 97% | 95% | 93% | 86% | 80% | 75% | 55% | 45% | 26% | 8% | 7% | 6% |
| Blended mLTV | ||||||||||||||||
| Collected to date | $112 | $155 | $123 | $161 | $195 | $236 | $269 | $314 | $334 | $339 | $406 | $358 | $278 | $140 | $95 | $49 |
| Planning projection | n/a | n/a | n/a | $95 | $126 | $168 | $204 | $230 | $253 | $266 | $314 | $327 | $330 | $329 | $313 | $310 |
The share booking Dx+MM climbs from near zero in early 2025 to over 90% by early 2026. As that mix moved, the blended value rose in both rows, because more people were buying the higher-value appointment. The per-customer values didn't change; the blend of who signed up did. That is the same shift the planning model shows in its own mix figures, and it holds whichever way the booking types are split, because the blended row averages everyone.
On levels, the two rows do not sit on top of each other. Collected runs above the projection across the matured columns. Two things push it up: those customers have now paid past the 12-month point the projection stops at, and the diagnosis-only appointment is costed here at the 15-minute rate, which looks lower than the figure behind the projection. On a matched cost basis the gap would narrow, so the size of it shouldn't be read as a clean result yet. Collected then falls below the projection in the faded columns on the right, because those customers haven't paid yet while the projection already counts their full year.
The two move in the same shape, set by the booking mix. On levels, collected sits above the projection once a cohort matures and below it while a cohort is young. The young-cohort gap is pure timing. The matured-cohort gap is partly timing and partly a difference in how the diagnosis appointment is costed, so it's a flag to chase down, not a finished number.
The checkout prediction above gives two values, one per booking type. The state-tier architecture splits each into five, because retention varies sharply by state, which makes a Dx+MM booking in Florida worth far more than the same booking in North Carolina. That gives ten values, fired automatically at booking from two inputs that are both known at that moment: the appointment type and the customer's state.
The math behind each value is the same sum as before, run on a smaller group. Take everyone in the calibration cohort who booked that appointment type in a state of that tier, and average their mLTV. For the headline value:
All ten cells across the three numbers. For the Dx+MM cells the earlier figure and the corrected figure differ, because the correction added the no-shows back. For the diagnosis-only cells the two are identical, because that path already counted its no-shows and didn't change:
| Tier | Booking | Customers | Firing now | Our earlier figure | Corrected |
|---|---|---|---|---|---|
| T1 | Dx+MM | 532 | $609 | $691 | $503 |
| T1 | Dx only | 1,654 | $325 | $284 | $284 |
| T2 | Dx+MM | 121 | $565 | $626 | $454 |
| T2 | Dx only | 1,651 | $255 | $235 | $235 |
| T3 | Dx+MM | 60 | $457 | $548 | $395 |
| T3 | Dx only | 1,298 | $185 | $185 | $185 |
| T4 | Dx+MM | 7 | $350 | $420 | $300 |
| T4 | Dx only | 1,270 | $105 | $137 | $137 |
| T5 | Dx+MM | 10 | $350 | $498 | $358 |
| T5 | Dx only | 1,520 | $60 | $111 | $111 |
The corrected column is our recompute on the current export, with the no-show fix applied to the Dx+MM cells. The earlier column is what that recompute gave before the fix, kept here so the size of the correction is visible. The firing column is what the architecture passes to the ad platforms today, which was built on the earlier, attendee-only approach and on a slightly different data snapshot, so it doesn't equal our earlier figure exactly but shares the same blind spot.
The thing to act on: across T1 to T3, the firing values sit above the corrected ones, so the Dx+MM values we pass back today are too high and should be revised down toward the corrected column. T4 and T5 rest on 7 and 10 customers, too few to trust, so the architecture already floors both to $350. On the diagnosis-only side the firing values carry a documented adjustment, a 40% blend of the stronger Oct to Dec conversion, which is why they sit above our figure in the top tiers and below it in the bottom tiers; those cells are unaffected by the no-show fix, so their earlier and corrected figures are the same.
How a state lands in a tier: its blended mean mLTV, averaged across all its paid customers and both booking types, set against thresholds that step down from roughly $400 and above for T1 to under $75 for T5. Because that tiering input is the blended figure, it already includes no-shows and isn't affected by the correction above. Florida at $454 sits in T1; North Carolina at $36 sits in T5. Retention past the third payment confirms a state isn't promoted on a few outliers, and a separate CAC gate can route a correctly-tiered state to a tighter-budget campaign without changing its value.