Involuntary churn playbook: Dunning and payment recovery for Shopify subscriptions
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>.
How Shopify subscription billing attempts actually work
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.
Classify every failure before you retry
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.
Design your retry policy around real recovery windows
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.
Example retry policy: soft declines
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.
Retry strategy comparison: aggressive vs. moderate vs. conservative
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.
Example scenario: supplement brand with 3,000 active subscribers
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.
After configuring subZwallet's dunning system with the moderate retry strategy (5 attempts over 14 days, 3-email sequence, pause as final action), their results after 90 days looked like this:
- Recovery rate: 62% of failed payments recovered (167 of 270 monthly failures)
- Involuntary churn dropped from 8.1% to 3.1% monthly
- Revenue recovered: approximately $7,515/month ($45 x 167 recoveries)
- Reactivation rate from paused subscribers: 34% within 30 days
- Net subscriber retention improvement: 5 percentage points monthly
The biggest single improvement came from separating hard and soft declines. Previously, expired-card failures were retried 5 times with no payment-update email, wasting retries. After routing hard declines directly to a payment-update request, their soft-decline recovery rate jumped from 52% to 71%.
Sample dunning email sequence
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.
Email 1: Day 1 (after first retry fails)
<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.
Email 2: Day 4 (after second retry fails)
<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.
Email 3: Day 7-10 (after third retry fails)
<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.
What happens to the subscription contract after failure
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.
Decision tree: choosing the right final action
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.
Skip cycle
- When to use: flexible delivery products (consumables with variable usage), subscriber has high engagement (portal logins, email opens), subscriber tenure is 6+ months
- What it does: skips the current billing cycle and attempts again on the next cycle date
- Advantage: lowest friction, highest reactivation rate (subscriber stays fully active)
- Risk: if the payment issue persists, you skip multiple cycles with no revenue and no resolution
Pause subscription
- When to use: most scenarios as default final action, especially for subscribers with 3+ months tenure or LTV above your customer acquisition cost
- What it does: moves contract to PAUSED status, stops billing and fulfillment, preserves the subscription for easy reactivation
- Advantage: subscriber can reactivate with one click when their payment issue resolves, no re-enrollment friction
- Risk: paused subscribers can drift into permanent inactivity if you do not have a reactivation campaign
Cancel subscription
- When to use: policy requires hard stops (regulatory, contractual), subscriber has zero engagement (no email opens, no portal visits, less than 2 months tenure), hard decline with no payment update after 14+ days
- What it does: moves contract to CANCELLED status, permanently ends the subscription
- Advantage: clean data, no ghost subscribers, clear operational state
- Risk: reactivation requires full re-enrollment, which most subscribers will not complete
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.
Example scenario: premium pet food subscription with tiered final actions
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.
They implemented a tiered approach in subZwallet:
- Segment A (tenure 6+ months, LTV above $500): pause + personalized reactivation email after 7 days, then a second after 21 days
- Segment B (tenure 1-6 months): pause + standard reactivation sequence
- Segment C (first billing cycle, hard decline): cancel after 10 days with no payment update
Results after 60 days: overall involuntary churn dropped from 7.2% to 2.8%. Segment A reactivation rate was 52% (subscribers resuming within 30 days of pause). Segment C cancellation saved operational overhead on accounts that were unlikely to convert anyway. Total monthly revenue recovered increased from $4,200 to $9,800.
Recovery measurement framework
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.
90-day dunning optimization cycle
- Month 1 - Baseline: implement the moderate retry strategy, enable all 3 dunning emails, set pause as your default final action. Measure recovery rate, time-to-recovery, and involuntary churn rate. Do not change anything mid-month. You need 30 days of clean data.
- Month 2 - Test: pick one variable to test. Good candidates: retry spacing (tighten from 14-day window to 10-day), email 1 subject line, or adding SMS as a channel for attempt 4. Run the test for a full billing cycle. Compare recovery rate and email engagement against month 1 baseline.
- Month 3 - Tune: implement winning test results. Segment your final-action policy by tenure and LTV. Review whether your hard-decline routing is working (hard declines should have near-zero retry recovery and high payment-update rates). Set your ongoing review cadence to biweekly.
Support team handoff for unresolved failures
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.
subZwallet surfaces this context in the subscriber detail view, so support agents do not need to piece together information from multiple screens. Train your team to check the dunning timeline before contacting the subscriber, and give them authority to extend the retry window or switch the final action for high-value accounts.
Frequently asked questions
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.
Next steps
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="/help/subscription-churn-reduction-playbook">subscription churn reduction playbook</a>. And if you are evaluating subscription tools for your Shopify store, our <a href="/shopify-subscription-app">Shopify subscription app overview</a> covers the full platform.