Failed payments are not a billing glitch. They are the largest source of preventable subscriber loss for most Shopify subscription merchants. Industry benchmarks show involuntary churn, meaning cancellations caused by payment failures rather than deliberate opt-outs, accounts for 20-48% of total subscription churn. The median recovery rate across subscription businesses is 47.6%, which means more than half of failed payments go unrecovered in a typical program. The gap between median and best-in-class (70-85% recovery) represents real revenue sitting on the table.
This playbook gives you an operating model for recovering failed Shopify subscription payments. It covers failure classification, retry policy design, dunning email sequences, final-action decision logic, and measurement. Every recommendation is grounded in how Shopify's Subscription API actually works and what subZwallet adds on top. If you want to jump straight to configuration, see the <a href="/features/dunning-recovery">subZwallet dunning recovery features</a> page or our <a href="/help/how-to-set-up-dunning">step-by-step dunning setup guide</a>.
A critical fact that many merchants miss: Shopify does not automatically retry failed subscription payments. When a billing cycle comes due, the subscription app (subZwallet, in this case) creates a billing attempt through the subscriptionBillingAttemptCreate mutation. If that attempt fails, Shopify records the failure and waits. Nothing else happens unless the app initiates the next attempt. This is by design: Shopify delegates retry strategy to the app because one-size-fits-all retry logic would underperform compared to configurable, data-driven approaches.
Each billing attempt is processed asynchronously with an idempotency key, which prevents duplicate charges even if network issues cause a request to fire twice. The attempt returns a status and, if it fails, an error code from the SubscriptionBillingAttemptErrorCode enum. These error codes are your foundation for deciding what happens next.
Not all payment failures are the same, and treating them identically wastes retries on unrecoverable charges while under-serving recoverable ones. Shopify's error codes divide into two categories that should drive your entire dunning strategy.
<strong>Soft declines</strong> are temporary. The card is valid but the charge did not go through: insufficient funds, processor timeout, rate limit exceeded, or a temporary issuer hold. These are your primary recovery opportunity. Most soft declines resolve within 3-7 days as the subscriber receives a paycheck, clears a temporary hold, or the processor issue resolves.
<strong>Hard declines</strong> are permanent for the current payment method. The card is expired, the account is closed, the bank has flagged it for fraud, or the card number is invalid. Retrying a hard decline wastes an attempt and can damage your processor reputation. Hard declines should skip the retry queue entirely and trigger an immediate payment-update request.
A retry policy is not "more attempts equals better recovery." Poorly timed retries create noise for your payment processor, risk hitting card network limits, and generate subscriber confusion. A well-designed policy spaces attempts to match when payment issues actually resolve and pairs each attempt with a specific communication action.
Visa allows a maximum of 15 retries within 30 days on a declined transaction. Mastercard allows up to 35. Exceeding these limits can result in fines or processor restrictions. Shopify enforces its own ceiling of up to 30 attempts per payment method per 35 days. In practice, you should never need more than 5-6 attempts because recovery rates drop to near zero after that point.
For hard declines, skip retries 2-5 entirely. Send a single payment-update request immediately and apply the final action after 7 days with no response. Retrying a hard decline 5 times over 14 days accomplishes nothing except wasting processor goodwill.
Your retry strategy should match your product type, billing cadence, and subscriber demographics. Here is how the three common approaches compare.
Most Shopify subscription merchants should start with the moderate strategy and adjust based on 30 days of recovery-by-attempt data. If attempt 4 and 5 are recovering less than 2% of failures, tighten the window. If your first-attempt recovery is low but later attempts recover well, you may benefit from tighter early spacing.
A DTC supplement brand running monthly subscriptions at $45/month has 3,000 active subscribers. Their payment failure rate is 9%, generating roughly 270 failed charges per month. Before implementing structured dunning, they had no retry logic beyond Shopify's single billing attempt: every failure became an immediate cancellation. Their involuntary churn rate was 8.1% monthly.
This is worked math, not a measured result. Suppose a moderate retry strategy (5 attempts over 14 days, 3-email sequence, pause as final action) recovered 62% of failed payments. The numbers would look like this:
The biggest lever is usually separating hard and soft declines. Retrying an expired card 5 times without a payment-update email wastes retries; asking for a new card right away gives those customers a real chance to recover.
Your dunning emails are the subscriber-facing layer of your retry policy. Each email should be tied to a specific retry attempt, escalate in urgency, and always include a direct link to update payment. Avoid guilt language or panic framing. The subscriber probably does not know their payment failed. Here is a proven 3-email sequence.
<strong>Subject line:</strong> "Your [Brand] subscription payment needs a quick update"
Tone: friendly, informational, zero pressure. Body should include: what happened (payment did not go through), what they need to do (update payment method), a prominent button linking to the customer portal payment page, and reassurance that their subscription is still active. Do not mention cancellation or consequences in this email. Keep it under 120 words.
<strong>Subject line:</strong> "Action needed: your [Brand] subscription is on hold"
Tone: helpful but direct. Body should include: brief recap of the issue, what happens next if unresolved (upcoming shipment will be skipped or subscription paused), the update-payment button again, and a support contact link. Introduce a soft consequence but frame it around what the subscriber will miss, not what you will do to them. Target 100-140 words.
<strong>Subject line:</strong> "Final notice: update your payment to keep your [Brand] subscription"
Tone: clear, outcome-focused. Body should include: specific deadline ("If we don't hear from you by [date], your subscription will be paused"), what they lose (next shipment, loyalty points accumulation, locked-in pricing if applicable), the update-payment button, and a one-click option to contact support. This email should be the most concise: 80-100 words. Urgency comes from specificity, not exclamation points.
In Shopify's subscription model, a contract stays in ACTIVE status even after a billing attempt fails. The contract only transitions to FAILED, PAUSED, or CANCELLED when the app explicitly makes that change. This means your dunning app decides when and how to move the contract, and that decision is your final action. Shopify documents contract statuses and transitions in the subscription contracts guide (https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts).
This is important because it means a subscriber whose payment fails on day 1 still has an ACTIVE contract on day 14. If your app does nothing after exhausting retries, the contract stays active indefinitely with no billing, which creates ghost subscribers in your metrics and potential fulfillment issues.
After all retries are exhausted and the subscriber has not updated their payment method, you need a final action. The right choice depends on the subscriber's profile and your operational model.
A practical default: use pause for all subscribers with 3+ months tenure or 2+ successful orders. Use cancel for subscribers in their first billing cycle with a hard decline and no email engagement. Use skip only when you have confirmed the subscriber is active and the product timing is genuinely flexible.
A premium pet food brand charges $89/month with 1,200 active subscribers. They had been cancelling all subscribers after 3 failed retries, resulting in 7.2% monthly involuntary churn. After losing a long-tenure customer who had been subscribed for 18 months (lifetime value: $1,602), they re-evaluated their final-action strategy.
A tiered approach could look like this. subZwallet dunning settings are store-wide, so the segment-specific steps are handled by your team from the Failed tab or with Klaviyo flows:
The point of the tiers: long-tenure subscribers get time and a personal nudge to come back, while first-cycle hard declines are closed quickly instead of tying up your team. Measure reactivation for each group so you know whether the extra effort pays off.
You cannot improve what you do not measure, and most merchants track at most one dunning metric (overall recovery rate). A complete measurement framework tracks inputs, process quality, and outcomes.
Review these metrics weekly for the first 90 days after launching or changing your dunning configuration. After the initial tuning period, shift to biweekly reviews. The most actionable metric is recovery rate by attempt number: if your later attempts are recovering almost nothing, shorten your retry window and reallocate that time to reactivation campaigns instead.
Not every failed payment resolves through automation. Your support team needs structured context when a case escalates beyond the dunning sequence. Every escalated ticket should include: failure type (hard or soft), number of retry attempts completed, last dunning email sent and whether it was opened, subscriber tenure and LTV, and the recommended next action based on segment rules.
In subZwallet, the subscription page shows the activity timeline, and Gorgias rules can open a ticket automatically when a payment fails. Train your team to check the timeline before contacting the subscriber, and give them authority to send a payment-update email or use Process now once the card is updated.
See the FAQ section above for answers to common questions about involuntary churn rates, retry counts, pause vs. cancel decisions, Shopify billing attempt mechanics, hard vs. soft declines, dunning email timing, recovery rate targets, and sender reputation.
If you have not configured dunning yet, start with our <a href="/help/how-to-set-up-dunning">step-by-step dunning setup guide</a> to enable retry logic and email sequences in subZwallet. For a deeper look at dunning features and configuration options, visit the <a href="/features/dunning-recovery">dunning recovery features page</a>.
Involuntary churn is only half the churn problem. For strategies to reduce voluntary cancellations (subscribers who actively choose to leave), see our <a href="/blog/reduce-shopify-subscription-churn">subscription churn reduction playbook</a>. And if you are evaluating subscription tools for your Shopify store, our <a href="/">Shopify subscription app overview</a> covers the full platform.