Connecting Shopify to WhatsApp, step by step
Ten minutes to connect, and two checks that save you building on an event that never fires.
Connecting Shopify gives your WhatsApp flows seven store events to trigger on, and the ability to write tags and status changes back onto the order. It takes about ten minutes, and the two things worth doing carefully are a permission and a test.
What you get
| Event | Fires when | Reliability |
|---|---|---|
| Order placed | An order is created | Reliable |
| Payment success | The order is paid | Reliable |
| Payment failed | A payment attempt fails | Depends on your provider |
| Order shipped | The order is fulfilled | Reliable |
| Order delivered | The carrier reports delivery | Often never fires |
| Order cancelled | The order is cancelled | Reliable |
| Abandoned cart | A checkout is abandoned | Reliable |
Plus write-back: flows can add or remove order tags, and change order status including cancellation.
Connect it
- Go to Settings → Shopify and start the connection.
- Approve the permissions Shopify asks for.
- Confirm the store shows as connected.
- Place a real test order on your own store, with your own phone number.
- Check the event arrived before building anything on it.
Step four is the one people skip, and it is the only way to know the plumbing works end to end.
The permission most stores forget. Cancelling an order from a flow needs the write-orders permission. A store connected before that scope existed still shows as connected, and the cancel step then fails quietly — the customer taps Cancel, the message says the order is cancelled, and Shopify never hears about it. If you connected a while ago, reconnect.
The event that often never fires
Order delivered depends on your carrier reporting delivery back to Shopify, and many do not. This is the commonest disappointment in a Shopify WhatsApp setup: a review-request flow that looks perfect and never runs.
Test it with a real order before relying on it. If it does not arrive, trigger on order shipped plus a delay matching your usual delivery time, and soften the wording to "should have arrived by now" — covered in review requests after delivery.
What arrives with each event
The data decides what your templates can personalise: customer name, order number and total, currency, a line-item summary, the shipping address and city, the tracking number, link and carrier, the checkout link for an abandoned cart, and the order status URL.
Two cautions. Tracking fields are only populated if the fulfilment carried them — a manual fulfilment sends blanks, and a blank variable makes Meta reject the whole message so the customer receives nothing. And the phone number comes from the order, so a customer who mistyped it at checkout is unreachable no matter how good your flow is.
Order tags are half the value
A confirmation flow that only messages the customer has done half a job. The tags it writes are what change your operations, because your packing team can filter on them without opening a chat.
One tag per state — pending confirmation, confirmed, cancelled — turns "today's packing list" and "today's call list" into Shopify filters. That workflow change is the actual return; the confirmation flow covers it.
What connecting does not give you
- No stock or inventory event. Nothing watches your levels, so back-in-stock alerts are capture-then-broadcast rather than automatic.
- No lifetime customer attributes. No "total orders" or "last order date" field exists; an automation has to stamp one.
- No product-interest or browse event. Only abandoned checkout, which is further down the funnel.
- No customer-created event.
Anything Shopify does not send can still start a flow through the external event API, which is how stores trigger on things their own systems know — the guide is here.
Before you build on it
- Store connected, with write permission if you want auto-cancellation.
- A real test order placed and the event confirmed arriving.
- Order-delivered tested specifically, since it is the one that often does not.
- Templates approved for whichever events you intend to message on.
- A plan for what your team does with the tags a flow writes.
What it costs to run
Every store-event flow sends its first message as a template, because the event arrives on a chat the customer may never have written to — so it is charged. But utility templates are free inside an open conversation window under Meta's pricing documentation, and service conversations have been free and unlimited since 1 November 2024.
So the practical cost is roughly one template per order, and everything after the customer replies is free. Making that first template a question rather than a statement is what converts the rest of the conversation to free — the 24-hour window explains why.
What the connection does not do on its own
Connecting Shopify does not create any automation. It makes seven triggers available; you still build the flows. A store that connects and then wonders why nothing happens has done exactly half the job.
The natural first three, in order:
- Order confirmation that asks Confirm or Cancel rather than announcing. In cash-on-delivery markets this is the highest-value automation available, and everywhere else the tap opens a free conversation window.
- Shipping notification with carrier and tracking, written so it still sends when a fulfilment has neither.
- Order-status answering, which handles the customers who ask anyway.
Templates you need before any of it works
Each of those first messages lands on a chat outside the 24-hour window, so it needs an approved template. Approval takes anywhere from minutes to more than a day, which is why submitting them on day one matters.
Two templates cover the first two flows. Meta caps templates at 250 per WhatsApp Business Account for an unverified business portfolio and 6,000 once verified, per its template documentation, so there is no reason to build one per product — variables handle that.
How to tell the connection is healthy
| Symptom | Likely cause |
|---|---|
| No flows ever run | Store not connected, or no flow published |
| Order flows run, delivered flows never do | Carrier does not report delivery — expected |
| Cancel step does nothing | Missing write-orders permission |
| Messages fail with a parameter error | A variable resolved empty — usually manual fulfilment |
| Some customers never receive anything | Phone number mistyped at checkout |
Each automation has an activity view showing every run and where it stopped, and that is the first place to look rather than the inbox.
Multiple stores, one number
If you run more than one Shopify store, each connects separately and its events arrive tagged with that store. Worth deciding early whether they should share a WhatsApp number or use different ones — one number is simpler, but a customer of both stores then receives messages from a single identity, which may or may not be what you want.
What to do in the first hour after connecting
- Place a test order on your own store with your own phone number, at a real price rather than a penny, so the total variable is exercised.
- Fulfil it manually with no tracking number, which is the case that breaks shipping templates.
- Cancel it, which tests both the cancelled event and your write permission.
- Check each automation's activity view rather than your inbox — it names the step that stopped a run.
Fifteen minutes, and it surfaces every one of the failure modes in the table above before a customer meets them.
Disconnecting and reconnecting
Reconnecting is safe and is the fix for a missing permission. What it does not do is retroactively deliver events that happened while disconnected — a gap in the connection is a gap in your order messages, with no queue waiting to catch up.
So if you disconnect deliberately, treat the orders placed in that window as ones your team handles by hand.
If you also sell elsewhere
Orders that do not come through Shopify — a marketplace, a phone order, an Instagram DM — generate no store event and therefore no automated message. Two options: post them yourself through the external event API, or handle them manually and accept the inconsistency.
Most stores start with the second and move to the first once the volume justifies it. The route is in starting a flow from your own system.
Multi-currency and multiple markets
The order event carries both the total and the currency, so a template can show the right figure for each customer without any extra work — provided your template includes the currency as a variable rather than hard-coding a symbol.
A hard-coded currency in the template body is one of those mistakes that only appears once you sell abroad, and by then the template is approved and in use across every order.
What good looks like a week in
- A test order has been placed, fulfilled and cancelled, and each event was seen arriving.
- Order confirmation and shipping templates are approved and live.
- Your packing team knows what the order tags mean and filters on them.
- You know whether order-delivered fires for your carrier.
- Each automation's activity view shows runs rather than zero.
Common questions
Will it message customers about past orders?
No. Flows react to events that happen after you connect and publish them. Orders placed before that point are invisible to the automation.
Does the customer need to have messaged me first?
Not for a template. Order and shipping messages reach a cold chat because they are approved templates, which is exactly what templates are for. Free-form messages still require an open window.
What if the checkout phone number is missing?
The run stops, and the activity view records it. Making phone a required checkout field is the fix, and it is a Shopify setting rather than anything here.
Frequently asked questions
What does connecting Shopify to WhatsApp give me?
Seven store events that can start a flow — order placed, payment success, payment failed, order shipped, order delivered, order cancelled and abandoned cart — plus the ability to write order tags and change order status.
Why does my cancel step do nothing?
Almost always a missing write-orders permission. A store connected before that scope existed still shows as connected but the cancel fails quietly. Reconnect the store.
Why does my order-delivered flow never run?
Because the delivered event only arrives if your carrier reports delivery back to Shopify, and many do not. Test with a real order, then fall back to order-shipped plus a delay.
Can Shopify tell WhatsApp when something is back in stock?
No. There is no stock or inventory event, which is why back-in-stock alerts work by capturing interest and sending a broadcast when the stock lands.