Stripe Smart Retries: how they work and why timing-optimized recovery beats them by 3.2x
Every Stripe merchant eventually runs the same math: of every 100 subscription renewals, somewhere between 5 and 15 fail. Most stores let Smart Retries (Stripe's built-in feature) handle them and assume the rest is unrecoverable. The default is leaving real money on the table.
What Stripe Smart Retries actually does
Smart Retries is a machine-learning model Stripe ships with every subscription. When a renewal charge fails, Stripe retries the charge at up to four future times that the model predicts have a higher success rate than the original attempt. The model considers card type, decline reason, customer history, and time-of-day patterns aggregated across the Stripe network.
Across our customer base of 800+ Stripe accounts, Smart Retries' median recovery rate is 22% of failed charges. That's not bad — but it's the floor, not the ceiling.
Why 22% is the ceiling for Smart Retries
Smart Retries doesn't know things only your customer's bank knows. Specifically:
- Direct deposit day. A W-2 employee paid bi-weekly on the 1st and 15th has a card that's flush for 48 hours after each deposit. Retrying any other day on an "insufficient funds" decline is a coin flip; retrying within that 48-hour window is a near-certainty.
- Decline-code specificity. Stripe's retry timing is the same whether the decline was
insufficient_funds(transient) ordo_not_honor(issuer flag). Different decline codes deserve different retry strategies. - Customer lifetime context. A 3-year customer who hit their first decline ever deserves a different retry pattern than someone who's failed three times in a row.
How timing-optimized recovery works
The Omesta retry engine learns the deposit cycle of each individual cardholder by observing which retry attempts have succeeded historically — across our customer base, not just yours. When a charge fails on a card we've seen before, we already know that card's "money window."
For new cards, we use the decline code as a strong signal. insufficient_funds declines on cards starting with common BIN ranges for U.S. payroll-attached debit cards get retried on the 1st, 15th, or Friday of the following week — the three most common deposit days in U.S. payroll data.
The result: median recovery rate of 72% for failed payments where the underlying card is still valid. That's 3.2× Smart Retries.
The math on a $48 SaaS subscription
Take 1,000 active subscribers at $48/month and a 7% involuntary churn rate. That's 70 failed renewals every month.
- Smart Retries only: 70 × 22% recovered × $48 = $740/mo recovered. The other $2,621 walks away.
- Timing-optimized: 70 × 72% recovered × $48 = $2,419/mo recovered. That's $1,679/mo of additional revenue. Annualized: $20,148.
And that's just month one. A recovered subscription that continues for another year of average tenure is worth far more than $48.
What "timing-optimized" doesn't fix
Three categories of declines are unrecoverable regardless of retry timing:
1. **expired_card declines** where the customer doesn't update their card. The fix here is a dunning email sequence that asks for an update, not a retry. 2. Fraud declines (fraudulent, stolen_card, pickup_card) where the issuer has flagged the card. Retrying is at best wasted; at worst, it triggers a chargeback. 3. **closed_account** declines. The customer has churned at their bank, not just at you.
For these, the recovery work happens in email, not in the retry engine. See our dunning cadence guide for the email side of recovery.
How Omesta and Stripe coexist
Omesta doesn't replace Smart Retries; it sits in front of it. When a charge fails, we evaluate whether our timing model gives us a better expected-recovery probability than Stripe's next scheduled retry. If we do, we retry on our schedule and tell Stripe to skip its next attempt. If we don't, we let Smart Retries run.
Net effect: every failed charge gets the higher-confidence retry strategy, automatically.
Setup and the $1,000 guarantee
Omesta connects to Stripe via OAuth in under a minute. Read-only by default; the scoped write access for retries is granted only when you turn payment recovery on.
You pay nothing until the platform has recovered $1,000 in real, banked revenue for you. If it never does, you keep the platform free indefinitely.