WooCommerce Dunning: Recover Failed Subscription Payments

How Swipe Again connects to your WooCommerce store and recovers failed subscription renewals.

This guide covers exactly what the Swipe Again plugin does inside a WooCommerce store: how it connects, what data syncs, who owns retries, and how to disconnect. No API keys are copied at any point, and card numbers never leave your payment gateway.

The problem

Why WooCommerce renewals fail

Dunning is what happens after a payment fails: the retries that try the card again, and the reminders that ask the subscriber to fix it. WooCommerce stores need it because a subscription renewal is charged to a card on file, with no customer at a checkout to notice a problem. When that charge fails, the subscriber often never finds out — and a customer who wanted to stay quietly becomes a cancellation.

That is involuntary churn, and it is a large share of all churn: an estimated 20–40% of subscriber churn is involuntary, according to Recurly research. The failures behind it are usually ordinary. Cards expire or are replaced. Banks block a charge that looks unusual. Cards hit temporary holds. And the single largest category is a card that simply does not have the money on the day the renewal runs — across 5.4M failed payments, insufficient funds is the largest decline category at 40.6%, per Churnkey analysis of Stripe data. Most of those subscribers are recoverable if the retry lands at a better moment and the customer gets a clear way to update the card. Left alone, most are simply lost.

The native baseline

What WooCommerce Subscriptions does on its own

WooCommerce Subscriptions handles the renewal itself: it schedules the charge, runs it through your store's payment gateway, and records the outcome on the renewal order. It also ships with its own retry system, which is off by default. Turned on, that system will try a failed renewal again under basic retry rules.

That baseline is a starting point, not a recovery system. The native rules do not read the decline and change the plan — a temporary shortage of funds, an expired card, and a closed account are very different problems, and they need different responses. Outreach is likewise basic: without a dedicated dunning sequence, following up on each failure, timing each retry, and chasing each card update falls to you and your team, order by order. For a store with a handful of renewals, that manual work is manageable. At any real subscription volume, failures arrive faster than anyone works them — and every unworked failure is a subscriber who leaves without ever deciding to.

What it does

What the recovery layer adds

Swipe Again is failed-payment recovery software built for subscription businesses, and on WooCommerce it runs through the WordPress plugin described below. It adds the layer the native baseline does not have:

  • Decline-code-aware smart retries. Every failed renewal syncs to Swipe Again with its gateway decline information. Retries are timed to the decline — up to 6 attempts over about 16 days: insufficient funds and temporary holds get timing that gives the account a chance to recover, do-not-honor gets a careful path, and hard declines such as a stolen card or an invalid number are never retried.
  • Retries run inside your store. When a retry is due, the plugin runs the charge locally through WooCommerce Subscriptions' own scheduled-payment path and your store's own payment gateway — Stripe, PayPal, WooPayments, Square, or any other WooCommerce Subscriptions-compatible gateway. Swipe Again never sees or stores card numbers.
  • Branded dunning emails and card-update pages. Subscribers get your brand's recovery sequence — dunning emails, with SMS in the sequence — and a secure, branded card-update page, not a generic collections notice. The full system behind those messages is covered in our failed payment recovery guide, and the emails themselves follow the patterns in our dunning email templates.
  • A 90-day backfill on connect. Recovery starts on the failed renewals already sitting in your store, not just on tomorrow's failures — covered in its own section below.
  • Proof in your admin. WooCommerce → Swipe Again shows your recovered totals from your account, what is in recovery now, and who owns retries.

The same $179 plan also includes cancel deflection — Discount, Pause, and Service offers shown at the cancel moment — for the subscribers who do choose to leave. Dunning handles the half who never chose anything.

Requirements

What your store needs

  • WordPress 6.2 or later, PHP 7.4 or later
  • WooCommerce 8.0 or later
  • WooCommerce Subscriptions, installed and active (Swipe Again recovers subscription renewals)
  • A Swipe Again account — created during the plugin's pairing-code connect
Connect

Connect with a pairing code — no API keys

  1. Install and activate the plugin — Swipe Again — Failed Payment Recovery on WordPress.org — in WordPress.
  2. Open WooCommerce → Swipe Again and click Connect to Swipe Again. The plugin shows a short pairing code.
  3. In your Swipe Again account, go to Connect → WooCommerce and type the code.
  4. The plugin receives its secure connection key automatically. There is nothing to copy and no API keys to manage.
  5. In the plugin's Settings, choose who owns retries (covered below). Done — connecting takes about two minutes.
Detection & your data

How failures are detected, and what syncs

Detection is automatic. When a renewal charge fails in your store, the plugin notices the failed renewal order and syncs it to Swipe Again with its gateway decline information, so the recovery sequence can start from what actually went wrong instead of retrying blind. As recovery runs, outcomes sync back, so your admin view of what was recovered, and what is still being worked, stays accurate.

