KlaviyoShopifyEmail Marketing

Klaviyo Add to Cart Tracking for Shopify: Setup & Fixes

Marketing TeamDecember 20, 202310 min read

Last Updated: February 2026

Add to Cart Tracking in Klaviyo + Shopify: Setup, Verification & Common Fixes

Most Shopify stores running Klaviyo have an abandoned checkout flow. Far fewer have a separate abandoned cart flow. The reason is usually the same: Added to Cart tracking isn't set up, or it's set up wrong.

These are two different events in Klaviyo. "Started Checkout" fires when someone enters checkout. "Added to Cart" fires earlier — when they add an item to their cart but haven't reached checkout yet. That's a different audience at a different stage of intent, and it needs a different flow.

If you only have the checkout flow, you're missing everyone who drops off between cart and checkout. This guide covers how to get Added to Cart tracking working, how to verify it's firing correctly, and the common issues that break it.

Added to Cart vs. Started Checkout: Why You Need Both

The abandonment funnel in Klaviyo looks like this:

Browse Product (lowest intent)
  ↓
Add to Cart
  ↓
Start Checkout (highest intent)
  ↓
Purchase

Each stage is a different Klaviyo metric, a different flow trigger, and a different set of dynamic data. This matters because:

  • Different triggers: An abandoned cart flow uses the "Added to Cart" metric as its trigger. An abandoned checkout flow uses "Started Checkout." These are separate flows in Klaviyo, not branches of the same flow.
  • Different dynamic blocks: The dynamic content block in each flow pulls from different event data. An abandoned cart flow needs to use the Added to Cart event's data for its dynamic product block — you can't reuse a checkout block and expect it to populate. The event payload is different.
  • Different timing: Cart abandoners are earlier in the funnel and typically need more touchpoints over a longer window (7-14 days). Checkout abandoners have higher intent and should be hit faster — first email within 30 minutes to 1 hour.
  • Different messaging: A cart abandoner may need social proof and product education. A checkout abandoner already decided to buy — they need a nudge to finish, not a pitch to start.

For the full flow architecture and timing, see our abandoned cart flow guide.

Technical Setup

The setup depends on whether your store is on the newer Klaviyo-Shopify integration or the legacy one.

New Stores / Current Integration (Server Pixel)

If you set up Klaviyo recently, your integration uses Shopify's server pixel for event tracking. No code snippets required. But you still need to enable behavioral tracking:

  1. In Klaviyo, go to Integrations → Shopify
  2. Under "Additional tracking features," enable "Track behavioral events"
  3. Click Update Settings
  4. Shopify will prompt you to authenticate and approve updated app permissions — accept these

Once enabled, Klaviyo tracks Added to Cart events automatically via the server pixel. The event captures variant-level data: product name, variant name, SKU, price, quantity, and a link to the specific variant added.

Older Stores (Legacy Snippet Migration)

If your store has been running Klaviyo for a while, you may still be on the old client-side tracking. The old method used a JavaScript snippet installed in your theme files and tracked events client-side with the _learnq.push API.

How to tell which you're on: Go to Klaviyo → Metrics → look for the "Added to Cart" event. If it has a gear icon, you're on the old snippet-based tracking. If it has a Shopify-branded icon, you're on the new server pixel.

To migrate: Follow Klaviyo's migration guide. The short version:

  1. Enable new tracking in Klaviyo → Integrations → Shopify (same steps as above)
  2. Update your segments — add an OR condition for the new metric alongside the old one, so both event types are captured during the transition
  3. Update your flows — clone your existing abandoned cart flow, swap the trigger to the new Added to Cart metric, and rebuild your dynamic content blocks (more on this below)
  4. Remove the old snippet — once the new tracking is confirmed working, delete the old _learnq.push code from your theme.liquid or Custom Liquid block

Important: The new event stores price as a numeric value (e.g., 4.00). The old snippet stored it as a string (e.g., "$4.00"). If your flow templates display prices, you'll need to update the formatting or your emails will show raw numbers without currency symbols.

A Note on WooCommerce

WooCommerce has a completely different integration path for Added to Cart tracking. The Shopify server pixel approach doesn't apply. If you're on WooCommerce, check Klaviyo's WooCommerce documentation for the setup steps.

Verification: How to Confirm It's Working

