Skip to content
← ALL WRITING

2026-04-23 / 9 MIN READ

The Klaviyo and Shopify data sync gaps nobody documents

Field notes on the Klaviyo-Shopify sync failures I keep finding in DTC audits. Subscription rebills, line-item properties, tax inclusive pricing, and what breaks.

The Klaviyo-Shopify integration is, from the operator's perspective, a single toggle in the Klaviyo account setup. Flip it on, wait for sync, move on. From the data side, it is a set of webhooks plus an API pull plus a reconciliation process plus a handful of events that are documented but have edge cases the documentation does not cover.

Most of the time, the sync works. When it does not, the failure is silent and it poisons every flow and segment downstream. These are the specific sync gaps I keep finding across DTC audits, in the order they show up most often.

SYNC GAPS / SHOPIFY → KLAVIYO
G1COMMON
Subscription rebill orders
DOWNSTREAMPost-purchase flow misfires; CLV undercounts
DIAGNOSEPick one customer with multiple orders. Compare Shopify to Klaviyo. If counts differ, you have a sync gap.
Six common Klaviyo-Shopify sync gaps. Most DTC audits surface at least one of these.

How the sync actually works

Klaviyo pulls customer, product, and order data from Shopify through a combination of mechanisms:

  • Webhooks for real-time events (Order Placed, Order Fulfilled, Checkout Started).
  • Background historical backfill when the integration is first connected, pulling previous orders.
  • Ongoing polling for data Shopify does not push (some customer updates, inventory changes).

When everything works, the customer and order data in Klaviyo closely mirrors Shopify. When something breaks, it can break at any of those three layers, and the failure shape depends on where.

Gap 1: Subscription rebill orders

The most common gap. Subscription apps on Shopify (Recharge, Skio, Bold, and others) handle recurring billing and create orders in Shopify on rebill dates. Whether those rebill orders trigger the Shopify Order Created webhook that Klaviyo listens to is app-specific.

In practice: Recharge and Skio generally sync rebill orders correctly with recent versions and correct configuration. Older versions and misconfigured apps silently skip the webhook. The customer has 12 orders in Shopify and 2 in Klaviyo.

What breaks downstream:

  • Post-purchase flows fire only on the initial subscription purchase, not on rebills. A customer on month 8 of a subscription is receiving "thanks for your first order" messaging.
  • Predicted CLV (covered in the LTV trust piece) is calibrated on the two orders Klaviyo sees, not the 12 that exist.
  • Segmentation on order count is wrong. "Has placed order 3+ times" excludes most subscription customers.

How to diagnose: pick a customer known to have an active subscription. Compare their Shopify Customer > Orders tab to their Klaviyo Profile > Activity feed. If the counts do not match, the sync is gap-laden for this subscription app.

How to fix: update the subscription app to its current version, verify the webhook configuration in Shopify admin, and contact the app's support to confirm webhook emission. For persistent gaps, some brands build a custom script that writes Klaviyo events directly from a Shopify webhook they own, bypassing the subscription app's inconsistency.

Gap 2: Custom line-item properties

Shopify supports custom properties on line items: things like personalization text, gift messages, size upgrades, or subscription frequency selections. These properties are stored on the order and are part of the checkout data.

Klaviyo syncs line-item properties, but only the ones in the default field mapping. Custom properties defined by specific apps often do not make it into the Klaviyo order object, even though they exist in Shopify.

What breaks: any flow that depends on checkout customization for branching. A brand that ships "engraved" versus "standard" products cannot reliably branch their post-purchase flow on that property if the property did not sync.

How to diagnose: in Shopify, find an order with known custom line-item properties. In Klaviyo, look up the same order under the Profile's Placed Order events. Expand the event. If the properties are not there, Klaviyo did not receive them.

How to fix: this one usually needs a custom event. Push an event into Klaviyo directly from a Shopify webhook or a backend script, including the custom properties you care about. Use that event as the trigger for any flow that depends on the properties, instead of Placed Order.

Gap 3: Tax-inclusive pricing regions

Stores selling into regions where tax is inclusive (UK, EU, Australia) have a specific failure mode in how order value flows into Klaviyo.

Shopify stores the pre-tax price, the tax amount, and the total price (including tax) as separate fields on the order. Klaviyo's default behavior pulls total_price for the Placed Order event's $value property. For tax-inclusive pricing, this is the same as the pre-tax price (there is no additional tax added at checkout). For tax-exclusive pricing (US), the total is the pre-tax price plus tax.

The practical gap: a brand selling into both US and UK markets will see their US orders reported at post-tax totals in Klaviyo, and their UK orders at pre-tax totals, because tax is embedded in the UK product price. Any aggregate reporting across regions is off by the tax rate.

What breaks: predicted CLV numbers are inconsistent across regions. Revenue-based segmentation thresholds apply unevenly. AOV calculations are wrong depending on the regional mix of the customer base.

