Send Stripe emails with Resend, fully branded
Branded transactional emails, custom dunning, onboarding sequences. Fired from Stripe Workflows, delivered by Resend. The integration Stripe will not ship.
Free trial · From $19/mo · No credit card required
The problem
Out of the box, Stripe Workflows ships a Slack action and a Mailchimp action. That's it for email. If your transactional provider is Resend, with your templates and your verified domain, the path through Stripe Workflows is back to a hosted webhook handler with the same retry headaches as everything else. Mailchimp is a marketing list tool. Dunning, receipts, and refund confirmations are not marketing.
The Resend action closes that gap. Connect a Resend API key, pick a template id (or write inline HTML with JSONata), set From, Reply-To, and Tags, and the email fires on any Stripe event a workflow can be built on. Failed payment for the third time? Send the attempt-3 dunning email with a hosted invoice URL. New subscription? Send the welcome. Refund processed? Send the confirmation. The action dedupes on Stripe's invocation id, so a 5xx retry doesn't double-send.
How the Resend action works
- 1
Add a Resend API key
Generate a restricted API key in Resend with send permission and paste it into the action config. The key is encrypted per account. One key covers as many workflows as you want to wire up. - 2
Pick a template or write inline HTML
Reference an existing Resend template by id and pass variables, or write inline HTML directly with JSONata-templated fields. From, Reply-To, Tags, CC, and BCC are all configurable per send. - 3
Wire it to a Stripe event
Add the Resend step to any workflow. invoice.paid for receipts, invoice.payment_failed for dunning, customer.subscription.created for welcomes. The Stripe event provides all the templating data. - 4
Track deliveries in two places
The Outbound execution log records which Stripe invocation triggered which Resend send. Resend's own dashboard tracks open, click, and bounce. Between them you can debug delivery without leaving either tool.
{
"trigger": "invoice.payment_failed",
"action": "outbound.resend",
"config": {
"api_key": "${RESEND_API_KEY}",
"from": "billing@acme.com",
"to": "{{customer.email}}",
"reply_to": "support@acme.com",
"subject": "Payment issue on your Acme subscription",
"template_id": "tmpl_dunning_attempt_{{attempt_count}}",
"variables": {
"customer_name": "{{customer.name}}",
"amount": "{{invoice.amount_due / 100}}",
"update_url": "{{hosted_invoice_url}}"
},
"tags": [{"name": "category", "value": "dunning"}]
}
}Example workflow configuration
Screenshot of the Resend action panel in the Stripe Workflow builder. Shows an API key input with masked characters, From and Reply-To fields, a template id picker pulling templates from the connected Resend account, a variables grid, and a tags section. A connection-healthy indicator shows the Resend account is reachable.
Outbound vs Zapier
| Outbound | Zapier | |
|---|---|---|
| Lives inside the Stripe Dashboard | — | |
| Pricing model | From $19/mo flat | Per-task billing |
| Idempotent on Stripe invocation id | — | |
| Inline HTML and template-id modes | limited | |
| Setup time | ≈3 minutes | 15–25 minutes |
| Resend Tags supported for analytics | ||
| Native in the Stripe Workflow builder | — |
Frequently asked questions
Why not use Stripe's built-in Mailchimp action?+
Can I send to multiple recipients?+
What about attachments — can I attach the Stripe PDF receipt?+
Does it count against my Resend monthly limit?+
Can I disable retries for transactional emails I don't want re-sent?+
Related integrations
Stripe to your own Postgres
Pair Resend with a Postgres write so every transactional email is logged against the customer record.
Create Linear issues from Stripe
Failed payment hits the customer with a Resend email and your team with a Linear issue.
Trigger Stripe from any HTTPS POST
Coming with Inbound: a button in a Resend email could one day re-trigger a workflow.