Connecting your key
- Add your API keyEnter your Klaviyo private API key under Settings > Integrations. This is set per shop.
- Check matchingLoyalo matches customers on Shopify customer ID, with email as a fallback.
- 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.
- 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.
| Item | Where to find it |
|---|---|
| Events | Klaviyo > Metrics, the metrics that start with Loyalo |
| Profile fields | The customer's Klaviyo profile, fields prefixed loyalo_ |
| Matching | Shopify 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 field | Content |
|---|---|
| loyalo_points_balance | The current points balance |
| loyalo_points_name | What your points are called, in the customer's language |
| loyalo_points_value | What the balance is worth, based on your fixed-amount reward |
| loyalo_rewards_available | The number of rewards the customer can redeem now |
| loyalo_next_reward | The next reward the customer is saving for |
| loyalo_points_to_next_reward | How many points the customer still needs for it |
| loyalo_points_expiring | Points that expire within 30 days |
| loyalo_points_expire_date | The first date on which points expire |
| loyalo_loyalty_url | The link to your loyalty page (from Brand), otherwise the customer account |
| loyalo_lifetime_points | All points the customer has ever earned |
| loyalo_tier | The name of the customer's tier |
| loyalo_next_tier | The name of the next tier |
| loyalo_next_tier_remaining | What 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 %} - 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.
- 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.
- 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.
- 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.
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
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.
Emails and brand style
Loyalo sends emails about subscriptions and points in your own brand style, in the customer's language. Per email you choose whether Loyalo or Klaviyo sends it.
Showing the loyalty programme in your shop
Put the loyalty programme on your product page, a rewards page, the customer account, the till and in your e-mails, and match name and colours to your brand.
Retention and dunning
Make an offer when a customer wants to cancel, win back customers who stopped and have failed payments retried automatically.