Run · Payments · intermediate
Set Up Failed Payment Recovery Emails
Payments SaaS intermediate Stripe
How to use
- Copy the prompt below
- Paste it into Stripe
- Review the output and follow up with refinements
Prompt
I need to set up a dunning system to recover failed subscription payments. Most SaaS products lose 5-10% of revenue to involuntary churn — help me minimize that with Stripe's built-in tools plus custom emails.
Product details:
- Product: [your SaaS name]
- Billing: Stripe subscriptions (monthly and/or annual)
- Current MRR: $[X] (even a rough estimate helps prioritize)
- Email sending: [e.g. "Stripe's built-in emails", "SendGrid", "Resend", "ConvertKit"]
- Frontend framework: [e.g. Next.js, React — for the update payment page]
- Estimated failed payment rate: [e.g. "don't know yet", "about 5%"]
Set up the complete recovery system:
1. Stripe retry settings (Smart Retries):
- Navigate to: Settings > Billing > Subscriptions and emails > Manage failed payments
- Enable Smart Retries (Stripe's ML-based retry timing)
- Configure the retry schedule: recommend the optimal number of retries and timing
- Set what happens after all retries fail: cancel subscription vs mark as unpaid
- Explain why Smart Retries outperform fixed-schedule retries
2. Stripe's built-in dunning emails:
- Enable the 3 default payment failure emails in Stripe Dashboard
- Customize each email:
- Email 1 (sent immediately): "Your payment didn't go through"
- Email 2 (sent after 3 days): "Action needed — update your card"
- Email 3 (sent after 7 days): "Last chance before your account is paused"
- For each email, write the subject line and body copy:
- Tone: helpful and human, not threatening
- Include a direct link to update payment method
- Mention what they'll lose access to if not resolved
- Keep each under 100 words
3. Custom recovery page:
- Build an "Update your payment method" page at /account/billing or /update-payment
- Use Stripe's Customer Portal or create a custom form with Stripe Elements
- Show the customer: what failed, when their access expires, and a form to enter a new card
- Give me the complete code for this page in [frontend framework]
- After successful update, redirect to a confirmation page and trigger a "payment_recovered" event
4. Webhook-driven custom emails (if I want more control than Stripe's defaults):
- Listen for these Stripe webhook events:
- invoice.payment_failed — send custom failure notification
- customer.subscription.updated (status: past_due) — send escalation email
- customer.subscription.deleted — send final "we're sorry to see you go" email
- invoice.paid (after previously failing) — send "welcome back" confirmation
- Give me the webhook handler code and email copy for each event
5. In-app notifications:
- Show a banner at the top of the dashboard when payment is past due
- Include a one-click link to the Stripe Customer Portal to update their card
- Give me a React component for this banner with the logic to show/hide it based on subscription status
6. Recovery metrics to track:
- Percentage of failed payments recovered (target: 50-70%)
- Average time to recovery
- Revenue saved per month through dunning
- Show me where to find these numbers in Stripe Dashboard
Build this so I set it up once and it runs forever. Prioritize the highest-impact steps first in case I run out of time. Related prompts
Was this helpful?
Enjoying this guide?
Get weekly practical guides, plus tool updates and implementation playbooks.