Back to Blog

Stripe Email Automation: The Complete Guide to Billing-Triggered Emails

14 min read

Stripe knows more about your customers than almost any other system. When they upgrade, downgrade, cancel, or fail to pay, Stripe knows first. But most SaaS companies leave this data in Stripe, disconnected from their email marketing.

The companies that connect Stripe to email automation see the difference immediately. A customer upgrades and gets an email within seconds welcoming them to their new plan. A payment fails and recovery emails start before the customer even notices. A subscription is about to renew and they're reminded of the value they're getting.

This is what billing-aware email marketing looks like, and most companies aren't doing it.

This guide covers everything you need to build Stripe-triggered email automation: which webhook events matter, what emails to send for each, and complete templates you can implement today.

Why Stripe Email Automation Matters

Payment events are high-signal moments. When someone pays, they're engaged. When a payment fails, they need to know. When a subscription changes, they expect acknowledgment.

The timing of these emails matters enormously:

EventOptimal Response TimeWhy
New subscription< 5 minutesCapitalize on engagement
Upgrade< 5 minutesHelp them use new features
Payment failed< 1 hourStart recovery before they forget
Trial ending3-7 days beforeTime to convert
Renewal upcoming7-14 days beforeReduce surprise/chargebacks
CancellationImmediateLast chance to save

The pattern is clear: billing events need automated, immediate responses. Manual processes can't keep up, and delayed emails see dramatically lower engagement.

Beyond timing, Stripe events carry context that makes your emails dramatically more relevant. You know exactly which plan someone is on, how much they pay, what their billing cycle is, and when their next charge hits. This data transforms generic emails into personalized communications that feel like they were written specifically for each customer.

Stripe Webhook Events for Email Triggers

Stripe sends webhooks for everything. Here are the events that warrant email automation:

Subscription Lifecycle Events

Webhook EventWhat It MeansEmail Action
customer.subscription.createdNew subscription startedWelcome series, onboarding
customer.subscription.updatedPlan changed (up/down)Acknowledge change, guide to features
customer.subscription.deletedSubscription cancelledConfirm cancellation, win-back offer
customer.subscription.trial_will_endTrial ending in 3 daysConvert trial to paid
customer.subscription.pausedSubscription pausedConfirm pause, reactivation info
customer.subscription.resumedSubscription resumedWelcome back

Payment Events

Webhook EventWhat It MeansEmail Action
invoice.payment_succeededPayment processedReceipt, value reminder
invoice.payment_failedPayment didn't processRecovery sequence
invoice.upcomingInvoice coming (X days)Renewal reminder
invoice.finalizedInvoice readySend invoice/receipt

Customer Events

Webhook EventWhat It MeansEmail Action
customer.source.expiringCard expiring soonUpdate payment method
customer.updatedCustomer info changedConfirm changes
charge.refundedRefund processedConfirm refund
charge.dispute.createdChargeback initiatedInternal alert

Checkout Events

Webhook EventWhat It MeansEmail Action
checkout.session.completedCheckout finishedOrder confirmation
checkout.session.expiredCart abandonedRecovery sequence

Setting Up Stripe Webhooks

Before you can trigger emails, you need to receive Stripe events. Here's the technical setup:

Webhook Endpoint Basics

Your endpoint needs to:

  1. Receive POST requests from Stripe
  2. Verify the webhook signature
  3. Process events idempotently
  4. Return 200 quickly, then process async

Always verify webhook signatures. Without verification, anyone can send fake events to trigger emails.

Webhook Configuration in Stripe

In your Stripe Dashboard:

  1. Go to Developers > Webhooks
  2. Add endpoint URL
  3. Select events to receive
  4. Copy the webhook secret

Recommended events to subscribe to:

  • customer.subscription.created
  • customer.subscription.updated
  • customer.subscription.deleted
  • customer.subscription.trial_will_end
  • invoice.payment_succeeded
  • invoice.payment_failed
  • invoice.upcoming
  • customer.source.expiring
  • checkout.session.completed

Handling Webhook Edge Cases

Stripe webhooks aren't always straightforward. Here are common edge cases to handle:

Duplicate events. Stripe may send the same event more than once. Use the event ID to deduplicate—store processed event IDs and skip any you've already handled.

