A decline isn’t a decision, but most churn math treats it like one. OpenSubs classifies every failure before anyone gets emailed, then works it down a ladder you built (retry days, email days, silent days) until the money lands or the ending you chose fires.
Shipment reminders three days out, one-tap skip before the card is ever hitSame-day subscriptions ship as one order, one chargeThe default ladder runs from day one, zero setupEvery notice through your own Klaviyo, SendGrid, or Twilio.
When part of a due box can’t ship, OpenSubs edits that one cycle before the charge (dead lines out, shipping re-rated for the smaller basket, the rest billed), and the missing item is back next cycle, subscription untouched. When the whole box is stuck, it goes on a silent hold that retries daily and emails no one, because a stock problem is yours to fix, not your customer’s to hear about.
You build it in admin a day at a time (retry or don’t, email or don’t, which email), and it runs exactly as written, so “why did she get charged on day nine?” has an answer you can point at. Build nothing and the default runs from day one (a failure notice, three retries three days apart, then the ending you pick), and no retry email ever sends until that retry has actually bounced, so the apology never lands beside the confirmation of the charge that just cleared.
Nobody ignores a dunning email out of malice; they ignore it because the fix lives behind a password. So every recovery email (first notice to final, all sent through your own Klaviyo, SendGrid, or Twilio) names the exact card (“Visa •••• 4242”) and carries a signed link that logs the customer in with the update-payment modal already open. Tap, tap, fixed.
Banks challenge good cards all the time: 3D Secure is the bank being careful, not the customer leaving. Count that challenge as a failure and you cancel people for obeying their bank; here it’s neither success nor failure: the ladder’s clock stops, the attempt doesn’t count, a “confirm with your bank” note goes out, and the schedule resumes only if the answer comes back no.
Automation plus live money is the real fear, so the guarantees are structural, not procedural: one open case per subscription, enforced by the database, and per-charge idempotency keys that Shopify itself deduplicates: there is no sequence of retries, webhooks, and bad luck that bills a customer twice. The same discipline runs the backup card: designate one in the portal and it’s tried exactly once per failure, then swapped back: a rescue, never a quiet replacement for the card on file.
Explore more features
Voluntary churn gets a conversation: that’s the cancel flow’s job. This is the other kind (the reissued card, the expired date, the cautious bank), each opened as a case, worked down your ladder, and closed the moment money lands, however it lands. Your ledger splits the two churns apart, right next to your recovery rate: a number we’d rather you read than we quote.