Blog

Payment recovery insights and best practices for SaaS companies.

·13 min read

Recovering expired_card Declines: Why Retrying Never Works and What Does

expired_card is the decline code where retrying is pure wasted motion. The only path that recovers it is getting a new card on file. Here is the card-update flow I am building into RecoverStack.

stripeexpired-carddecline-codespayment-recoverydunningsaas
·8 min read

Stripe insufficient_funds: When and How to Retry Without Annoying the Customer

insufficient_funds is the decline code most worth retrying, but the timing is everything. Here is the payday-aware retry approach I am encoding into RecoverStack, and the parts I am still unsure about.

stripeinsufficient-fundsdecline-codespayment-recoverydunningsaas
·12 min read

How Much MRR Is Your Stripe Account Losing to Failed Payments?

A walkthrough of the math behind involuntary churn for SaaS on Stripe, with sourced numbers, a working calculator, and the limits of those benchmarks for your specific account.

mrrfailed-paymentsinvoluntary-churnsaasrevenue-recovery
·12 min read

Stripe Smart Retries vs Custom Dunning, in Plain English

What Stripe's built-in Smart Retries does well, where it falls short, and when an operator should keep it on, replace it, or run both. From a founder building a dunning tool, not a Stripe insider.

stripesmart-retriesdunningpayment-recoverysaas
·37 min read

Stripe Decline Codes: What Each One Means and What I Plan to Do About It

I spent two weeks reading Stripe's decline-code documentation and the network reason codes underneath it. Here's the full reference, plus the recovery strategy I'm encoding into RecoverStack, and the parts I'm still unsure about.

stripedecline-codespayment-recoverysaasdunningpillar