# Why are my WooCommerce subscriptions not renewing?

**Short answer:** Usually because the scheduled actions that trigger renewals aren't running, the site thinks it's a staging copy and has switched to manual renewals, or the payment gateway is declining saved cards. Check WooCommerce > Status > Scheduled Actions for past-due renewal actions first, then the subscription notes, then the gateway logs.

## How a renewal actually happens

WooCommerce Subscriptions doesn't charge customers on a timer of its own. Each renewal is a scheduled action, `woocommerce_scheduled_subscription_payment`, queued in Action Scheduler. When that action runs, Subscriptions creates a renewal order and asks your payment gateway to charge the saved card.

If any link in that chain breaks, the renewal silently doesn't happen. That's why the fix starts with finding which link broke, not with retrying payments.

## The common causes

- Scheduled actions aren't running. Action Scheduler relies on WP-Cron, which only fires when someone visits the site. If `DISABLE_WP_CRON` is set without a real server cron job, or a security plugin or firewall blocks the site's requests to itself, renewal actions pile up as past-due.
- The site thinks it's a staging copy. Subscriptions remembers the URL it was installed on. After a migration or a domain change, it may decide it's running on a duplicate site and turn off automatic payments, so renewals become manual and customers get invoices instead of charges.
- The gateway declines the charge. Expired cards, missing payment tokens after a gateway change, or a gateway plugin that doesn't support automatic renewals all show up as failed or manual renewals.
- A plugin conflict or fatal error. A PHP error during the renewal action stops it partway, often leaving a pending renewal order with no payment.

## How to check, in order

- WooCommerce > Status > Scheduled Actions: filter for `woocommerce_scheduled_subscription_payment` and look at the Past-due and Failed tabs. Failed actions include an error message.
- The subscription itself: its notes show whether it switched to manual renewal and why.
- WooCommerce > Status > Logs: look for the gateway's log and any fatal-errors log around the renewal time.
- Your payment gateway dashboard: confirm which renewals were actually charged before you retry anything.

## Fix the cause before retrying payments

Running every past-due action at once can charge customers who already paid by other means. Fix the cause first, such as a real cron job, the staging setting or the gateway connection, then retry only the renewals the gateway confirms were never paid.

If many subscriptions need their next payment date moved as part of the clean-up, do it through the Subscriptions API rather than editing the database, so schedules and order notes stay consistent.

## Related

- [WooCommerce development](https://www.designnairobi.agency/services/woocommerce-development.md)
- [Adriana Cowdin case study](https://www.designnairobi.agency/case-studies/adriana-cowdin.md)
- [WooCommerce Subscription Date Manager Pro case study](https://www.designnairobi.agency/case-studies/woocommerce-subscription-date-manager-pro.md)

Author: Eric Mutema, Full Stack Developer: Websites, Stores, Apps & AI (https://www.designnairobi.agency/). Web page: https://www.designnairobi.agency/articles/woocommerce-subscriptions-not-renewing.html
