automations.help

Lifecycle & marketing

Save at-risk subscriptions before they cancel

By the time the 'subscription cancelled' email lands, the decision is already made — and the next charge is already gone. But Recharge emits the signals that come before a cancel: an upcoming charge nobody managed, a second skip in a row, a card that just declined. Here's how to wire Recharge and Klaviyo so those signals trigger a save while the customer is still subscribed — and intercept the cancel itself instead of only logging it. It's mostly a native Recharge + Klaviyo build; the glue layer is optional.

Difficulty
Intermediate
Time to build
4-6 hrs
Updated
  • Recharge
  • Klaviyo

The manual way today

There isn't really a manual version of this — that's the whole problem. Nobody sits in Recharge watching for the customer who skipped twice in a row, or the card that declined this morning, or the box going out Friday that someone meant to pause. The only event most stores actually notice is the cancellation email, which arrives after the customer has already clicked cancel and, half the time, after the charge they were trying to avoid already hit their card. So the 'process' is: find out it's over, maybe send a 'sorry to see you go' note, and move on.

Subscription revenue is supposed to be the predictable part of the business, and churn is the leak that quietly resets it every month. A cancelled subscriber isn't one lost sale — it's every future order you'd booked on them, gone at once. Worse, a big share of the churn is involuntary: a card expired or declined, Recharge retried a few times, hit its retry ceiling, and cancelled the subscription on its own — a customer who never decided to leave, lost to a payment failure you never saw. None of it shows up as an error. The MRR line just drifts down, and because you can't see a charge that didn't happen, it stays invisible until you add up the quarter.

What running looks like

The signals that lead a cancel now trigger action while the subscriber is still active. When Recharge flags an upcoming charge, the customer gets a one-tap way to skip, swap, or stretch the frequency instead of cancelling. A second consecutive skip routes them to a real save play rather than silence. A failed card fires an immediate 'here's the 20-second fix' before Recharge's retries run out and auto-cancel them. The cancellation page itself offers a reason-matched alternative at the exact moment of intent, so you intervene on the click — not in a post-mortem email. Anyone who still leaves gets one honest, reason-aware win-back, and a weekly readout tells you which saves are actually working instead of just discounting people who'd have stayed.

01The build

