Loading tutorials…
Loading tutorials…
Klaviyo on WooCommerce is the highest-ROAS email setup in ecommerce. But the default plugin install syncs orders only — not browse, cart, or product views. Without those, your abandoned cart and browse-abandonment flows fire on incomplete data. Here is the full integration.
Who this is forWooCommerce owners doing $5K+/month who want to launch (or fix) Klaviyo flows. Email is typically 20-40% of DTC ecommerce revenue when set up right — and most Woo+Klaviyo integrations are missing 2-3 critical events.
What you'll need
Step 1
WordPress Admin → Plugins → Add New → search "Klaviyo for WooCommerce" by Klaviyo. Install, activate, connect with API keys.
In WordPress Admin → Plugins → Add New, search "Klaviyo for WooCommerce." The official plugin is published by Klaviyo, Inc. — verify the publisher.
Install + activate. A new "Klaviyo" entry appears under WooCommerce → Settings → Integration tab, or as a top-level "Klaviyo" menu depending on the version.
Open the settings. You will need three pieces of info from Klaviyo:
- Public API key (Klaviyo Account → Settings → API Keys → Public API Key, looks like XYZ123)
- Private API key (same page → "Create Private API Key" → grant scopes: Lists Full, Profiles Full, Catalogs Full, Events Full)
- Default list ID (the Klaviyo list to add newsletter signups to — usually "Newsletter")
Paste all three into the plugin settings. Save. The plugin verifies the keys are valid and shows "Connected."
Step 2
In the plugin settings, enable "Track on-site activity" and "Track active on site." This loads the Klaviyo JS pixel that powers browse abandonment and Active on Site segmentation.
In the Klaviyo plugin settings, find the "On-site tracking" section.
Enable "Active on Site" — loads the Klaviyo JS that detects when a user is currently browsing your site (used for "Active on Site within 7 days" segments).
Enable "Track Viewed Product" — fires the Klaviyo Viewed Product event on every product page view. This is the foundation of browse-abandonment flows.
Enable "Track Added to Cart" — fires Added to Cart event on cart actions.
Enable "Started Checkout" — fires when a customer reaches the checkout page. This is the critical event for abandoned cart flow — most defaults turn this OFF.
Save. Open your store in incognito and walk through a product page → cart → checkout. The Klaviyo Chrome extension (or browser DevTools network tab filtering for "klaviyo") should show each event firing.
Step 3
The plugin can backfill the last 6-12 months of customer and order data into Klaviyo. Run this once on initial install — it powers segments like "Lifetime Value > $X" from day one.
In the Klaviyo plugin settings → "Data Sync" or "Sync" tab.
Click "Sync customers" — backfills every WooCommerce customer profile into Klaviyo (with order history, total spend, last order date).
Click "Sync orders" — backfills every WooCommerce order as a Placed Order event in Klaviyo.
For large stores (10K+ customers), this may take 6-24 hours. The sync runs in batches via WooCommerce Action Scheduler. Monitor at WooCommerce → Status → Scheduled Actions.
Do NOT abort the sync midway. Partial syncs leave Klaviyo with inconsistent customer state and you will need to clear all profiles and start over.
Once complete, verify in Klaviyo → Profiles. The total profile count should approximately match your WooCommerce customer count (minus guest checkouts with no email).
Step 4
Klaviyo needs your product catalog to populate product blocks in emails (auto-pull product cards into a Welcome Series, Browse Abandonment, etc.). The plugin syncs this automatically.
In the Klaviyo plugin settings, enable "Sync product catalog."
Verify in Klaviyo → Content → Catalogs. Your WooCommerce products should appear with name, price, image, description, and product URL.
For products to appear correctly, each WooCommerce product needs: title, featured image, regular price, short description, and a unique URL (product slug).
The sync runs every 24 hours by default. For high-frequency catalog updates (daily new products), trigger manual sync from the plugin settings or via wp-cli command.
Once the catalog is in Klaviyo, you can drag product blocks into any email template and they auto-populate. This is what makes browse-abandonment and post-purchase flows actually look like ecommerce — not generic email.
Step 5
Open your store in incognito. Walk through browse → add to cart → start checkout → complete purchase. Each event should appear in Klaviyo within 60 seconds on your test profile.
Use a real test email address (one you control but is not in Klaviyo yet).
In incognito: visit home → visit a product page (Viewed Product) → add to cart (Added to Cart) → reach checkout (Started Checkout) → enter your test email + complete purchase (Placed Order).
In Klaviyo → Profiles → search for your test email. Open the profile.
The "Activity Feed" should show all 4 events in order: Viewed Product, Added to Cart, Started Checkout, Placed Order. Each with the right product info, value, and timestamp.
If any event is missing, the most common cause is: (a) on-site tracking toggle off in plugin settings (Step 2), (b) browser ad blocker stripping the Klaviyo JS — test in a clean browser, (c) custom theme breaking the WooCommerce hooks the plugin relies on.
Validate from at least one mobile device too. iOS Safari ITP sometimes blocks Klaviyo cookies — Klaviyo handles this with their kx cookie, but custom themes can break it.
Step 6
In Klaviyo → Flows, create the 4 essential flows. Trigger on the events you just enabled. Use Klaviyo flow templates to start.
Welcome Series — Trigger: "Subscribed to List" (your Newsletter list). 3-5 emails over 7-10 days. First email within 30 minutes of signup.
Abandoned Cart — Trigger: Started Checkout (NOT Added to Cart). Filter: "has not placed order since starting checkout." 3 emails over 24-48 hours.
Browse Abandonment — Trigger: Viewed Product. Filter: "viewed product 3+ times in 24h" AND "has not placed order." 1-2 emails over 24 hours.
Post-Purchase — Trigger: Placed Order. 2-4 emails over 14-30 days. Thank-you → review request → cross-sell → win-back.
For each, use a Klaviyo template (Flows → Create Flow → use template). Customize copy. Set live within 24 hours.
Email is typically 20-40% of DTC revenue when these 4 flows are live and tuned. Skipping any one of them leaves money on the table.
Step 7
Set up sending domain authentication (SPF, DKIM, DMARC) and a dedicated sending domain. Without these, your emails go to spam.
Klaviyo → Account → Settings → Domains and Hosting → Sending domains.
Add a dedicated sending domain (e.g., klaviyo.yourdomain.com or send.yourdomain.com — NOT the root yourdomain.com).
Klaviyo gives you DNS records: 2 CNAME records (for DKIM) + an MX record (optional, for bounce handling).
Add these to your DNS host (Cloudflare, Namecheap, etc.). Propagation takes 1-24 hours.
Add a DMARC record at _dmarc.yourdomain.com with policy "p=none" initially: "v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com"
Verify in Klaviyo that the sending domain shows "Authenticated."
Without this setup, Gmail and Outlook send 30-60% of your emails directly to spam after the first 1,000 sends — your open rates collapse and you blame Klaviyo when actually deliverability is the issue.
Common mistakes
Triggering abandoned cart on Added to Cart
What goes wrong: The flow fires on every Add to Cart — including the 80% of shoppers who add and never reach checkout. They get an email 'you forgot something' for something they never seriously intended to buy. Spam complaints climb, deliverability suffers.
How to avoid: Trigger abandoned cart on Started Checkout, not Added to Cart. This filters to shoppers who actually committed enough to reach checkout. Click rates typically lift 2-3x.
Missing on-site tracking toggle
What goes wrong: Klaviyo has no idea what customers browsed. Browse Abandonment flow is empty. 'Active on Site within 7 days' segments are useless. You lose the most personalized segment of email marketing.
How to avoid: Plugin settings → enable Active on Site + Track Viewed Product. Validate via Chrome Klaviyo extension that the JS fires on product pages.
No domain authentication
What goes wrong: After ~1,000 sends, Gmail starts marking your emails as spam. Open rates drop from 30% to 8% over 30 days. You think Klaviyo's deliverability declined when actually your DNS records were never set.
How to avoid: Klaviyo → Account → Domains → Sending domains → add a dedicated subdomain + add the DKIM CNAMEs + DMARC TXT record. Wait 24h, verify "Authenticated."
Syncing only customers, not orders
What goes wrong: Klaviyo knows who your customers are but not what they bought. Segments like "Bought from Category X" or "Lifetime Value > $200" cannot exist. Post-purchase flows trigger on partial data.
How to avoid: Plugin → Sync orders → run the historical backfill. For 10K+ customers, expect 6-24 hours via Action Scheduler.
No catalog sync
What goes wrong: Email templates cannot use 'Featured Products' blocks. Browse Abandonment emails do not show the product the customer browsed. You have to manually upload product images to every email — most stores stop after 2 weeks and just send text emails.
How to avoid: Plugin settings → Sync product catalog → ON. Verify in Klaviyo → Catalogs that products appear with name, price, image.
Running Klaviyo AND another email tool simultaneously
What goes wrong: Mailchimp is still active, sending its own welcome series. Customers get duplicate welcomes. Some emails come from one tool, some from the other. Open rates suffer, complaints climb.
How to avoid: Pick one ESP. Migrate the other to Klaviyo first (export contacts, import to Klaviyo, deactivate the old tool). Confirm in WordPress that only one ESP plugin is active.
Recap
Done — what's next
How to set up abandoned cart emails on WooCommerce
Read the next tutorial
Hand it off
Klaviyo on WooCommerce is the highest-ROAS marketing investment in DTC ecommerce when set up right. A vetted Klaviyo specialist will wire the integration, build all 4 core flows, and tune deliverability in 2-3 sessions — typically $400-800 at $14-16/hr. Ongoing flow optimization runs $300-600/mo.
See specialist rates
Yes — Klaviyo's WooCommerce integration recognizes WooCommerce Subscriptions events (Subscription Created, Renewed, Cancelled, Failed Payment) and exposes them as flow triggers. You can build dunning flows on failed renewals, win-back on cancellations, and upgrade prompts on renewals.
Klaviyo is purpose-built for ecommerce with native WooCommerce + Shopify integrations, browse abandonment, and revenue-driven analytics. Mailchimp is general-purpose and lacks the ecommerce-native flow triggers. For any DTC store doing $5K+/mo, Klaviyo's higher cost is justified by revenue lift. Below $2K/mo, Mailchimp's free tier may be enough.
Depends on order volume. 1-5K orders: 1-3 hours. 10-50K orders: 6-24 hours. 100K+: schedule for an overnight run. Action Scheduler processes batches of ~200 actions per minute. Do NOT abort midway — partial syncs leave inconsistent state.
Three usual causes: (1) ad blocker stripping the Klaviyo JS — test in a clean browser without uBlock/AdBlock. (2) Cookie domain mismatch — Klaviyo uses a __kla_id cookie that needs to be set on your store's domain. (3) Custom theme overriding WooCommerce checkout hooks — the plugin loses its insertion point.
No — the plugin handles both server-side events AND on-site tracking. Adding the Klaviyo JS snippet in functions.php in addition causes double-firing. Only the plugin should be active.
1) Export your Mailchimp audience to CSV. 2) Import to Klaviyo via Lists → Create List → Upload contacts. 3) Map fields (email, first name, etc.). 4) Re-engage with a clean welcome flow before resuming campaigns — your sender reputation needs to ramp up on Klaviyo IPs. 5) Once verified delivery is healthy, deactivate the Mailchimp plugin.
WooCommerce
WooCommerce does not ship with abandoned cart emails out of the box. You route through either Klaviyo, Mailchimp, or a dedicated Woo plugin. Each has different trigger timing and recovery rates — and the wrong choice costs 5-10% of recoverable revenue.
WooCommerce
Most Woo owners install the Meta Pixel via the official plugin, see 'Connected,' and assume iOS shoppers are tracked. They are not. Without server-side Conversions API + event_id deduplication, you lose 30-50% of attribution. Here is the full setup.
WooCommerce
GA4 on WooCommerce looks simple until you check Realtime and see only PageView firing — no view_item, no purchase, no value. Enhanced ecommerce on Woo requires either GTM4WP with the right toggles or a paid plugin. Here is the full setup.
WooCommerce
DIY WooCommerce is a great idea — until your plugin count crosses 30, your checkout breaks intermittently, and PageSpeed sits at 35. This is the honest framework: when the cost of self-managing exceeds the cost of hiring, and how to tell which side you're on.
Klaviyo
WooCommerce is messier than Shopify for Klaviyo. The plugin works, but the catalog feed, event mapping, and consent settings need attention most guides skip. This is the setup that doesn't break in 60 days.