The plugin connects your store to the Swipe Again service (app.swipeagain.com) — that connection is the product. It syncs:

  • Failed renewal order data: order id, amount, currency, and gateway decline information
  • Customer email and phone, used for dunning messages
  • Subscription status changes
  • Recovery outcomes, so your recovered totals stay accurate

It never syncs card numbers, CVCs, or full payment credentials. Charges always run through your own gateway inside your store. Syncing stops the moment you disconnect or uninstall.

Retry ownership

One owner per card: Swipe Again and WooCommerce's own retries

Two retry systems working the same card on independent schedules is how a customer gets charged twice for one renewal, so exactly one system owns each card. WooCommerce Subscriptions ships with its own retry system, which is off by default. The plugin never changes that setting on its own. In the plugin's Settings you choose how the two systems coordinate:

  • Detect only (default). The plugin changes nothing. If WooCommerce Subscriptions' retry system is on and already has a retry pending for an order, Swipe Again stands down on that order and recovers the rest.
  • Let Swipe Again manage retries. One click in Settings hands retry ownership to Swipe Again and turns the native retry system off for your store, so one schedule owns every card.

Takeover is your choice and it is reversible: switch back to detect-only in the same Settings screen at any time, and WooCommerce Subscriptions' retry setting applies again. Either way, a card is never charged twice for the same renewal — every retry command the plugin receives executes at most once, and a repeat delivery replays the recorded outcome instead of charging again.

Backfill

Recovery starts on your last 90 days, automatically

On connect, the plugin pulls in your failed renewal orders from the last 90 days automatically. Those failures are worked through the same retry and dunning sequences as new ones, so recovery starts on your backlog — not just on tomorrow's failures. For a store that has been running subscriptions without a recovery system, that backlog is usually the fastest revenue the plugin finds, because those subscribers failed recently, still expect the product, and in many cases only need a well-timed retry or a working way to replace an expired card.

Disconnect

Disconnecting and uninstalling

Disconnect any time in the plugin's Settings. Syncing stops and Swipe Again-initiated retries stop; everything in your store keeps working exactly as before, and WooCommerce and WooCommerce Subscriptions are untouched. The plugin also never disables itself or your store's functions based on plan state — if your plan lapses, your store is unaffected.

Deactivating the plugin pauses it and keeps its data. Uninstalling removes every trace of the plugin's own state: its settings, its event queue and executed-command log, its scheduled tasks, and its cached status. Your orders and customer data are never touched — the plugin only ever stored its own connection state. Uninstalling also sends a best-effort notice to your Swipe Again account so it stops expecting this store.

Pricing & support

Flat pricing, and a guarantee

Swipe Again is $179/month flat ($1,799/year) after a 14-day trial — no percentage of recovered revenue, no per-recovery fees, no per-seat pricing, and no tiers that rise as your store grows. One plan covers your whole Swipe Again account across every connected platform; the full breakdown is on pricing. The guarantee: Recover $179 in 30 days, guaranteed — or Swipe Again is free the next 30 days.

Selling subscriptions on Shopify as well as WooCommerce? The recovery model is the same there — see the Shopify dunning app page for how it works on that side. Questions about connecting your WooCommerce store or about your account: email support@swipeagain.com or use the chat on swipeagain.com. Support is handled by the Swipe Again team (chat + email).

FAQ

Frequently asked questions

Which payment gateways does Swipe Again work with on WooCommerce?

All of them. Retries execute inside your store through WooCommerce Subscriptions' own scheduled-payment path, so whatever gateway your subscriptions use — Stripe, PayPal, WooPayments, Square, or any other WooCommerce Subscriptions-compatible gateway — is the gateway that runs the retry.

Will Swipe Again double-charge my customers?

No. If WooCommerce Subscriptions' own retry system has a retry pending for an order, Swipe Again stands down and does not touch that order, and every retry command executes at most once — repeat deliveries replay the recorded outcome instead of charging again. If you hand retry ownership to Swipe Again in Settings, the native retry system is off entirely.

Does Swipe Again see my customers' card numbers?

No. Charges run through your gateway inside your store. Swipe Again receives order and decline information and customer contact details for dunning — never card numbers, CVCs, or full payment credentials.

What does WooCommerce dunning replace in my store?

The manual work. Instead of checking failed renewal orders yourself, retrying cards by hand, and emailing subscribers one at a time, the plugin detects each failure, runs decline-aware retries and branded dunning automatically, and reports what was recovered in your WordPress admin.

What happens if I disconnect or my plan lapses?

Everything in your store keeps working exactly as before. Syncing and Swipe Again-initiated retries stop; WooCommerce and WooCommerce Subscriptions are untouched. The plugin never disables itself or your store's functions based on plan state.

Start today

Stop losing subscribers
who never meant to leave.

Every billing cycle without recovery is revenue you earned and never collected. Connect in 2 minutes — see your first wins inside the trial.

Start trial

Free 14-day trial · No code · Cancel anytime