> 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/omnisend.md).

# Omnisend integration

The Omnisend integration keeps Memberply membership data in sync with Omnisend contacts. You can use the synced properties to create segments and personalize messages for active members, inactive members, or customers in a specific membership tier.

When a customer joins a tier, moves to another tier, schedules a cancellation, or becomes inactive, Memberply updates that customer's contact in Omnisend.

## What the integration can do

* Sync each customer's current Memberply membership status to Omnisend.
* Sync the customer's active membership tier ID and tier name.
* Clear 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 Omnisend segments for active members, inactive members, or members in a specific tier.

## Before you start

You need an Omnisend API key with `contacts.write` access.

To create an API key in Omnisend:

1. Open the [API keys section in Omnisend](https://app.omnisend.com/integrations/api-keys).
2. Create an API key and give it a name such as **Memberply**.
3. Give the key `contacts.write` access.
4. Copy the API key and keep it secure. Omnisend only displays a newly created key once.

For an existing Omnisend contact, Memberply updates the contact without sending identifiers, channel status, marketing consent, or tracking consent. If the contact does not exist yet, Memberply creates it with the email channel set to `nonSubscribed`. Memberply also disables Omnisend welcome messages and does not send phone numbers. Connecting the integration does not subscribe customers to marketing or unsubscribe customers who already opted in.

## Set up Omnisend

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

After the key is saved, Memberply starts syncing future membership changes to Omnisend. Memberply also checks existing Omnisend contacts and updates their expiry date in the background. This expiry-only check does not create missing contacts or backfill other membership properties. Full membership properties sync on the next membership change.

## Properties synced to Omnisend

Memberply syncs these custom properties to each Omnisend contact:

| 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 Omnisend contact fields when available:

| Field            | Description                                                                           |
| ---------------- | ------------------------------------------------------------------------------------- |
| Email identifier | The customer's email address, used to create or update the matching Omnisend contact. |
| `firstName`      | The customer's first name.                                                            |
| `lastName`       | The customer's last name.                                                             |

Memberply does not send the customer's phone number to Omnisend because Omnisend treats phone numbers as SMS identifiers with separate consent requirements.

## Example Omnisend segments

### Active members

Create an Omnisend segment where:

* `memberply_member_status` equals `active`

### Active members in a specific tier

Create an Omnisend segment where:

* `memberply_member_status` equals `active`
* `memberply_membership_tier_name` equals your tier name

You can use `memberply_membership_product_shopify_id` instead of the tier name if you want the segment to continue working after the tier is renamed.

### Cancelled members from a specific tier

Create an Omnisend segment where:

* `memberply_member_status` equals `inactive`
* `memberply_last_membership_tier_name` equals your tier name

## Important notes

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

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

If a customer cancels immediately, Memberply marks the customer inactive in Omnisend 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 contact again.

If an Omnisend sync fails, Memberply logs the error without blocking the membership change. A later membership change will attempt to sync the contact 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.

See [Omnisend custom properties](https://support.omnisend.com/en/articles/1061885-collect-manage-contact-custom-properties) for using date properties in your account.

## Reconnect a rejected API key

If Omnisend rejects the saved key or its contact permissions, Memberply pauses syncing and the integration returns to **Setup required**. This prevents repeated failed requests. Existing Omnisend contacts and marketing consent remain unchanged.

Save a valid replacement key with `contacts.write` access from **Integrations → Omnisend** to reconnect. The background expiry check resumes after reconnection; full membership properties sync on the next membership change.
