🔌 Integrations

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

EventFires whenReliability
Order placedAn order is createdReliable
Payment successThe order is paidReliable
Payment failedA payment attempt failsDepends on your provider
Order shippedThe order is fulfilledReliable
Order deliveredThe carrier reports deliveryOften never fires
Order cancelledThe order is cancelledReliable
Abandoned cartA checkout is abandonedReliable

Plus write-back: flows can add or remove order tags, and change order status including cancellation.

Connect it

  1. Go to Settings → Shopify and start the connection.
  2. Approve the permissions Shopify asks for.
  3. Confirm the store shows as connected.
  4. Place a real test order on your own store, with your own phone number.
  5. 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

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

  1. Store connected, with write permission if you want auto-cancellation.
  2. A real test order placed and the event confirmed arriving.
  3. Order-delivered tested specifically, since it is the one that often does not.
  4. Templates approved for whichever events you intend to message on.
  5. 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:

  1. 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.
  2. Shipping notification with carrier and tracking, written so it still sends when a fulfilment has neither.
  3. 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

SymptomLikely cause
No flows ever runStore not connected, or no flow published
Order flows run, delivered flows never doCarrier does not report delivery — expected
Cancel step does nothingMissing write-orders permission
Messages fail with a parameter errorA variable resolved empty — usually manual fulfilment
Some customers never receive anythingPhone 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

  1. 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.
  2. Fulfil it manually with no tracking number, which is the case that breaks shipping templates.
  3. Cancel it, which tests both the cancelled event and your write permission.
  4. 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

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.

Need help? Message us