Run · Payments · intermediate

Set Up Failed Payment Recovery Emails

Payments SaaS intermediate Stripe

How to use

  1. Copy the prompt below
  2. Paste it into Stripe
  3. 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?