Stripe's Smart Retries recover about 30–50% of failed payments. The other half — expired cards, soft declines, customer-side fixable errors — quietly disappears unless you chase them. DunningKit is an open-source toolkit + paid hosted recovery service that picks up where Smart Retries leaves off.
No spam. We'll send exactly two things: launch announcement, and a one-pager on retry timing for B2B annual plans (where the recovery game is hardest).
A typical SaaS subscription processed through Stripe sees somewhere between 5% and 15% of monthly attempted charges fail. The split, roughly:
insufficient_funds — retry within 1–3 days, often recoversexpired_card — needs the customer to update payment methoddo_not_honor, generic_decline) — retry, contact, hopeStripe's Smart Retries handles a lot of the easy wins automatically — it picks decent retry timing for insufficient_funds and a few common decline codes. What it doesn't do well: customer-side flows (you have to email the customer to update their card), retry timing for the long-tail decline codes, and visibility into which specific charges are at risk vs already lost.
insufficient_funds retries best at 24h + 72h; do_not_honor needs 24h + 7d; expired_card never recovers without customer action.$ pip install dunningkit
$ dunningkit analyze stripe-failed-charges.csv
Period: 2026-04-01 to 2026-04-30
Failed charges: 142 totalling $14,820
Recoverable estimate (based on decline-code recovery rates):
insufficient_funds 38 charges $3,940 ~70% likely recoverable
expired_card 31 charges $3,210 ~85% with card-update flow
do_not_honor 22 charges $2,290 ~40% likely recoverable
generic_decline 18 charges $1,870 ~30% likely recoverable
card_velocity_exceeded 9 charges $940 ~50% if delayed 24h
other 24 charges $2,470 varies
Total recoverable potential: ~$8,400 (57%)
You may already be losing this if your dunning relies on Stripe defaults.
Run with --suggest-sequences to get retry-timing + email templates.
Need this before the hosted dashboard ships? Early-access program is open: free CLI now plus a manual recovery-audit on your last 90 days of Stripe data, until the live integration lands. Email dunningkit@quantcalc.app with your Stripe CSV export and we'll send a detailed report within 48 hours.
Those are good, established players in the SMB tier. DunningKit's angle is the open-source CLI + transparent retry logic — engineers who'd otherwise build it themselves get a free starting point. The paid hosted tier is competitive on price ($99 vs $99–129) but skips the percent-of-recovered fee that's standard in the category.
It handles the easy 30–50%. The other half is what the paid recovery tools (and DunningKit) exist for. Smart Retries times retries reasonably for insufficient_funds and a few common codes; it doesn't do customer-facing card-update emails, doesn't handle the long-tail decline codes well, and gives you minimal visibility into what's still leaking.
Yes. Apache 2.0 on GitHub. The hosted dashboard, live Stripe integration, and team workflow features are the paid parts.
Run the free CLI on a CSV export of your failed charges from Stripe Dashboard. Takes 30 seconds.
v0.0.1 (CSV analysis + recovery-rate library) is on PyPI now. The live Stripe API integration and hosted dashboard ship in summer 2026.