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

# Klaviyo

Connecting Klaviyo lets your referral program feed into your broader email strategy. Bloop keeps Klaviyo in the loop automatically: **who your advocates are, which campaigns they belong to, and what their referral link and code are** — so you can segment customers, send broadcasts, and build automations without exporting a CSV.

Set it up under **Integrations → Klaviyo**.

### How it works

Everything that happens in your referral program is reflected in Klaviyo on three layers:

```mermaid
flowchart LR
  A["A customer joins your<br/>referral program"] --> B["Bloop updates their<br/>Klaviyo profile"]
  B --> C["They appear in each<br/>campaign's segment"]
  B --> D["Events are sent along the way<br/>(join, share, purchase...)"]
  C --> E["You: filter customers and send<br/>campaign-specific broadcasts"]
  D --> F["You: build Klaviyo flows<br/>(welcome, thank-you, win-back)"]
```

> **Best practice:** Build **segments** from profile properties and the ready-made campaign segments (standing facts: *who is a referrer, who's in which campaign*), and trigger **flows** from events (moments: *a referral just converted*). Mixing them up is the most common reason a Klaviyo setup feels unreliable.

### Connecting Klaviyo

1. In Klaviyo, create a private API key with permission to read and write profiles and events.
2. In Bloop, open **Integrations → Klaviyo**, paste the key, and enable the toggle.
3. Run the **Sync** once, right after connecting, so existing advocates carry their properties from day one — otherwise a segment like "all referrers" misses your existing base.

Turning the toggle off pauses the integration without removing the key. Live custom events require the Scale plan; lower plans can still connect and sync.

### What's on an advocate's profile

| Property                                                | What it holds                                                                                                                                                                                      |
| ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BLOOP Campaigns`                                       | The campaigns they currently belong to (a list — one advocate can be in several)                                                                                                                   |
| `BLOOP Campaign Links` / `BLOOP Campaign Codes`         | Their personal referral link and code, **per campaign** — insert them into your emails                                                                                                             |
| `BLOOP Hub Portal`                                      | A **permanent** link to their [referral hub](/referral-program/referral-hub.md) (unlike the 2-hour magic link in Bloop's own emails, so it's safe to drop into a flow email that sends days later) |
| `BLOOP Referral revenue` / `BLOOP Successful referrals` | Lifetime totals across all campaigns — never reduced when someone leaves a campaign                                                                                                                |
| `BLOOP Is referrer` / `BLOOP Is referee`                | Who's an advocate, who was referred (referee-only profiles get just the identity fields)                                                                                                           |
| `BLOOP Joining date` / `BLOOP Joining source`           | When and how they joined                                                                                                                                                                           |

To insert a campaign's link into an email template, use a two-step lookup — for a campaign named *Summer Sale*:

```
{{ person|lookup:'BLOOP Campaign Links'|lookup:'Summer Sale' }}
```

### A ready-made segment for every campaign

Create a campaign in Bloop, open Klaviyo, and the segment **`BLOOP - {campaign name}`** is already there:

* **Membership updates itself.** Someone joins → they enter. Someone leaves → they exit. Zero maintenance.
* **Broadcasts per campaign.** Pick the segment as the recipient list — only that campaign's advocates get the email.
* **Flow trigger.** Use Klaviyo's *Added to segment* trigger to welcome customers into a specific campaign.
* **Renames handled.** Rename the campaign and the segment follows; delete the segment by accident and Bloop recreates it.

> **Note:** Being in a segment doesn't guarantee delivery — Klaviyo only sends broadcasts to profiles that have consented to email marketing.

### Events Bloop sends

Each event appears in Klaviyo as a metric you can use as a flow trigger. Every event carries the campaign name, so a flow can target one specific campaign.

| Bloop metric                        | Fires when                                             | Flow ideas                                   |
| ----------------------------------- | ------------------------------------------------------ | -------------------------------------------- |
| `BLOOP - Join program`              | A customer joins your program                          | Welcome email with their referral link       |
| `BLOOP - Referral sharing`          | An advocate shares their link by email                 | Thank them, restate the reward               |
| `BLOOP - Referral purchase pending` | A friend purchased; the reward is under review         | "Your reward is on its way"                  |
| `BLOOP - Successful referral`       | A referral converts (carries the reward type and code) | Congratulations + the reward code            |
| `BLOOP - Referral made ineligible`  | A referral is rejected                                 | A tactful heads-up with the reason           |
| `BLOOP - Referee receives discount` | The referred friend gets their discount                | Remind them before the code expires          |
| `BLOOP - Left campaign`             | A customer leaves one campaign                         | Stop share reminders · send a win-back email |
| `BLOOP - Removed from program`      | A customer is removed from the program                 | Exclude them from all related automations    |

> **Avoid double-sending.** If you replace Bloop's built-in emails with Klaviyo flows, disable the matching emails in Bloop's **Email settings** so advocates don't receive both.

### When a customer leaves a campaign

Say your campaign targets VIP-tier customers only, and Anna drops out of that tier:

```mermaid
flowchart TD
  A["Anna no longer qualifies<br/>for the VIP Program campaign"] --> B["Her referral link and code<br/>for this campaign stop working"]
  B --> C["Her profile updates: VIP Program<br/>disappears from her campaign list"]
  C --> D["She automatically exits the<br/>'BLOOP - VIP Program' segment"]
  C --> E["The 'BLOOP - Left campaign'<br/>event fires"]
  E --> F["Your flows can react: stop share<br/>reminders · send a win-back email"]
  D -.-> G["Revenue and referrals she<br/>brought in are KEPT — forever"]
```

Three things to know:

* The *Left campaign* event carries **no link or code** — they were just deactivated, so your flows can never send a dead link by mistake.
* If she's still in another campaign, everything about that campaign stays untouched.
* When **you change a campaign's audience** (moving many customers at once): profiles and segments still update correctly, but **no events fire** — your flows never mass-email by accident.

### Upgrading from the legacy setup

> **The campaign-based format is live as of July 17, 2026.** Klaviyo connections made after this date use it automatically. If you connected earlier, you're on the legacy format — everything keeps working as-is, but **we recommend upgrading soon**: campaign segments, per-campaign links and codes, and the *Left campaign* event are only available after you upgrade, and multi-campaign features will require it.

Before multi-campaign support, a profile held a single referral link and code. Profiles now use a per-campaign format. Your current setup **won't change on its own** — you upgrade when you're ready.

```mermaid
flowchart LR
  V1["Legacy setup<br/>1 link + 1 code on the profile<br/>your current flows keep working"]
  V2["Campaign-based setup<br/>per-campaign links, codes, segments<br/>+ the Left campaign event"]
  V1 -->|"Press Sync and confirm"| V2
  V1 -->|"Create an additional campaign"| V2
```

**When you'll be asked:** when you press **Sync** on the Klaviyo page, or when you create an additional campaign. The upgrade only happens after you confirm; cancel and nothing changes. Upgrading is one-way — there's no self-service way back to the old format.

**What changes** — profile properties move to the per-campaign format:

| Old property          | Use instead                                                                               |
| --------------------- | ----------------------------------------------------------------------------------------- |
| `BLOOP Referral link` | `BLOOP Campaign Links` (per campaign) — the old property now points to the advocate's Hub |
| `BLOOP Referral code` | `BLOOP Campaign Codes` (per campaign)                                                     |
| *(new)*               | `BLOOP Campaigns` — the list your campaign segments are built on                          |

**After upgrading**, update any segments or email templates that used the old properties.

**What never changes:** the names of the 8 events (existing flows keep triggering) and all revenue / referral statistics.

### Three high-value plays

* **Top-referrer VIP segment.** Build on `BLOOP Successful referrals` ≥ your threshold — give richer rewards or early access.
* **Reward thank-you flow.** Trigger off the `BLOOP - Successful referral` *event* so gratitude lands the instant a referral converts.
* **Win-back leavers.** Trigger off `BLOOP - Left campaign` to invite the customer into another campaign — their lifetime stats travel with them.

### Common mistakes to avoid

* **Segmenting off an event instead of a property.** An event captures a moment, not a standing fact — use the `BLOOP Successful referrals` *property* (or the ready-made campaign segments) for durable segments.
* **Triggering a flow off a property.** Properties don't "happen" — use the *event* to start a flow.
* **Skipping the initial audience sync.** Without it, existing advocates carry no properties for weeks.
* **Keeping Bloop's built-in email on after building the equivalent flow.** Your advocates get two emails.

### Related

* [Mailchimp integration](/referral-program/integrations/mailchimp.md) — the equivalent integration for Mailchimp.
* [Referral analytics](/referral-program/analytics/analytics.md) — the in-app view of the same performance.


---

# 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://docs.bloop.plus/referral-program/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.
