> 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

Sync advocates, campaigns and referral events into Klaviyo for your email flows.

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 **Settings → Integration → Klaviyo**. The integration is available on the **Scale** plan; on lower plans the enable toggle stays locked.

### 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 the Klaviyo page and turn on the integration toggle — until it's on, **Connect** is disabled.
3. Press **Connect**, paste the key, and press **Verify**. Bloop reports the real reason if Klaviyo rejects it — a `403`, for example, means the key is valid but missing a scope, so fix the permission rather than making a new key.
4. Press **Connect** to save. Bloop immediately runs a full profile sync, so your existing advocates carry their properties from day one — without it, a segment like "all referrers" misses your existing base.

While a sync runs, the page shows its progress as *N* of *M* profiles, then a summary of how many synced and how many failed. A large audience takes a while; the sync continues server-side, and Bloop stops polling after about 30 minutes.

Turning the toggle off pauses the integration without removing the key. **Connected** reopens the same modal if you need to view or replace the key.

### Keeping Klaviyo in step

Bloop updates a profile whenever something about that customer changes. **Re-sync profiles** rebuilds every profile from scratch — use it when something looks missing or out of date in Klaviyo, after a bulk audience change, or when you've deleted a campaign segment by accident.

### 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                                                                                                                                                                           |
| `BLOOP Purchases needed for next reward` / `BLOOP Next reward description` | Where they stand against the next [tier](/referral-program/tier-rewards.md), when tier rewards are on                                                                                              |

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 a re-sync 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 and id, 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 [Email notifications](/referral-program/emails.md) 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

Before multi-campaign support, a profile held a single referral link and code. Profiles now use a per-campaign format. If you connected Klaviyo before that change, you're still on the legacy format — everything keeps working, and the Klaviyo page shows an **Upgrade available** badge next to **Re-sync profiles**.

```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 -->|"Re-sync profiles and confirm"| V2
  V1 -->|"Create an additional campaign"| V2
```

**When you'll be asked:** when you press **Re-sync profiles** on the Klaviyo page, or when you create an additional campaign — one profile-level link and code can't represent several campaigns, so a second campaign requires the upgrade. Either way you get a confirmation first, and **Upgrade & sync** is what commits it. Cancel and nothing changes — on the campaign screen, cancelling also means no campaign is created. Upgrading is one-way.

**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                          |

**What you get:** a ready-made segment for every campaign, per-campaign links and codes for your broadcasts, and the `BLOOP - Left campaign` event.

**What never changes:** the metric names your flows trigger on, and all revenue and referral statistics.

**After upgrading**, update any segments or email templates that used the old properties — that's the one piece of work the upgrade leaves you.

### 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.
* **Upgrading and leaving old segments in place.** A segment built on `BLOOP Referral code` silently stops matching.
* **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.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.