How to fix: custom event that explicitly sends the pre-tax order value from Shopify, consistently across regions. Use that event for any reporting or segmentation that depends on comparable revenue figures.

Gap 4: Multi-currency orders

Related to the tax gap but distinct. Shopify's multi-currency feature converts prices at checkout time, storing the order in the customer's currency while maintaining the shop's base currency for accounting.

Klaviyo receives the order in the customer's currency, not converted to a single reference currency. A $50 order from a UK customer might arrive in Klaviyo as £38.50, depending on how the sync is configured. Aggregate revenue reporting in Klaviyo is then a mix of currencies.

How to diagnose: in Klaviyo, look at the Placed Order event for a known non-USD customer. If the $value is in their local currency and is labeled as such, the data is unconverted.

How to fix: write a custom event that converts all order values to a single reference currency using the day's exchange rate, and use that for aggregate reporting. For flow triggers, continue using the native Placed Order event (since you usually want to reference the customer's actual currency in their content).

Gap 5: Order cancellations and refunds

Klaviyo syncs Order Cancelled and Order Refunded events, but not all brands configure them to update the Placed Order event they replace. An order that was placed and then cancelled still shows up as a Placed Order in the customer's history.

What breaks: a customer who placed an order, cancelled it, and never actually paid is treated as a purchaser. They enter post-purchase flows. Their predicted CLV is calculated as if the order happened. They are in segments based on purchase count that include them incorrectly.

How to fix: in Klaviyo's event configuration, ensure cancelled and refunded orders actually reverse the Placed Order. Some flow logic also needs explicit checks for "has not cancelled since flow started" to avoid edge cases.

Gap 6: POS and manual orders

Orders created through Shopify POS or manually by staff through the Shopify admin may not carry the same customer association as online orders. Email might be missing. Customer ID might not link to an existing profile.

What breaks: in-store purchases do not count toward the customer's online history in Klaviyo. A customer who bought in-store three times and online once is treated as a one-time online customer.

How to fix: ensure POS staff capture email at checkout and associate orders with existing customer profiles. For historical data, a one-time import may be worth it to reconcile. For ongoing operations, this is a staff training issue more than a sync issue.

The diagnostic walkthrough I use

When a client reports "our Klaviyo numbers do not match Shopify," the first pass takes 30 minutes:

  1. Pick a known customer with multiple orders (ideally with a subscription if applicable).
  2. Open their Shopify Customer page. Note order count and total spent.
  3. Open their Klaviyo Profile. Compare.
  4. If the counts match, the sync is working for this customer. Move on to aggregate reconciliation.
  5. If they do not match, inspect the missing orders one at a time. Subscription rebills, POS orders, and custom-property orders are the three that almost always account for the gap.

For aggregate reconciliation, pull the last 30 days of order count and revenue from both systems. If they match within 3 percent, you can treat them as equivalent for most purposes. If the gap is larger than 10 percent, something is systematically broken and needs a targeted fix.

Where this fits

The sync gaps covered here affect every piece of the Klaviyo lifecycle playbook. The predictive LTV piece calls out incomplete order data as the primary reason CLV numbers misfire. The segmentation patterns piece covers the segments most affected by sync issues.

Diagnosing sync gaps is part of the data-quality module in the DTC stack audit. For most brands with flow performance issues, the audit finds a sync gap accounting for a meaningful fraction of the underperformance. Fixing the sync recovers more revenue than rewriting the flow copy.

FAQ

How do I check if my Klaviyo and Shopify data match?

Pick a known customer with multiple orders, compare their Shopify Customer page to their Klaviyo Profile. If the counts or totals differ, you have a sync gap. For aggregate reconciliation, compare 30-day order count and revenue across both systems; a match within 3 percent is healthy.

Why don't my subscription orders show up in Klaviyo?

Most subscription apps on Shopify rely on their own webhook configuration to push rebill orders into the standard Shopify order stream. If the configuration is wrong or the app is outdated, Klaviyo receives the initial order but not the rebills. Check the subscription app's webhook docs and version.

Can I rely on Klaviyo's predicted CLV?

Only if your sync is clean. The predicted model runs on the data Klaviyo has access to. If Klaviyo is seeing a fraction of a customer's order history, the prediction is calibrated on that fraction. Fix the sync before interpreting CLV.

What is the fix for custom line-item properties not syncing?

Push a custom Klaviyo event from a Shopify webhook you control, including the line-item properties you care about. Use that custom event as a flow trigger instead of Placed Order for any flow that depends on the properties.

How often do sync gaps show up in DTC audits?

In my experience, the majority of DTC audits I have run have at least one Klaviyo-Shopify sync gap that is materially affecting reporting, flow performance, or both. It is the single most common data-quality issue in the stack.

// related

Let us talk

If something in here connected, feel free to reach out. No pitch deck, no intake form. Just a direct conversation.

>Get in touch