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

# Klaviyo

Get the most out of Zigpoll and Klaviyo

#### Step #1: Create your integration

* Get your Public and Private Keys from Klaviyo. You can access your keys by following the steps here: <https://help.klaviyo.com/hc/en-us/articles/115005062267-How-to-Manage-Your-Account-s-API-Keys>

{% hint style="info" %}
Make sure the keys have **Full Access** enabled for **Events** and **Profiles**.\
\
**NOTE:** If you want to **Auto Subscribe** new customers to your list then you will need to also add **Full Access** for **Subscriptions** and **Lists**.
{% endhint %}

* In Zigpoll, go to **Integrations** in the account sidebar and turn on **Klaviyo**. Shopify merchants open Zigpoll from Shopify admin → **Apps → Zigpoll** first. Klaviyo is set up once for the whole account, not inside each survey.
* Enter your public and private keys into the input fields and save.

{% hint style="success" %}
The first time you connect, Zigpoll sends a one-time **Zigpoll Integration Connected** event to your Zigpoll account email. The integration then appears in Klaviyo right away, without waiting for your first survey response. Open **Analytics → Metrics** to confirm it's working. This event is only a setup confirmation. Your survey data flows in as described below.
{% endhint %}

#### Step #2: Collect Your Data

Once you connect, data flows into your Klaviyo account. If you use our Shopify integration, Zigpoll uses the Shopify customer data to match each response to the right email address. Otherwise, if your survey has an email question, Zigpoll uses that answer to find an existing Klaviyo profile or create a new one.

If you send your survey's [public link](/public-link.md) from a Klaviyo email, no extra setup is needed to identify the respondent. Klaviyo appends its `_kx` tracking parameter to the link, and Zigpoll uses it to look up the recipient's Klaviyo profile and attach their email to the response. Don't add `_kx` to the link yourself (for example `?_kx={{ person.id }}`): Zigpoll can only look up the value Klaviyo appends to links it tracks, so a hand-written one leaves the response without an email. To pass the email explicitly, add `?email={{ email }}` instead. See [Klaviyo URL Templates](/tutorials/klaviyo-url-templates.md) if you also want to pass order or customer data.

Zigpoll also captures **phone numbers** from survey responses. A phone can come from a phone-number question or be typed into a free-text answer, and the Shopify customer phone is used when available. Zigpoll adds it to the respondent's Klaviyo profile in E.164 format (e.g. `+14155551234`). When the response also has an email, the phone goes on that same profile, so you don't end up with duplicates. Otherwise Zigpoll creates or updates a profile keyed by the phone number. The phone is stored on the profile only. Zigpoll does not subscribe anyone to SMS marketing.

When someone completes a survey, Zigpoll sends Klaviyo an event named after that survey: **`[Zigpoll] Completed Survey: <your survey title>`**. Each of your surveys gets its own metric. The event holds that survey's answers, keyed by each question's handle. To change how an answer is labeled in Klaviyo, edit that question's handle.

Zigpoll also sends the customer's average sentiment score. Use it to build campaigns and trigger flows that grow customer lifetime value.

The event also carries the response's metadata as event properties. When the survey has an attribution question ("How did you hear about us?"), that includes `attribution_channel`, the channel the customer reported (for example `instagram`, `podcast` or `word_of_mouth`), and `attribution_source`, the name they gave when there is one (for example "The Daily"). Use them in a flow trigger filter or a conditional split, for example to send a different follow-up to customers who came from a podcast. These two are event properties only. They are not saved on the Klaviyo profile. See [Reported attribution metadata](/embed/poll-metadata/special-variables.md#reported-attribution-metadata) for every value.

#### Profile properties

Each answer is also saved on the Klaviyo profile as a custom property named `Zigpoll: <question handle>`. The profile also gets **Zigpoll Sentiment**, **Zigpoll Raw Sentiment**, and a **Zigpoll Participant** link back to the participant in Zigpoll. Open a profile in Klaviyo and look under its custom properties to check that data is arriving.

#### When the event is sent

The event is sent about a minute after someone finishes the survey. If they stop partway through, it is sent with the answers they gave, about 10 minutes after their last answer. After that, Klaviyo can take a few more minutes before the metric appears as a flow trigger. A new survey's metric only exists in Klaviyo after its first response, so submit a test response on the live survey before building the flow.

{% hint style="warning" %}
**The event only reaches Klaviyo when the response has an identity.** Zigpoll needs an email address or phone number for the respondent. It finds one when:

* the survey has an email or phone question, or a typed answer contains one;
* the survey link carries `?email=` (see [Klaviyo URL Templates](/tutorials/klaviyo-url-templates.md));
* the link was clicked in a Klaviyo email, so it carries Klaviyo's `_kx` parameter;
* on Shopify, the customer is known from their order or login.

Anonymous responses with none of these are not sent to Klaviyo.
{% endhint %}

#### Will past responses sync?

No. Only responses collected after you connect Klaviyo are sent. To get older data into Klaviyo, export it from Zigpoll and import it into Klaviyo yourself.

#### Will this create duplicate profiles?

Zigpoll matches profiles by email. If a Klaviyo profile with that email exists, the answers are added to it. If not, Klaviyo creates one. A phone number is added to the email's profile only if that profile has no phone yet. Zigpoll never overwrites an existing phone, and skips a phone that already belongs to another profile. A new, phone-only profile is created only when a response has a phone number and no email.

#### Adding respondents to a list

There are two ways to add respondents to a Klaviyo list:

* **Auto Subscribe (account level).** On the Klaviyo card on the **Integrations** page, turn on **Auto Subscribe** and click **Add Auto-Subscribe List**. Pick a **Survey** (or **All Surveys**) and a **List**. A list set for a specific survey wins over the **All Surveys** list.
* **Subscribe to Klaviyo list (an Action).** In a survey's **Settings → Workflows → Actions**, or in a question's logic, add the **subscribe to klaviyo list** action and pick a list. Use this when only some respondents should join the list, for example those who give a certain answer.

{% hint style="danger" %}
**Auto Subscribe changes marketing consent.** Every respondent with an email is added to the list with email marketing consent set to **Subscribed**. That includes people who unsubscribed from your emails before, so they start receiving marketing again. Turn it on only if your survey asks for, and records, consent to marketing, for example with a clear opt-in question. Check your obligations under GDPR, CAN-SPAM, and similar laws. If your list uses double opt-in, Klaviyo may hold new subscribers until they confirm.

Auto Subscribe never subscribes anyone to SMS marketing.
{% endhint %}


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.zigpoll.com/integrations/klaviyo.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
