2
0 Comments

Why I stopped treating all failed payments the same way

When a payment fails, most SaaS tools do one thing: retry.

But I've been thinking about this differently.

There are exactly two types of failed payments:

Timing problems (insufficient funds, network errors)

The card is fine. The customer has money.
They just need to be charged at the right moment.
Stripe's smart retry works here.

Communication problems (expired card, card changed)

No amount of retrying will ever recover these.
The card is gone. Someone has to tell the customer.
Retries alone won't work — outreach is the only path.

The mistake most founders make is treating both the same.
One email sequence. Same retry cadence. For every failure.

But an expired card and an insufficient funds failure need completely different responses.

I built DunnAI around this insight.

DunnAI reads the decline code behind every failure, classifies it into the right bucket, and reaches out in your product's own voice - only when outreach is actually the answer.

Today it's live on the Stripe App Marketplace.

Free until $49 is recovered.

Curious if others have thought about this split.
What's your current approach to failed payments?

on April 8, 2026
Trending on Indie Hackers
The most underrated distribution channel in SaaS is hiding in your browser toolbar User Avatar 192 comments How are you handling memory and context across AI tools? User Avatar 107 comments I gave 7 AI agents $100 each to build a startup. Here's what happened on Day 1. User Avatar 101 comments Do you actually own what you build? User Avatar 62 comments Code is Cheap, but Scaling AI MVPs is Hard. Let’s Fix Yours. User Avatar 34 comments How to see your entire business on one page User Avatar 29 comments