> 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/integrations/shopify-klaviyo/set-up-klaviyo-flows.md).

# Set up Klaviyo flows with Littledata triggers

How to set up your Klaviyo flow triggers to correctly use Littledata's server-side events and measure the impact over client-side events.

Once Littledata is connected to Klaviyo, switch your flow triggers to Littledata's server-side events to reach more shoppers. This page shows you which events to use, how to test them next to your current flows, and how to link shoppers straight back to checkout.

{% hint style="success" %}
Haven't connected Klaviyo yet? Follow the [installation guide first](https://help.littledata.io/integrations/shopify-klaviyo/littledata-klaviyo-installation-guide).
{% endhint %}

### Littledata events you can use as triggers

Littledata sends these server-side events to Klaviyo. Each one replaces a Klaviyo client-side trigger. They use the same schema as Klaviyo's events, so you don't need to remap anything in your flows.

| Klaviyo event      | Matching Littledata event                                          |
| ------------------ | ------------------------------------------------------------------ |
| `Viewed Product`   | `Viewed Product - Littledata`                                      |
| `Added to Cart`    | `Added to Cart - Littledata`                                       |
| None               | `Removed from Cart - Littledata`                                   |
| `Checkout Started` | `Added to Cart - Littledata` or `Checkout Started - Littledata` \* |

\* Klaviyo's flow templates use `Checkout Started` for abandoned cart flows. For a true abandoned cart flow, use `Added to Cart - Littledata`.

If you use custom triggers, contact Littledata support. We can share the full tracking schema so you can match the properties you need.

### Test Littledata by cloning your flows

You can measure Littledata's impact by running two flows side by side: your original flow (Klaviyo trigger) and a cloned flow (Littledata trigger). The original flow takes priority:

* Shoppers Klaviyo tracks client-side enter the original flow.
* Shoppers Klaviyo missed, but Littledata caught server-side, enter the cloned flow.

The emails and revenue from the cloned flow are your uplift: shoppers you would not have reached otherwise.

{% hint style="info" %}
For every filter below, choose **Klaviyo's default metric**, not the one with "Littledata" in its name. This makes sure the cloned flow only picks up shoppers Klaviyo missed.
{% endhint %}

#### Browse abandonment (Viewed Product - Littledata)

{% stepper %}
{% step %}
**Clone the flow**

In Klaviyo **Flows**, find your browse abandonment flow that uses the **Viewed Product** trigger. Open its menu and click **Clone**.

<figure><img src="https://3956158252-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1QhTbrMraNWciQeDvu1b%2Fuploads%2FM8Sm5L8WQdp3BIaSI8OE%2Fimage.png?alt=media&amp;token=6483d847-4f3f-4a3d-a721-fac58c95b787" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Pick the Littledata trigger**

Give the clone a clear name, such as "Browse Abandonment - Littledata". Set **Trigger** to **Viewed Product - Littledata** and click **Clone flow**.

<figure><img src="https://3956158252-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1QhTbrMraNWciQeDvu1b%2Fuploads%2FlSKnHrzxEbbEBTwLu90W%2Fimage.png?alt=media&amp;token=973b06ce-a34c-42a9-a827-5ad78b995efa" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Add filters to the cloned flow**

* **Viewed Product:** stops a shopper from going through both browse abandonment flows at the same time.
* **Added to Cart**, **Checkout Started** and **Placed Order:** leave out shoppers who moved further down the funnel. The cart or checkout flows handle them, or they already bought.
  {% endstep %}
  {% endstepper %}

#### Cart abandonment (Added to Cart - Littledata)

{% stepper %}
{% step %}
**Clone the flow**

In Klaviyo **Flows**, find your cart abandonment flow that uses the **Added to Cart** trigger. Open its menu and click **Clone**.

<figure><img src="https://3956158252-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1QhTbrMraNWciQeDvu1b%2Fuploads%2FM8Sm5L8WQdp3BIaSI8OE%2Fimage.png?alt=media&amp;token=6483d847-4f3f-4a3d-a721-fac58c95b787" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Pick the Littledata trigger**

Give the clone a clear name. Set **Trigger** to **Added to Cart - Littledata** and click **Clone flow**.

