Free account

Save your progress

Keep lessons, quiz scores and your certificate in sync across devices. Lessons you already finished in this browser are added automatically.

At least 8 characters.

By continuing you agree to our terms and privacy policy. We store your name, email and course progress. No spam.

Track 4 · Retention, CRM & Lifecycle · Lesson 4 of 4

Win-Back and Resurrection: Bring Dormant Users Back and Prove It Worked

Define dormant and resurrected users, time win-back to your usage cycle, choose offers and product-led reasons to return, and measure true incremental lift with holdouts.

TL;DR

Intermediate 15 min
  • Resurrected users are a growth input in their own right. Duolingo's growth model separates users returning after 7 to 29 days away (reactivated) from those returning after 30 or more (resurrected).
  • Time win-back to your natural usage or purchase cycle. Too early annoys people who were coming back anyway, too late reaches people who have forgotten you.
  • Lead with a reason to return (what is new, what they left behind, what they have achieved) before you lead with a discount.
  • Count only incremental returns. A random holdout tells you how many would have come back on their own, which is often a large share of the naive result.
KPIs it moves
  • Resurrection rate
  • Incremental reactivation vs holdout
  • Resurrected user retention (30/60/90 day)
  • Cost per incremental resurrected user
  • Share of actives that are resurrected
Best for
  • E-commerce / D2C
  • B2B SaaS

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.

StateDuolingo definitionAdapted D2C example (60-day cycle)
CurrentActive today and at least once in the prior 6 daysOrdered within the last 60 days
At riskInactive today, active in some recent window61 to 90 days since last order
ReactivatedFirst day back after 7 to 29 days awayOrders again after 61 to 120 days
ResurrectedFirst day back after 30 or more days awayOrders again after 120 or more days
DormantInactive for 31 days or longerNo 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.

RungReason to returnExampleCost
1. What is newNew products, features, content“12 new roasts since your last order”Free
2. What you leftSaved state, progress, data, wishlist“Your 34-day streak can be restored”, “Your saved reports are waiting”Free
3. Social proofWhat peers are doingBestsellers, team usage in similar companiesFree
4. Service recoveryFix the reason they leftPersonal note for customers with a late delivery or a refundLow
5. IncentiveDiscount, free shipping, bonus credits15% off, held for 7 daysMargin
6. Plan changeCheaper plan, pause, smaller packDowngrade path instead of cancellationRevenue 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

  1. 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.
  2. 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).
  3. 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.
  4. 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).
  5. 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.
  6. 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.
  7. Measure incrementally, then follow the cohort. Report incremental returns, cost per incremental return and the 30, 60 and 90-day retention of resurrected users.
  8. 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

  1. TriggerNo order for 50 days (past the 80th percentile reorder gap)
  2. Send · EmailWhat is new since your last order
  3. WaitWait 5 days
  4. SplitOrdered, or showed intent?

    Ordered

    1. ExitExit to returning-customer onboarding

    Clicked or visited, no order

    1. Send · PushYour usual items with one-tap reorder
    2. WaitWait 3 days
    3. Send · WhatsAppFree shipping on next order, 7 days only
    4. ExitExit on order or after day 14

    No engagement

    1. WaitWait 10 days
    2. Send · Email15% off for high past-value customers only
    3. WaitWait 14 days
    4. ExitNo response: move to sunset list
A 10 to 20% holdout is assigned at the trigger and receives none of these messages.

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

TopicB2B SaaSD2C
What “dormant” meansPaying but not using, or cancelledNot buying
Most common causesChampion left, integration broke, never fully onboarded, budget cutFound an alternative, one-off need, bad delivery or product experience
SignalsUsage drop, admin change, failed sync, support ticketsDays since last order, email and app engagement, returns
Best reasons to returnNew feature that fixes their churn reason, data and workflows still saved, a new championNew products, replenishment timing, service recovery, loyalty status
Offer typeExtended trial of a higher tier, onboarding session, pause, smaller planFree shipping, discount, sample, bundle
Human touchCS or sales outreach for high-ARR accountsFounder 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

