Connecting Shopify
Connect your Shopify store once and every order (new, fulfilled, cancelled, or refunded) flows into Order Operations automatically. This guide covers the webhook setup, what data syncs, how order status is mapped, and what to check if something isn't showing up.
Looking for the wider picture on connecting accounts? Start with the Integrations overview.
What Connecting Shopify Does
Shopify is an ecommerce-only integration. Connect it and every order placed in your store flows straight into Order Operations, no manual entry required.
- Shopify lives in Settings → Integrations, but it's gated to brands whose Business Type is Ecommerce: the connect card only appears when your brand is set up for ecommerce. Consulting, Freelance, and Subscription brands won't see it.
- Once connected, every order placed in your Shopify store (new orders and status updates like fulfilled, cancelled, or refunded) appears in Order Operations automatically, usually within seconds of happening in Shopify.
- There's nothing to enter by hand and no spreadsheet to keep in sync. Shopify pushes the data to BrandOps via webhook the moment an order event happens.
- This is strictly one-way. BrandOps never creates, edits, or cancels an order back in your Shopify store.
Setting Up the Connection
Two fields in BrandOps, plus one webhook you register in Shopify Admin: that's the whole setup.
- Open Settings → Integrations and find the Shopify card. Paste your store's URL (e.g. https://your-store.myshopify.com) into the Shopify store URL field. This is how BrandOps matches an incoming webhook back to your brand.
- Paste your Shopify webhook signing secret into the Webhook secret field. You'll find it in Shopify Admin under Settings → Notifications → Webhooks once you create a webhook there.
- BrandOps shows a Webhook endpoint URL with a copy button next to it. Copy that into Shopify Admin's webhook configuration.
- In Shopify Admin, register that endpoint against the orders/create and orders/updated topics. Those are the only two events BrandOps listens for.
- You'll need the "Manage settings" permission in Shopify Admin to add a webhook if you're not the store owner; the store owner has this by default.
- Click Save settings in BrandOps once both fields are filled in. The Shopify card shows Connected as soon as a store URL is saved.
What Syncs on Each Order
A defined set of fields is pulled from each Shopify order payload, enough to run fulfillment without opening Shopify.
- Order number is written as SHO-{Shopify order number} (or the raw Shopify order ID if the order number isn't present), so a Shopify order is easy to tell apart from an order entered manually or created via another source.
- Customer name, email, and phone come from the Shopify order's customer object; shipping address, city, state, and pincode come from the order's shipping address.
- Product name and SKU are pulled from the order's first line item; quantity is the sum of every line item's quantity.
- Payment method is inferred from Shopify's financial status: pending maps to COD, anything else maps to PREPAID.
- A discount code, if one was used at checkout, is captured from the order's first discount code entry.
How Order Status Maps
Shopify's order events get translated into BrandOps's own order-status pipeline, with one safeguard against a status ever moving backward by accident.
- A cancelled_at timestamp or a financial status of voided marks the order CANCELLED in BrandOps. A financial status of refunded marks it RETURNED.
- A fulfillment status of fulfilled or partial marks the order SHIPPED. Shopify's order API has no separate "delivered" signal of its own; fulfilled only means a shipping label was created, not that the parcel arrived, so DELIVERED has to be set manually by your ops team once it actually does.
- If an order already exists in BrandOps (matched by its Shopify order ID), a repeat webhook (say, orders/updated firing again) updates the amount and re-evaluates status, but it won't drag the status backward. An order your team has already moved to Packed won't fall back to Pending just because Shopify recomputed its financial or fulfillment status.
- Cancelled and refunded are the one exception to that rule: they always win and overwrite the current status, regardless of how far along the order already is.
One-Way Sync & Troubleshooting
A few things worth knowing about how the webhook is verified and what to check if orders don't show up.
- Every incoming webhook is verified with an HMAC-SHA256 signature check against your saved webhook secret. A payload that doesn't match is rejected outright and no order is created.
- Store URL matching is case-insensitive, so it doesn't matter whether Shopify sends Your-Store.myshopify.com or your-store.myshopify.com; either matches what you saved.
- If a webhook fires for a store URL BrandOps doesn't recognize, it's rejected and logged on BrandOps's side. Double-check the store URL saved in Settings matches what Shopify is actually sending.
- Disconnecting is done by clearing the store URL and secret fields and saving. New orders stop syncing immediately, but anything already synced stays in your Order Operations history.
Frequently Asked Questions
Does every BrandOps brand see the Shopify integration?
No. Shopify only appears in Settings → Integrations for brands with Business Type set to Ecommerce. Consulting, Freelance, and Subscription brands don't get order sync from a storefront, so the card is hidden rather than shown non-functional.
Where do I find my Shopify webhook secret?
In Shopify Admin, go to Settings → Notifications → Webhooks and create (or open) a webhook. The signing secret shown there is what you paste into BrandOps's Webhook secret field.
What happens if I cancel or refund an order in Shopify?
A cancelled order (or a voided financial status) is marked CANCELLED in BrandOps; a refunded order is marked RETURNED, regardless of what status the order previously had in BrandOps.
Does BrandOps ever change anything back in my Shopify store?
No. The sync is one-way: Shopify pushes order data to BrandOps, and BrandOps never creates, edits, or cancels orders in Shopify.
If Shopify re-sends the same webhook, will I get a duplicate order?
No. BrandOps looks up the order by its Shopify order ID first; if it already exists, the existing record is updated instead of a new one being created.
Why doesn't an order ever show DELIVERED automatically?
Shopify's order API doesn't expose a delivery-confirmation event; "fulfilled" only means a shipping label was generated. DELIVERED is something your ops team marks manually once the parcel is actually confirmed delivered.
I set up the webhook but orders still aren't showing up. What should I check first?
Confirm the store URL saved in BrandOps matches your Shopify domain exactly, that the webhook in Shopify Admin is registered for orders/create and orders/updated, and that the webhook secret in BrandOps matches the one Shopify shows for that webhook. A mismatched secret causes every incoming order to be silently rejected.
Ready to sync your Shopify orders?
Head to Settings → Integrations, paste in your store URL and webhook secret, and register the endpoint in Shopify Admin.
Go to IntegrationsRelated guides
Something unclear? Contact support or send feedback from your dashboard settings.
