The dunning email sequence that recovers failed payments
Dunning email is pre-cancellation recovery: the subscriber has not cancelled, their card failed, and your job is to get the card fixed before the subscription dies. Churnkey's State of Retention 2025 found email and SMS campaigns alone recover an average 42% of failed payments, and Recurly's research shows 90% of recoveries happen within the first 10 days. That means three emails, front-loaded, timed to the retry schedule, with zero shame and zero discounts.
This is the second post in the failed-payment pair. The failed payment recovery stack covers the machinery: the WooCommerce Subscriptions retry system, gateway card updaters, and why involuntary churn is 20-40% of total churn in the first place. This post covers the only layer of that stack a customer ever reads.
Dunning is not winback
Different customer, different moment, different math. Winback targets someone who chose to cancel; you are re-selling to a person who made a decision against you, and a good winback sequence recovers 4-8% of them over 60 days. Dunning targets someone whose bank made a decision without them. They may not even know the payment failed. There is nothing to win back yet - there is a card to fix.
That difference drives every choice below:
| Dunning | Winback | |
|---|---|---|
| Trigger | Failed renewal payment | Completed cancellation |
| Customer's mental state | Usually unaware anything happened | Made an active decision to leave |
| Recovery rate | ~42% on messaging alone (Churnkey 2025) | 4-8% (winback benchmarks) |
| Window | First 10 days are 90% of recoveries (Recurly) | Days 7-60 after cancel |
| Correct tone | Transactional, helpful, neutral | Personal, then promotional |
| Offer? | Never | Yes, on the final email |
If you take one thing from this post: do not write dunning emails like marketing emails, because the recipient is not a churned customer. They are a paying customer with a paperwork problem.
The numbers behind the sequence
Messaging is roughly half the recovery stack's power, and it decays fast. Churnkey's State of Retention 2025, drawn from 6 million failed payments, reports 70% of detected involuntary churn recovered by the full stack, with email and SMS campaigns alone averaging 42%. Their recovery attribution is instructive: precision retries accounted for 28.1% of recoveries and email for 8.4% - retries do the silent bulk work, but the email-recovered slice is precisely the slice retries could never reach, because those are the dead cards.
Recurly's failed payment research supplies the deadline: 90% of recovered transactions occur within the first 10 days of the failure. A dunning sequence that is still politely warming up on day 12 is writing to the 10% tail. Everything below fits inside 8 days on purpose.
Timing: hang the emails on the retry schedule
Send after retries, not before them. With the WooCommerce Subscriptions retry system enabled, retries fire at 12 hours, 24 hours, 48 hours, 4 days, and 7 days after the failure, and the plugin's own bare-bones customer emails go out at 24 hours, 4 days, and 7 days. That default cadence is right, so keep it - either by restyling the built-in Customer Payment Retry template, or by suppressing it (empty email_template_customer via the wcs_default_retry_rules filter) and sending your own three emails from your transactional provider at the same beats:
| When | Retry context | Job | |
|---|---|---|---|
| 1 | 24 hours after failure | Two retries already attempted | Notify + update link |
| 2 | 4 days after failure | Before retry 4 | Urgency via the retry date |
| 3 | 7-8 days after failure | Final retry / just failed | Consequence + last chance |
Why not email at the 12-hour mark? Because the first retry exists to catch soft declines - insufficient funds, temporary holds - that clear on their own. A large share of failures recover silently at retry 1 or 2, and emailing a customer about a problem that fixes itself teaches them your emails are noise. Let the machine take two swings first.
SMS is worth a mention for completeness: it accounted for just 0.6% of recoveries in Churnkey's breakdown. If you have transactional SMS already, add it on day 7. Do not build it for this.
Send it to the person who owns the card
For B2B-ish subscriptions - agencies buying for clients, teams on a shared plan - the renewal email routinely goes to an end user who cannot fix the card. Churnkey's report quantifies the fix: routing failed-payment messages to a designated billing contact produced about a 10% uplift in email recoveries in their dataset. WooCommerce only stores one billing email per order, so the low-tech version is a line in email 1: "If someone else manages billing for this account, forward this to them - the link works for anyone with account access." One sentence, measurable difference for stores with any B2B mix.
The other non-email channel in Churnkey's breakdown is the "failed payment wall" - an in-product banner or blocking screen telling a logged-in customer their payment failed - at 3.5% of recoveries. On a WooCommerce store the equivalent is a notice on My Account while the subscription sits in on-hold. Worth having if it is cheap for you to add; the customers it catches are the ones who ignore email entirely.
Email 1, at 24 hours: the neutral notice
One job: tell them it happened and give them the link. No urgency theater yet.
Subject lines that work because they are boring:
- "Payment issue with your [store name] subscription"
- "Your [product name] renewal didn't go through"
Body (under 100 words):
Hi [first name],
The renewal payment for your [product name] subscription didn't go through today. This is usually the card, not you - expired cards and daily limits cause most of these.
We'll automatically retry over the next few days, so if your card just needed a moment, you can ignore this.
If the card has changed, you can update it in about a minute here: [update payment method link]
Your subscription and [access / deliveries] continue as normal for now.
Thanks, [store name]
The "you can ignore this" line is deliberate. It is true (retries are running), it lowers the anxiety of the notice, and it makes the customers who do click the link self-select as the ones with actually-dead cards.
Email 2, at 4 days: the concrete retry date
Now the failure is real - two or three retries have failed. This email adds specificity: what happens next and when.
Subject lines:
- "Still couldn't process your [product name] renewal"
- "Action needed: your subscription payment"
Body (under 110 words):
Hi [first name],
We've tried your card a few times since [failure date] and the payment still isn't going through. The next automatic attempt is on [retry date].
If the card on file has expired or been replaced, that attempt will fail too - the fix takes about a minute:
[Update payment method link]
If the payment doesn't go through by [final date], your subscription will be paused and [access ends / your next box won't ship]. We'd rather not do that over a card number.
[store name]
"We'd rather not do that over a card number" is the tone target for the entire sequence: the store and the customer are on the same side of the table, and the card is the problem between them.
Email 3, at day 7-8: the consequence email
The final retry has fired or is about to. Say plainly what happens and when, and make the link the entire point of the email.
Subject lines:
- "Last try: your [product name] subscription pauses tomorrow"
- "Your subscription is about to be paused"
Body (under 90 words):
Hi [first name],
This is the last one from us about this. We couldn't process your renewal after several attempts, so your [product name] subscription will be paused on [date] and [what stops working, concretely].
One minute fixes it: [update payment method link]
If you meant to let the subscription go, no action needed and no hard feelings - it will simply end.
[store name]
That last paragraph matters. Some failed payments are quiet cancellations - the customer let the card lapse on purpose. Acknowledging the exit path is honest, it is the kind of practice regulators want to see (see the click-to-cancel rule for how the law thinks about exit friction), and it costs you nothing: those customers were not going to update the card anyway.
Never put a discount in a dunning email
The failure is not about price, so a price concession is off-topic - and worse, it is corrosive. A customer whose card expired does not need 20% off; they need a working card. Discounting failed payments teaches your most attentive customers that letting a card bounce produces a coupon, and now you have built a perverse incentive into your billing system. Save offers belong in the cancel flow, where an actual decision is being made. Dunning is plumbing.
The same logic sets the tone rules: blame the card, never the customer ("the payment didn't go through", not "you failed to pay"). Send from your normal transactional address, plain layout, no hero images. Every email contains exactly one link, and it is the update-payment link.
Make the update link actually short
The whole sequence funnels to one page, so audit it once: on a stock WooCommerce Subscriptions store the customer changes their card from My Account -> Subscriptions -> the subscription -> Change payment. Click your own link from a cold browser and count the steps, because every login wall and redirect on that path is paid for in unrecovered revenue. Note that hard declines - Stripe's incorrect_number, lost_card, stolen_card class - can only be fixed on this page; no retry schedule touches them. For those customers the email is not a nudge, it is the entire recovery mechanism.
If Stripe's card account updater already fixed the card behind the scenes (it rewrites most reissued US cards automatically), the renewal recovers without the customer doing anything and your stop-rule below handles it.
Stop rules and measurement
Three stop rules, all mandatory: stop the sequence the moment a retry succeeds; stop if the customer updates their payment method (the next retry will test it); stop if the customer cancels - at that point they exit dunning and, weeks later, enter winback. Nothing destroys trust faster than a "your payment failed" email that arrives after the payment succeeded.
Measure four numbers monthly:
- Recovery rate: recovered failures / total failures. With retries plus this sequence, the sources above put a well-run stack at 50-70%; messaging-only programs average 42%.
- Recovery by attribution: how many recoveries followed an email click vs a silent retry. This tells you if the emails are earning their place.
- Time to recovery: median days from failure to successful payment. If it drifts past a week, your emails are late or your link is long.
- Hard vs soft decline mix: a rising hard-decline share means card churn (reissues, expiries) and makes the email layer more important, not less.
ChurnStop sits on the other side of this wall, for what it is worth: it handles the customers who click cancel, not the ones whose cards bounce. Run both. The failed-payment stack keeps subscribers who never wanted to leave; the save flow catches the ones who did.
