Measurement 22 October 2026
How to Measure Retention Interventions with a Holdout Group
A simple experimental design for separating genuine retention lift from renewals that would have happened anyway.
A retention intervention only “saves” revenue if subscribers who receive it produce more net paid revenue than comparable subscribers who do not. A holdout group supplies that comparison. Randomly assign a small share of eligible users—10% is a practical example, not a universal rule—to receive the usual experience without the new message or offer. Then compare verified App Store outcomes after enough time has passed.
This protects teams from a common mistake: counting every renewal after a message as a win. Many subscribers would have renewed without any intervention. Some would have re-enabled auto-renew on their own. Some accept a discount but would have paid full price. A well-run holdout estimates the extra outcome created by the intervention, after accounting for those counterfactuals.
Why a holdout matters
Suppose 1,000 annual subscribers turn off auto-renew and become eligible for a support message. You send it to all 1,000. Months later, 120 renew. How many renewals did the message cause? The data alone cannot answer. Perhaps 100 would have renewed anyway, perhaps 115, perhaps only 60. Before-and-after comparisons cannot separate the intervention from seasonality, product changes, and user intent.
Random assignment gives a credible baseline. If 900 eligible subscribers receive the message and 100 remain in a holdout, both groups should have similar expected characteristics at assignment. If 12% of the treated group and 8% of the holdout later complete a paid renewal, the estimated incremental renewal lift is four percentage points. Applied to 900 treated subscribers, that suggests roughly 36 additional renewals, subject to statistical uncertainty. It does not justify claiming all 108 treated renewals as saved.
Small holdouts are noisy. In the example, a few renewals can move the control rate substantially. The 10% choice trades measurement precision for more users receiving a potentially useful intervention. For low-volume products or rare outcomes, a larger holdout or longer run may be necessary. Set sample-size expectations before launch and resist turning the experiment off after the first favorable week.
Define eligibility and outcome before randomizing
Start with a single trigger, such as a verified AUTO_RENEW_DISABLED notification for an active annual subscription. Define exclusions: users already in an active support conversation, users who opted out of contact, subscriptions without a reliable app account match, or users who already received the same playbook. Write these rules before you inspect results. Changing eligibility after seeing outcomes can make the comparison misleading.
Next, define one primary outcome. For annual subscribers, a verified paid renewal at the next renewal date is defensible, but it takes time. Re-enabling auto-renew within 30 days can be a leading indicator, not a substitute for paid revenue. For a billing-retry intervention, a recovered transaction within a defined window may be more direct. Keep the outcome tied to the business question and avoid mixing different subscription lifecycles in one metric.
Set observation windows explicitly. If treatment happens today and renewal is 11 months away, do not report “saved annual revenue” tomorrow. Report interim signals separately. Also decide what to do with refunds, plan switches, introductory offers, and tax or platform fees. Gross store proceeds and net business revenue answer different questions; label your figures accordingly.
How to assign the holdout
Assign at the subscriber level, not at the message level. Use a stable identifier so the same person stays in the same group across repeated triggers. A deterministic hash of an internal subscriber ID plus an experiment key is one option; a stored random assignment is another. Keep the allocation hidden from support copy so staff do not manually override it based on expected value. If one person can have several app accounts, think through how cross-account contamination affects the design.
Store assignment time, experiment version, eligibility facts, and chosen arm before attempting delivery. This supports an intention-to-treat analysis: compare everyone assigned to treatment with everyone assigned to holdout, regardless of whether a push notification was delivered or a message was opened. An “opened message” comparison selects people who were already more engaged and will usually exaggerate effect.
Be careful about what holdout means. It should withhold the incremental retention intervention being tested, not ordinary customer support, access to paid features, legally required notices, or a requested reply. If a holdout subscriber contacts support, help them. The experiment tests the proactive message or offer, not whether the business may deny service.
Match outcomes to real App Store transactions
Apple’s App Store Server API and App Store Server Notifications provide the raw subscription lifecycle data. Use verified signed transactions and current status to determine whether a paid renewal occurred. The original transaction identifier links a subscription history; individual renewals have their own transaction identifiers. Do not assume the identifier of the initial purchase is the identifier of every later payment.
Build a durable join between your experiment assignment and the App Store subscription record. Preserve account merges, product changes, and reinstalls without accidentally counting the same renewal twice. A transaction ledger should have one row per verified transaction and a clear policy for reversals. If a paid transaction is later refunded, the net revenue calculation must reflect that change. If a customer switches plans, decide whether the primary outcome is any paid subscription, renewal of the original product, or net proceeds across the account.
Use Apple’s own dates for transaction timing, rather than the time your webhook arrived. Notifications can be delayed or retried. A daily reconciliation job can catch missed events and keep entitlement, experiment, and revenue reporting aligned. Your dashboard should expose unmatched assignments and orphaned transactions as data-quality issues, not silently exclude them.
What “revenue saved” should mean
A simple estimate starts with incremental paid conversion: treatment paid-renewal rate minus holdout paid-renewal rate. Multiply that difference by the number of treated eligible subscribers and by an appropriate net value per paid renewal. If treatment includes discounts, free days, credits, or extra support cost, subtract those costs. The result is an estimate with uncertainty, not an exact count of individually “saved” people.
For example, imagine 900 treated users and 100 holdout users. At the defined renewal date, 108 treated users and eight holdout users have verified paid renewals. Rates are 12% and 8%, giving an estimated lift of four percentage points, or about 36 incremental renewals among treated users. If net proceeds per renewal average $40, the gross incremental estimate is $1,440 before intervention costs and uncertainty. If the treatment discounted 50 renewals by $10, that $500 must be included in the net calculation. Do not attach fake precision to this example; actual confidence intervals depend on sample sizes and outcome variance.
For mixed prices, sum verified net proceeds per group and normalize by the number assigned, rather than multiplying one average by every subscriber. Watch for extreme purchasers and skewed revenue distributions. It may be useful to report both paid-renewal lift and net-revenue lift. One can improve while the other falls, especially when offers are expensive.
Analyze without fooling yourself
Check balance at assignment: product, tenure, country, price, trial history, and recent activity should look broadly similar between groups. Randomization can still produce chance imbalance in small samples. Prespecified stratification, such as assigning within plan type, can help when segments differ sharply. Avoid slicing results into dozens of tiny groups after the fact and promoting the most favorable result as truth.
Report the primary outcome first, with group sizes and a measure of uncertainty. Show secondary outcomes—reply rate, issue resolution, auto-renew re-enabled, refunds, support cost—clearly labeled as secondary. If you stop early each time a metric crosses a threshold, the apparent win rate will be inflated. Set run length and decision rules in advance or use a sequential method designed for repeated looks.
Look for harm as well as lift. A message that boosts renewal slightly but raises refund requests or complaints may be a bad trade. Track opt-outs and negative replies. If the message reveals a product issue, fixing that issue for everyone may have more durable value than optimizing the wording of an offer.
RevenueCat’s experimentation documentation covers randomized subscription experiments. Its tools are one possible implementation path; the underlying principle applies whether you use a vendor or your own assignment and ledger. Preserve the same unit of randomization, verified outcomes, and honest reporting in either case.
Five mistakes that inflate “saved revenue”
- Counting every renewal after contact. Use the holdout rate to estimate the renewals that would have happened anyway.
- Comparing openers with non-openers. Analyze assignment first; openers are a selected, more engaged group.
- Using auto-renew-on as paid revenue. Treat it as a leading state until a real transaction occurs.
- Ignoring offer cost and refunds. Net proceeds can fall even when renewal counts rise.
- Changing eligibility midstream. Preserve experiment version and rules, and analyze versions separately.
Frequently asked questions
What is a retention holdout group?
It is a randomly assigned group of eligible subscribers who do not receive the intervention, so their outcomes provide a comparison for the treated group.
Is every subscription that renews after a message revenue saved?
No. Some subscribers would have renewed anyway. Estimate incremental revenue from the difference between treatment and holdout outcomes, using verified transactions.
Want subscription-aware support with a clear measurement plan? See keepwell pricing or request early access. For intervention timing, read the annual cancellation guide.