What you can do
- Trigger automations from Stripe events. Kick off email flows when subscriptions are created, payments fail, customers cancel
- Auto-sync customers into your audience. Every
customer.*and subscription event upserts the customer into Brew withstripe_*custom fields (stripe_customer_id,stripe_subscription_status,stripe_subscription_plan,stripe_lifetime_value_cents,stripe_renews_at, etc.) you can filter and segment on - Backfill historical customers with one click. After connecting, use the Sync customers button to import every Stripe customer in the background
- Personalize with billing context. Reference plan, amount, and customer details inside emails
- Recover revenue. Dunning and win-back automations fire automatically without you wiring up webhooks
How it works
- You click Connect with Stripe in Brew — a one-click OAuth flow (“Stripe Apps OAuth”). Brew never sees your Stripe API keys.
- Brew automatically registers a Connect webhook in your Stripe account on completion. No manual webhook setup, no URL to paste.
- Stripe signs every webhook with its signing secret. Brew verifies the signature with the official Stripe SDK on receipt.
- For each verified event Brew (a) starts every Published automation whose trigger matches, (b) upserts the Stripe customer into your audience with
stripe_*custom fields, and (c) optionally syncs the customer’s first/last name (toggle per-event in Manage → Settings → Sync customer name if you’d rather keep contact names you own).
Setup
Click Connect with Stripe in Brew
Open Integrations in Brew, click the Stripe card, and click Connect. You’ll be redirected to Stripe to authorize the connection.
Approve the OAuth scopes
Brew requests read access to customers, subscriptions, invoices, charges, refunds, payment intents, quotes, prices, and checkout sessions. You can revoke access at any time from your Stripe Dashboard.
Brew provisions everything else
Once Stripe redirects you back, Brew automatically registers the Connect webhook and provisions the 22 supported event rows on this brand. No manual webhook setup. No per-event toggle to flip. Whether any individual event actually fires emails is gated by the bound automation being Published.
Explore the Manage tab
The Manage tab has four sub-tabs:
- Sync — backfill every historical Stripe customer into your Brew audience in the background.
- Events — live feed of every Stripe webhook this brand has received, useful for confirming the integration is wired up.
- Settings — read-only event catalogue plus a per-event Sync customer name Switch (lets you opt OUT of letting Stripe overwrite contact first/last names you may have authored elsewhere). Triggers don’t have an enable/disable toggle — they fire as long as a Published automation is wired to them.
- Templates — one-click starter automations (welcome, trial-end, failed-payment recovery, win-back) preloaded into chat.
Build + publish your first automation
Open the canvas, create an automation, pick a Stripe event as the trigger, and click Publish. The moment Stripe fires that event for any of your customers, Brew runs the automation.
Verify it's working
Trigger a test event (in Stripe test mode: create a
100% off coupon, place a subscription on yourself, or use Send test webhook from the Stripe Dashboard’s webhook page). Within a few seconds it should appear in Manage → Events on the Stripe integration page in Brew, and any Published automation bound to that event runs against the test payload.Brew only listens for events. It can’t create charges, refund payments, or modify subscriptions.
Triggering automations
Connecting Stripe provisions all 22 supported events as triggers in one step — there’s no per-event opt-in. Each event row sits dormant until you publish an automation bound to it. To start firing emails from a Stripe event:- Open the automation builder and create a new automation.
- Pick the Stripe event you want from the trigger picker (e.g.
customer.subscription.created). - Build the flow: filters, delays, sendEmail nodes, and any branching.
- Hit Publish. The next matching event will fire the automation.
Why no per-event toggle? Triggers in Brew are always-on — the fire decision lives entirely on the automation’s Published state. This way “I want to pause one specific email” stays in the automation builder where the rest of the flow logic lives, instead of being split across two tabs. See How event triggers work.
Supported events
Brew supports 22 Stripe events as automation triggers, across 6 categories: Checkoutcheckout.session.completedcheckout.session.async_payment_succeededcheckout.session.async_payment_failed
customer.createdcustomer.updatedcustomer.deleted
customer.subscription.createdcustomer.subscription.updatedcustomer.subscription.pausedcustomer.subscription.resumedcustomer.subscription.trial_will_endcustomer.subscription.deleted
invoice.createdinvoice.paidinvoice.payment_failedinvoice.upcoming
quote.finalizedquote.acceptedquote.canceled
charge.refundedrefund.createdpayment_intent.payment_failed
Common patterns
| Goal | Stripe event |
|---|---|
| Welcome new subscriber | customer.subscription.created |
| Plan-change confirmation | customer.subscription.updated |
| Dunning for failed payments | invoice.payment_failed |
| Pre-renewal reminder | invoice.upcoming |
| Notify before trial ends | customer.subscription.trial_will_end |
| Win-back on cancel | customer.subscription.deleted |
| Receipt | invoice.paid |
| Refund confirmation | charge.refunded or refund.created |
| Post-purchase confirmation | checkout.session.completed |
| Quote follow-up | quote.finalized, quote.accepted, quote.canceled |
Personalization
| Variable | Example |
|---|---|
{{@trigger:output.payload.firstName}} | Alex |
{{@trigger:output.payload.lastName}} | Morgan |
{{@trigger:output.payload.amount}} | 2999 (cents) |
{{@trigger:output.payload.currency}} | usd |
{{@trigger:output.payload.status}} | paid, past_due, canceled, etc. |
{{@trigger:output.payload.invoiceNumber}} | B23B89B0-0001 |
{{@trigger:output.payload.subscriptionId}} | sub_1A2B3C |
Bulk-import existing customers
After connecting, click Sync customers in the Stripe integration panel to import every existing Stripe customer into your Brew audience in the background. Brew pages through Stripe’s customer list so the dialog renders live progress, and the job is resumable from the last cursor if anything fails. Imported customers land with the samestripe_* custom fields the webhook contact-sync writes, so they’re immediately filterable and ready to receive automation emails.
Troubleshooting
An event arrived but no automation fired
An event arrived but no automation fired
Open the canvas and confirm at least one automation bound to this event is set to Published (not Draft). The Brew integration’s Manage → Events sub-tab confirms the webhook is arriving — if it isn’t there, disconnect + reconnect Stripe (resets the Connect webhook secret). If the event is there but no email sent, the only remaining gate is
automation.published.Stripe shows 400 'Invalid signature' on every delivery
Stripe shows 400 'Invalid signature' on every delivery
Disconnect and reconnect the Stripe integration in Brew. The webhook secret is managed by Brew automatically — if it’s out of sync, reconnecting re-registers a fresh signing secret.
Refund automation doesn't fire on charge.refunded
Refund automation doesn't fire on charge.refunded
Use
refund.created — it ships with richer refund-specific details (reason, status, partial vs full). charge.refunded is also supported but only carries charge-level totals.Brew is overwriting customer names I already had
Brew is overwriting customer names I already had
In the Stripe integration’s Manage → Settings sub-tab, every event has a separate Sync customer name toggle. Turn it off for events where you’d rather keep the names already in your audience.
I want to test before going live
I want to test before going live
Connect Brew to your Stripe test mode first. Create a test customer and subscription, watch them appear in Manage → Events, pre-publish your automations as Drafts, run test sends, then connect production once you’re happy.
Requirements
- A Stripe account with admin access (needed to authorize OAuth)
- Live mode connected for production automations; test mode is supported for testing
Need Help?
Our team is ready to support you at every step of your journey with Brew. Choose the option that works best for you:- Self-Service Tools
- Talk to Our Team
Search Documentation
Type in the “Ask any question” search bar at the top left to instantly find relevant documentation pages.
ChatGPT/Claude Integration
Click “Open in ChatGPT” at the top right of any page to analyze documentation with ChatGPT or Claude for deeper insights.