WooCommerce fixes / subscription renewals not charging

WooCommerce Subscription Renewals Not Charging?

If your WooCommerce Subscriptions renewals have quietly stopped charging, recurring revenue is bleeding right now — and most owners don't notice for weeks. Either the scheduled renewal never fired, or the saved card couldn't be charged. Here's how to find the exact reason and fix it.

Last updated: 14 Jul 2026 · ~6 min read

Quick answer

Renewals stop for one of two reasons. Either the scheduled renewal action never fires — a stalled WP-Cron / Action Scheduler — so no charge is ever attempted, or the saved payment method can't be charged off-session (an expired card, a lost gateway token, or an SCA/3DS decline). Check WooCommerce → Status → Scheduled Actions first, then the payment side of any failed renewal.

Why renewals stop silently

WooCommerce Subscriptions schedules a renewal action for each due date via Action Scheduler, which is built on WP-Cron. When that action runs, it charges the saved payment token off-session — no customer present to approve it. If the scheduler is stalled, the action never runs and nothing is charged. If the action does run but the token can't be charged, the renewal silently fails — no sale, and often no obvious error anywhere the owner is looking. That's why the first sign is usually a suspiciously flat MRR chart, not an alert.

The most common causes (most likely first)

  1. WP-Cron / Action Scheduler is stalledWooCommerce → Status → Scheduled Actions shows renewal actions stuck as pending or past-due — they never run, so no renewal is ever attempted.
  2. Expired or removed saved cardThe customer's card on file expired or was deleted — there's simply nothing chargeable to renew against.
  3. The gateway lost the off-session payment tokenA reconnected or reconfigured gateway dropped its stored tokens, so renewals can't reference a saved payment method.
  4. SCA / 3DS decline on the off-session chargeThe bank requires authentication the off-session charge can't satisfy, so it declines the renewal.
  5. The gateway doesn't support automatic renewalsThe payment method only supports manual renewal — it was never able to charge off-session in the first place.

Where to look first

Don't want to find out at month-end?

That's the risk — a stalled scheduler or an un-chargeable card bleeds MRR silently for weeks. Renewal Guard (a DiagnosticIQ add-on) watches stopped renewals, decline cohorts and the card-expiry gap, names in plain English why each one stalled, and the free dashboard flags it the day it starts — not weeks later.

Get the free plugin

Made by Prima Digital — the team behind this guide. Free forever; no card to install.

How to know you fixed it

Verify

WooCommerce → Status → Scheduled Actions should show renewal actions processing on schedule instead of sitting past-due. Then let a due renewal run (or trigger one manually): it should charge successfully and create a renewal order. If it does, both the scheduler and the payment path are healthy again.

Frequently asked

Why didn't I get any error when renewals stopped?

Both failure modes are silent — a stalled scheduler never attempts the charge, and off-session declines fail on the gateway's side with no customer present, so nothing surfaces unless you're watching the subscription notes or your MRR trend.

How do I recover a failed renewal?

Retry the renewal from the subscription screen — if the card expired or the token is gone, have the customer update their payment method via the self-service link first, then process it.

What is dunning and should I enable retries?

Dunning is automatic retrying of failed renewal charges on a schedule, and yes you should enable it, because most soft declines clear on a later attempt.

>_
John O'Keane — Founder, Prima Digital · LinkedIn
Contributions by David Zhang · LinkedIn
I build DiagnosticIQ, the WooCommerce diagnostic plugin, and I've spent more time than I can count tracing silent renewal failures back to a stalled scheduler or a dead card.