Failed payment, grace period and expiring card aren't the same risk
WooCommerce subscription risk types: failed payment vs grace period vs expiring card
Not every subscription payment problem is the same problem. A card that's about to expire, a charge that just failed, and a subscription sitting in its grace period all look like "at risk" from a distance — but they call for different responses, on different timelines, and lumping them into one undifferentiated bucket is exactly how stores lose track of what actually needs a human today versus what can wait.
Failed payment — retries are already exhausted
WooCommerce moves a subscription to on-hold once its retry schedule runs out with nothing succeeding. By the time that happens, the automatic recovery window has already closed — it needs a person, not another retry. Subscription Health Check always scores this Critical for exactly that reason. One nuance: an on-hold subscription with zero recorded retry attempts is treated as healthy rather than flagged, since that combination usually means the subscription hasn't actually failed yet. A 12-month lookback (default) keeps very old failures out of new alerts.

Grace period — still active, still retrying
A subscription in its grace period is still active and WooCommerce is still attempting to collect. Severity here climbs with days elapsed — Info, then Warning at 3 days, then Critical at 7 (both configurable) — rather than being fixed at one level. Its lookback window defaults to 6 months.
Expiring card — a problem that hasn't happened yet
This one is different: it's not reacting to a failure, it's predicting one. The plugin compares the saved card's expiry to the subscription's next renewal date. If that card would no longer be valid by then, it's flagged — always Critical, because the fix (updating the card) needs to happen before the charge attempt, not after. The comparison only fires when renewal is due within a configurable window (30 days by default). If a subscription has no next-payment date on file, the plugin falls back to flagging already-expired or near-expiry cards directly, subject to a 3-month lookback.
Why non-card gateways don't show up here
Expiring-card detection depends on reading a saved payment token's expiry date. Gateways like PayPal don't store that kind of token, so subscriptions paying that way simply never enter this particular risk check — they're still covered by the failed-payment and grace-period checks, which don't depend on card data at all.
- ▸Failed payment: always Critical, 12-month lookback (default)
- ▸Grace period: Info / Warning / Critical by day count, 6-month lookback (default)
- ▸Expiring card: always Critical, 30-day renewal window (default), 3-month lookback when there's no next payment date
- ▸On-hold with zero retries is treated as healthy, not flagged
What's the difference between a failed payment and a grace period in WooCommerce?
A grace period means WooCommerce is still actively retrying the charge and the subscription is still active. A failed payment (on-hold) means the retry schedule has already run out with nothing succeeding — the automatic recovery window has closed and it needs a person to step in.
Why is an expiring card flagged before anything has failed?
Because it's a prediction, not a reaction. The plugin compares the saved card's expiry to the subscription's next renewal date, and flags it as Critical if the card won't be valid by then — the fix needs to happen before the charge attempt, not after.
What happens to subscriptions paid via PayPal or other non-card gateways?
They're never evaluated for expiring-card risk, since that check depends on reading a saved card token's expiry date. They're still fully covered by the failed-payment and grace-period checks, neither of which depends on card data.
See it flag your own subscriptions.
$129 per site, billed annually. Run the first scan on your own store's data, not a demo.
Buy now — $129/yr