Out-of-order events. A subscription.updated event might arrive before subscription.created if there's a processing delay. Build your logic to handle missing context gracefully.

Subscription updates that aren't plan changes. The subscription.updated event fires for any change, including metadata updates and billing cycle changes. Check what actually changed before triggering an email—you don't want to send an "upgrade confirmation" when someone just updated their billing address.

Trial subscriptions. A subscription.created event fires for trial starts too. Check the status field to distinguish between active paid subscriptions and trials, and send the appropriate email.

Email Templates for Stripe Events

Now let's get to the actual emails. Here are templates for every major Stripe event.

New Subscription Emails

When customer.subscription.created fires, start your relationship right.

New paying customer

First email after first payment

Subject Line

Welcome to [planName] - you're all set

Email Body

Hi [firstName],

Welcome to [productName] [planName]!

Your subscription is active and you now have access to:

  • [Feature 1]
  • [Feature 2]
  • [Feature 3]

First things first: [Most important first action with link]

Here's what I recommend doing this week:

  1. [Specific action 1]
  2. [Specific action 2]
  3. [Specific action 3]

If you have any questions, just reply to this email. I read every message personally.

Thanks for becoming a customer. I'm excited to see what you build.

[senderName] Founder, [productName]

P.S. Here's your receipt for [amount]: [receiptLink]

Plan Change Emails

When customer.subscription.updated indicates a plan change, acknowledge it appropriately.

Plan upgrade

When customer upgrades to higher plan

Subject Line

Welcome to [newPlanName] - here's what's new

Email Body

Hi [firstName],

Thanks for upgrading to [newPlanName]!

Your new features:

  • [New feature 1]: [Brief explanation]
  • [New feature 2]: [Brief explanation]
  • [New feature 3]: [Brief explanation]

Get started with your new features: [Most exciting feature] is available now. Here's how to use it: [link]

Billing update:

  • New plan: [newPlanName] at [newAmount]/[interval]
  • Change effective: Immediately
  • Prorated credit: [prorationAmount] applied to next invoice

If you have questions about any of your new features, just reply.

Thanks for growing with us!

[senderName]

Payment Success Emails

When invoice.payment_succeeded fires, acknowledge and reinforce value.

Recurring monthly payment

Regular monthly payment confirmation

Subject Line

Receipt for your [productName] subscription

Email Body

Hi [firstName],

Your payment was processed successfully.

Receipt:

  • Amount: [amount]
  • Date: [date]
  • Invoice: [invoiceLink]

Your [productName] summary this month:

  • [Usage metric 1]
  • [Usage metric 2]
  • [Achievement or milestone]

Your subscription continues and your next payment of [amount] will be charged on [nextBillingDate].

Need to update billing? [billingPortalLink]

[senderName]

Payment Failed Emails

When invoice.payment_failed fires, start recovery immediately. Payment failure is the leading cause of involuntary churn, and a well-designed dunning sequence can recover 20-40% of failed payments. For a broader look at churn prevention strategies, see our guide on reducing SaaS churn with email.

First failed payment attempt

Initial failure notification

Subject Line

Issue with your [productName] payment

Email Body

Hi [firstName],

We tried to process your [productName] payment of [amount], but it didn't go through.

What to do: Update your payment method here: [updatePaymentLink]

What happens next:

  • We'll automatically retry in [retryDays] days
  • Your account remains fully active during this time
  • Update your card now to avoid any interruption

Common reasons this happens:

  • Card expired
  • Insufficient funds
  • Bank security hold

If you've recently gotten a new card, you may need to update even if the number is the same.

Questions? Reply to this email.

[senderName]

Trial Ending Emails

When customer.subscription.trial_will_end fires (typically 3 days before trial end), convert them. This is one of the most revenue-critical emails you'll send. For a deep dive into trial conversion strategies beyond the Stripe trigger, see our guide on SaaS trial-to-paid email sequences.

Active trial user

For users who've been active

Subject Line

Your trial ends in 3 days - here's what happens

Email Body

Hi [firstName],

Your [productName] trial ends in 3 days.

What you've accomplished:

  • [Usage metric 1]
  • [Usage metric 2]
  • [Milestone reached]

