> For the complete documentation index, see [llms.txt](https://help.orbe.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.orbe.app/general/integrations/klaviyo.md).

# Klaviyo

[Klaviyo](https://www.klaviyo.com/partner/signup?utm_source=0013o00002ZsVRdAAN\&utm_medium=partner) is a marketing automation platform that enables merchants to create personalized email and SMS campaigns based on customer behavior and data.

When connected with Orbe, it allows you to send **each customer’s country** and **language preferences** **directly to their Klaviyo profile**, helping you localize your communication and build more relevant marketing experiences for every market.

{% hint style="info" %}
Want to see how it works? Watch [our short video on YouTube](https://www.youtube.com/watch?v=vIPs7enYTXc) to learn more about Klaviyo and how to make the most of it with Orbe.
{% endhint %}

## How to active the integration with Klaviyo? <a href="#active-klaviyo-integration" id="active-klaviyo-integration"></a>

{% embed url="<https://www.loom.com/share/fa55801195964cf0abb7f27f0820a9c8>" %}

Here’s **a quick step-by-step recap** of the Klaviyo ↔ Orbe integration shown in the video.

{% stepper %}
{% step %}
**Install both apps**: make sure the *Klaviyo: Email Marketing & SMS* app and the *Orbe* app are installed in your Shopify store.
{% endstep %}

{% step %}
**Activate the embeds**: open your Theme Editor and, under the App embeds tab, activate both the *Klaviyo Onsite JavaScript Integration* and the *Orbe Geolocation Popup* embeds.
{% endstep %}

{% step %}
**Enable the integration**: once both embeds are active, go back to the Orbe app, open the Integrations tab, and enable the integration with Klaviyo (available for paid plans only).
{% endstep %}

{% step %}
**Test the connection**: you’re all set. Run a quick test to make sure everything’s working smoothly.
{% endstep %}
{% endstepper %}

## How the integration with Orbe works <a href="#klaviyo-orbe-integration" id="klaviyo-orbe-integration"></a>

Orbe connects with Klaviyo through JavaScript and sends each customer’s country and language preferences whenever Klaviyo identifies a visitor on your storefront.

With Klaviyo’s current integration model, user identification now happens only in specific cases, such as when a visitor arrives through a Klaviyo email (with UTM parameters) or when they are logged in to their account.

When Klaviyo identifies a session, Orbe automatically transmits the visitor’s country and language data and links it to the corresponding Klaviyo profile. If the visitor isn’t yet identified, the session remains anonymous until Klaviyo provides an identity, at which point Orbe syncs the preferences immediately.

For example, when a customer clicks a link in an email and lands in your store, the Orbe modal opens in their browser, allowing them to select their preferred country and language. Since their email is already registered, Orbe records these preferences and sends them to Klaviyo, ensuring that all shared data is accurate, compliant, and tied to verified user identities.

<figure><img src="/files/laBNsgB1CzLBX9gqx7NW" alt="" width="375"><figcaption></figcaption></figure>

You can view the recorded data in the Profiles section of the Audience.

{% hint style="info" %}
To increase the number of identified users, configure Orbe to show the popup on every first visit and avoid including a close (“X”) button. This helps capture more user interactions and ensures preferences are stored and ready to sync once Klaviyo recognizes the visitor.
{% endhint %}

## Limitations

Due to Klaviyo’s new Shopify Web Pixel (Sandbox) system, user identification on the storefront now happens less frequently. Orbe continues to send data correctly, but only when Klaviyo identifies the visitor. This means that anonymous sessions cannot be linked to an email address until Klaviyo provides the identification event.

Additionally, Orbe does not create customer metafields in Shopify: those belong to Klaviyo. Orbe only sends the country and language properties, while Klaviyo decides when and how to store them in each profile.

{% hint style="warning" %}
Make sure Shopify’s automatic redirection is disabled. This ensures customers always interact with Orbe’s popup instead of being redirected automatically by Shopify.
{% endhint %}

## Why do you need this functionality? <a href="#why" id="why"></a>

If you send campaigns to customers in many countries, you do not need to build a different product URL for every country. Add the `country` parameter to your Klaviyo links so each visitor lands in the right country experience from the first click.

### Use the country parameter

Use `?country=XX`, where `XX` is the country code the storefront should load:

{% code title="Campaign URL" overflow="wrap" %}

```
https://your-store.com/products/example?country=GB
```

{% endcode %}

When a customer clicks a link with this parameter:

* **Country experience:** the storefront loads the right country directly.
* **Visitor preference:** Orbe saves that country for the visitor.
* **Popup behavior:** the geolocation popup does not need to appear in that flow.

If your URL already includes another parameter, use `&country=` instead of `?country=`.

### Build it dynamically in Klaviyo

In Klaviyo, use an `if` condition to add the country stored by Orbe. If that property is not available, fall back to Klaviyo's `$locale_country` property. If neither property is available, do not add the `country` parameter.

{% code title="Klaviyo campaign URL" overflow="wrap" %}

```django
https://your-store.com/products/example{% if person|lookup:'Country (Orbe)' %}?country={{ person|lookup:'Country (Orbe)' }}{% elif person|lookup:'$locale_country' %}?country={{ person|lookup:'$locale_country' }}{% else %}{% endif %}
```

{% endcode %}

Use `Country (Orbe)` first: it is already prepared for this parameter. `$locale_country` is also a valid fallback when available. If you use another Klaviyo property, make sure it uses the same country code format.

## FAQs

<details>

<summary>Why don’t I see the Orbe properties in Klaviyo?</summary>

This usually means Klaviyo didn’t identify the visitor during their session. Orbe sends country and language preferences only when Klaviyo’s `isIdentified` function is active. If Klaviyo doesn’t recognize the user (for example, they browse anonymously without being logged in or without coming from a tracked Klaviyo email), the data can’t be associated with their profile.

</details>

<details>

<summary>In which situations does Klaviyo identify users?</summary>

Klaviyo now identifies visitors only in specific cases:

* When they click a link from a Klaviyo email (with UTM parameters);
* When they are logged into their customer account;
* When Klaviyo explicitly identifies them in the frontend using `klaviyo.identify;`

If none of these conditions occur, Klaviyo won’t link the session to a known email address, and Orbe can’t send the properties.

</details>

<details>

<summary>Can Orbe associate anonymous visitors with emails?</summary>

No. For privacy and GDPR compliance, Orbe never stores or links user emails. The identification is entirely handled by Klaviyo. Once Klaviyo recognizes a user, Orbe automatically sends their country and language preferences.

</details>

<details>

<summary>Does Orbe create customer metafields in Shopify?</summary>

No. Orbe sends country and language properties to Klaviyo, where they appear as `Country (Orbe)` and `Language (Orbe)` in the user’s profile.

Klaviyo can then sync those custom profile properties back to Shopify as customer metafields if you enable it in Klaviyo’s Shopify integration settings. In Klaviyo, go to the **To Shopify** sync settings, enable profile and custom property sync, and select the Orbe properties you want to send to Shopify.

When this sync is enabled, Klaviyo creates the metafield definitions in Shopify and updates the corresponding customer values. This is managed by Klaviyo, not by Orbe. You can learn more in [Klaviyo’s Shopify sync documentation](https://help.klaviyo.com/hc/en-us/articles/360030919351).

</details>

<details>

<summary>Why do some users have Orbe properties while others don’t?</summary>

This depends entirely on whether Klaviyo identified those users. If the user visited your store anonymously or never interacted with the Orbe popup or selector, no preferences can be sent.

{% hint style="info" %}
To increase the number of identified profiles, configure Orbe to show the popup on the **first visit** for all users, and avoid adding a close (“X”) button so visitors are encouraged to interact and confirm their preferences.
{% endhint %}

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.orbe.app/general/integrations/klaviyo.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
