ChurnStop
Winback · 9 min read · March 21, 2026

How to build a 30-day winback sequence that works

Implementation note. The winback automation described in this post is on the ChurnStop roadmap for a Growth-tier release. The template and measurement approach below work with any transactional email tool in the meantime (Postmark, SES, SendGrid, Klaviyo, Mailchimp Transactional). ChurnStop's churnstop_cancellation_resolved action hook fires today and is the right trigger for a custom sequence built in your own email provider.

A three-email winback sequence sent at 7, 21, and 60 days after cancellation typically recovers 4-8% of churned subscribers for WooCommerce stores. Top performers clear 10%. The sequence that works is short, specific, and offer-bearing: a personal check-in, a product-update prompt, and a one-time discount to reactivate. Longer sequences saturate and start producing unsubscribes faster than winbacks.

Winback is the second-chance equivalent of the save flow. Where the save flow intercepts customers before they cancel, winback reaches them after. The two are complementary - a good save flow at 30% catches the easy saves; winback then recovers 4-8% of the customers who cancelled despite the offer. Combined, you recover about a third of cancel intent. Neither alone comes close.

The three-email sequence

Timing is more important than creative. The pattern that works across subscription boxes, memberships, SaaS-on-WooCommerce, and replenishment is:

DayPurposeContains
+7Personal check-inNo offer. Short email asking if everything was OK.
+21Product updateNew-feature or new-product highlight with a reactivate CTA.
+60Reactivation offerTime-limited discount to reactivate at 20-30% off first 1-3 cycles.

Day 7 is early enough that the cancellation is still fresh and the customer hasn't fully onboarded to a competitor. Day 21 gives them time to feel the absence. Day 60 is the last chance before the customer has permanently moved on; anything after 90 is close to cold-acquisition territory and should be handled through that channel, not winback.

Day 7 - the no-offer check-in

This email does not try to save the customer. It asks how the cancellation experience was and whether there's anything the store could have done differently. The goal is to get a reply, not to drive a click.

Template subject lines that produce replies in WC Subs stores:

Body (keep under 90 words):

Hi [first name],

I saw you cancelled your [product name] subscription last week. I'm [founder name / support lead], and I wanted to ask - was there something specific we could have done better?

If you have a minute to reply, I read every one. No offer, no sales pitch, just trying to understand what to fix.

Thanks, [signature]

What this email actually does is surface the 10-15% of cancels that were driven by a product issue you can fix cheaply (a bug, a missing feature, a poor onboarding moment). Replies are high-value - both for fixing the product and for reactivating the specific customer who replied.

Do not put a discount in this email. It reads as bait-and-switch ("the personal check-in was a setup for the offer") and kills reply rate.

Day 21 - the product update

Twenty-one days after cancel, send a normal-feeling product announcement. New feature, new product, significant update. If you do not have one, do not fake one - ship this email when you genuinely have something.

Template subject lines:

Body (keep under 150 words):

Hi [first name],

A few things shipped since you cancelled:

  • [Specific thing 1]: one-sentence description
  • [Specific thing 2]: one-sentence description
  • [Specific thing 3]: one-sentence description

If any of this changes the equation for you, your old subscription settings are still in place - you can reactivate in one click at [link]. No pressure either way.

[signature]

Two small things matter:

  1. "Your old subscription settings are still in place". Reactivation is cheaper than signup for the customer. Reminding them lowers the friction.
  2. "No pressure either way". Standard sales copy would omit this. In winback, it increases conversions because the customer is reminded they're not being pushed.

Reactivate links should bounce to an account page with one-click reactivation, not to a pricing page. Sending a former customer to /pricing after they already knew what your prices were is a loss of context.

Day 60 - the reactivation offer

Final email. Time-limited discount. This is the one with teeth.

Template subject lines:

Body (keep under 120 words):

Hi [first name],

We've been trying not to spam you, so this is the last email like this. If you want to come back, here's a one-time offer: [X]% off your first [N] cycles on any plan. Use code [CODE] by [date 14 days out].

[Reactivate link]

After that we'll stop asking. Thanks either way.

[signature]

Three things that matter:

  1. "This is the last email". Honest framing. Customers who know this is the last outreach are more likely to act. Customers who suspect it's the start of an endless sequence will unsubscribe first.
  2. 14-day expiry. Short enough to feel real. 7 days is too short (creates pressure that reads as manipulative); 30 days is too long (urgency evaporates).
  3. Discount, not pause. For reactivation, pause does not apply - the subscription is already cancelled. Tier-down works for some products ("come back to the cheaper plan"). Discount is the most universally applicable.

What to measure

Four numbers per cohort per month:

Beware: reactivation rate depends heavily on how permissive "reactivation" is. If your store treats any resubscribe within 90 days as a reactivation, your number will look better than a store that only counts reactivations from the specific email link. Standardize the measurement before comparing to benchmarks.

Implementation in WooCommerce

If you are running ChurnStop on Growth or Agency, winback is a built-in feature configured from the admin UI. The plugin listens to the subscription_cancelled hook and schedules the three emails via a cron event per subscriber. Emails send through your existing WordPress transactional provider (Postmark, SES, SendGrid, Mailgun); ChurnStop does not route mail.

If you are rolling your own, the essential components:

  1. A hook listener on WC Subs cancellation events that captures (user_id, subscription_id, cancel_reason, cancel_date, monthly_value).
  2. A cron event queue that schedules the three emails at +7, +21, +60 days.
  3. Stop-rules: if the customer resubscribes before a scheduled email fires, skip subsequent emails. If the customer clicks unsubscribe on any email, skip subsequent emails. If the customer is on a do-not-contact list (GDPR erasure, CCPA opt-out), skip the entire sequence.
  4. Tracking: the reactivate link should carry a UTM that identifies the email, so reactivations can be attributed back to the specific email that produced them.

Budget 1-2 days to build it properly. The failure modes (sending winback to a resubscribed customer, sending after an unsubscribe) are embarrassing and easy to trip if you skip the stop-rules.

What NOT to do

Three patterns that underperform:

When to turn winback off

Winback is not universally positive. Categories where it underperforms:

For the common WooCommerce categories (boxes, memberships, SaaS, replenishment), winback at 4-8% reactivation rate is a meaningful lift on the cancellation churn number. Ship it.

What's next