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

# Klaviyo integration

The Klaviyo integration keeps Memberply membership data in sync with Klaviyo profiles. You can use this data to create Klaviyo segments and send emails to customers in specific membership tiers.

When a customer joins a tier, moves to another tier, schedules a cancellation, or becomes inactive, Memberply updates custom properties on that customer's Klaviyo profile.

## What the integration can do

* Sync each customer's current Memberply membership status to Klaviyo.
* Sync the customer's active membership tier ID and tier name.
* Clear the active tier fields when the customer is no longer active.
* Keep the customer's most recent Memberply tier available after cancellation.
* Sync scheduled cancellation dates for memberships that cancel at the end of the billing period.
* Let you build Klaviyo segments for active members, inactive members, or members in a specific tier.

## Before you start

You need a Klaviyo private API key with `profiles:read` and `profiles:write` access.

To create a private API key in Klaviyo:

1. In Klaviyo, open Account settings.
2. Open API keys.
3. Create a private API key.
4. Give the key read and write access for profiles. Read access lets Memberply find existing profiles when updating expiry dates.
5. Copy the private API key.

Memberply only updates profile properties. It does not subscribe or unsubscribe customers from email marketing, and it does not change Klaviyo consent status.

## Set up Klaviyo

1. From the Memberply dashboard, click Integrations.
2. Click Klaviyo.
3. Paste your Klaviyo private API key.
4. Click **Save settings**.
5. Confirm the integration status changes to Integrated.

After this is saved, Memberply will start syncing membership changes to Klaviyo profiles.

## Temporary sync failures

Memberply automatically retries temporary connection failures, timeouts, rate limits, and supported server errors. If an update still cannot be delivered, it is retained for background recovery using the customer's latest membership data. Recovery retries only the Klaviyo profile update; it does not repeat membership changes or other integrations.

Klaviyo rate-limit waiting periods are respected, so updates can be delayed during an outage or when your account is busy. Automatic recovery is bounded to roughly two days of attempts under normal retry timing. Invalid API keys, missing permissions, and validation errors need correction. If a profile remains out of date after correcting an issue, contact Memberply support to check and retry the update.

If Klaviyo temporarily returns a not-found response during a background expiry lookup or profile update, Memberply queues another check using the latest membership expiry. Each retry looks up the current profile again. If the contact no longer exists, the background check leaves it unchanged rather than recreating it. This recovery follows the same bounded retry limit.

## Properties synced to Klaviyo

Memberply syncs these custom properties to each Klaviyo profile:

| Property                                         | Description                                                                                                           |
| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| `memberply_member_status`                        | The customer's membership status. This is `active` or `inactive`.                                                     |
| `memberply_membership_tier_name`                 | The customer's current active Memberply tier name. This is cleared when the customer becomes inactive.                |
| `memberply_membership_product_shopify_id`        | The Shopify product ID for the customer's active membership tier. This is cleared when the customer becomes inactive. |
| `memberply_last_membership_tier_id`              | The Shopify product ID for the customer's most recent membership tier. This stays available after cancellation.       |
| `memberply_last_membership_tier_name`            | The most recent Memberply tier name for the customer. This stays available after cancellation.                        |
| `memberply_membership_expires_at`                | Effective membership end date as an ISO 8601 UTC date and time. Cleared when inactive or there is no expiry.          |
| `memberply_member_since`                         | The date and time the customer joined the tier.                                                                       |
| `memberply_membership_cancellation_scheduled_at` | The scheduled cancellation date when a member cancels at the end of the billing period.                               |
| `memberply_membership_cancelled_at`              | The date and time Memberply marked the membership inactive.                                                           |
| `memberply_shopify_customer_id`                  | The customer's Shopify customer ID.                                                                                   |
| `memberply_shopify_shop_domain`                  | Your Shopify shop domain.                                                                                             |

Memberply also sends these standard Klaviyo profile fields when available:

| Field          | Description                                                                          |
| -------------- | ------------------------------------------------------------------------------------ |
| `email`        | The customer's email address.                                                        |
| `first_name`   | The customer's first name.                                                           |
| `last_name`    | The customer's last name.                                                            |
| `phone_number` | The customer's phone number.                                                         |
| `external_id`  | A stable Memberply identifier using the Shopify shop domain and Shopify customer ID. |

## Example Klaviyo segments

### Active members

Create a Klaviyo segment where:

* Properties about someone > `memberply_member_status` equals `active`

### Active members in a specific tier

Create a Klaviyo segment where:

* Properties about someone > `memberply_member_status` equals `active`
* Properties about someone > `memberply_membership_tier_name` equals your tier name

You can also use `memberply_membership_product_shopify_id` instead of the tier name if you want the segment to keep working even if the tier name changes.

### Cancelled members from a specific tier

Create a Klaviyo segment where:

* Properties about someone > `memberply_member_status` equals `inactive`
* Properties about someone > `memberply_last_membership_tier_name` equals your tier name

## Important notes

Klaviyo may only show a custom property in the segment builder after at least one profile has received that property.

If you change a customer's tier in Memberply, the active tier properties in Klaviyo are updated to the new tier.

If a customer cancels immediately, Memberply marks the customer inactive in Klaviyo and clears the active tier fields.

If a customer cancels at the end of the billing period, Memberply syncs the scheduled cancellation date while the customer remains active. When the membership becomes inactive, Memberply updates the profile again.

## Build expiry reminder flows

Use `memberply_membership_expires_at` as the date property for your own reminders, for example 14, 7 and 1 day before expiry. The value includes imported or manually assigned end dates and expiry calculated from free or one-time tier rules. A scheduled subscription cancellation is an end date; the next payment on an ongoing subscription is not.

The date is cleared when the membership becomes inactive or changes to a membership without expiry. Extending access updates the date. Where there is a current active tier, Memberply uses it rather than an old tier from a delayed event.

Membership changes sync through the normal integration. A background check also updates only the expiry field on existing contacts, including members whose access expires automatically and changes to tier expiry rules. Checks run every 15 minutes, in batches of up to 500 contacts per integration. Large stores, provider limits, missing permissions or errors can take longer. Failed updates are retried on later passes. Missing contacts are left unchanged by this background check.

Configure a non-repeating date-based flow for each actual expiry, rather than an annually repeating anniversary reminder. Before each message, check that the expiry date is still present and upcoming. If your flow targets a particular tier, also check its current tier property. Membership status and tier properties are updated by normal membership events, not by the expiry-only background check. Confirm the first synced date in your provider before activating a flow, and use the provider's timezone settings deliberately.

Choose either these external reminders or Memberply's matching native reminders for each tier to avoid duplicate emails. Connecting this integration does not create or activate flows, send reminder emails, or change marketing consent.

Existing API keys with only `profiles:write` still support normal membership-event updates. Add `profiles:read` for the background expiry check. See [Klaviyo date-property flows](https://help.klaviyo.com/hc/en-us/articles/360002732652).
