Troubleshooting
Klaviyo Shopify integration not syncing — fix in 5 steps
Why the Klaviyo-Shopify integration stops syncing: expired OAuth tokens, theme updates dropping the snippet, app uninstall races, and onsite tracking toggled off. Diagnose and fix each.
title: "Klaviyo Shopify integration not syncing — fix in 5 steps" description: "Why the Klaviyo-Shopify integration stops syncing: expired OAuth tokens, theme updates dropping the snippet, app uninstall races, and onsite tracking toggled off. Diagnose and fix each." slug: "klaviyo-shopify-integration-not-syncing" publishedAt: "2026-05-19" updatedAt: "2026-05-19" painCluster: 4 intent: 10 tier: 1 faq:
- q: "Why does Klaviyo say my Shopify credentials have expired?" a: "Shopify OAuth tokens can be invalidated for a few reasons — the app permissions changed, the store owner changed, the app was briefly uninstalled, or Shopify rotated the token after a security event. Klaviyo can't refresh the token silently; you have to disconnect and re-authenticate the integration. After reconnecting, sync resumes within minutes."
- q: "What does the Klaviyo Onsite Tracking toggle actually do?" a: "Onsite Tracking injects the klaviyo.js script tag into your Shopify theme. That script records client-side events like Viewed Product, Added to Cart, and Started Checkout. When the toggle is off — or when a theme update strips the injection — those events stop reaching Klaviyo even though server-side events like Placed Order continue working."
- q: "How long does a Shopify-Klaviyo resync take after reconnecting?" a: "Most events resume within minutes of reconnecting. Historical catalog and customer data can take several hours to fully reconcile, depending on store size. If you reconnect and a metric still shows no events after 30 minutes, the integration isn't the only thing wrong — check the snippet's presence in your theme and your flow filters."
- q: "Does updating my Shopify theme break the Klaviyo integration?" a: "It can. Theme updates frequently strip out third-party snippets, including Klaviyo's onsite tracking script. The integration itself stays connected, but client-side events stop. After every theme update, verify the snippet is still in place by viewing source on your storefront and searching for 'klaviyo.'"
- q: "Why are my Placed Order events working but Started Checkout isn't?" a: "Placed Order is a server-side event — Shopify sends it via webhook regardless of theme state. Started Checkout and Added to Cart are client-side events recorded by the klaviyo.js snippet running in the browser. If your theme lost the snippet, server-side events keep working while client-side ones go silent. This is the most common shape of partial integration failure."
- q: "Can a Shopify app I install break the Klaviyo integration?" a: "Indirectly, yes. Apps that modify the theme, intercept JavaScript, or compete for the same hooks (review apps, popup apps, page builders) can cause the Klaviyo snippet to fail to load or fire out of order. If a new app coincides with the moment events stopped, disable it temporarily and re-test."
- q: "Will Klaviyo alert me when the Shopify integration breaks?" a: "Klaviyo shows a banner inside Settings → Integrations → Shopify when the token expires, but no email or push notification is sent. If you don't check the integrations page proactively, the integration can sit broken for days before anyone notices. We monitor token health and event-volume drift hourly and alert on either signal." related:
- klaviyo-token-expired-shopify
- klaviyo-checkout-started-event-not-working
- klaviyo-add-to-cart-not-tracking
- klaviyo-abandoned-cart-flow-not-firing
The Klaviyo-Shopify integration is the layer that everything else on your account depends on. Customer sync, product catalog, the four core events (Viewed Product, Added to Cart, Started Checkout, Placed Order), and the webhook traffic that powers every abandoned cart flow — all of it flows through the integration. When it breaks, the rest of your account doesn't show errors. It just goes quiet.
This page covers the five distinct failure modes that account for almost every "Shopify integration not syncing" thread in the Klaviyo Community. The hardest part isn't fixing them — most have one-click fixes inside Klaviyo. The hard part is noticing they happened, because Klaviyo's UI is structurally built for the case where the integration is healthy.
If you're in the middle of the problem, start with the Quick diagnosis checklist below. The order is by frequency, not by severity.
Quick diagnosis checklist
- Open Settings → Integrations → Shopify. If you see a banner that says "Your credentials have expired, please re-authenticate," click the reconnect link. Fix in 60 seconds.
- On the same page, check the Onsite Tracking toggle. If it's off, turn it on. If it's on but events have stopped, the snippet may have been stripped from your theme — see step 3.
- View source on your live storefront. Search the HTML for
klaviyo. You should see a script tag pointing atstatic.klaviyo.com/onsite/js/.... If it's missing, the theme has lost the snippet — re-enable Onsite Tracking, or add the snippet manually for heavily customized themes. - Open Analytics → Metrics and check each of the four core events. Started Checkout and Added to Cart should be firing during traffic hours. Placed Order should be firing every time someone buys. A flat-line on Started Checkout but healthy Placed Order points to the snippet, not the integration.
- Check recent Shopify app installs or theme updates. If either happened in the last week and events stopped around the same time, that's almost certainly the cause.
- In Shopify, go to Settings → Apps and verify the Klaviyo app is still installed. If a teammate accidentally uninstalled and re-installed it, the webhook subscriptions may not have re-registered cleanly.
- Check your catalog sync. In Klaviyo, open Catalog → Products. If product count is dramatically lower than your Shopify catalog, the catalog sync is broken — usually because of products without images or with required-field validation errors.
If you've worked through those and events are still missing, read the failure modes below.
1. OAuth token expired or revoked
This is the single most common shape of Shopify integration failure. The Klaviyo Community has multi-page threads going back years on the same banner: "Your credentials have expired, please re-authenticate with Shopify."
What causes it. Shopify OAuth tokens are generally long-lived, but they can be invalidated for a few reasons: the Shopify store owner email changed, the app was briefly uninstalled and re-installed, Shopify rotated the token after a security event, or the app's required scopes changed and the existing token no longer satisfies them. Klaviyo cannot refresh the token silently — re-authentication has to happen explicitly.
What stops working. When the token expires, Klaviyo stops receiving webhook events from Shopify. That means Placed Order, refunds, customer updates, and catalog changes all freeze. Client-side events recorded directly by the klaviyo.js snippet (Viewed Product, Added to Cart, Started Checkout) keep working — they don't depend on the OAuth token. This produces a confusing partial failure where the storefront still feels alive but the order data has gone quiet.
How to fix it. Settings → Integrations → Shopify in Klaviyo. Click the reconnect link in the expiration banner. You'll be redirected to Shopify to re-authorize. Approve the scopes. Within a few minutes, webhook events start flowing again.
The catch. Re-authenticating doesn't backfill missed events. If your token was expired for 12 hours, those 12 hours of orders are gone from Klaviyo's event log. Attribution for those orders won't appear in your flow analytics. The data isn't recoverable — you can only prevent the next outage.
2. Onsite tracking snippet was stripped from your theme
This is the second-most-common shape, and the most counterintuitive. The integration is fully connected. Server-side events are firing. But Started Checkout, Added to Cart, and Viewed Product have all gone silent.
What causes it. The klaviyo.js snippet is injected into your Shopify theme through the integration. Most theme operations leave the snippet alone — but some don't. Theme updates from the theme author can strip third-party additions. A theme swap (switching from one theme to another) almost always removes the snippet from the new theme. A Shopify 2.0 migration can affect it. A developer cleaning up "unused" scripts can do it.
How to verify. Open your storefront in a fresh browser window. Right-click → View Page Source. Cmd-F (or Ctrl-F) and search for klaviyo. You should see a script tag along these lines:
<script async src="//static.klaviyo.com/onsite/js/PUBLIC_KEY/klaviyo.js"></script>
If you don't see it, the snippet is gone. That's why client-side events have stopped.
How to fix it. In Klaviyo, Settings → Integrations → Shopify, toggle Onsite Tracking off and back on. The integration will re-inject the snippet. Reload your storefront and re-check the source. If the snippet still doesn't appear, you have a heavily customized theme that doesn't accept the integration's injection — in that case, copy the snippet from Klaviyo's onsite tracking documentation and paste it manually into your theme's theme.liquid file before the closing </head> tag.
Watch out for. If your storefront uses a headless setup (Hydrogen, custom Next.js, etc.), the integration-level toggle doesn't apply — you have to install @klaviyo/web-tracking (or send events server-side) yourself. The integration's snippet only works on a standard Shopify theme.
3. App uninstall race or scope drift
Klaviyo's Shopify app requests a specific set of scopes (read_orders, read_products, read_customers, write_script_tags, etc.). If those scopes change — either because Klaviyo bumped the app's required scopes or because the store owner declined a permission at re-install time — the integration can sit in a half-connected state where some events work and others don't.
What causes it. The most common scenario: someone uninstalls the Klaviyo app in Shopify to "troubleshoot," then re-installs without re-approving every scope. The integration shows connected in Klaviyo, the store shows the app present in Shopify, but the actual webhook subscriptions are partial.
How to verify. In Shopify, Settings → Apps → Klaviyo. Click into the app and review the permissions. They should match Klaviyo's documented scope list. If anything looks missing, the cleanest fix is a full disconnect/reconnect from the Klaviyo side.
How to fix it. Disconnect the integration from inside Klaviyo (Settings → Integrations → Shopify → Disconnect). Then re-install from Shopify's App Store and approve every requested scope on the way through. This forces a clean OAuth handshake and re-registers every webhook subscription.
4. Catalog items not syncing
Different shape: orders and events are flowing, but Klaviyo's product catalog doesn't match Shopify's. New products don't appear. Old products linger after being deleted. Stock levels are stale.
What causes it. A few things:
- Products without images. Klaviyo's catalog sync requires at least one image. Products missing images fail to sync silently.
- Products without descriptions. Less common but documented — products with empty descriptions can fail validation.
- Catalog sync paused. In rare cases, a Klaviyo-side incident or rate limit can pause catalog ingestion. Check the integration's last-synced timestamp.
- Variant SKU collisions. If two products share the same variant SKU due to a data-entry error, the second one can fail to sync.
How to verify. Catalog → Products in Klaviyo. Compare product count and recent additions against Shopify. If a specific product is missing, check whether it has images, a description, and a non-collision SKU in Shopify.
How to fix it. Fix the underlying data issue in Shopify (add the image, fill in the description, resolve the SKU collision). Catalog re-sync runs continuously, so the next sync cycle picks up the fix automatically.
5. Webhook delivery is intermittently failing
This is rarer than the other four, but when it happens it's the hardest to diagnose. The integration shows connected. The snippet is in place. Onsite tracking is on. But events are inconsistent — some Placed Orders show up in Klaviyo, others don't.
What causes it.
- Shopify-side webhook retries failing. Shopify retries failed webhooks a few times, then gives up. If Klaviyo's webhook endpoint is intermittently responding with errors (rare, but happens during Klaviyo incidents), some events get permanently lost.
- An app in the middle of the request chain. Apps that "enhance" or "validate" Shopify webhooks can fail silently and prevent the event from reaching Klaviyo.
- Custom checkout extensions. Shopify Plus accounts using custom checkout extensions can affect when (and whether) the Placed Order event fires for Klaviyo's purposes.
How to verify. Cross-reference recent orders in Shopify against Placed Order events in Klaviyo. If 10 orders happened today and only 7 show as Placed Order events in Klaviyo, something is dropping the other three.
How to fix it. Open a Klaviyo support ticket with specific order IDs that didn't sync. Klaviyo can trace the webhook delivery on their end and tell you whether they received the event. If they did, your filtering or processing is the issue. If they didn't, Shopify dropped the delivery — which usually means an intermediary app interfered.
How to verify the fix
After any change, here's the verification flow.
- Run a test order. Use a test product or a discount that brings the price to near-zero. Place a real order with a test customer.
- Wait two to five minutes. Webhook events land within seconds normally, but allow time for the metric to refresh.
- Check Analytics → Metrics → Placed Order. Your test profile should appear in recent events.
- Check Analytics → Metrics → Started Checkout. If you abandoned a separate checkout earlier, that profile should also appear.
- Open the test profile in Klaviyo. Scroll the activity feed and verify the order details are correct — line items, total, currency.
- Check the catalog. If you tested with a new product, it should appear in Catalog → Products within a few minutes.
If all six pass, the integration is healthy. If only some pass, you're looking at a partial failure — the most common shape is that server-side events work but client-side don't, which points back to the snippet.
Why this keeps happening
Shopify-Klaviyo integration failures are the root cause behind most "my abandoned cart isn't firing," "checkout started isn't tracking," and "revenue attribution is missing" threads. They cascade. A token expires Tuesday night. Started Checkout goes quiet Wednesday. The abandoned cart flow stops triggering Thursday. Revenue drops Friday. The founder notices Sunday — by which time five days of expected revenue has evaporated.
The structural problem is that the integration's health is invisible from anywhere except its own settings page, and nothing prompts you to look at that page proactively. There's no email alert, no status indicator on the dashboard, no flag in the flows list. The flow editor shows green and the metrics page shows zero, and the connection between those two facts requires a manual check.
Our scan runs hourly and watches three signals at once: token expiration timestamps from the integration, event-volume drift against the previous week's baseline, and per-metric latency (events that should be hourly but haven't fired in 12+ hours). The first signal to break triggers an alert. The fix is the same — reconnect, re-enable, fix the data — but the time between break and detection collapses from days to under an hour.
Frequently asked questions
- Why does Klaviyo say my Shopify credentials have expired?
- Shopify OAuth tokens can be invalidated for a few reasons — the app permissions changed, the store owner changed, the app was briefly uninstalled, or Shopify rotated the token after a security event. Klaviyo can't refresh the token silently; you have to disconnect and re-authenticate the integration. After reconnecting, sync resumes within minutes.
- What does the Klaviyo Onsite Tracking toggle actually do?
- Onsite Tracking injects the klaviyo.js script tag into your Shopify theme. That script records client-side events like Viewed Product, Added to Cart, and Started Checkout. When the toggle is off — or when a theme update strips the injection — those events stop reaching Klaviyo even though server-side events like Placed Order continue working.
- How long does a Shopify-Klaviyo resync take after reconnecting?
- Most events resume within minutes of reconnecting. Historical catalog and customer data can take several hours to fully reconcile, depending on store size. If you reconnect and a metric still shows no events after 30 minutes, the integration isn't the only thing wrong — check the snippet's presence in your theme and your flow filters.
- Does updating my Shopify theme break the Klaviyo integration?
- It can. Theme updates frequently strip out third-party snippets, including Klaviyo's onsite tracking script. The integration itself stays connected, but client-side events stop. After every theme update, verify the snippet is still in place by viewing source on your storefront and searching for 'klaviyo.'
- Why are my Placed Order events working but Started Checkout isn't?
- Placed Order is a server-side event — Shopify sends it via webhook regardless of theme state. Started Checkout and Added to Cart are client-side events recorded by the klaviyo.js snippet running in the browser. If your theme lost the snippet, server-side events keep working while client-side ones go silent. This is the most common shape of partial integration failure.
- Can a Shopify app I install break the Klaviyo integration?
- Indirectly, yes. Apps that modify the theme, intercept JavaScript, or compete for the same hooks (review apps, popup apps, page builders) can cause the Klaviyo snippet to fail to load or fire out of order. If a new app coincides with the moment events stopped, disable it temporarily and re-test.
- Will Klaviyo alert me when the Shopify integration breaks?
- Klaviyo shows a banner inside Settings → Integrations → Shopify when the token expires, but no email or push notification is sent. If you don't check the integrations page proactively, the integration can sit broken for days before anyone notices. We monitor token health and event-volume drift hourly and alert on either signal.