<figure><img src="https://3956158252-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1QhTbrMraNWciQeDvu1b%2Fuploads%2F0nQCtAivXsD14PWBzss2%2Fimage.png?alt=media&amp;token=d954b301-0d47-4dce-832d-0961e1772129" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Add filters to the cloned flow**

* **Added to Cart:** stops a shopper from going through both cart abandonment flows at the same time.
* **Checkout Started** and **Placed Order:** leave out shoppers who moved further down the funnel. The checkout flow handles them, or they already bought.

You don't need a **Viewed Product** filter here. Shoppers in this flow are already past the browse stage.
{% endstep %}
{% endstepper %}

#### Checkout abandonment (Checkout Started - Littledata)

{% stepper %}
{% step %}
**Clone the flow**

In Klaviyo **Flows**, find your checkout abandonment flow that uses the **Checkout Started** trigger. Open its menu and click **Clone**.
{% endstep %}

{% step %}
**Pick the Littledata trigger**

Give the clone a clear name. Set **Trigger** to **Checkout Started - Littledata** and click **Clone flow**.

<figure><img src="https://3956158252-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1QhTbrMraNWciQeDvu1b%2Fuploads%2FNki7oGOUAdGxja27jAA1%2Fimage.png?alt=media&amp;token=fb995eae-c057-4763-af30-b855ef229052" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Add filters to the cloned flow**

| Condition                           | Metric           | Frequency  | Timeframe                |
| ----------------------------------- | ---------------- | ---------- | ------------------------ |
| What someone has done (or not done) | Checkout Started | zero times | in the last 1 hour       |
| What someone has done (or not done) | Placed Order     | zero times | since starting this flow |

* **Checkout Started:** stops a shopper from going through both checkout abandonment flows at the same time.
* **Placed Order:** leaves out shoppers who already bought.

You don't need **Viewed Product** or **Added to Cart** filters here. Shoppers in this flow are already past both stages.
{% endstep %}
{% endstepper %}

#### When the test is done

Running two flows side by side adds complexity, so keep the test short. When you're happy with the results, pause your original flows and remove the test filters from the Littledata flows. If you leave them in, they keep skipping shoppers that Klaviyo also tracked.

{% hint style="info" %}
If the Littledata flow has a higher bounce rate than the original, that is expected. It is often the first flow to email addresses typed at checkout. See [Reducing the bounce rate from Littledata](https://help.littledata.io/integrations/shopify-klaviyo/reducing-bounce-rate-littledata-flows) flows to learn why and how to verify those addresses before the first send.
{% endhint %}

### Using checkout URLs

Littledata adds a `checkout_url` to the **Added to Cart - Littledata** event so you can send shoppers straight back to checkout. It is a Shopify cart permalink, so it works even if the shopper opens the email in a different browser, where Klaviyo's own checkout URL won't work.

Use it in a Klaviyo email or SMS template like this:

`{{ event.extra.checkout_url }}`

You can add URL parameters to it:

* To open the checkout with Shop Pay, add `payment=shop_pay`:\
  `{{ event.extra.checkout_url }}?payment=shop_pay`
* To apply a discount code, add `discount=` and the code. For the code `15off`:\
  `{{ event.extra.checkout_url }}?discount=15off`
* To do both:\
  `{{ event.extra.checkout_url }}?payment=shop_pay&discount=15off`

{% hint style="warning" %}
GA4 does not see UTM parameters on a link that goes straight to checkout. Server-side events in that session are credited to the shopper's previous session source.
{% endhint %}

### Related articles

* [Creating a Klaviyo custom report](https://help.littledata.io/integrations/shopify-klaviyo/creating-klaviyo-custom-reports) to compare how your flows perform
* [Reducing the bounce rate from Littledata flows](https://help.littledata.io/integrations/shopify-klaviyo/reducing-bounce-rate-littledata-flows)
* [How it works: Shopify to Klaviyo](https://help.littledata.io/integrations/shopify-klaviyo/how-it-works-shopify-to-klaviyo)
* [Shopify to Klaviyo installation guide](https://help.littledata.io/integrations/shopify-klaviyo/littledata-klaviyo-installation-guide)