What happens on [trialEndDate]:

  • If you have a card on file: You'll be charged [amount] and keep full access
  • If you don't: Your account will be downgraded to the free plan

Want to continue? Add a payment method: [addPaymentLink]

Not sure yet? Reply and tell me what you're trying to figure out. Happy to help you evaluate.

[senderName]

Renewal Reminder Emails

When invoice.upcoming fires (configurable in Stripe, typically 7-30 days before), remind them.

Large annual payment coming

Upcoming annual renewal notification

Subject Line

Your annual renewal is coming up ([amount] on [date])

Email Body

Hi [firstName],

Your [productName] subscription renews on [renewalDate] for [amount].

Your subscription:

  • Plan: [planName]
  • Amount: [amount]
  • Renewal date: [renewalDate]
  • Payment method: Card ending in [lastFour]

Your year with [productName]:

  • [Usage stat 1]
  • [Usage stat 2]
  • [Achievement or value delivered]

Need to make changes?

  • Update payment method: [billingPortalLink]
  • Change your plan: [changePlanLink]
  • Questions: Reply to this email

If everything looks good, no action needed. Your subscription will renew automatically.

[senderName]

Cancellation Emails

When customer.subscription.deleted fires, acknowledge and offer a path back.

Customer cancelled

Confirming subscription cancellation

Subject Line

Your [productName] subscription has been cancelled

Email Body

Hi [firstName],

Your [productName] subscription has been cancelled.

