
subZwallet
The retention stack every Shopify store needs
Dunning management is the systematic process of recovering failed subscription or recurring payments through automated retries, customer communication, and payment method updates. It exists because roughly one in five subscription cancellations is not a cancellation at all. It is a card that expired, a bank that flagged the charge, or an account that ran short on the day of the renewal. Dunning is what turns that silent revenue leak into a recovered customer.
If you run a subscription business on Shopify and you have not configured dunning, you are losing money this week. Stripe's published recovery research shows that around 14% of all subscription payments fail at least once over their lifetime, and a well-built dunning sequence pulls back 50-70% of those failures.
This guide explains the full dunning lifecycle, what Shopify's Subscription API does for you out of the box, what it does not do, and the small details that separate a sequence that recovers half your failures from one that recovers most of them.
Why dunning matters for subscriptions
The first time you ship a subscription product on Shopify, the dunning question feels theoretical. Then you watch your first billing cycle close and you see four or five failed renewals out of every hundred. None of those customers asked to cancel. They just stopped paying.
The industry term for that is involuntary churn. It is the share of cancellations that come from payment failures rather than customer choice. Recurly's 2024 State of Subscriptions report put involuntary churn at 20-40% of total churn for most subscription businesses, with consumables and subscription boxes sitting at the higher end. Stripe's recovery research puts the average failure rate per charge at 8-15% depending on category, with the largest single cause being expired cards.
The math gets ugly fast. A 1,000-subscriber store at $40 per month with 6% monthly churn loses $28,800 of annualized revenue every month. If a third of that churn is involuntary and your dunning sequence recovers 60% of failures, you save roughly $69,000 in annual recurring revenue. Same product, same customers, same acquisition spend. Just a better recovery flow.
That is the case for dunning in one paragraph. Now the lifecycle.
The dunning lifecycle
A dunning sequence is a state machine. A payment attempt fails, the subscription enters a recovery state, your system tries again on a schedule, customers get notified, and one of three things eventually happens: the payment succeeds, the customer updates their method, or you give up and cancel the contract.
Here is what each step looks like.
1. Failed payment detection
On Shopify, a subscription renewal runs as a billing attempt against a subscription contract. When the attempt fails, the contract surfaces an error code through the Shopify Subscription API. The codes you will see most often are:
- EXPIRED_PAYMENT_METHOD — the saved card has passed its expiration date.
- PAYMENT_METHOD_DECLINED — the issuer refused the charge (often soft, sometimes hard).
- INSUFFICIENT_FUNDS — the customer's account does not have the balance to cover the charge.
- INVALID_PAYMENT_METHOD — the card number on file is no longer valid (lost, stolen, replaced).
- AUTHENTICATION_REQUIRED — Strong Customer Authentication failed (mostly EU/UK 3DS challenges).
Detection is the easy part. Shopify hands you the billing attempt result. What you do next is the work.
2. Smart retry logic
The retry schedule is where most dunning sequences quietly fail. The instinct is to retry every day until the payment succeeds. That is wrong on two counts. It burns through your processor's allowed attempts (most card networks limit you to a small number of retries before flagging the merchant), and it ignores the underlying reason the payment failed.
The shape that recovers the most revenue:
- Day 0: retry immediately after the failure. About 12-15% of failures resolve on a fast retry because the original failure was a transient network or processor issue.
- Day 2: retry after 48 hours. This window catches insufficient-funds failures that resolve when a paycheck deposits.
- Day 5: retry mid-week. By now you have either recovered the payment or you are dealing with a real card problem.
- Day 7: final automated retry, paired with an urgent customer message.
- Day 9+: stop retrying. Hand the recovery off to the customer through a direct payment update link, or cancel if the customer has gone silent.
The reason this works better than a daily-retry pattern is that card issuers update their decision rarely. Retrying a hard decline three times in 24 hours produces three hard declines. Spacing retries out gives the underlying cause time to change.
3. Customer notification
The retry handles the technical side. The notification handles the human side. Most stores send too many emails, with the wrong tone, at the wrong moment.
A working sequence looks like this:
- First email (Day 0): informational. "We tried to renew your subscription and the payment did not go through. We will try again on [date]. If you want to update your card, here is the link."
- Second email (Day 3): helpful urgency. "Your subscription is paused while we try to recover the payment. Update your card here to keep delivery on schedule."
- Third email (Day 7): last chance. "This is the final retry. If we cannot process the payment by [date], your subscription will be cancelled."
- Optional SMS (Day 5): SMS recovery rates run 2-3x email-only. If you have the phone number and consent, use it.
Keep every email under 100 words. The customer has one action to take. Do not bury it in a paragraph.
4. Payment method update flow
The single most important link in a dunning email is the one that takes the customer to a page where they can update their card without logging in. On Shopify, this is the customer account update flow surfaced through the storefront. If you make the customer log in first, find their subscription, click into payment settings, and update from there, you will lose 30-50% of the customers who would have updated their card on a direct link.
The best practice: a tokenised one-click link in every dunning email that lands on a pre-filled update screen showing only the failed payment method and an "update card" form. No login. No navigation. One field, one button.
5. Soft vs hard decline handling
Not all declines deserve the same treatment. A soft decline (insufficient funds, temporary issuer flag, generic processing error) is recoverable on retry. A hard decline (stolen card, account closed, card brand revoked) will never recover. Retrying a hard decline is wasted activity and risks getting flagged by the processor.
Stripe documents the decline code categories in their issuer reason codes reference. The rough split: about 60% of failed attempts are soft declines that can recover on retry, 25% are expired cards that need a customer action, and 15% are hard declines where the customer needs to add a new payment method entirely. A good dunning system reads the decline code, picks the matching recovery path, and skips retries that have no chance of succeeding.
6. Final cancellation logic
At some point you give up. The question is how. Two patterns work:
- Pause and reactivate: after the final retry fails, move the subscription to a paused state instead of cancelled. Send a goodbye email with a one-click reactivation link. About 8-12% of paused subscribers come back within 60 days if you make it easy.
- Cancel cleanly: end the contract, send a clear cancellation confirmation, and stop billing attempts. This is the right call for sensitive product categories where ongoing emails would feel intrusive.
Whichever path you pick, the last email should not be a guilt trip. The customer already had one bad experience.
Dunning on Shopify specifically
This is where the explainer meets reality. Shopify's Subscription API gives you the plumbing, not the recovery system.
What Shopify gives you natively:
- A billing attempts endpoint that runs payment attempts against subscription contracts.
- An error code on each failed attempt (the codes listed above).
- A contract state machine that moves a contract into a failed state when an attempt does not succeed.
- A storefront payment method update flow that customers can reach from their account.
- For Shopify Payments merchants, the Visa and Mastercard account updater services, which silently replace expired card numbers when the issuing bank participates.
What Shopify does not give you:
- A retry scheduler. Nothing in the platform automatically retries a failed attempt. Your app has to decide when to call the billing attempts endpoint again.
- Customer notifications tied to the failure. No emails go out unless your app sends them.
- Decline-code-aware logic. Shopify gives you the code; your app decides what to do with it.
- Multi-step sequences with branching. No native flow builder for "if card is declined, send email A; if hard decline, send email B and pause contract."
- SMS or multi-channel notifications.
This is why dunning is a feature checkbox on every Shopify subscription app review. Some apps give you a fixed retry schedule (three retries over a week, one email each). Some give you a configurable schedule. A smaller set give you a visual flow builder where you can branch on decline code, customer segment, or subscription value.
Be honest with yourself when you evaluate apps: a "supports dunning" line in a feature matrix can mean almost anything from "we retry once and email the customer" to "we read every Stripe decline code and run a different sequence per code."
Smart dunning vs basic retry logic
There is a clear line between the two.
Basic retry logic is a fixed schedule applied to every failure regardless of cause. Three retries over seven days, one email each, then cancel. This recovers around 30-40% of failed payments. It is better than no dunning, but it leaves a lot of revenue on the table.
Smart dunning reads the failure context and adapts:
- A soft decline gets a fast retry. A hard decline skips the retry and asks the customer for a new method immediately.
- An insufficient-funds failure gets retried on a different day of the week (avoid the 1st of the month, when rent and bills hit; favour the 15th when paychecks land).
- An expired card gets a special email focused on updating the card, not on the failed charge.
- A high-LTV subscriber gets a longer recovery window and an optional incentive (loyalty points, small credit) to update their card.
- A first-time failure gets a soft message; a third-time failure gets escalated.
Smart dunning recovers 50-70% of failures versus 30-40% for basic retry logic. That is the gap between a sequence that mostly works and one that quietly forfeits half the recoverable revenue.
Customer experience considerations
Dunning sits at a delicate point in the customer relationship. The customer did not do anything wrong. Their card failed. If your sequence feels accusatory or spammy, you trade short-term recovery for long-term goodwill.
The principles that work:
- Lead with helpfulness. The first email is informational, not transactional. "Heads up, your renewal did not go through. We will try again on Tuesday."
- One CTA per email. Update your card. That is it. No upsells, no surveys, no "while you are here" content.
- Cap the touches. Three emails over a week is the right ceiling. A fourth email pushes into harassment territory.
- Stop on success. The moment a retry succeeds, the sequence ends. No "thanks for paying" email unless it is your normal renewal confirmation.
- Stop on cancellation. If the customer cancels, no further dunning emails go out. Ever. This is the single most common mistake I see in poorly built sequences.
- Tone matches the brand. A wellness brand sounds warm. A B2B SaaS sounds matter-of-fact. The recovery email is still a brand touchpoint.
Metrics to track
If you cannot measure your dunning, you cannot improve it. The four numbers that matter:
- Recovery rate: percentage of failed payments eventually recovered through retries or customer updates. Target 50-70%. Below 40% means your sequence has a structural problem.
- Involuntary churn rate: share of monthly cancellations caused by payment failures. Below 2% of active subscribers is excellent. Above 5% means you have headroom.
- Average time to recovery: days between the first failure and the eventual success. Most recovered payments come back within 3-5 days. A long tail past 10 days usually means customers are responding to the manual update email rather than the automated retries.
- Customer reactivation rate: percentage of cancelled-for-failure subscribers who come back within 60-90 days. Anything above 8% means your goodbye email and reactivation link are working.
Track these in a monthly cohort, not a single rolling number. The patterns only show up when you compare a January cohort to a March cohort.
Common dunning mistakes
A short list of the patterns I have watched stores get wrong:
- Retrying too fast. Three retries in 24 hours produces three declines. Space them out.
- Too many emails. Four or more notifications in a week feels like harassment. Three is the ceiling.
- Emails after cancellation. The customer cancelled. Stop talking.
- Hidden update link. If the customer has to log in, find the subscription, and navigate to payment settings, you lose half of them.
- Same sequence for every decline code. Hard declines and expired cards need different paths.
- No SMS option. If you have the phone number and consent, you are leaving 2-3x recovery on the table by not using it.
- No card updater service. Shopify Payments merchants get this automatically. If you process subscriptions through a third party that does not participate, switch.
- Cancelling instead of pausing. A paused subscription with a one-click reactivation link recovers about 8-12% of failures. A cancelled subscription almost never does.
- No measurement. If you do not know your recovery rate, you do not know whether your sequence is working.
subZwallet's approach
subZwallet handles dunning through a visual flow builder rather than a fixed retry schedule. You set the retry timing, choose the channels for each step (email, SMS, both), branch on decline code or customer segment, and optionally offer an incentive (bonus loyalty points, cashback credit) to nudge a customer toward updating their card. Dunning is included on every plan, including the free tier, because failed-payment recovery is the highest-leverage feature in subscription billing and gating it behind a paywall makes no sense.
For the deeper how-to (retry schedules, email copy, recovery metrics with real numbers), see Fix Failed Subscription Payments on Shopify (/blog/failed-subscription-payments-dunning-guide). For the Shopify product page, see the subZwallet subscription app (/shopify-subscription-app).
Frequently asked questions
What is dunning management?
Dunning management is the systematic process of recovering failed subscription or recurring payments through automated retries, customer notifications, and payment method updates. It is the operational layer that turns involuntary churn into recovered revenue.
What does the word "dunning" actually mean?
The verb "to dun" is a 17th-century English term meaning to repeatedly request payment of a debt. The modern subscription industry adopted it to describe the automated recovery sequence that runs when a recurring charge fails.
What is the difference between dunning and collections?
Dunning is automated, polite, and runs on a fixed schedule of retries and reminders for subscription renewals. Collections is the manual or outsourced pursuit of past-due balances, usually for one-time invoices and B2B accounts. Subscription stores almost never need true collections because the customer can simply walk away from the next renewal.
What percentage of failed payments can dunning recover?
A well-built dunning sequence recovers 50-70% of failed payments. A basic three-retries-and-email setup recovers 30-40%. The gap is in how the system reads decline codes, schedules retries, and handles customer updates.
Does Shopify have dunning built in?
Shopify gives you the billing attempts API and the failure codes, but not the retry scheduler, email sequences, or branching logic. You need a subscription app for the actual dunning workflow. Shopify Payments does include automatic card updater services for Visa and Mastercard, which silently catches some expired-card failures.
How long should a dunning sequence run?
Seven to nine days from first failure to final retry. Beyond that, retries hit diminishing returns and additional emails start to feel spammy.
How many emails should a dunning sequence send?
Three is the right ceiling for email-only sequences. Add an SMS in the middle if you have phone consent. More than four touches per failure starts to damage the customer relationship for marginal extra recovery.
Should I retry a failed payment immediately?
Yes, for the first retry. About 12-15% of failures resolve on a fast retry because the original error was transient. Subsequent retries should be spaced 2-3 days apart.
What is involuntary churn?
Involuntary churn is the share of cancellations caused by payment failures rather than customer choice. It typically accounts for 20-40% of all subscription churn and is the largest preventable revenue leak in the subscription model.
Is dunning different for B2B subscriptions?
Yes. B2B subscriptions usually use ACH or invoice-based billing with longer payment terms, so the retry windows are measured in weeks rather than days, and the notifications often loop in an account manager rather than running fully automated.
What decline codes are recoverable on retry?
Soft declines (insufficient funds, temporary issuer flags, generic processing errors) are recoverable on retry. Hard declines (stolen, lost, closed, fraudulent) are not. Expired cards are recoverable only after the customer updates the card, so retries are wasted; the customer action is what matters.
Should I offer an incentive to recover failed payments?
Sometimes. A small incentive (loyalty points, modest credit) on the final dunning step can lift recovery by 5-10% for high-LTV subscribers. For low-margin or low-LTV subscribers, the incentive eats the margin you were trying to save. Segment before you incentivise.
Ready to try SubZwallet?
Subscriptions + loyalty + cashback in one Shopify app. Free plan for 25 subscriptions.
