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.

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.

Illustrative 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.

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:

  • Recovery rate: 62% of failed payments recovered (167 of 270 monthly failures)
  • Revenue recovered: approximately $7,515/month ($45 x 167 recoveries)
  • Subscribers kept each month: about 167 who would otherwise have been cancelled

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.

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.

<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.

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.

  • 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
  • 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
  • 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.

Illustrative 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.

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:

  • 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

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.

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

  1. 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.
  2. Month 2 - Test: pick one variable to test. Good candidates: retry spacing (tighten from 14-day window to 10-day) or the subject line of the first email. Run the test for a full billing cycle. Compare recovery rate and email engagement against month 1 baseline.
  3. Month 3 - Tune: implement winning test results. Decide which high-value accounts your team should handle by hand. Review whether hard declines get a payment-update request quickly (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.

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.

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="/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.