> For the complete documentation index, see [llms.txt](https://help.littledata.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.littledata.io/event-editor/use-the-event-editor-with-klaviyo.md).

# Use the Event Editor with Klaviyo

Littledata sends events [server-side](/integrations/shopify-klaviyo/how-it-works-shopify-to-klaviyo.md) to Klaviyo with enhanced identity resolution. The Event Editor lets you change them before they reach Klaviyo: filter who enters your flows, derive new trigger events, and attach data Klaviyo doesn't receive by default.

{% hint style="info" %}
New to the Event Editor? Start with [Getting started](/event-editor/getting-started.md). Not sending Littledata events to Klaviyo yet? Follow the [installation guide](/integrations/shopify-klaviyo/littledata-klaviyo-installation-guide.md) first.
{% endhint %}

### How the Event Editor works with Klaviyo

Littledata sends four server-side events to Klaviyo:

| Event                            | When it fires                        |
| -------------------------------- | ------------------------------------ |
| `Viewed Product - Littledata`    | A user views a product               |
| `Added to Cart - Littledata`     | A user adds an item to the cart      |
| `Removed from Cart - Littledata` | A user removes an item from the cart |
| `Checkout Started - Littledata`  | A user enters the checkout           |

Three things to know before you edit them:

* **Edits apply to Littledata events only.** The Event Editor changes what Littledata sends to Klaviyo. Klaviyo's own metrics, including `Placed Order` from its Shopify sync, are untouched.
* **Custom events become new Klaviyo metrics.** [Derive a new event](/event-editor/custom-events.md) and Klaviyo creates a metric for it the first time it fires. From then on you can use it as a flow trigger like any other metric.
* **Custom fields become event properties.** [Map a new field](/event-editor/field-mappings.md) onto an event and it arrives as a property on the Klaviyo event, ready for trigger splits, segments, and template variables.

### Separate trigger events per Shopify market

Selling into multiple Shopify Markets usually means one flow with branching logic per market. Instead, give each market its own trigger event, so each market gets its own flow with fully localized content.

In the Event Editor, [derive a custom event](/event-editor/custom-events.md) from `Checkout Started - Littledata` and name it so you recognize it in Klaviyo, for example `Checkout Started EU`. Add a condition scoping it to the market:

| Field           | Operator | Value |
| --------------- | -------- | ----- |
| `market.handle` | `equals` | `eu`  |

Repeat for each market and each funnel stage you run flows on. Find your market handles in Shopify admin under **Settings → Markets**.

In Klaviyo, each derived event appears as its own metric. [Set it as the flow trigger](#trigger-a-flow-from-a-custom-event) for that market's flow.

{% hint style="info" %}
Every Littledata event arrives in Klaviyo with a `market_handle` property, so you can also keep one flow and branch with a trigger split, or exclude a market entirely by applying the same market condition to each Littledata event. Separate metrics keep flows and their reporting cleaner as markets multiply.
{% endhint %}

### Split flows on customer metafields (e.g. quiz responses)

The Event Editor integrates natively with Shopify Metafields. You can attach custom customer data with every event and branch your Klaviyo flows with them.

In the Event Editor:

1. [Expose the customer metafield](/event-editor/custom-data-sources.md) your quiz app writes, for example a skin type answer, under **Custom data sources** in the dashboard.
2. [Map it as a custom parameter](/event-editor/field-mappings.md) on each event your flows trigger from:

| Field                  | Operator | Value       |
| ---------------------- | -------- | ----------- |
| `[Customer metafield]` | `equals` | `skin_type` |

In Klaviyo, [branch the flow with a trigger split](#branch-a-flow-on-a-custom-property) on the new property.

{% hint style="info" %}
The Event Editor also works with customer tags. Tags are part of Littledata's standard schema, so skip step 1 and map `customer.tags` directly. See [Build audiences from survey answers](/event-editor/common-setups/quiz-answer-lookalikes-meta-ads.md) for a related pattern.
{% endhint %}

### Trigger cart abandonment only above a cart value

Using discounts to recover abandoned low-value carts costs margin. Two ways to set a floor:

**A hard floor for all cart flows**: add a [trigger condition](/event-editor/trigger-conditions.md) to `Added to Cart - Littledata`. Events below the floor never reach Klaviyo. See [Send add-to-carts only above a value](/event-editor/common-setups/send-add-to-carts-only-above-a-value.md).

| Field              | Operator                | Value |
| ------------------ | ----------------------- | ----- |
| `money.total.shop` | `greater than or equal` | `50`  |

**A separate high-value flow**: [derive a custom event](/event-editor/custom-events.md) like `High Value Added to Cart` with the same condition, and leave the original event untouched. Trigger a dedicated flow with a stronger offer from the new metric, and keep your standard abandonment flow running for everyone else.

### Keep staff and test traffic out of flows

Staff browsing the store triggers real abandonment emails and skews flow analytics. Add [trigger conditions](/event-editor/trigger-conditions.md) to each Littledata event, combined with **ALL of the following are true**:

| Rules out             | Field              | Operator           | Value            |
| --------------------- | ------------------ | ------------------ | ---------------- |
| Staff browsing        | `properties.email` | `does not contain` | `@yourstore.com` |
| Tagged staff profiles | `customer.tags`    | `does not contain` | `staff`          |

Swap `@yourstore.com` for your team's email domain. See [Exclude staff and test orders](/event-editor/common-setups/exclude-staff-and-test-orders.md) for more detailed instructions.

### Personalize flow content with product metafields

Product attributes like ingredients, material, or care instructions live in metafields, not in your events. [Expose them](/event-editor/custom-data-sources.md), then [map them](/event-editor/field-mappings.md) onto `Viewed Product - Littledata` and `Added to Cart - Littledata`:

| Source                    | Destination      |
| ------------------------- | ---------------- |
| Your ingredient metafield | `key_ingredient` |

Then use the property two ways in Klaviyo: branch with a [trigger split](#branch-a-flow-on-a-custom-property), or print the value [in the email itself](#use-custom-properties-in-email-and-sms-templates), for example an ingredient callout in an abandoned cart email.

Full walkthrough: [Send product metafields to a destination](/event-editor/common-setups/personalise-klaviyo-flows-with-product-metafields.md).

### Use your edited events in Klaviyo

Work through the steps that apply to your setup.

{% stepper %}
{% step %}

#### Set a Littledata event as a flow trigger

Clone your existing flow, select the matching `- Littledata` metric as the trigger, and add profile filters so users don't enter both flows. The full walkthrough, including the filters for browse, cart, and checkout abandonment, is in [Set up your Klaviyo flows using Littledata's triggers](/integrations/shopify-klaviyo/set-up-klaviyo-flows.md).
{% endstep %}

{% step %}

#### Trigger a flow from a custom event

A custom event appears in Klaviyo's metric list after it fires for the first time. If you don't see it yet, trigger it yourself: perform the qualifying action on your store, for example add a qualifying product to the cart.

Then create your flow, choose **Build your own**, select **Metric** as the trigger, and pick your custom event from the list.
{% endstep %}

{% step %}

#### Branch a flow on a custom property

Use a **Trigger split** step in the flow builder. Trigger splits branch on properties of the event that triggered the flow, which is where your mapped fields arrive. Select the property, for example `skin_type`, and define one branch per value.

A **Conditional split** works on profile data instead, so use it only when you're segmenting on profile properties rather than event properties.
{% endstep %}

{% step %}

#### Segment on custom properties

In a segment definition, choose **What someone has done (or not done)**, select the Littledata metric, and add a property filter. For example: `Added to Cart - Littledata` where `skin_type` equals `sensitive`, at least once in the last 90 days.
{% endstep %}

{% step %}

#### Use custom properties in email and SMS templates

Reference event properties with Klaviyo's event variable syntax. Custom parameters typically arrive at the top level of the event, for example:

`{{ event.skin_type }}`

Littledata's standard extra fields sit under `event.extra`, for example the [checkout permalink](/integrations/shopify-klaviyo/set-up-klaviyo-flows.md) for abandoned cart emails:

`{{ event.extra.checkout_url }}`

Use Klaviyo's preview with a recent event to confirm the exact property path before you send.
{% endstep %}
{% endstepper %}

### Verify your setup

1. In Littledata, [preview the event](/event-editor/event-preview.md) and check your conditions and custom fields appear in the payload.
2. Trigger the event on your store as a test customer.
3. In Klaviyo, open your test profile's activity feed and confirm the event arrived with the properties you mapped.
4. For custom events, confirm the new metric exists and wire it into your flow.

{% hint style="info" %}
Have a Klaviyo setup you'd like documented? Email <help@littledata.io> and we'll consider it for this guide.
{% endhint %}