How to build it

  1. Decide what 'at-risk' means for your subscription — and your save levers

    Needs a human

    This is the judgment call only you can make, and everything downstream runs on it. Pick the leading signals that actually precede a cancel for your product: how many consecutive skips counts as a goodbye (two in a row is a strong tell for most consumables, three is nearly certain), whether a quantity downgrade or a stretched frequency is a warning, and how you'll treat a failed payment. Then decide your save levers and the order you'll reach for them: skip this delivery, swap the product, stretch the cadence, pause for N weeks, and — last — a discount. Name the customers who never get a discount (your longest-running subscribers don't need one, and teaching them to threaten cancel for a coupon is expensive). Write these down; the rest of the build is just wiring them up.

  2. Confirm the Recharge signals are flowing into Klaviyo

    Runs itself

    Recharge's native Klaviyo integration surfaces the events this whole build keys off as Klaviyo metrics: Upcoming Charge (a.k.a. Recurring Order Upcoming), Subscription Skipped, Recurring Charge Failed, Recurring Charge Max Retries Reached, and Subscription Cancelled. In Klaviyo, check these metrics are receiving events before you build a single flow. Each carries the fields you'll need — next_charge_scheduled_at, the subscription and product, quantity, and the customer-portal link — so flows can be specific instead of generic. If you'd rather hold the logic yourself (for example, to count consecutive skips precisely), subscribe to the matching Recharge webhooks — charge/upcoming, subscription/skipped, charge/failed, subscription/cancelled — in n8n and forward them to Klaviyo as events. For most stores the native integration is enough and the glue layer is optional.

  3. On the Upcoming Charge event, send a 'manage it, don't cancel it' email

    Runs itself

    This is the earliest off-ramp and the one most stores skip. Recharge fires the upcoming-charge event ahead of each renewal (the lead time is configurable — a few days is typical). Trigger a Klaviyo flow on that metric with a single, obvious purpose: a one-tap link straight into the customer portal to skip this one, swap the product, change the frequency, or fix the address. A large share of cancels are really 'I have too much' or 'wrong timing,' and a customer who skips one box stays subscribed and charges next cycle — a customer who cancels is gone. Give them the easy version of what they were about to do the hard way. Suppress anyone who's already managed this charge in the portal so you're not nudging a decision they've made.

  4. Watch the skip pattern — one skip is normal, two in a row is a warning

    Runs itself

    Skips are the clearest pre-cancel signal Recharge hands you, and almost nobody watches them. Trigger a flow on Subscription Skipped and track the count with a Klaviyo profile property (or compute consecutive skips in n8n if you want it exact). One skip: stay quiet, it's a feature working as intended. Two in a row: a gentle 'want to slow the cadence instead?' with a direct frequency-change link — the customer is telling you the timing is off, not that they hate the product. At your threshold from step one (often the third consecutive skip), treat them as effectively churning and route them into the real save play: a pause offer, a product swap, or your discount lever. A repeat-skipper who never gets acknowledged cancels next.

  5. Recover failed payments before Recharge's retries auto-cancel them

    Runs itself

    This is the involuntary churn the wedge is named for — and the easiest revenue to save, because the customer never decided to leave. On Recurring Charge Failed, fire an immediate, plain-language email: 'your card didn't go through, here's the 20-second fix,' with a direct link to update the payment method in the portal. Recharge retries on a schedule and cancels the subscription only when it hits Recurring Charge Max Retries Reached, so you have that retry window to act — add a second, firmer nudge timed before the final retry. Keep this message completely separate from any voluntary-churn copy: someone whose card expired doesn't need a 'we miss you' discount, they need a working card. Conflating the two wastes margin and reads as tone-deaf.

  6. Intercept the cancellation page, not just the confirmation email

    Needs a human

    The single highest-leverage save is at the exact moment of intent. Recharge's cancellation flow lets you present a reason dropdown and a contextual alternative right on the cancel page, before the cancel goes through — and this is where 'you only find out after the money's gone' actually gets fixed, because you act on the click instead of in a post-mortem. Map each offer to the reason: 'too much product' → skip or stretch the frequency; 'going on vacation' → pause for N weeks; 'too expensive' → a smaller size or, only here, a one-time discount; 'forgot I had it' → a clearer upcoming-order reminder. Configure this in Recharge (the retention/cancellation-flow features depend on your plan tier, so confirm yours before you scope it). This step is part config, part the judgment from step one about which offer answers which objection.

  7. Give the ones who still leave one honest, reason-aware win-back

    Runs itself

    Some subscribers will cancel anyway, and that's fine — chase them once, well, not forever. Trigger a short flow on Subscription Cancelled, branched on the cancel reason you captured at the page. Not generic 'we miss you' spam: 'restart at a lower frequency' for the too-much crowd, 'come back to your old price / a one-time restart offer' for the price-sensitive, a straightforward reactivation link for everyone else. Self-exit the moment they resubscribe (so a returning customer never keeps getting win-back mail), and sunset anyone still gone after the sequence into a low-frequency segment so you're not dragging deliverability by emailing a dead profile. If they ever resubscribe and lapse again later, they get a fresh, clean attempt.

  8. Track the saves, not just the cancels

    Runs itself

    Without a scoreboard you can't tell whether these plays are working or whether you're just handing discounts to people who'd have stayed. Pipe the counts to a daily or weekly Slack post (or a Google Sheet): cancellations, saves at the cancel page, payment recoveries, and how often a two-skip nudge prevented a third. Watching saves and recoveries against raw cancel volume is what turns this from a set of hopeful emails into a tuned retention system — and it's the input you need before deciding whether the discount lever is earning its keep or quietly eroding margin. It pairs naturally with a subscription MRR and churn monitor so the wins show up on the same line they were leaking from.

02The stack

What it’s built on

Recharge
The subscription engine and the source of every signal. It owns the billing cadence, the customer portal those one-tap skip / swap / pause / update-card links point to, the dunning retry schedule that decides when an unpaid subscription auto-cancels, and the native cancellation flow that lets you intercept at the cancel page. It emits the Upcoming Charge, Subscription Skipped, Recurring Charge Failed, Max Retries Reached, and Subscription Cancelled events the whole build triggers on.Recharge is the dominant Shopify subscription app, and its native Klaviyo integration is what keeps this build glue-free. One honest caveat: the retention and cancellation-flow features depend on your Recharge plan tier — confirm yours exposes the cancellation flow before you scope the cancel-page save. The event-triggered emails work on any plan that feeds Klaviyo.
Klaviyo
Owns the flows triggered by each Recharge event, the conditional splits, the skip-count profile property, the 'already managed / already resubscribed' suppressions, the unique expiring coupon behind the discount lever, and every send. The Recharge events arrive as native Klaviyo metrics, so there's no custom event wiring for the standard build.Klaviyo's free tier is enough to build and test all of this, and you're almost certainly already running it for email. Any ESP that can trigger flows off Recharge events and generate unique coupons works the same way — only the metric names and split syntax differ.

03Questions

Before you build

How do I catch a subscriber before they actually cancel?

Stop treating the cancellation email as the first signal — by then it's over. Recharge already emits the events that come earlier: an upcoming charge nobody managed, a second skip in a row, a card that just declined. Trigger a Klaviyo flow on each of those while the subscriber is still active, and intercept the cancellation page itself with a reason-matched alternative. The point is to act on the leading signals, not log the lagging one.

What's the difference between voluntary and involuntary churn?

Voluntary churn is a customer choosing to cancel. Involuntary churn is a payment failing — a card expires or declines, Recharge retries a few times, and cancels the subscription on its own when it hits the max-retries ceiling. They need completely different responses: involuntary churn just needs a working card (a plain 'here's the 20-second fix' email inside the retry window), while voluntary churn needs an offer that answers the actual objection. Recovering failed cards is often the largest and easiest save, because the customer never wanted to leave.

Won't sending skip and swap links just train people to skip instead of buy?

A skip keeps the subscription alive; a cancel ends it. A customer who skips this month is charged next month and stays in the program — a customer who cancels because skipping felt harder than quitting is gone for good. Skips are a feature, not a leak. The risk you're actually avoiding is a frustrated subscriber cancelling over timing they could have fixed in one tap. Watch the pattern, though: it's the second and third consecutive skip, not the first, that signals real churn and earns a save play.

Should the cancel-page save offer a discount?

Not by default, and not the same offer to everyone. Map the offer to the reason: 'too much product' wants a skip or a stretched frequency, not a coupon; 'going on vacation' wants a pause; 'forgot I had it' wants a clearer reminder. Reserve discounts for genuine price objections, use a unique expiring code rather than a shared one, and keep your longest-running subscribers off the discount path entirely — they'll stay without it, and teaching them otherwise is a standing margin cost.

Do I need n8n for this, or is it native?

Mostly native. Recharge's Klaviyo integration carries the upcoming-charge, skip, failed-charge, max-retries, and cancelled events as metrics, so the standard build is a Recharge + Klaviyo job with no glue layer. You'd reach for n8n only for custom logic — counting consecutive skips precisely, or forwarding the save and recovery counts to Slack or a Sheet for the weekly readout. Start native; add n8n if and when you want the extra precision.

Can I build this myself, or should you build it?

Every event, flow trigger, suppression, and save lever is spelled out above, so if you're comfortable in Recharge and Klaviyo it's a solid afternoon's work. If you'd rather not own the cancellation-flow setup, the voluntary-vs-involuntary split, and the skip-pattern logic, we'll build it on the Recharge and Klaviyo accounts you already pay for, document every piece, and hand you the keys — you own it outright, no monthly retainer to keep it running. It starts with a free 20-minute teardown of where your subscription revenue is actually leaking, not a contract, and you keep that plan either way.

Reporting & dashboards

Monitor subscription MRR and churn from Recharge

Recharge knows exactly how much recurring revenue you have and how fast subscribers are leaving — but only if you log in, and only in its own definitions. This puts the numbers where you'll see them. On a schedule it pulls your active subscriptions from Recharge, normalizes every billing interval to a monthly figure so MRR is comparable, snapshots it to a Google Sheet so you have a history the API can't reconstruct, counts the period's cancellations with their reasons, and posts MRR, net movement, and churn to Slack. Build it yourself with the steps below, or we build it on your own Recharge, Sheets, and Slack accounts, reconcile it against your dashboard, and hand you the keys so you own it with no monthly fee. Free teardown of what you check by hand first.

  • Recharge
  • Slack
  • Google Sheets

Intermediate3-5 hrs

Lifecycle & marketing

Build a win-back flow for customers lapsed 90 days

A customer who used to order every month quietly stops, and nothing in your store flags it — you only chase brand-new strangers while people who already loved the product drift to a competitor. Here's how to build a Klaviyo win-back flow that catches them on real purchase cadence (not a blanket 90 days), reconnects before it discounts, and self-exits the moment someone buys. It's a native Klaviyo build — no n8n or glue layer required.

  • Klaviyo
  • Shopify

Intermediate3-5 hrs

Lifecycle & marketing

Send replenishment reminders for consumable products

Your product is built to run out — that's the business. But if nothing reminds the customer the week they hit empty, the reorder either doesn't happen or happens on Amazon. Here's how to build a Klaviyo replenishment flow timed to each consumable's real run-out date, guarded so it never nudges someone who already restocked or is on a subscription. It's a native Klaviyo + Shopify build — no glue layer required for the common case.

  • Klaviyo
  • Shopify

Intermediate3-5 hrs

Lifecycle & marketing

Build an abandoned cart flow with Klaviyo and n8n

Klaviyo's built-in abandoned cart flow is good — when its onsite tracking actually sees your checkout. When it doesn't (a headless storefront, a custom cart, a checkout the snippet never loads on), the recovery emails just don't fire. Here's how to read the abandonment straight from Shopify with n8n, guard it so you never email someone who already bought, and hand Klaviyo a reliable event to send on.

  • Klaviyo
  • n8n
  • Shopify

Intermediate4-6 hrs