Blog

Failed payments: the quiet churn, and how to find and fix it in Recurly

A practical guide to finding invoices stuck in dunning, counting how many times each has been retried, and stopping collection precisely, without touching a customer's other subscriptions.

Every subscription business on Recurly has a quiet pile of invoices that keep failing. Recurly's dunning retries them on a schedule, which is exactly what you want for a good customer whose card expired. It is not what you want for a trial that turned out to be fraud, or a card that has now been declined a dozen times. Each of those retries costs a decline fee and counts against your decline ratio with the card networks.

This guide covers how to find them, how to count attempts properly, and how to stop collection without collateral damage.

What "past due" means in Recurly

When a renewal charge fails, Recurly marks the invoice past due and starts its dunning campaign: retries on a schedule, with emails to the customer along the way. The invoice stays past due until a payment succeeds, the campaign runs out, or someone stops it. Stopping it means marking the invoice failed, which ends the retries.

Finding them

In the Recurly admin you can filter invoices by state, but a few questions come up immediately that the list view doesn't answer:

  • How old is the oldest one? Dunning campaigns can run for weeks. Any report limited to "the last seven days of invoices" misses the ones that started earlier.
  • Which plan is it for? An invoice's plan lives on its line items, not the invoice itself.
  • How many times has it failed? This is the number that matters, and it is the one people most often get wrong.

Counting attempts correctly

It is tempting to use the number of dunning emails sent as the attempt count. They are not the same thing. Emails and retries can follow different schedules, and some campaigns retry without emailing at every step. The reliable count is the invoice's own payment history: the failed purchase attempts recorded against it.

In Retrixus you ask:

"Which past-due invoices have failed five times or more, and which plans are they for?"

It reads every past-due invoice however old, counts the failed attempts from each invoice's own transactions, and checks each invoice's line items for the plan.

Stopping collection precisely

This is where most clean-ups go wrong. Many customers have more than one subscription. If you stop collection on every past-due invoice on an account, you also stop collecting on the subscription they actually want to keep paying for.

The safe approach is to scope it:

  1. Only invoices for the plans in question. Stop the trial plan's invoices and leave the rest collecting.
  2. Skip accounts that hold a plan you never want touched. For example, anyone with a live subscription on a premium plan.
  3. Preview everything first. How many accounts, which were left out and why, and which looked like mistakes.

With Retrixus:

"Cancel those subscriptions and stop collection on their starter-plan invoices only. Skip anyone on a premium plan, and add a note saying why."

Your AI asks each choice it needs and never guesses. Nothing changes until you confirm, anything over your limits needs an Admin or Owner to approve, and every change goes in your audit log.

Keeping on top of it

Rather than doing this monthly, set a watch:

"Alert me when more than 20 invoices reach their fifth failed attempt in an hour."

It reads every past-due invoice each time it checks, and emails you or posts to Slack when the line is crossed.

The short version

  • Look at all past-due invoices, not just recent ones.
  • Count attempts from the invoice's transactions, not its dunning emails.
  • Scope stops to plans or invoice numbers, and skip accounts on plans you never touch.
  • Preview before you change anything.

Retrixus does all four from one conversation in Claude or ChatGPT. You can start free on one Recurly site or read how dunning works in Retrixus.

Try it on your own Recurly data

Start free on one Recurly site. Connect Claude or ChatGPT and ask your first question in about 15 minutes.

Start free