Why this matters
Every product has a growing pool of people who used it and stopped. For a company a few years old, that pool is often several times larger than the active base. These people already know your brand, already gave you their contact details and may already have their payment details saved. Bringing a fraction back can cost less than acquiring the same number of new customers.
But win-back is also the most over-credited activity in CRM. Dormant customers return on their own all the time: payday, a seasonal need, a friend’s mention. Send them a discount the week before and every one of those natural returns shows up in your campaign report. Teams then scale the discount, train customers to lapse and wait for an offer, and never learn that most of the “recovered” revenue was coming anyway.
This lesson covers both halves: how to bring people back, and how to know you did.
The framework
User states and definitions
You cannot manage resurrection without fixed definitions. Duolingo’s public growth model is a clean template, and you can adapt the windows to your own cycle.
| State | Duolingo definition | Adapted D2C example (60-day cycle) |
|---|---|---|
| Current | Active today and at least once in the prior 6 days | Ordered within the last 60 days |
| At risk | Inactive today, active in some recent window | 61 to 90 days since last order |
| Reactivated | First day back after 7 to 29 days away | Orders again after 61 to 120 days |
| Resurrected | First day back after 30 or more days away | Orders again after 120 or more days |
| Dormant | Inactive for 31 days or longer | No order for 120 or more days |
Resurrected users usually retain worse than current users but better than brand new ones. Track them as their own cohort, because a campaign that doubles resurrections but halves their 30-day retention may add nothing.
Timing: anchor to your cycle
Find the gap between consecutive orders (D2C) or active periods (SaaS) and look at its distribution. If 80% of reorders happen within 45 days, a customer at day 50 is past the point where most people return unaided. That is your first win-back trigger. Earlier and you pay to nudge people who were coming back anyway. Much later and response tends to fall as habits form elsewhere.
Offers: the win-back ladder
Order the reasons to return from cheapest to most expensive and move down the ladder only when the previous rung fails.
| Rung | Reason to return | Example | Cost |
|---|---|---|---|
| 1. What is new | New products, features, content | “12 new roasts since your last order” | Free |
| 2. What you left | Saved state, progress, data, wishlist | “Your 34-day streak can be restored”, “Your saved reports are waiting” | Free |
| 3. Social proof | What peers are doing | Bestsellers, team usage in similar companies | Free |
| 4. Service recovery | Fix the reason they left | Personal note for customers with a late delivery or a refund | Low |
| 5. Incentive | Discount, free shipping, bonus credits | 15% off, held for 7 days | Margin |
| 6. Plan change | Cheaper plan, pause, smaller pack | Downgrade path instead of cancellation | Revenue per user |
Product-led resurrection
The strongest reasons to return live in the product, not in the inbox. Examples that work across categories:
- Progress that persists. Streaks, levels, saved carts, history. Remind people what they built.
- New value since they left. Ship a feature that addresses a known churn reason, then tell exactly the users who left for that reason.
- Collaborative pull. A teammate mentions them, shares a document or assigns a task.
- Re-onboarding. Returning users land on a “what changed” screen, not the main dashboard they left months ago.
Step-by-step playbook
- Fix the definitions. Write the active, at-risk, dormant and resurrected windows from your interval data. Get product, CRM and finance to sign off so everyone counts the same way.
- Size the pool and its value. Count dormant users by segment, past value and reason for lapse where known (delivery issue, price, cancellation survey answer).
- Set up the holdout before launch. Randomly assign 10 to 20% of each eligible segment to a no-contact group. Keep the assignment for the whole campaign window.
- Build the ladder as a journey. Free rungs first. Escalate to incentives only for users with high past value or strong recent intent signals (site visit, app open, email click).
- Pick channels by cost. Email and push carry the early rungs. Use WhatsApp or SMS only for high-value segments where the holdout shows it earns its cost.
- Re-onboard on return. The first session or order after a long absence gets a dedicated experience: what is new, a quick win, and a reason to come back the next week.
- Measure incrementally, then follow the cohort. Report incremental returns, cost per incremental return and the 30, 60 and 90-day retention of resurrected users.
- Sunset. Users who ignore the full sequence move to a low-frequency or suppressed list. This protects deliverability and channel quality.
D2C win-back ladder
- TriggerNo order for 50 days (past the 80th percentile reorder gap)
- Send · EmailWhat is new since your last order
- WaitWait 5 days
- SplitOrdered, or showed intent?
Ordered
- ExitExit to returning-customer onboarding
Clicked or visited, no order
- Send · PushYour usual items with one-tap reorder
- WaitWait 3 days
- Send · WhatsAppFree shipping on next order, 7 days only
- ExitExit on order or after day 14
No engagement
- WaitWait 10 days
- Send · Email15% off for high past-value customers only
- WaitWait 14 days
- ExitNo response: move to sunset list
Worked example
Say a D2C personal care brand has 50,000 dormant customers (no order in 120 days). It runs the ladder above with a 10% holdout. Average order value is ₹1,500 and the incentive rung is 20% off.
Raw result. 45,000 are messaged and 1,530 order within 30 days: a 3.4% return rate. The team’s dashboard says 1,530 customers recovered.
Holdout. 125 of the 5,000 held-out customers ordered anyway: 2.5%.
Incremental. 3.4% - 2.5% = 0.9 points. Incremental returns = 45,000 x 0.009 = 405, not 1,530.
Cost. Say every returning treated customer used the 20% code: 1,530 x ₹300 = ₹4,59,000 in discount, plus ₹40,000 in messaging costs = ₹4,99,000.
- Naive cost per recovered customer = ₹4,99,000 / 1,530 = ₹326.
- True cost per incremental returner = ₹4,99,000 / 405 = ₹1,232.
If the brand’s blended CAC is ₹1,600, the campaign still looks reasonable. But the next test is obvious: drop the discount for customers who were already clicking, where the natural return rate is highest, and see whether incremental returns hold up at a fraction of the cost.
Holdout size check. To detect a lift from 2.0% to 2.6% at 95% confidence and 80% power you need about 9,800 users per group:
Small segments therefore need a longer window or a pooled holdout across several win-back campaigns.
B2B SaaS vs D2C: what changes
| Topic | B2B SaaS | D2C |
|---|---|---|
| What “dormant” means | Paying but not using, or cancelled | Not buying |
| Most common causes | Champion left, integration broke, never fully onboarded, budget cut | Found an alternative, one-off need, bad delivery or product experience |
| Signals | Usage drop, admin change, failed sync, support tickets | Days since last order, email and app engagement, returns |
| Best reasons to return | New feature that fixes their churn reason, data and workflows still saved, a new champion | New products, replenishment timing, service recovery, loyalty status |
| Offer type | Extended trial of a higher tier, onboarding session, pause, smaller plan | Free shipping, discount, sample, bundle |
| Human touch | CS or sales outreach for high-ARR accounts | Founder or service note for top-spend customers |
For cancelled SaaS customers, the best window is often when you ship the thing they asked for. Tag cancellation survey reasons in your CRM so you can message exactly those users when it lands.
How to measure it
| Metric | Numerator | Denominator | Window |
|---|---|---|---|
| Resurrection rate | Dormant users at start who became active | Dormant users at start | Monthly |
| Incremental reactivation | Treatment return rate minus holdout return rate | n/a (percentage points) | Campaign window, typically 30 days |
| Incremental returns | Incremental reactivation x treated users | n/a | Campaign window |
| Cost per incremental returner | Discounts plus channel costs | Incremental returns | Campaign window |
| Resurrected D30 / D90 retention | Resurrected users still active at day 30 or 90 | Resurrected users | Per resurrection cohort |
| Repeat lapse rate | Resurrected users dormant again within 90 days | Resurrected users | 90 days |
The gold standard is a long-running global holdout: a small random share of dormant users who never receive win-back messages for a quarter. It tells you the true baseline return rate across all campaigns combined, which is the only reliable way to avoid crediting your CRM programme for returns that were going to happen anyway.