Migrating from WooCommerce Subscriptions? Migrate free
How-to Guide 6 steps

How to Handle Failed Payments in WooCommerce

Configure automatic retry logic and customer notifications to recover failed subscription payments.

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

1

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.

2

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.

3

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.

4

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.

5

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.

6

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?
The most common reasons are expired credit cards (40-50% of failures), card replacements after loss or bank-issued replacement (15-20%), insufficient funds (15-20%), and bank fraud protection blocks (10-15%). None of these mean the customer wants to cancel — they're technical issues that can usually be resolved with proper communication.
How quickly should I retry a failed payment?
Retry on day 1, day 3, and day 7 after the initial failure for maximum recovery rates. WPSubscription's built-in retry schedule follows this pattern automatically. Stripe Smart Retries can optimize this further using ML-based timing tailored to the specific decline reason and bank patterns.
What is the recovery rate for failed payments with a dunning process?
With a well-configured dunning process (retries + customer notifications), 50-75% of failed payments can be recovered. The rate depends on customer demographics, decline reason mix, and email quality. Adding Stripe Smart Retries or Card Updater can push recovery rates higher.
Should I cancel access immediately when a payment fails?
No — maintain access during the dunning grace period (typically 14-21 days). Cancelling immediately reduces recovery rates significantly because customers who lose access often don't bother updating payment to restore it. Continuing access during dunning is the industry standard for good reason.
What's the difference between a soft decline and a hard decline?
Soft declines are temporary issues that may resolve on retry (insufficient funds, processor error, bank issue). Hard declines indicate permanent issues that won't resolve on retry (stolen card, lost card, generic decline). WPSubscription handles both, but hard declines are typically retried fewer times since recovery probability is much lower.

The #1 Subscription Plugin for WooCommerce

Start Selling Subscriptions at Zero Cost.

Download, install, and start collecting recurring revenue from all around the world with WPSubscription.