Back to the help center
Help center

Klaviyo integration

Loyalo forwards subscription and loyalty events to Klaviyo so you can build flows there. You connect your own key per shop and test everything safely first.

Updated: 3 October 2026

Connecting your key

  1. Add your API keyEnter your Klaviyo private API key under Settings > Integrations. This is set per shop.
  2. Check matchingLoyalo matches customers on Shopify customer ID, with email as a fallback.
  3. Send a test eventSend a test event to your own email address and check in Klaviyo which fields come with it. The event is marked with loyalo_test, so you can exclude it in your flow.
  4. Choose the sender per emailChoose per email whether Loyalo sends it or your Klaviyo flow, so customers do not get the same email twice.

Events and profile fields

Loyalo sends events for subscriptions (started, paused, resumed, skipped, cancelled, upcoming delivery), payments (failed, recovered, card expiring), points (earned, reward available, redeemed, new tier) and B2B. In Klaviyo every event is called "Loyalo" plus the name, for example "Loyalo Subscription Started", and you switch each event on or off separately. It also fills `loyalo_*` profile fields, such as points balance or subscription status. No tags are used. Which fields an event carries is shown on the Integrations page under Payload per event: the last real event, or an example when it has not been sent yet.

ItemWhere to find it
EventsKlaviyo > Metrics, the metrics that start with Loyalo
Profile fieldsThe customer's Klaviyo profile, fields prefixed loyalo_
MatchingShopify customer ID, with email as fallback

Showing points in your own e-mails

Loyalo keeps every customer's points balance and tier on the Klaviyo profile. You use those fields in any template you already have, for example as a fixed block in the footer of your newsletter.

Profile fieldContent
loyalo_points_balanceThe current points balance
loyalo_points_nameWhat your points are called, in the customer's language
loyalo_points_valueWhat the balance is worth, based on your fixed-amount reward
loyalo_rewards_availableThe number of rewards the customer can redeem now
loyalo_next_rewardThe next reward the customer is saving for
loyalo_points_to_next_rewardHow many points the customer still needs for it
loyalo_points_expiringPoints that expire within 30 days
loyalo_points_expire_dateThe first date on which points expire
loyalo_loyalty_urlThe link to your loyalty page (from Brand), otherwise the customer account
loyalo_lifetime_pointsAll points the customer has ever earned
loyalo_tierThe name of the customer's tier
loyalo_next_tierThe name of the next tier
loyalo_next_tier_remainingWhat the customer still needs for the next tier, in the unit your tiers are based on
You have {{ person|lookup:'loyalo_points_balance'|default:0 }} {{ person|lookup:'loyalo_points_name'|default:'points' }}{% if person|lookup:'loyalo_tier' %} · {{ person|lookup:'loyalo_tier' }}{% endif %}.
{% if person|lookup:'loyalo_points_to_next_reward' %}{{ person|lookup:'loyalo_points_to_next_reward' }} more for {{ person|lookup:'loyalo_next_reward' }}.{% endif %}
{% if person|lookup:'loyalo_points_expiring' %}Note: {{ person|lookup:'loyalo_points_expiring' }} {{ person|lookup:'loyalo_points_name'|default:'points' }} expire soon.{% endif %}
Paste this into a text block of your template. The Dutch version is on the Integrations page of your dashboard, with a copy button.
  1. Add a text blockOpen your template in Klaviyo and put a text block in the footer. Paste the lines above into it and style the text your own way.
  2. Show the block only to customers with pointsOn the block, choose the Display tab and under Show/hide logic enter: person|lookup:'loyalo_points_balance' > 0. Customers without points then do not see the block.
  3. Add a linkPut a button below the block and enter {{ person|lookup:'loyalo_loyalty_url' }} as its link. It goes to your loyalty page, where the customer can redeem straight away.
  4. Use the block everywhereSave the block in Klaviyo as universal content. You then change it in one place for all your templates.

The profile is updated shortly after every change in points, tier or subscription, and once a day Loyalo checks all profiles. For this, switch on updating customer profiles on the Integrations page; the button next to it starts an update straight away. The fields are only on profiles of customers with points, a tier or a subscription.

In Shopify too

The same data is a metafield on the customer in Shopify, in the namespace loyalo: points_balance, points_lifetime, tier and tier_name. With it you show the balance in Shopify Email too and use it in Flow. For this, switch on writing the profile to Shopify on the Tiers page.

Example flows

  • Winback flow triggered by the cancelled subscription event
  • Reminder flow triggered by the upcoming delivery event
  • Segment on points balance using the loyalo_points_balance profile field
Note

You build and manage flows yourself in Klaviyo. Loyalo only supplies the events and profile fields.

Can I configure events per shop separately?

Yes, each shop has its own API key and its own settings per email.

Why don't I see tags in Klaviyo?

Loyalo uses profile fields (loyalo_*) instead of tags, giving more flexibility in segmentation.

Can I put the points balance in my existing newsletter?

Yes. The balance is on the profile as loyalo_points_balance. Put it in a text block with {{ person|lookup:'loyalo_points_balance'|default:0 }}; see the section Showing points in your own e-mails.

How do I test without disturbing customers?

Send a test event to your own email address. It is marked with loyalo_test, so a flow can skip it and no customer notices anything.

Read next