MetricNumeratorDenominatorWindow
Resurrection rateDormant users at start who became activeDormant users at startMonthly
Incremental reactivationTreatment return rate minus holdout return raten/a (percentage points)Campaign window, typically 30 days
Incremental returnsIncremental reactivation x treated usersn/aCampaign window
Cost per incremental returnerDiscounts plus channel costsIncremental returnsCampaign window
Resurrected D30 / D90 retentionResurrected users still active at day 30 or 90Resurrected usersPer resurrection cohort
Repeat lapse rateResurrected users dormant again within 90 daysResurrected users90 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.

Case study · Duolingo

Case study: Treating returning users as a modelled growth lever, and measuring messaging with holdouts

  • Back after 30+ days away Resurrected user definition
  • 4.5x DAU growth over four years
  • +0.5% DAU lift from optimised reminders (A/B)
  • +2.5% Reward vs 5% holdout, 5 months on

Former Duolingo CPO Jorge Mazal described the growth model behind the app's turnaround in an essay for Lenny's Newsletter. It splits users into states with fixed windows: new, current (active today and at least once in the prior 6 days), reactivated (first day back after 7 to 29 days away), resurrected (first day back after 30 or more days away) and dormant (inactive for 31 days or longer). Each transition has its own rate, including SURR, the chance a resurrected user comes back again the following week. Modelling each rate let the team see which lever moved daily active users most. Current-user retention won, and Mazal reports that over four years CURR rose 21%, cutting daily churn among their best users by over 40% and contributing to a 4.5x increase in DAU. Duolingo's reminder notifications, which go to learners who have not practiced yet, show the measurement side. In a KDD 2020 paper, Duolingo researchers Kevin Yancey and Burr Settles report that a bandit algorithm choosing reminder content lifted DAU by 0.5% and new-user day-7 retention by 2.0% in a randomised test against a strong baseline. Five months after launch they compared it with a holdout that used the old random selection for 5% of rounds, and the optimised policy still showed 2.5% higher reward. Small percentages, but they are causal, measured against a control at the scale of millions of users.

Sources: Jorge Mazal, How Duolingo reignited user growth (Lenny's Newsletter) · Yancey and Settles, A Sleeping, Recovering Bandit Algorithm for Optimizing Recurring Notifications (KDD 2020)

Pitfalls vs pro moves

What amateurs do What top 1% growth teams do
Count everyone who bought after the win-back email as recovered. Keep a random 10 to 20% holdout and report only the difference. Many dormant customers return on their own, especially around seasonal peaks.
Open with the deepest discount to maximise the response rate. Run an offer ladder: reason to return first, then a modest incentive, then a stronger one only for high-value lapsed customers, and test each rung.
Use one dormancy threshold (90 days) for every product and customer. Set thresholds from the inter-purchase or usage interval per category and segment, for example the 80th or 90th percentile of the gap between orders.
Celebrate the resurrection spike and stop measuring. Track resurrected users' 30, 60 and 90 day retention. If they churn again within weeks, the offer bought a transaction, not a customer.
Keep emailing dormant contacts for years because the list is big. Sunset contacts who ignore the full win-back series. Deliverability and WhatsApp quality ratings improve for everyone else.
In B2B, send the same reactivation email to every inactive account. Check why the account went quiet first. A champion who left the company needs a new-champion play via sales or CS, not a feature newsletter.

Knowledge check

Knowledge check

3 questions · pick an answer to see the reasoning

  1. Q1. A win-back campaign to 40,000 lapsed customers shows 1,600 purchases in 30 days. The 4,000-person holdout had 120 purchases. How many purchases did the campaign cause?

  2. Q2. A meal-kit brand sees that 85% of repeat orders come within 21 days of the previous one. When should the first win-back touch go out?

  3. Q3. A B2B analytics tool has 300 accounts with no dashboard views in 45 days, still paying on annual contracts. What is the best first move?

Sources

  1. Jorge Mazal, How Duolingo reignited user growth (Lenny's Newsletter)
  2. Yancey and Settles, A Sleeping, Recovering Bandit Algorithm for Optimizing Recurring Notifications (KDD 2020)

Updated