Don't assume it's working just because you enabled it. Verify.

  1. Go to your store and add a product to your cart. Make sure you're an identified visitor — either log in, click through from a Klaviyo email, or submit a form first. Klaviyo only tracks events from identified browsers.
  2. Go to Klaviyo → Metrics. Find the "Added to Cart" metric. Check if the event count has incremented.
  3. Wait 5-30 minutes. The event doesn't appear instantly. Server pixel events can take a few minutes to process. Don't panic if it's not there in 60 seconds.
  4. Check the event data. Click into the metric and look at a recent event. You should see variant-level data: product name, variant name, SKU, price (as a number), quantity, and a URL to the product variant.

If you see all of that, your tracking is working. If you don't, see the troubleshooting section below.

Common Issues and Fixes

Events Not Firing At All

The most common cause: the visitor isn't identified. Klaviyo's Added to Cart tracking only works for identified browsers — people who have been cookied through a previous interaction. A visitor is identified when they:

  • Submit a Klaviyo form (pop-up, embedded form)
  • Submit a Shopify form
  • Enter their email at checkout
  • Log into their Shop account at checkout
  • Click through from a Klaviyo email

If you're testing and the event doesn't fire, make sure you're browsing as an identified visitor — not in incognito or on a device that hasn't been cookied.

Behavioral Tracking Not Enabled

The Klaviyo-Shopify integration can be connected and syncing order data while behavioral tracking (Added to Cart, Viewed Product) is still turned off. This is the "weird in-between" state we see constantly — the integration looks like it's working because orders sync, but onsite events aren't being captured.

Go to Klaviyo → Integrations → Shopify → check that "Track behavioral events" is enabled. If it's not, enable it and re-authenticate. Older stores especially need to do this — the integration may have been set up before this feature existed.

Price Formatting Broken in Emails

If you migrated from the old snippet to the new server pixel, your existing email templates may display prices incorrectly. The old event stored price as a string ("$4.00"), the new one stores it as a number (4.00).

If your emails are showing "4.0" instead of "$4.00", you need to update the template to format the price. In your email template, use Klaviyo's currency filter on the price variable to get proper formatting back.

Dynamic Blocks Empty in Cart Flow

This is the mistake we see most often when someone builds their first abandoned cart flow. They copy their abandoned checkout email, swap the trigger to Added to Cart, and the dynamic product block shows up empty.

The reason: the dynamic content block is still pulling from the Started Checkout event data. Each flow trigger has its own event payload. When you build an abandoned cart flow triggered by Added to Cart, the dynamic block needs to reference the Added to Cart event's data — not the checkout event. You need to rebuild the dynamic block for the correct event source, or the variables won't resolve.

Two "Added to Cart" Metrics in Your Account

If you migrated from the old snippet, you may see two Added to Cart metrics — one with a gear icon (old) and one with a Shopify icon (new). This is normal during the transition. Make sure your active flows and segments reference the correct one. Eventually, once the old snippet is fully removed and you've migrated everything, the old metric will stop receiving events.

Not sure if your tracking is set up right?

Broken or missing event tracking is one of the most common issues we find in Klaviyo audits. We can check your setup and identify what's not firing in minutes.

What to Build Once Tracking Works

Once your Added to Cart tracking is confirmed working, you need a separate abandoned cart flow. This is not the same as your abandoned checkout flow — it's a different flow with a different trigger, different dynamic blocks, different timing, and different messaging.

  • Trigger: Added to Cart metric (not Started Checkout)
  • First email: 1-4 hours after the event (longer than checkout because the intent is lower)
  • Flow window: 7-14 days (longer than checkout's 7-day max)
  • Dynamic blocks: Built from the Added to Cart event data — product name, variant, price, image, cart link
  • Filter logic: Exclude anyone who has Started Checkout or Placed Order since entering the flow (use AND logic, not OR)
  • Buyer vs. non-buyer split: Non-buyers get their welcome discount resurfaced. Buyers get loyalty messaging or free shipping.

For the complete setup with timing, email count, filter logic, and common mistakes, use our Flow Builder to design the sequence or the Flow Visualizer to map it against your existing flows.

For the bigger picture on how cart and checkout flows fit into your overall flow architecture, see our complete guide to Klaviyo flows.

Still not tracking correctly?

Broken event tracking is one of the most common issues we find in Klaviyo audits. We'll check your setup, identify what's not firing, and fix it.

Want results like these for your brand?

We help ecommerce brands build email and SMS programs that drive real revenue. Let's talk about what we can do for you.