Back

How to Prevent Failed Payments: Dunning Strategies for SaaS Startups

MT
MVPHub Team
•
4 min read

How to Prevent Failed Payments: Dunning Strategies for SaaS Startups

Failed payments cause involuntary churn — customers who want to keep paying but can't because their card expired, was declined, or hit its limit. This accounts for 20-40% of all SaaS churn. The good news: effective dunning can recover 30-50% of failed payments.


Why Payments Fail

ReasonFrequencyRecoverable?
Card expired40%Yes (card updater or new card)
Insufficient funds25%Yes (retry in a few days)
Card declined by bank20%Maybe (user contacts bank)
Fraud prevention10%Maybe (user verifies)
Card canceled/lost5%Yes (user adds new card)

The Dunning Playbook

Step 1: Configure Stripe's Smart Retries

Stripe offers automatic retry logic called Smart Retries that uses machine learning to pick the best retry times. Enable this in Stripe Dashboard → Settings → Billing → Automatic collection.

Recommended settings:

  • Enable Smart Retries
  • Retry up to 4 times over 3-4 weeks
  • Mark subscription as unpaid after all retries fail

Step 2: Send Dunning Emails

DayEmailSubject Line
Day 0 (payment fails)"Payment failed — please update your card"Action needed: Payment failed
Day 3 (1st retry fails)"We're having trouble charging your card"Your subscription may be interrupted
Day 7 (2nd retry fails)"Update your payment method to keep access"Last chance to update payment
Day 14 (3rd retry fails)"Your subscription will be canceled in 7 days"We don't want to lose you
Day 21 (final)"Your account has been downgraded"Your subscription has been canceled

Email Best Practices

  • Include a direct link to update payment method (Stripe Customer Portal)
  • Be friendly, not threatening — they didn't mean for the payment to fail
  • Show what they'll lose — "You'll lose access to [specific features]"
  • Make it one-click — Minimize steps to update the card

Step 3: In-App Notifications

For users who are logged in but haven't checked their email:

  • Banner at top of dashboard — "Your payment failed. Update your card to keep access."
  • Modal on login — For users past the 7-day mark
  • Billing page alert — Prominent warning with update button

Access During Dunning

ApproachProsCons
Full access during retriesBetter UX, higher recoveryRisk of free usage
Limited access (read-only)Urgency to fix paymentMay frustrate loyal users
Grace period (7 days full, then limited)Balanced approachMore complex to implement

Recommendation: Full access for 7 days, then read-only access for 14 more days, then cancel.


Prevention (Better Than Recovery)

Card Updater

Stripe automatically updates expired cards through card network partnerships. This silently fixes ~30% of expiration-related failures without any user action.

Pre-Expiration Emails

Send an email 30 days before a user's card expires: "Your card ending in 4242 expires next month. Update it now to avoid service interruption."


Measuring Dunning Success

MetricFormulaTarget
Failed payment rateFailed invoices / Total invoices<5%
Recovery rateRecovered payments / Failed payments>40%
Involuntary churn rateUnrecovered failures / Total customers<1%
Time to recoveryAverage days from failure to recovery<7 days

Setting up billing? Read How to Build SaaS Billing With Stripe.

Need a billing-ready template? Browse on MVPHub.


Working products with full source code — live demo, one-time purchase, instant delivery.

Browse the marketplace
FU LIVEecommerce

Furniture Store

$39

An elegant furniture and home furnishing e-commerce app with a design-forward Next.js storefront for SEO-optimized product pages and server-rendered category browsing. Alternative framework and mobile ports are available on demand. The visual design emphasizes large product imagery, room-based browsing, and material/color variant selection. Built with Radix UI, shadcn/ui, Tailwind CSS, and Framer Motion for a premium feel. Connects to any headless commerce backend through a pluggable API layer. Form handling via React Hook Form with Zod validation ensures robust checkout and account flows. Great for furniture brands, interior design shops, or home decor marketplaces.

★★★★★0 soldExpo · Next.js
PE LIVEecommerce

Perfume Store

$39

A luxury-styled perfume and fragrance e-commerce app built for premium brand presentation. The ready-to-buy Next.js storefront features rich product pages with scent profiles, bottle size variants, gift set options, and server-rendered collections. Mobile, backend, and alternative framework ports are available on demand. The design uses shadcn/ui and Tailwind CSS with an elegant, minimalist aesthetic suited for luxury goods. Easy to customize — swap product data, update branding, and deploy. Perfect for perfume brands, fragrance boutiques, or niche scent marketplaces.

★★★★★0 soldExpo · Next.js
BE LIVEecommerce

Beauty Products Store

$39

A modern, full-featured beauty and cosmetics e-commerce application built around a server-rendered Next.js storefront with SEO optimization. Alternative framework and mobile ports are available on demand. Connects seamlessly to a headless e-commerce backend such as Shopify or a custom API. Features product browsing with category filters, search, cart management, Stripe checkout, user authentication, and order tracking. The UI is built with Radix UI and shadcn/ui components styled with Tailwind CSS for a polished, accessible experience. Easy to set up — clone, install dependencies, configure your backend URL, and you are live. Ideal for launching a beauty brand, skincare line, or cosmetics marketplace.

★★★★★0 soldExpo · Next.js

Keep reading — popular SaaS guides on MVPHub.

All SaaS articles

Explore other MVP verticals

MVPHub publishes templates and guides for ecommerce, SaaS, marketplaces, AI apps, booking platforms, subscription stores, directory sites, and more. Here are fresh picks from other verticals.