TL;DR
- Four metrics, in order: cohort size, enrollment rate, reactivation rate, revenue attributed.
- The attribution window is 14 days - not 30, not 60. Longer windows let you take credit for purchases that would have happened anyway.
- Always run a holdout. 10% of the cohort gets no messages. Their reactivation is your baseline. Your campaign's lift is above that baseline.
- Exclude the "happy path" from your denominator - if someone was already scheduled to return, do not count them as a dormant win.
- Coming Q2: App-ening's Revenue Recovery Dashboard computes all four automatically, per cohort, with holdout logic built in.
Most re-engagement campaigns get reported with a single vanity metric - "our win-back had a 22% response rate!" - and then nobody asks the follow-up questions. How many of those responders would have come back anyway? What was the revenue net of the discount? What was the cost per recovered customer? Without those answers, you cannot tell a good campaign from a bad one, and you definitely cannot improve it.
This post is the measurement framework we walk every customer through. Four metrics, defined precisely, with the attribution logic that separates real recovery from wishful thinking. If you take one thing away: no holdout, no real ROI.
Metric 1: Cohort Size
Cohort size = the number of contacts that met your dormancy criteria on Day 0 of the campaign
This is the simplest metric but the easiest to misreport. The three gotchas:
- Snapshot it at campaign start. If you recalculate cohort size mid-campaign, it drifts - customers age into dormancy every day. Freeze the number.
- Apply every exclusion up front. Opt-outs, bad numbers, contacts already in another sequence. Your enrolled cohort is after exclusions, not before.
- Log it persistently. You need the exact contact IDs 30 days later to compute reactivation rate. Memory is not storage.
Typical SMB numbers: dormant cohort is usually 20-40% of total contacts, depending on how aggressive your dormancy threshold is. If your cohort is under 10%, your threshold is too loose. If it is over 60%, your customer base is in serious trouble and re-engagement is only a band-aid.
Metric 2: Enrollment Rate
Enrollment rate = share of the dormant cohort that actually received message 1
Sounds like it should be 100%. It is not. Real enrollment rates range from 65% to 90% because of:
- Template approval lag - message does not send if the template is stuck in review.
- Opted-out contacts that were not filtered out at cohort creation.
- Invalid phone numbers - Meta returns a failure but your scheduler keeps going.
- WhatsApp messaging limits - throughput caps on newer WABA accounts mean not everyone gets reached on day 0.
- Session-window restrictions for free-form follow-ups in multi-message sequences.
If your enrollment rate is under 80%, something operational is broken - fix it before optimizing the message. We see customers chase a 2% lift in message copy while sitting on a 25% enrollment gap. That is backwards.
Metric 3: Reactivation Rate
Reactivation rate = share of the enrolled cohort that had a qualifying event within the attribution window
This is where most teams go wrong. Two questions you have to answer precisely:
What is a "qualifying event"? For retail, it is a completed purchase. For services, it is a completed booking (not just "I will come in" - an actual showed-up appointment). For B2B, it is a meeting held or a deal advanced to next stage. The rule: it has to be an event that produces revenue or clear revenue intent. A read receipt is not reactivation. A reply is not reactivation. A click is not reactivation.
What is the attribution window? 14 days from enrollment. Not 30, not 60, not "any time in the next quarter." Fourteen days is the sweet spot: long enough to capture the buying cycle for most SMB verticals, short enough that you are not claiming credit for purchases caused by something else.
A longer window looks flattering and is dishonest. If you set the window to 60 days, some of your reactivations are just customers who were going to come back in their normal cadence. You did not recover them - you discounted their next purchase.
The Holdout Group (Non-Negotiable)
This is the part teams skip and it is the part that actually tells you whether the campaign worked. Before you send the first message, randomly assign 10% of the cohort to a holdout - they get no messages at all. Fourteen days later, measure their reactivation rate too.
Example: your sent group reactivates at 18%. Your holdout reactivates at 6%. Your true lift is 12 percentage points. Without the holdout, you would report "18% reactivation rate" and pat yourself on the back. With the holdout, you realize one-third of your "recovered" customers were always coming back - and you gave them all a discount. That is margin you did not need to spend.
Yes, holding out 10% feels like leaving money on the table. It is not. It is buying you the only honest number in the entire campaign.
Get Real Numbers Before You Commit
A Revenue Recovery Audit shows you your dormant cohort, your likely reactivation rate, and what a single campaign could recover - using your actual contact data.
Get Your Free AuditMetric 4: Revenue Attributed
Revenue attributed = sum of gross revenue from qualifying events within the attribution window, minus the discount cost
Three rules:
- Subtract the discount. If you gave 15% off to drive the reactivation, the campaign cost that 15%. Do not report gross revenue as if the discount were free.
- Net out the holdout baseline.
incremental_revenue = revenue_sent - (sent_cohort_size / holdout_size) × revenue_holdout. This is your true dollar impact. - Only count events within the window. A reactivation that happens on day 30 is not part of this campaign's attribution - even if the customer mentions the message in their order notes.
This is also where you earn the right to talk about campaign-level ROI. Take your incremental revenue, divide by the total discount cost plus the operational cost of running the campaign, and you have a number you can compare across campaigns, quarters, and channels.
Common Measurement Mistakes
Every one of these is a real pattern we see in SMB campaigns:
- Attribution window too long. 60 or 90 days catches normal-cycle purchases, inflating ROI. Stick to 14.
- No holdout. "We sent 1,000 messages and got 180 sales!" Great - but 60 of them were coming back anyway. You lost margin on those 60.
- Counting "opens" as recoveries. Opens are vanity. Only qualifying events count.
- Including the "happy path" in the denominator. If a customer had an upcoming scheduled appointment at the time of enrollment, they should not be in your dormant cohort to begin with - you will "recover" them automatically and look like a hero.
- Attributing non-enrolled traffic. Someone who saw your Instagram ad the same day they got your WhatsApp win-back message - that sale is not cleanly yours. Your holdout controls for this only in aggregate.
- Ignoring the discount cost. Gross revenue is not profit. You cannot invoice your accountant in gross.
- Comparing across cohorts with different compositions. A cohort of 120+ day dormant customers reactivates at a different rate than a cohort of 60+ day dormants. Do not compare apples to oranges.
- Not re-running the measurement. Attribution at day 14 is final. Do not "update" the number at day 40 to include later purchases - that is moving the goalposts.
The Dashboard You Actually Need
All four metrics need to be visible side-by-side, filterable by cohort and campaign, with the holdout comparison built in. Spreadsheets work for one campaign. By your third, you need instrumentation.
App-ening's Revenue Recovery Dashboard (launching Q2 2026) computes cohort size, enrollment rate, reactivation rate, and revenue attributed automatically - with the 14-day attribution window and holdout logic pre-wired. Every re-engagement sequence enrolls 10% into a holdout by default, so you never have to remember. The dashboard shows per-sequence performance, per-cohort breakdown, and a rolling month-over-month recovered-revenue number you can put in your monthly review.
Until that ships, the work is manual but doable. Start by picking one campaign, defining the four metrics precisely, holding out 10%, and reporting the incremental number at day 14. Once you have done it once, the second campaign is trivial. It is the discipline that matters, not the tooling.
The One Number Your Team Should Watch
If you can only track one metric, track monthly incremental recovered revenue. It is the output of all four inputs above, netted against your holdout, summed across every re-engagement campaign you ran in the month. Every other metric is an input to this one.
Put it on your monthly dashboard next to new-customer revenue. When recovered revenue starts rivaling acquisition revenue - and for most SMBs with a two-year-plus customer base, it should - you have a different business than the one you thought you had. That is the point of doing this right.
Related reading: the reactivation journey template for the campaign mechanics, and win-back offer design for what to put in message 3.
See Your Recoverable Revenue - No Math Required
Our free Revenue Recovery Audit analyzes your contact base, estimates your dormant cohort, and projects how much you could recover - with the math and the holdout logic already done.
Get Your Free Audit