Skip to main content
Connect Shopify so storefront events fire Brew automations. Send a welcome email when a new customer is created, a receipt the moment an order is paid, an abandoned-cart drip when a checkout doesn’t convert, and a shipment notification the second a fulfillment is created.

What you can do

  • Trigger automations from Shopify events. Welcome flows, receipts, abandoned-cart drips, refund confirmations, shipping notifications
  • Auto-sync customers into your audience. Every Shopify event upserts the shopper into Brew with shopify_* custom fields (shopify_customer_id, shopify_tags, shopify_account_status, shopify_last_order_id, shopify_last_order_total, shopify_last_order_at, shopify_last_fulfillment_status, etc.) you can filter and segment on
  • Personalize with order context. Reference order totals, line items, financial status, and tracking info inside emails
  • Stop maintaining Liquid notifications. Author the same lifecycle flows on the Brew canvas instead

How it works

  1. Brew mints a unique webhook URL for your brand. You enter your myshopify.com domain in Brew and create one Shopify webhook per topic, all pointing at the same Brew URL.
  2. Shopify signs every webhook with your store’s per-shop signing secret. Brew verifies the HMAC and checks the X-Shopify-Shop-Domain header against the domain you registered — so even if your secret leaks, no other store can impersonate your connection.
  3. For each verified event Brew (a) starts every Published automation whose trigger matches and (b) upserts the Shopify customer into your audience with shopify_* custom fields.
See How event triggers work for the conceptual flow shared by every event-source integration.

Setup

1

Generate your Brew webhook URL

In Brew, open Integrations, click the Shopify card, and click Generate URL. Copy the URL Brew generates.
2

Enter your myshopify.com shop domain

Use the canonical myshopify.com host (e.g. acme.myshopify.com), NOT your custom storefront domain. Brew matches this against every webhook’s X-Shopify-Shop-Domain header to block cross-shop replay attacks.
3

Open Shopify Admin → Settings → Notifications

Click Settings (gear icon, bottom-left of Shopify admin) then Notifications. Scroll to the Webhooks section.
4

Create one webhook per topic you want

For each Brew-supported topic (full list below), click Create webhook, set Format to JSON, paste the Brew URL, pick the latest API version, and Save.
5

Copy the per-shop signing secret

Scroll to the bottom of the Webhooks section. Copy the long secret under “Your webhooks will be signed with…”. The same secret signs every webhook on this shop.
6

Paste the signing secret into Brew

Paste the secret and click Connect. Brew verifies every webhook with HMAC-SHA-256 (base64) against the X-Shopify-Hmac-SHA256 header.
7

Verify it's working

Trigger an event in Shopify (e.g. create a test customer or place a $0.01 test order via Bogus Gateway). Within a few seconds it should appear in the Manage → Recent events panel of the Shopify integration page in Brew. If it doesn’t, recheck the signing secret and that you used the canonical myshopify.com domain — Brew’s shop-domain check rejects mismatches.
If you rotate the per-shop signing secret in Shopify Admin, re-run the last step with the new value to keep webhooks verifying.

Triggering automations

Once connected, every Shopify topic below is provisioned automatically and available as a trigger in the automation builder. The Manage tab is a read-only catalogue plus a live Recent events stream — no per-topic enable step. Whether a topic fires is controlled by whether the bound automation is Published. (Shopify still has its own per-topic webhook subscription on its end — Brew can only listen for topics you’ve actually subscribed to in Shopify Admin.)

Supported events

Brew supports 15 Shopify webhook topics: Customer
  • customers/create
  • customers/update
  • customers/delete
  • customers/enable
  • customers/disable
Order
  • orders/create
  • orders/paid
  • orders/cancelled
  • orders/fulfilled
  • orders/refunded
Checkout
  • checkouts/create
  • checkouts/update
Cart
  • carts/update
Fulfillment
  • fulfillments/create
  • fulfillments/update
In chat, say “Send an abandoned-cart email 1 hour after the checkout is created” and Brew will scaffold the automation with checkouts/create pre-selected.

Common patterns

GoalShopify event
Welcome new shoppercustomers/create
Order confirmationorders/create
Receipt + thank-youorders/paid
Cancellation confirmation + win-backorders/cancelled
Refund confirmationorders/refunded
Abandoned-cart Stage 1 (1 hr)checkouts/create
Abandoned-cart Stage 2 (24 hr)checkouts/update
Pre-checkout nudge / cart remindercarts/update
Shipment notification with trackingfulfillments/create
Delivery thank-you / review requestfulfillments/update

Personalization

VariableExample
{{@trigger:output.payload.firstName}}Alex
{{@trigger:output.payload.lastName}}Morgan
{{@trigger:output.payload.orderNumber}}#1042
{{@trigger:output.payload.totalPrice}}49.95
{{@trigger:output.payload.currency}}USD
{{@trigger:output.payload.trackingNumber}}1Z999AA10123456784
{{@trigger:output.payload.trackingUrl}}https://...
{{@trigger:output.payload.abandonedCheckoutUrl}}https://...
Shopify removed tags, marketing consent, and full inline customer data from some 2025+ customer and order payloads. Brew reads what’s available and falls back gracefully — but if you specifically need order history or tags, subscribe to customers/create alongside your order webhooks and join on customerId.

Troubleshooting

Open the canvas and confirm at least one automation bound to this topic is set to Published (not Draft). The Brew integration’s Manage → Recent events panel confirms the webhook is arriving — if it isn’t there, check that the topic is subscribed in Shopify Admin → Settings → Notifications and that the shop domain stored on the Brew side matches. If the event is there but no email sent, the only remaining gate is automation.published.
The shop domain you entered during connect doesn’t match the X-Shopify-Shop-Domain header on the webhook. Update the stored shop domain (disconnect and reconnect) using your canonical *.myshopify.com host — not your custom storefront domain.
The Shopify January 2025 slim-down removed the inline customer object from some orders/* payloads. Either subscribe to customers/create and join by customerId in your automation’s filter step, or wait for a later webhook in the order lifecycle (orders/paid, orders/fulfilled) that still carries customer fields.
Working as intended. Shopify never carries an email on cart events, so Brew uses a synthetic placeholder. Use checkouts/create / checkouts/update for customer-facing abandoned-cart flows instead.
Shopify’s Admin → Settings → Notifications → Webhooks has a Send test notification button. Or trigger real test data (create a draft customer, place a $0.01 Bogus Gateway order). The Manage → Recent events panel surfaces every webhook within seconds.

Requirements

  • A Shopify store on any paid plan
  • Admin access to add webhooks under Settings → Notifications

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:

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.