# Stripe failed payments: why they happen and how to win them back

> Why subscription payments fail in Stripe, what the common decline reasons mean in plain English, and a simple routine to recover more of them.

Published 1 October 2026 by The Scenario team. Source: https://use-scenario.com/blog/stripe-failed-payments

**Short answer:** Most Stripe failed payments on subscriptions aren't customers leaving: the card expired, the account was short that day, or the bank wanted extra verification. Turn on retries, send a short personal message to anyone whose payment is still unpaid after a few days, and check the decline reason first.

Stripe failed payments are one of the quietest ways a subscription business loses money. A customer who never meant to leave has a payment declined, nobody notices, the retries run out and the subscription is cancelled. In the numbers it looks exactly like churn. In reality it's a card that needed updating.

This guide explains why payments fail, what the decline reasons mean, and a short routine to win more of them back.

## Why subscription payments fail

When Stripe charges a card, the customer's bank decides whether to approve it. When it says no, Stripe records a **decline code** explaining why, as far as the bank is willing to say. Stripe's documentation lists [every decline code and what it means](https://docs.stripe.com/declines/codes). For subscriptions, a handful come up again and again:

| Decline reason | What it usually means | What helps |
|---|---|---|
| `insufficient_funds` | Not enough money in the account that day | A retry a few days later, often after payday |
| `expired_card` | The card on file has expired | Asking the customer to update their card |
| `card_declined` / `generic_decline` / `do_not_honor` | The bank declined without saying why | A retry, then a message if it keeps failing |
| `authentication_required` | The bank wants the customer to confirm (3D Secure) | Sending the customer a link to confirm the payment |
| `processing_error` | Something went wrong between the banks | Usually a retry fixes it |
| `lost_card` / `stolen_card` | The card has been cancelled | A new card from the customer |

The pattern to notice: very few of these are the customer deciding to leave. They're timing, admin and security checks.

## Step 1: let Stripe retry for you

Stripe Billing can retry failed subscription payments automatically. Its [Smart Retries](https://docs.stripe.com/billing/revenue-recovery/smart-retries) choose when to try again, rather than on a fixed schedule. Check it's turned on in your Stripe Billing settings, and check what happens when the retries run out: whether the subscription is cancelled, marked unpaid, or left past due.

Retries alone recover the timing problems, like `insufficient_funds` and `processing_error`. They can't fix an expired card.

## Step 2: tell customers, early and personally

Stripe can also email customers when a payment fails, with a link to update their card. Turn that on too. But automated emails are easy to ignore, and a short personal note from the founder often gets a reply where the automatic one didn't.

Keep it short, friendly and blame-free:

> Hi Sam, a quick heads-up: your latest payment of £29 didn't go through. Could you update your card details when you get a moment? Thanks!

Send it after the first retry fails, not after the last. The earlier the customer knows, the more time there is to fix it before the subscription ends.

## Step 3: look at the reason before you chase

The decline reason tells you what to say:

- **Expired card:** ask for new card details. There's no point waiting for a retry.
- **Insufficient funds:** be gentle. A retry after a few days often works by itself, and a pushy message can lose a customer who was going to pay anyway.
- **Authentication required:** the customer needs to approve the payment. Send them the link to do it.
- **Lost or stolen card:** they'll need to add a new card. A short message saying so is helpful, not awkward.

## Step 4: watch the trend, not just the list

A few failed payments every month is normal for any subscription business. What matters is whether it's changing. Keep an eye on:

- **The share of payments that go through,** month on month. A drop can point to a problem on your side, such as a payment method that's stopped working or a checkout change.
- **Money recovered by retries.** It shows whether your retry settings are doing their job.
- **Failed payments that turned into cancellations.** That's the churn you could have prevented, and it's worth counting separately from customers who chose to leave. Our guide on [how to calculate churn rate](/blog/how-to-calculate-churn-rate) explains why mixing the two makes churn harder to fix.

## How Scenario helps

Scenario reads your Stripe payments (read-only) and puts this routine in one place. The Payments page shows how many payments went through, what failed and why in plain words, and how much retries recovered. A "Needs attention" list shows each failed payment that's still unpaid, with a short message ready to copy and a link to the invoice in Stripe. You can see it on a sample business in the [live demo](/demo/payments).

## The takeaway

Most failed payments are fixable. Turn on retries, read the decline reason, and send a short personal message to anyone still unpaid after the first retry. Then track recovered payments separately from real cancellations, so your churn number tells you about customers who chose to leave, not cards that expired.

---
Scenario (https://use-scenario.com) is an AI finance partner for founders. Its figures are estimates, not financial advice.
