Failed payments are the largest source of involuntary churn in WooCommerce subscription businesses. Without a recovery process, every declined charge becomes a cancelled subscriber — even when the customer didn't intend to leave.
This guide covers configuring WPSubscription's automatic payment retry and notification system to recover the majority of failed payments automatically. Done right, dunning recovers 50-75% of failed payments that would otherwise be lost as involuntary churn.
Why This Matters
Industry data shows that 20-40% of all subscription churn is involuntary — caused by failed payments rather than customer decisions to leave. This is recoverable revenue.
A $10K MRR business with 6% monthly churn, 30% involuntary, loses about $180/month from payment failures. Recovering 60% of that = $108/month of retained MRR, or $1,296/year of preserved ARR — all from configuring dunning correctly.
No marketing spend, no sales effort, no product changes required. Few operational improvements offer this ROI.
Before You Start
- WPSubscription installed with active subscriptions
- A payment gateway configured that supports subscription retry (Stripe or Mollie recommended)
- Working email setup (WP Mail SMTP configured for deliverability)
- Customer-facing payment update flow accessible from My Account
- Understanding of your current involuntary churn rate (% of cancellations from payment failures)
Step-by-Step Instructions
Understand the default failed-payment behavior
When a renewal charge fails, WPSubscription by default marks the subscription as "Past Due" and stops the service if configured to do so. Without any retry or notification configuration, the subscription sits past-due until it expires or the customer reaches out — losing most recoverable payments.
Configure active recovery instead. Check WooCommerce → Subscriptions filtered by "Past Due" status to see how many subscriptions are currently in this state.
Configure the retry schedule
Go to WPSubscription → Settings → Payment Retry. Set up retry attempts at day 1, day 3, and day 7 after the initial failure.
This 3-retry schedule over one week recovers the majority of recoverable failures: day 1 catches temporary bank holds and processor issues, day 3 catches insufficient funds that resolved after payday, day 7 catches customers who updated their card after seeing the notification email. More than 4 retries rarely improves recovery and may accumulate gateway fees.
Enable and customize the payment failed notification email
Go to WPSubscription → Settings → Emails → Payment Failed. Enable the email and customize the template.
The email should: address the customer by name, clearly state which subscription failed and the amount, briefly explain the likely cause (expired card, insufficient funds), maintain a friendly tone (not threatening), and include a prominent direct link to update their payment method in My Account. End with a thank-you, not pressure.
Configure the grace period before cancellation
Set a grace period — the number of days after initial failure before the subscription is cancelled if all retries fail. A 21-day grace period gives the 3-retry schedule time to complete and gives customers time to notice and respond to notification emails.
After the grace period, WPSubscription cancels the subscription and sends a final cancellation notice. Shorter grace periods (7-10 days) reduce recovery rates significantly.
Make payment method updates effortless
Verify that logged-in customers can update their payment method from WooCommerce → My Account → Subscriptions → [their subscription] → Change payment method. Test this path yourself — if it requires more than 3 clicks from the notification email, simplify it.
Friction in updating payment details directly reduces recovery rates. The link in your dunning email should land customers directly on the payment update form, not require navigation.
Enable gateway-level improvements (Stripe Smart Retries, Card Updater)
In your Stripe dashboard, enable Smart Retries (Subscriptions and billing → Settings → Smart Retries) — ML-optimized retry timing that recovers 10-20% more failed payments than basic retry schedules. Also enable Card Updater if available — automatically refreshes expired card details from the customer's bank without requiring customer action.
Both are essentially free improvements that work alongside WPSubscription's dunning.
Pro Tips
- Send first failure email within hours, not days — recovery probability drops sharply with delay
- Use friendly, helpful copy in dunning emails — threatening tone reduces recovery rates
- Always include a one-click payment update link in dunning emails — minimize friction
- Enable Stripe Smart Retries — ML-optimized timing recovers 10-20% more than static schedules
- Maintain service access during the grace period — punishing customers reduces recovery
Result
Failed payments are now handled automatically with a 3-attempt retry schedule and customer notification emails, recovering the majority of declined charges before they become permanent cancellations. Combined with Stripe Smart Retries and Card Updater, recovery rates typically reach 60-75% of first-attempt failures — directly reducing involuntary churn and protecting MRR.
Troubleshooting
Problem:The retry attempts are not firing on the configured schedule
Solution:WooCommerce relies on its Action Scheduler (WooCommerce cron) for retry timing. Check WooCommerce → Status → Scheduled Actions and look for failed or stuck payment retry actions. If actions are not processing, your WordPress cron may not be running correctly — verify WP Cron is functional or switch to a real server cron job (most managed hosts have a setting for this).
Problem:Customers are not receiving payment failed emails
Solution:WordPress's default PHP mail function is frequently blocked or filtered as spam. Install WP Mail SMTP and configure it to send through a proper email provider (Gmail SMTP, SendGrid, Mailgun, Amazon SES). Also add DKIM and SPF records to your domain DNS for better deliverability. Check spam folders in test sends.
Problem:Recovery rate is much lower than expected
Solution:Likely causes: email deliverability issues (check spam folders), payment update flow has friction (test it), retry schedule too aggressive or too slow, or your customer base has unusually high hard-decline rate (stolen cards, closed accounts). Audit each step of the recovery flow. Also enable Stripe Smart Retries for ML-optimized retry timing.
Problem:Cancelled subscriptions are reactivating without customer payment
Solution:This shouldn't happen by default. If you see "Active" status appear without successful charges, check: was the subscription manually reactivated by an admin? Did a delayed webhook arrive after grace period elapsed? Is there a gateway-side retry happening after WPSubscription gave up? Check WooCommerce logs and gateway dashboard for the transaction history.
Frequently Asked Questions
Why do subscription payments fail if the customer has not cancelled?
How quickly should I retry a failed payment?
What is the recovery rate for failed payments with a dunning process?
Should I cancel access immediately when a payment fails?
What's the difference between a soft decline and a hard decline?
Related Glossary Terms
More Guides
How to Reduce Subscription Churn in WooCommerce
6 steps · Practical steps to lower both voluntary and involuntary churn on your WooCommerce subscription business.
How to Send Subscription Renewal Emails in WooCommerce
6 steps · Configure and customize automated renewal reminder and receipt emails for WooCommerce subscriptions.
How to Automate Subscription Renewals in WooCommerce
6 steps · Set up fully automated subscription renewal billing with WPSubscription so revenue runs on autopilot.