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

# Klaviyo

Fish Wishlist supports Klaviyo integration via Shopify Flow. Send Klaviyo an event when customers add or remove products, when a saved item comes back in stock or drops in price, and more.

***

### How it works

Every wishlist event in Fish Wishlist is a **Shopify Flow trigger**. A Flow workflow picks up the trigger and sends it to Klaviyo as an event, which you can then use to start Klaviyo flows and build segments.

Two events come as **ready-to-use templates** (product added and product removed). Every other trigger, such as back in stock or price drop, can be sent the same way with a short workflow you build yourself (see [Send more events to Klaviyo](#send-more-events-to-klaviyo)).

***

### Prerequisites

To use this integration, you’ll need:

* Fish Wishlist installed and active on your Shopify store
* Klaviyo installed and integrated with Shopify
* Shopify Flow installed (free on all Shopify plans)
* Your **Klaviyo Public API Key** (Klaviyo calls it your public API key or Site ID)

***

### What gets sent to Klaviyo, and when

Each trigger sends **one event at the moment its own thing happens**, and only if a workflow for that trigger is turned on.

* **Adding a product** sends one `Product - Added to Wishlist` event, once, when the customer saves it. It doesn't include stock or price changes.
* **Back in stock** and **price drop** are separate triggers. Each one fires only when that change happens, and only for the customers who have that item saved, with one event per customer.
* **Nothing is resent on a schedule.** A customer who saved an item a month ago gets no new event until the item restocks or its price drops.
* **The templates only cover add and remove.** Back in stock, price drop and every other trigger reach Klaviyo only after you build and turn on a workflow for them.

{% hint style="info" %}
Fish Wishlist does not send a low-stock event.
{% endhint %}

***

### Available Templates

<figure><img src="https://1134778209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMp2ekCAtVgFUnsQlGWfX%2Fuploads%2Fxbx0exWu8gj8iEpfziRu%2Fimage.png?alt=media&amp;token=883a7b8a-0db9-415f-be39-8b9161a149cc" alt=""><figcaption></figcaption></figure>

You can load our prebuilt Shopify Flow templates here:\
👉 [Use Templates](https://admin.shopify.com/apps/flow/editor/templates?apps=157109354497)

#### 1. Trigger marketing campaign when customer adds product to wishlist

Sends the event `Product - Added to Wishlist` to Klaviyo when a product is added to a wishlist.\
**Useful for flows like:** “Send a reminder if item hasn’t been purchased in X days.”

#### 2. Cancel marketing campaign when customer removes product from wishlist

Sends the event `Product - Removed from Wishlist` to Klaviyo when a product is removed from a wishlist.\
**Useful for flows like:** “Stop reminding users about items they’re no longer interested in.”

***

### Customizing the Flow

Each template delivers events to Klaviyo. You can customize the payload based on your needs.

The only field you have to fill in is your Klaviyo Public API Key. To find it in Klaviyo, go to "Account > Settings > API Keys".

<figure><img src="https://1134778209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FMp2ekCAtVgFUnsQlGWfX%2Fuploads%2FtJqfPnnbJ04TRBLBbqXp%2Fimage.png?alt=media&amp;token=293c0896-9c5b-4fec-924f-cd2ac06eebcb" alt=""><figcaption></figcaption></figure>

Once you have added your API key, you can publish the Flow and wishlist data will start flowing through to Klaviyo.

***

### Every trigger as a Klaviyo event

| Fish Wishlist trigger            | Fires when                                                                                  | Suggested Klaviyo event                      | What to build in Klaviyo                                                                   |
| -------------------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------ |
| Product Added to Wishlist        | A customer saves a product to any list                                                      | `Product - Added to Wishlist` (template)     | A reminder flow if the item isn't bought after a few days; a segment of recent wishlisters |
| Product Removed from Wishlist    | A customer removes a saved product                                                          | `Product - Removed from Wishlist` (template) | An exit condition on the reminder flow, so they stop hearing about it                      |
| Wishlist Product Back in Stock   | A saved variant goes from sold out to in stock, with at least your minimum units            | `Wishlist - Back in Stock`                   | An "it's back" email or SMS with the product link, sent straight away                      |
| Wishlist Product Price Drop      | The hourly check finds a saved variant is cheaper than its last recorded price and in stock | `Wishlist - Price Drop`                      | A price-drop email showing the old and new price                                           |
| Wishlist Created                 | A customer creates a list (on single-list stores, their first save)                         | `Wishlist - Created`                         | A welcome email about saving, sharing and alerts                                           |
| Wishlist Removed                 | A customer deletes a list                                                                   | `Wishlist - Removed`                         | An exit condition for list-based flows                                                     |
| Shared Wishlist Created          | A customer shares a list                                                                    | `Wishlist - Shared`                          | Send them their share link; gift-guide or registry campaigns                               |
| Collection Added to Wishlist     | A customer saves a whole collection                                                         | `Collection - Added to Wishlist`             | Category-interest segments and new-arrivals emails for that collection                     |
| Collection Removed from Wishlist | A customer removes a saved collection                                                       | `Collection - Removed from Wishlist`         | Remove them from that collection's segment                                                 |

The two template event names are fixed. The others are suggestions: the name you type becomes the metric name in Klaviyo, so pick one and keep it consistent. A ready-to-copy event for each trigger is in [Sample events for every trigger](#sample-events-for-every-trigger), and the fields each trigger carries are listed in the [Flow Triggers Reference](/shopify-flow/flow-triggers-reference.md).

***

### Send more events to Klaviyo

This example sends back-in-stock events. Follow the same steps for any other trigger, using its [sample event](#sample-events-for-every-trigger).

1. In Shopify Flow, click **Create workflow** and choose the trigger **Wishlist Product Back in Stock**.
2. Add the Klaviyo **Track an Event** action, the same one the templates use. Enter your Klaviyo Public API Key.
3. Fill in the event name, email, first name and last name from the [sample event](#wishlist-product-back-in-stock), and paste its `properties` object into the **Properties** field.
4. Click **Turn on workflow**. For back in stock and price drop, turning the workflow on is what starts tracking. See [Set Up Wishlist Alerts](/shopify-flow/set-up-wishlist-alerts.md).
5. In Klaviyo, create a flow triggered by the metric **Wishlist - Back in Stock** and use the event properties in your email.

***

### Sample events for every trigger

Each sample below is a complete **Track an Event** setup for one Fish Wishlist trigger. `trigger` is the Flow trigger to pick; `event`, `email`, `first_name` and `last_name` go in the matching action fields; and the `properties` object goes in the **Properties** field. Text in `{{ }}` is a Flow variable that's filled in when the workflow runs.

Every sample includes `$event_id`, which stops Klaviyo counting the same event twice. Add or remove properties to suit your flows.

#### Product Added to Wishlist

The one-click template sends a shorter version of this event. This one adds product and list details for richer segments.

```json
{
  "trigger": "Product Added to Wishlist",
  "event": "Product - Added to Wishlist",
  "email": "{{customer.email}}",
  "first_name": "{{customer.firstName}}",
  "last_name": "{{customer.lastName}}",
  "properties": {
    "$event_id": "{{eventId}}",
    "Product": "{{product.title}}",
    "Product ID": "{{product.legacyResourceId}}",
    "Variant ID": "{{variantId}}",
    "Vendor": "{{product.vendor}}",
    "Product URL": "{{product.onlineStoreUrl}}",
    "Image": "{{product.featuredImage.url}}",
    "Wishlist ID": "{{wishlistId}}",
    "Wishlist title": "{{wishlistTitle}}"
  }
}
```

#### Product Removed from Wishlist

```json
{
  "trigger": "Product Removed from Wishlist",
  "event": "Product - Removed from Wishlist",
  "email": "{{customer.email}}",
  "first_name": "{{customer.firstName}}",
  "last_name": "{{customer.lastName}}",
  "properties": {
    "$event_id": "{{eventId}}",
    "Product": "{{product.title}}",
    "Product ID": "{{product.legacyResourceId}}",
    "Variant ID": "{{variantId}}",
    "Vendor": "{{product.vendor}}",
    "Wishlist ID": "{{wishlistId}}",
    "Wishlist title": "{{wishlistTitle}}"
  }
}
```

#### Wishlist Product Back in Stock

```json
{
  "trigger": "Wishlist Product Back in Stock",
  "event": "Wishlist - Back in Stock",
  "email": "{{customer.email}}",
  "first_name": "{{customer.firstName}}",
  "last_name": "{{customer.lastName}}",
  "properties": {
    "$event_id": "{{eventId}}",
    "Product": "{{product.title}}",
    "Product ID": "{{product.legacyResourceId}}",
    "Variant ID": "{{variantId}}",
    "Vendor": "{{product.vendor}}",
    "Product URL": "{{product.onlineStoreUrl}}",
    "Image": "{{product.featuredImage.url}}"
  }
}
```

This trigger has no list fields: it fires once for each customer who has the variant saved.

#### Wishlist Product Price Drop

```json
{
  "trigger": "Wishlist Product Price Drop",
  "event": "Wishlist - Price Drop",
  "email": "{{customer.email}}",
  "first_name": "{{customer.firstName}}",
  "last_name": "{{customer.lastName}}",
  "properties": {
    "$event_id": "{{eventId}}",
    "Product": "{{product.title}}",
    "Product ID": "{{product.legacyResourceId}}",
    "Variant ID": "{{variantId}}",
    "Vendor": "{{product.vendor}}",
    "Product URL": "{{product.onlineStoreUrl}}",
    "Image": "{{product.featuredImage.url}}",
    "Wishlist ID": "{{wishlistId}}",
    "Wishlist title": "{{wishlistTitle}}",
    "Old price": {{oldPrice}},
    "New price": {{newPrice}},
    "Discount percent": {{ oldPrice | minus: newPrice | times: 100 | divided_by: oldPrice | round }}
  }
}
```

The prices and discount are sent as numbers (no quotes), so Klaviyo can compare them. To skip small changes, add a trigger filter in your Klaviyo flow, for example **Discount percent is at least 10**. Shopify Flow conditions can't do maths, so filtering on the percentage in Klaviyo is the simplest way.

#### Wishlist Created

```json
{
  "trigger": "Wishlist Created",
  "event": "Wishlist - Created",
  "email": "{{customer.email}}",
  "first_name": "{{customer.firstName}}",
  "last_name": "{{customer.lastName}}",
  "properties": {
    "$event_id": "{{eventId}}",
    "Wishlist ID": "{{wishlistId}}",
    "Wishlist title": "{{wishlistTitle}}"
  }
}
```

#### Wishlist Removed

```json
{
  "trigger": "Wishlist Removed",
  "event": "Wishlist - Removed",
  "email": "{{customer.email}}",
  "first_name": "{{customer.firstName}}",
  "last_name": "{{customer.lastName}}",
  "properties": {
    "$event_id": "{{eventId}}",
    "Wishlist ID": "{{wishlistId}}",
    "Wishlist title": "{{wishlistTitle}}"
  }
}
```

#### Shared Wishlist Created

```json
{
  "trigger": "Shared Wishlist Created",
  "event": "Wishlist - Shared",
  "email": "{{customer.email}}",
  "first_name": "{{customer.firstName}}",
  "last_name": "{{customer.lastName}}",
  "properties": {
    "$event_id": "{{eventId}}",
    "Wishlist ID": "{{wishlistId}}",
    "Wishlist title": "{{wishlistTitle}}",
    "Share URL": "{{sharedWishlistUrl}}",
    "Items": {{sharedWishlistItems}}
  }
}
```

`Items` has no quotes because the trigger already sends it as JSON: a list of objects with `product_id`, `variant_id`, `product_title` and `variant_title`. Klaviyo receives it as a list, so you can loop over it in an email.

#### Collection Added to Wishlist

```json
{
  "trigger": "Collection Added to Wishlist",
  "event": "Collection - Added to Wishlist",
  "email": "{{customer.email}}",
  "first_name": "{{customer.firstName}}",
  "last_name": "{{customer.lastName}}",
  "properties": {
    "$event_id": "{{eventId}}",
    "Collection ID": "{{collectionId}}",
    "Collection title": "{{collectionTitle}}",
    "Collection handle": "{{collectionHandle}}"
  }
}
```

#### Collection Removed from Wishlist

```json
{
  "trigger": "Collection Removed from Wishlist",
  "event": "Collection - Removed from Wishlist",
  "email": "{{customer.email}}",
  "first_name": "{{customer.firstName}}",
  "last_name": "{{customer.lastName}}",
  "properties": {
    "$event_id": "{{eventId}}",
    "Collection ID": "{{collectionId}}",
    "Collection title": "{{collectionTitle}}",
    "Collection handle": "{{collectionHandle}}"
  }
}
```

***

### Choose what Klaviyo receives

Each template and workflow is an ordinary Shopify Flow workflow, so you can add steps before the Klaviyo action:

* **Filter products.** Add a condition on `product.tags`, `product.productType` or `product.vendor` so that, for example, pre-order products never send an event.
* **Filter customers.** Add a condition on `customer.tags` so that only customers with a tag such as VIP are sent.
* **Add data.** Add more properties to the event, such as `{{product.vendor}}` or `{{wishlistTitle}}`, to build richer Klaviyo segments.

***

### Good to know

* **`$event_id` prevents duplicates.** Klaviyo uses it to recognise an event it has already received. Keep it in every workflow.
* **Price drops arrive within the hour.** They are found by an hourly check, not instantly.
* **Choose what counts as a restock.** In Fish Wishlist, go to **Settings → Back in stock alerts → Minimum units back in stock** so a single unit coming back doesn't send an alert.
* **Price drops ignore app-managed lists.** Items saved only on the Abandoned Cart or Previously Purchased lists don't trigger price-drop events.

***

### Notes

* This integration is managed entirely via **Shopify Flow**
* Fish Wishlist triggers do not require any additional setup
* You can customize your own flows beyond the provided templates

***

### Support

Need help or want a custom flow? [Contact us](mailto:undefined) — we're happy to help you set it up.
