PayDam vs Stripe Smart Retries: When to Add a Branded Recovery Layer
Published 2026-04-29 · 8-minute read
Almost every prospect we talk to asks some version of the same question: "Stripe already retries failed payments and sends a recovery email - why do I need anything else?"
It's a fair question, and the honest answer is that for some teams, you don't. Stripe Smart Retries is a real piece of engineering, and treating it as a strawman is dishonest. But it does a specific job - the retry schedule - and stops short of the deeper customer-facing layer some teams want to control.
This post is the long-form answer to that question: what Smart Retries does well, where it stops, what a dedicated dunning layer adds on top, and how to decide whether you actually need one. We'll be honest about cases where Stripe alone is fine.
What Stripe Smart Retries does well
Smart Retries is Stripe's automatic re-attempt engine for failed subscription invoices. When a charge fails - expired card, insufficient funds, soft decline, whatever - Smart Retries decides when to try again, based on a machine-learning model trained on Stripe's full payment dataset. The retry intervals depend on the failure reason: an "insufficient funds" decline gets retried differently from an "expired card" decline, because the recovery dynamics of those two cases are completely different.
Three things make this useful:
The training data is huge. Stripe sees orders of magnitude more payment failures than any single SaaS will. Stripe says Smart Retries uses dynamic signals, including timing-related behavior, to choose retry moments.
It's built into Stripe Billing. Smart Retries is configured in Stripe's revenue recovery settings, so many teams should leave it enabled instead of replacing it with homegrown retry logic.
It can recover passive failures. Some failed payments recover on a later retry because funds clear, an issuer block resolves, or a temporary decline goes away. Those recoveries may not need customer action.
Our position: leave Stripe Smart Retries on unless you have a specific billing reason not to. PayDam is designed to add the customer-facing layer around Stripe's retry engine, not replace that retry engine.
Where Smart Retries stops being enough
Smart Retries owns the retry schedule. The customer-facing layer - the email, the update flow, the engagement tracking, the per-invoice reporting - is a much smaller part of Stripe's product, and four limitations come up over and over:
1. Native emails, not a branded recovery sequence
Stripe's native failed-payment notifications are useful, and Stripe can send an email after a failed payment with a hosted update-payment page. What you do not get is PayDam's branded, editable, multi-touch recovery sequence with invoice-level engagement history.
In real-world recovery, follow-up matters. Customers miss the first reminder, get distracted, mean to fix it later, and forget. PayDam exists for teams that want that follow-up layer to match their own brand and cadence.
2. Limited sender and copy control
Stripe lets you configure native customer email behavior and hosted pages in Stripe. PayDam is for teams that want direct control over the recovery message itself: sender identity, support address, logo placement, brand color, and the sequence of follow-ups.
3. No engagement signal
Stripe email logs focus on delivery history. PayDam adds recovery-specific open, click, and payment-update events on the invoice timeline so you can see which failed invoices are actively engaging with the sequence.
4. No per-invoice recovery view
Inside Stripe you can see invoices that are open, past_due, paid, or void. What you cannot easily see is "how is this specific failed invoice progressing through the recovery sequence" - when the first email went out, whether the customer clicked, where they are in the funnel, when the next contact will fire. That timeline lives in webhook event payloads and email service logs, scattered across systems.
The decorator pattern: keep Stripe, add a layer
Most thinking about dunning frames it as a binary: "use Stripe's defaults, OR replace them with a third-party tool." The right framing is different - it's both.
PayDam is built as a decorator layer on top of Stripe Smart Retries, not a replacement. Stripe keeps doing what it does well - running the retry schedule on its ML-trained model, attempting charges, handling payment-method update flows on its hosted forms. PayDam replaces only the parts where Stripe's defaults stop being enough: the customer-facing emails, the engagement tracking, the recovery dashboard.
In practice that means:
- Smart Retries stays on. Same Stripe retry schedule and same automatic payment reattempts.
- Stripe's customer-facing failed-payment emails usually get turned off - the in-app Stripe setup checklist points merchants to the exact toggle after signup.
- PayDam takes over the customer-facing layer: branded multi-touch emails from your domain (or a verified shared sender), signed recovery pages, opens/clicks tracking, and a dashboard that shows each failed invoice's progress.
- Stripe is still the system of record for invoices, payments, and subscription status. PayDam reads Stripe events; it never charges cards, never holds card data, never replaces Stripe Billing.
This is important because it means there's nothing scary to roll back. If PayDam ever stopped, you can re-enable Stripe's native customer emails. You're not betting your billing infrastructure on a third-party startup; you're adding a polish layer that can be turned off without replacing Stripe Billing.
Side-by-side: Stripe default vs PayDam decorator
| Capability | Stripe Smart Retries alone | Stripe + PayDam |
|---|---|---|
| Payment retry schedule | Stripe ML-driven (recommended) | Stripe ML-driven (unchanged) |
| Customer-facing email | Native Stripe customer email and hosted update flow | Multi-touch sequence from your domain or display name |
| Branding | Stripe-hosted branding controls | Logo, accent color, sender name, support email throughout the email |
| Number of touchpoints | Configured in Stripe Billing settings | Up to 10 (Scale tier), spaced over a 30/60/90-day window |
| Payment-method update flow | Stripe-hosted update page (link in email) | Stripe-hosted update page via customer-specific recovery page |
| Open / click tracking | Native email logs, not PayDam-style recovery engagement timeline | Per-invoice timeline of opens, clicks, and updates |
| Recovery dashboard | Stripe Billing analytics (general) | Failed-invoice-specific dashboard (Recovered / Recovering / Lost) |
| Pause recovery on a single invoice | Not directly | Dashboard action |
| Cost | Included with Stripe Billing | $0–99/mo plus a small success fee on recovered invoices |
When Stripe alone is enough
We genuinely think there are cases where adding a dunning layer isn't worth it:
- Very early stage. If you have under ~$5K MRR, the absolute dollar value of recoverable failed payments is small enough that the time to integrate any new tool is better spent elsewhere.
- Annual or one-time payments only. If you don't run recurring monthly billing, "dunning" doesn't really apply - you have a checkout-recovery problem, not a recovery-sequence problem.
- You're already using a full retention platform. If you've already paid for Churnkey or Stunning and configured them well, swapping in PayDam may save money but may not materially change recovery rate. The math only works if the simpler tool's price and complexity are meaningfully lower for your use case - see the pricing guidance.
- Brand doesn't matter for your use case. Some products genuinely don't need a branded dunning experience - internal tools, B2B accounts where billing is handled by procurement, certain regulated contexts. If your customers don't read marketing emails, they probably don't need branded dunning either.
The threshold where a focused dunning layer starts to pay back depends on your failed-payment volume, invoice size, and support load. Use your own failed-invoice data rather than a generic benchmark.
What PayDam deliberately doesn't do
Honest scoping matters. There are things PayDam intentionally doesn't include, and you should know about them before evaluating:
- No replacement retry engine. We don't run our own retry schedule. Stripe Smart Retries does that. If you turn off Smart Retries on Stripe's side, PayDam doesn't fill the gap - your retries just stop.
- No cancellation flow / save offer / cancel-survey UI. Those belong in a retention platform like Churnkey. PayDam handles failed-payment recovery only - involuntary churn, not voluntary churn.
- No SMS or in-app banners in v1. PayDam is email-only today.
- No A/B testing of email copy in the product. You can run multiple template archetypes and switch between them, but there's no integrated A/B test harness in the dashboard.
- No card data, ever. PayDam never sees raw card numbers, CVCs, or bank details. Payment-method changes happen on Stripe-hosted forms reached from signed recovery pages.
Some of these are deliberate scoping choices - we chose not to be a full retention platform. If you need cancellation flows, SMS, in-app messaging, or native A/B testing, you need a broader retention category than PayDam's current scope.
Decision framework
Quick gut check on whether Stripe alone is fine vs whether to layer PayDam on top:
- Are you running recurring subscription billing on Stripe?
- Do you have at least ~$5K–10K MRR worth of recurring invoices each month?
- Do you care whether the recovery message feels like it came from you, or are you comfortable with the native Stripe customer email experience?
- Would you act on per-invoice recovery data - open rates, click rates, where each customer is in the funnel - if you had it?
- Do you want to run more than one touchpoint per failed payment?
If the answers are yes / yes / care / yes / yes, a dedicated dunning layer on top of Smart Retries is worth evaluating. If you're yes / no / don't care / no / no, Stripe's defaults are probably fine.
Related reading: The complete guide to Stripe payment recovery · What is Stripe dunning? · How PayDam works · Pricing
