---
title: "Klaviyo"
description: "Sync customers, orders and your product catalog to Klaviyo for email and SMS marketing"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.firearmcart.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Klaviyo

# Klaviyo Integration

Connect your FirearmCart store with Klaviyo to drive email and SMS marketing from live store data — order events, customer profiles and your product catalog.
---

## Features

| Feature | Description |
|---------|-------------|
| **Order events** | Placed, refunded, fulfilled and declined orders sent as Klaviyo events |
| **Started checkout** | Abandoned-cart events for recovery flows |
| **Customer sync** | Customer profiles pushed to Klaviyo, plus an on-demand backfill of existing customers |
| **Newsletter sync** | Marketing subscribers added to a Klaviyo list |
| **Catalog sync** | Products synced to the Klaviyo catalog for product blocks and recommendations |
| **Onsite tracking** | Klaviyo's JavaScript loaded on your storefront |
| **Back in stock** | A theme section for Klaviyo's back-in-stock signup |

---

## Prerequisites

Before connecting, you need:

- An active Klaviyo account
- Your Klaviyo **private API key** (used for server-side sync)
- Your Klaviyo **public API key** (used for onsite tracking)

---

## Setting Up

1. Navigate to **Plugins > Marketplace**
2. Find **Klaviyo**
3. Click **Activate**
4. Enter your **Private API Key** and **Public API Key**
5. Click **Activate Plugin**

Your private key is verified against Klaviyo before the plugin activates. Once active, a **Klaviyo** entry appears under **Plugins** in the sidebar — that page hosts the settings, catalog sync status, customer backfill and activity log.

---

## Choosing What Gets Sent

Each event type can be toggled independently on the Klaviyo plugin page, so you can start with order events and add the rest later. All are on by default except logging:

| Setting | What it controls |
|---------|------------------|
| **Enable Klaviyo integration** | Master switch — turn this off and nothing is sent or injected |
| **Placed Order / Ordered Product** | Sends a `Placed Order` event when an order is placed, plus one `Ordered Product` event per line item |
| **Refunded Order** | Sends a `Refunded Order` event when an order is refunded |
| **Fulfilled Order** | Sends a `Fulfilled Order` event when an order ships |
| **Payment Declined** | Sends a `Payment Declined` event when a payment is declined |
| **Started Checkout** | Sends a `Started Checkout` event when a customer begins checkout |
| **Sync marketing subscribers to a list** | Adds marketing subscribers to a Klaviyo list |
| **Onsite JavaScript** | Loads Klaviyo's tracking script on your storefront |
| **API logging** | Records API calls in the Activity card for troubleshooting — off by default |

If list sync is enabled, pick the target list from the **list** dropdown (loaded from your Klaviyo account). Leave it unset and profiles are still created, but they are not added to any list.

---

## Catalog Sync

Your products are synced to Klaviyo's catalog so they can be used in product blocks, recommendations and back-in-stock flows.

The sync runs **hourly** and only sends products whose data has changed since the last run, so a routine sync is inexpensive even on a large catalog. Products must be **active** to sync; event products are excluded, and products that are deleted or set inactive are removed from the Klaviyo catalog.

Connecting the plugin does not trigger an immediate sync — the first push happens on the next hourly run, or when you click **Sync now** on the Klaviyo page.

---

## Backfilling Existing Customers

To push customers you already have into Klaviyo, use **Start backfill** on the Klaviyo page. It is manual — nothing is backfilled automatically on connection.

Tick **Include historical completed orders** to also replay past completed orders as `Placed Order` and `Ordered Product` events. Those replays reuse the same event IDs as live events, so Klaviyo de-duplicates them.

---

## Back in Stock

FirearmCart ships a **Klaviyo — Back in Stock** theme section. Add it to a product template from the visual editor to let customers subscribe to restock notifications, which Klaviyo then sends through your own flow. It only renders once your public API key is set.

See [Sections](/themes/sections) for adding sections to a template.

---

## Troubleshooting

### Events Not Appearing in Klaviyo

- Confirm **Enable Klaviyo integration** is on and your private API key is correct
- Check that the specific event type is toggled on
- Enable **API logging** temporarily, then review the calls in the **Activity** card on the Klaviyo page

### Products Missing from the Catalog

- Products must have **Active** status to sync; event products are never synced
- The sync only sends changed products; an unchanged product will not resend
- A newly connected store waits for the next hourly run — use **Sync now** if you don't want to wait

### Onsite Tracking Not Firing

- Confirm **Onsite JavaScript** is enabled
- Verify your public API key is set — onsite tracking uses the public key, not the private one
- Confirm the master **Enable Klaviyo integration** switch is on; turning it off strips the script from the storefront

---

## Related Documentation

- [Integrations Overview](/integrations) - All integrations
- [Marketing](/marketing) - Marketing tools
- [Events](/integrations/events) - Store event tracking
- [Sections](/themes/sections) - Adding theme blocks

Source: https://docs.firearmcart.com/integrations/klaviyo/index.mdx
