We call them "dunning" emails, and I think that word quietly poisons how we write them.
Dunning literally means demanding payment from someone who owes you. It carries this faint accusation, like the customer did something wrong. So the emails come out cold: "Your payment failed. Update your card to avoid losing access."
But here's the reframe that changed everything for me: a failed renewal usually isn't an objection. The customer already decided to pay you. They didn't cancel, they didn't complain, they didn't ask for a refund. They just hit friction: a card expired, a bank wanted a verification step, a charge bounced the day before payday.
That's not a collections problem. That's a support moment.
And once you see it as support, the email basically rewrites itself. You stop leading with "avoid losing access" (a threat) and start leading with "let's get this sorted" (a hand). You match the message to what actually went wrong instead of sending everyone the same "update your card."
A few concrete shifts that came out of that for me:
Same event, completely different tone, and it stops feeling like you're chasing people who never meant to leave in the first place.
If you're curious how much of this is quietly happening in your own account, I built a free read-only scan for exactly that: https://revova.io [promo code pending your confirmation]. Involuntary churn is often 20-40% of total churn, so it's usually more than people expect.
So I'm genuinely curious how you word yours: does your payment-failed email read more like a support message or a collections notice? Would love to see the actual wording you use.
The 3-D Secure example is where the reframe becomes operational: the wrong recovery instruction destroys trust. I'd measure recovery per failure code, not per email sequence overall, because expired-card and insufficient-funds cohorts need different timing. A small control with one generic message would show whether better diagnosis or warmer copy is doing the work.
Exactly — measuring recovery per failure code instead of per sequence is the only way to know what's actually working, because expired-card and insufficient-funds cohorts want completely different timing and copy. And your control idea is spot on: run a slice with one generic message and you can isolate whether the lift comes from better diagnosis (routing by decline reason) or just warmer writing. That's the honest way to attribute it, otherwise you're guessing. This is exactly the direction I'm taking the analytics.