- 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-prefixed custom fields (stripeCustomerId,stripeSubscriptionStatus,stripeSubscriptionPlan,stripeLifetimeValueCents,stripeRenewsAt, 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 Live automation whose trigger matches, (b) upserts the Stripe customer into your audience with
stripe-prefixed 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
1
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.
2
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.
3
Brew provisions everything else
Once Stripe redirects you back, Brew registers the Connect webhook and adds the 22 supported events to this brand. There is no manual webhook setup and no per-event toggle to flip. Whether any individual event actually fires emails is gated by the bound automation being Live.
4
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 Live automation is wired to them.
- Templates: one-click starter automations (welcome, trial-end, failed-payment recovery, win-back) preloaded into chat.
5
Build and 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.
6
Verify it's working
Trigger a test event in a Stripe sandbox or test mode. Create an object that fires the event, such as a customer or a subscription on a test customer. Or run
stripe trigger customer.subscription.created in the Stripe CLI or Stripe Shell.Within a few seconds the event appears in Manage → Events on the Stripe integration page in Brew. Any Live 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.
Supported Events
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, for example
customer.subscription.created. - Build the flow: filters, delays, sendEmail nodes, and any branching.
- Click 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 Live 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 Connected-Source Events.Brew supports 22 Stripe events as automation triggers, across 6 categories: Checkout
checkout.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
Kind follows What You Can Send. Send transactional email, a direct response to something the person did, from a transactional-purpose domain. Marketing email needs the contact’s opt-in, and being synced from Stripe isn’t consent. Both means the confirmation is transactional and the follow-up is marketing.Personalization
These resolve as merge tags in the email body, subject line, and preview text. Use a fallback wherever an empty value would read badly, like{{ firstName | there }}. The trigger. prefix reads the same field, so {{ trigger.firstName }} and {{ firstName }} resolve alike; see Namespaces.
Stripe’s opaque object IDs aren’t merge tags or filter fields. That covers
subscriptionId, invoiceId, customerId, checkoutSessionId, quoteId, chargeId, refundId, paymentIntentId, and objectId. Brew strips them from the trigger payload before automations see them.The Stripe customer ID still lands on the synced contact as the stripeCustomerId custom field. Filter and segment on it there.Bulk-Import Existing Customers
After connecting, click Sync customers in the Stripe integration panel. Brew imports every existing Stripe customer into your audience in the background, and the dialog shows live progress. If anything fails, the job resumes from where it stopped. Imported customers land with the samestripe-prefixed custom fields the webhook contact-sync writes, so they’re immediately filterable.
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 Live (not Draft). The Brew integration’s Manage → Events sub-tab confirms the webhook is arriving.If the event isn’t there, disconnect and reconnect Stripe to reset the Connect webhook secret. If the event is there but no email went out, check the automation is published. Then check the contact isn’t unsubscribed or suppressed.From an agent,
check_trigger lists what blocks the trigger. list_trigger_events shows each event’s match state and its runs.Stripe shows 400 'Invalid signature' on every delivery
Stripe shows 400 'Invalid signature' on every delivery
Disconnect and reconnect the Stripe integration in Brew. Brew manages the webhook secret. If it’s out of sync, reconnecting 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, and watch them appear in Manage → Events.Keep your automations as Drafts and run test sends. Connect production once you’re happy.
From an Agent or Code
Connecting Stripe is app-only. From an agent or code, the rest is readable and buildable:list_integrationsorGET /v1/integrationsconfirms Stripe is connected to the brand.check_triggerorGET /v1/automations/triggers/{triggerEventId}/readinessshows whether Brew has received an event and which Live automations consume it.list_trigger_eventslists recent deliveries, their match state, and the runs they started.save_automationorPOST /v1/automationsbuilds an automation on any event above, andtest_automationruns it to one address.
fire_trigger_event isn’t used here.
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.
Ask ChatGPT or Claude
Click here to open the Copy page menu at the top of this page, then send the page to ChatGPT, Claude, or your editor.