Nine times out of ten, “Klaviyo is not syncing my Shopify orders” turns out to be one of four things, and only one of them is an actual sync failure. The other three are a metric being read wrong, a profile being split in two, or a flow that received the event perfectly and then decided not to send.
Work down this ladder in order. Each rung tells you what it looks like, how to check it, and what to do. Stop at the first one that explains what you are seeing, because more than one of these can be true at once and fixing the wrong one first will convince you the problem is unfixable.
Is the integration actually connected?
Start with the least interesting possibility, because it is more common than it should be.
Open Klaviyo, go to your integrations list and find Shopify. You are looking for three things: that the integration is present, that its status is enabled rather than paused or in an error state, and that it points at the store you think it does. Brands with a staging store, a second regional store or an old development store connected alongside the live one are surprisingly common, and the orders are syncing beautifully into the wrong place.
If the integration shows an authorisation error, the app was reinstalled or its permissions changed at some point and the connection needs re-authorising rather than debugging. A password-protected or unpublished storefront will also break parts of the integration, particularly anything depending on onsite tracking.
Are the orders older than the backfill window?
When the Shopify integration is first connected, Klaviyo backfills a bounded window of historical orders — not the entire order history of the store. If the orders you cannot find are older than that window, nothing is broken: they were never in scope.
This is the single most common false alarm after a migration, because the person checking naturally goes looking for a customer they remember, who bought eighteen months ago. Check the current backfill limit in Klaviyo’s own documentation before concluding anything, since it is a product detail that changes, and compare against your connection date rather than against today.
If you genuinely need the older history in Klaviyo, that is an import job, not a sync fix.
Are you looking at the right metric?
This is where most of these investigations actually end.
Shopify orders arrive in Klaviyo as several distinct metrics, and they do not all mean the same thing or fire at the same moment. Placed Order is the order itself. Ordered Product fires per line item, so one order with three products produces one Placed Order and three Ordered Product events. Fulfilled Order, Cancelled Order and Refunded Order track later states. Checkout Started is not an order at all.
Two consequences catch people out:
- Counting Ordered Product events and comparing the total to Shopify’s order count will never match, and the gap grows with basket size.
- A flow built on the wrong metric receives nothing while a perfectly healthy event stream flows past it.
The second consequence has a specific and expensive version in subscription stacks. Orders created by a subscription platform, by a draft order, or through the Shopify admin do not necessarily carry the same properties as a storefront checkout, and any flow filtered on properties that only exist on a storefront order will skip them all. If your post-purchase flow works for one-off buyers and ignores subscribers, this is almost certainly why. Rebuilding those flows so they handle both paths is the bulk of a lifecycle flow engagement.
Check the metric directly rather than through a flow: open the metric in Klaviyo, set the date range to cover a specific order you can name, and look for it. If the event is there, the sync is not your problem.
Is the order on a different profile?
Klaviyo keys profiles on identifiers, and a customer can end up with two.
The classic sequence: someone subscribes to your list with a personal address, then checks out as a guest using a work address, or a different capitalisation, or a second address their household uses. The order syncs correctly — onto a profile that is not the one you are looking at.
Search the customer’s name rather than their email and see how many profiles come back. Check the order’s email in Shopify against the profile’s. If you find a pattern of duplicates, the fix is upstream in how identity is captured at checkout and in your forms, not in the integration.
Subscription platforms add their own version of this, where a subscription record and a Shopify customer record carry different email addresses after a customer updates one of them in only one place.
Is the profile suppressed, or simply not subscribed?
A profile can receive a Placed Order event and still be invisible in the place you are looking.
Being in Klaviyo is not the same as being subscribed to email marketing. A guest checkout with no marketing consent produces a profile that holds the order history and cannot be emailed. If your segment is built on subscribed profiles, that customer will not appear in it even though the order synced.
Suppressed profiles — bounced, spam-complained, manually suppressed, unsubscribed — behave the same way. The data is there; the send is not.
Did the flow receive the event and skip the send?
The most misdiagnosed case of all. The event arrived, the flow triggered, and Klaviyo chose not to send.
Open the flow analytics and look at the skipped count and its reasons rather than only at the delivered count. The usual causes:
- Smart sending suppressed the message because the profile received another email inside the smart sending window.
- Flow filters excluded the profile — “has not placed an order in the last X days”, “is in segment”, or a filter written against a property that subscription orders do not carry.
- Trigger filters excluded the event itself at the point of entry, which shows as the profile never entering the flow at all.
- The flow is in draft, or the individual message inside a live flow is in manual mode.
- Consent. An email flow will not send to a profile without email consent, regardless of what the order data says.
Skipped-for-reason data answers this in about ninety seconds and it is the first place to look whenever the complaint is “the flow is not sending” rather than “the data is missing”.
Is it just latency, or a time-zone mismatch?
Events do not always arrive instantly, and bulk operations — an import, a backfill, a large fulfilment run — can queue behind each other. Before declaring an outage, check whether the missing orders are from the last hour or the last month.
Then check the time zone. Klaviyo reports in your account time zone and Shopify reports in the store’s. If those differ, a day-boundary comparison will always be off by exactly the orders that fell in the overlap, and it will look like a persistent small sync gap forever.
The three that actually break in a subscription stack
Across the Shopify plus subscription platform plus Klaviyo stack, three failure modes account for most real, non-imaginary problems:
- Subscription orders that do not look like storefront orders. Flows filtered on storefront-only properties silently exclude every recurring order. The revenue impact is invisible because nothing errors.
- Split identity between the subscription platform and Shopify. A customer updates their email in one system and not the other, and their events start landing on two profiles.
- Events that stop arriving after a reinstall. An app reconnect or a permissions change quietly ends a stream, and nobody notices until someone asks why a report looks thin.
None of the three raises an alarm on its own. All three are caught by the same thing: a scheduled reconciliation that counts orders in Shopify, counts the matching events in Klaviyo, and tells a human when the two drift apart by more than a threshold. That is an afternoon of work on self-hosted n8n and it is the kind of unglamorous monitoring we build as part of ops automation. It is also the reason we can tell a client that their flows broke on Tuesday rather than discovering it in a quarterly review.
If dunning and payment-failure events are among the ones going missing, the consequences are more expensive than a skipped post-purchase email — start with the failed payment recovery guide, and with why supplement subscribers cancel at month three if the flows in question are the education track. Setup notes for specific tool pairs live on the integrations pages.
Sources
This post is written from first-hand builds on Shopify, Recharge and Klaviyo. No external figures are quoted in it. Klaviyo and Shopify both change integration behaviour over time — backfill windows, metric names and available filters in particular — so verify any specific setting against the current Klaviyo help documentation before acting on it.