What happens now:

  • Access continues until: [accessEndDate]
  • After that: [What they'll lose access to]
  • Your data: Preserved for [dataRetentionPeriod]

If you change your mind: You can reactivate anytime: [reactivateLink]

Quick question: What was the main reason you cancelled? Reply with just a number:

  1. Too expensive
  2. Not using it enough
  3. Missing features I need
  4. Found a better alternative
  5. Other

Your feedback genuinely helps me make [productName] better.

Thanks for giving us a try.

[senderName]

Combining Stripe Events with Product Data

The most powerful Stripe email automations don't rely on billing data alone. They combine Stripe events with product usage data to create highly relevant emails.

Payment succeeded + high usage: "Thanks for your payment. You used [product] a lot this month—[specific stat]. Here's a tip to get even more value: [advanced feature tip]."

Payment succeeded + low usage: "Your payment just processed. I noticed you haven't used [key feature] recently. Here's a quick refresher on how it can help: [link]." This is particularly important for reducing churn—users who pay but don't use your product are the most likely to cancel next month.

Trial ending + highly active: "Your trial ends in 3 days. Based on your usage, you'd be a great fit for [specific plan]. You've already [specific achievement]—upgrading means you won't lose any of that."

Trial ending + inactive: "Your trial ends in 3 days. I noticed you haven't had a chance to explore much. Want me to show you around? Reply and I'll set up a quick call."

Upgrade + specific feature usage: "Welcome to [plan]. I see you've been using [feature] a lot—with your new plan, you can now [enhanced capability]. Here's how: [link]."

This combination of billing events and product data creates emails that feel genuinely personal rather than template-driven.

Measuring Stripe Email Performance

Track these metrics for each Stripe-triggered email:

Payment recovery rate: What percentage of failed payments are recovered within 14 days? Industry benchmark is 20-40%. If you're below 20%, your dunning sequence needs work.

Trial conversion rate by email engagement: Do users who engage with trial-ending emails convert at higher rates? They should. If not, your emails aren't adding value.

Churn rate by cancellation email engagement: Do users who respond to cancellation emails churn at lower rates? This measures whether your save offers work.

Receipt email engagement: Do users who click on value summaries in receipt emails have lower churn? These value reminders justify the ongoing expense.

Time to recovery: How quickly do users update payment methods after a failure notification? Faster recovery correlates with simpler update flows and clearer email CTAs.

For guidance on connecting these metrics to your broader email KPIs, see our guide on SaaS email marketing KPIs. To understand the full financial picture, our guide on calculating email marketing ROI for SaaS shows how to quantify the revenue impact of Stripe automations.

Implementation Architecture

Here's how to connect everything:

Webhook Processing Flow

Stripe Event → Webhook Endpoint → Event Processor → Email Trigger → Send

Key implementation considerations:

  1. Respond to Stripe quickly (< 2s): Acknowledge the webhook, then process async
  2. Handle idempotency: Check if you've already processed this event ID
  3. Log everything: You'll need it for debugging
  4. Retry failed sends: Email systems can fail; have retry logic

Customer Data Enrichment

Stripe webhooks contain payment data, but not all customer data. You may need to:

  1. Look up customer in your database for name, email
  2. Fetch additional Stripe data (customer object, subscription details)
  3. Calculate usage/engagement metrics from your application

The email should feel personalized, not like a generic payment notification.

Testing Your Stripe Integration

Before going live:

  1. Use Stripe test mode: All webhooks work the same in test mode
  2. Send test webhooks from CLI: stripe trigger invoice.payment_failed
  3. Verify email content: Actually receive and read every automated email
  4. Test edge cases: Partial refunds, prorations, plan changes mid-cycle
  5. Check timing: Ensure emails arrive within expected timeframes

The Bottom Line

Stripe email automation isn't optional for serious SaaS. The billing events Stripe captures are too important to leave unconnected from your customer communication.

Start with the essentials:

  1. New subscription welcome
  2. Payment failed recovery
  3. Cancellation confirmation

Then expand to: 4. Upgrade/downgrade acknowledgment 5. Trial ending conversion 6. Renewal reminders

Each automated email based on Stripe events recovers revenue, reduces churn, or improves customer experience. The ROI is immediate and measurable.

If you're looking for a platform that makes Stripe email automation straightforward, Sequenzy has native Stripe integration that triggers emails from any webhook event. But whatever tool you use, the principle is the same: connect your billing to your email and watch retention improve.

For more on billing-related emails, check out our guide on payment recovery sequences for advanced dunning strategies, and dunning email sequences for the foundational payment recovery playbook. If you want to learn about the technical integration side, see our guides on how to integrate email marketing with Stripe and sending emails from Stripe events.

Your billing events are talking. Make sure your emails are listening.

Frequently Asked Questions

How quickly should Stripe-triggered emails be sent?

Within 5 minutes for most events. Payment failures, subscription changes, and welcome emails should feel immediate. The only exception is win-back emails after cancellation—those benefit from a 24-48 hour delay to avoid seeming desperate.

Should I send receipts if Stripe already sends them?

Yes, but make yours better. Stripe's default receipts are functional but impersonal. Your receipt emails should include usage summaries, value reminders, and a personal touch. Disable Stripe's built-in receipt emails if you're sending your own to avoid duplicates.

How many payment failure emails should I send?

Three to four emails over 10-14 days is standard. First email immediately after failure, second at day 3, third at day 7, final warning at day 10-12. Each email should increase urgency gradually without being aggressive. More than four emails typically doesn't improve recovery rates and may annoy customers.

What if a customer's card is expiring before their next charge?

Send a proactive email 2-3 weeks before the card expires. This is one of the easiest churn prevention tactics—catching an expiring card before a payment fails avoids the entire dunning sequence. Include a direct link to update their payment method.

Should I personalize trial-ending emails based on usage?

Absolutely. An active trial user who's used the product daily gets a different email than someone who signed up and never returned. Active users need conversion justification (here's what you'll lose). Inactive users need re-engagement (here's what you missed). The same email to both groups will underperform for both.

How do I handle subscription pauses vs. cancellations?

Pause and cancel trigger different emails. Pause emails should confirm the pause, explain when billing resumes, and reassure that data is preserved. Cancellation emails should confirm the cancellation, ask for feedback, and offer alternatives. Treat pauses as a positive sign—the customer wants to come back—and make resuming as easy as possible.

What's the most common Stripe email automation mistake?

Not handling the subscription.updated event carefully. This event fires for any subscription change, not just plan upgrades/downgrades. If you trigger an email on every update, customers will get confusing messages when metadata changes or billing anchors shift. Always check what specifically changed before sending.

Can I use Stripe metadata to personalize emails further?

Yes, and you should. Store relevant data in Stripe metadata (user role, company size, primary use case) so your email templates can reference it. This avoids extra database lookups during webhook processing and keeps your email personalization fast and reliable.