Skip to content

Klaviyo metrics & personalisation

The below describes the functions of each flow in Klaviyo, when they are triggered, and potential email content and calls to action. Each event also lists the variables it sends, which you can use directly in your Klaviyo templates.

When setting these up the metrics can be created in Klaviyo using the Send Test Notifications option from the settings screen in winem8.

You can use these metrics for segment definitions, or as triggers for automatic flows of communication.

Every customer-facing email is driven by a Klaviyo event emitted from winem8. The event payload is available in Klaviyo templates under {{ event.* }}. Profile-level attributes — Klaviyo’s built-in ones, prefixed with $ — are available under {{ person.* }}. For example:

  • {{ event.curatedPackName }} — a value from the event payload
  • {{ person.$phone_number }} — a property stored on the customer’s Klaviyo profile

Dates are sent as ISO strings. Use Klaviyo’s date filters to render them — we recommend {{ event.nextRenewalDate|format_date_string|date:'d F o' }}, which produces 1 May 2023. The full list of date format options is in the Klaviyo date variable docs.

To seed all events into Klaviyo with placeholder data — so you can build and preview templates before real events flow — use the Create Sample Metrics button in winem8 Settings. This fires one of every event so each metric appears in Klaviyo immediately.

Some variables appear across multiple events. They’re listed once here for reference and called out in each event’s table below where they apply.

VariableExampleNotes
slugN1ke6YxgCShort id of the subscription; shown in the winem8 admin UI too
packTypecustom / curatedWhich subscription kind
$value189.0Klaviyo’s standard event-revenue property
lastRenewalDate / nextRenewalDateISO dateSubscription lifecycle dates
shippingAddressShopify address objectIncludes address1, address2, city, country, first_name, last_name, province, zip, phone
activationUrlShopify customer activation URLOnly on signup events; the link the customer clicks to set their store password

Sent as a confirmation once a user finalises their sign up for a Curated Pack. In the case of a curated pack, the metric includes the Pack Name that they signed up for and the next renewal date. These are available to be used in the email if desired.

If you would like a different flow for each different curated pack, set up a Trigger Filter on the flow metric and specify the pack name.

This email could include additional benefits of being part of the club, e.g. discount on other purchases etc.

Call to action could be to the shop or the manage subscription page which can be accessed by adding the following to your URL: /apps/subscriptions/manage.

You can also use this metric to trigger an automated welcome flow, which could contain a number of emails welcoming the member to your club and brand.

Variables

VariableExample
{{ event.activationUrl }}https://store.myshopify.com/account/activate/…
{{ event.curatedPackName }}Summer Reds
{{ event.curatedPackId }}d3ba9943-aeba-4dfd-a16f-1b0198a4b640
{{ event.curatedPackPrice }}189
{{ event.curatedPackFrequency }}monthly
{{ event.curatedPackProducts }}12
{{ event.$value }}189.0
{{ event.lastRenewalDate }}ISO date
{{ event.nextRenewalDate }}ISO date
{{ event.shippingAddress.* }}See common variables

Profile properties set: $phone_number, $city, $country — available in subsequent flows as {{ person.$phone_number }} etc.

Sent as a confirmation once a user finalises their sign up for a Custom Pack. The first renewal of the custom pack is processed immediately, so they will also receive an order confirmation from Shopify once the order is fulfilled.

This email could include additional benefits of being part of the club, e.g. discount on other purchases etc.

Call to action could be to the shop or the manage subscription page which can be accessed by adding the following to your URL: /apps/subscriptions/manage.

You can also use this metric to trigger an automated welcome flow, which could contain a number of emails welcoming the member to your club and brand.

Variables

VariableExample
{{ event.activationUrl }}Shopify customer activation URL
{{ event.subscriptionPrice }}189 (after discount)
{{ event.subscriptionFrequency }}monthly
{{ event.subscriptionDiscount }}15 (percent)
{{ event.$value }}189.0
{{ event.lastRenewalDate }}ISO date
{{ event.nextRenewalDate }}ISO date
{{ event.shippingAddress.* }}See common variables

Profile properties set: $phone_number, $city, $country.

Triggered automatically when a subscription is updated either by the customer or a Shopify admin user. If the pack is a curated pack the wording could include that the changes will apply at their next renewal. If the pack type is custom the user has the option to apply the changes immediately or wait until their next renewal.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.packType }}custom
{{ event.lastRenewalDate }}ISO date
{{ event.nextRenewalDate }}ISO date

Triggered automatically when a subscription is cancelled either by the customer or a Shopify admin user.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.packType }}custom
{{ event.lastRenewalDate }}ISO date
{{ event.nextRenewalDate }}ISO date

Triggered automatically when a subscription is manually renewed either by the customer or a Shopify admin user. Users will also receive a fulfilment email from Shopify, so this flow is optional. It could be used as a confirmation of their request to renew their pack and a notification that they will be notified when their order ships.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.packType }}custom
{{ event.lastRenewalDate }}ISO date
{{ event.nextRenewalDate }}ISO date

Triggered automatically when a customer skips their next subscription renewal. The next renewal date is pushed forward by one cycle.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.packType }}custom
{{ event.lastRenewalDate }}ISO date
{{ event.nextRenewalDate }}ISO date (the new one)
{{ event.previousNextRenewalDate }}ISO date (what it was before the skip)

winem8 – Subscription Product Substituted

Section titled “winem8 – Subscription Product Substituted”

Triggered when you substitute a product with another product to replace it in custom subscriptions.

We recommend only turning this flow on if and when you want to notify customers of a product substitution, and at other times turn this notification off.

We recommend adding in details around the substitution to the email, and prompting customers to login and update their pack if they are not happy with the substitution.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.packType }}custom
{{ event.oldProductId }}gid://shopify/Product/6582737109088
{{ event.oldProductTitle }}The Wine 42
{{ event.oldProductHandle }}wine-42
{{ event.newProductId }}gid://shopify/Product/6556389048416
{{ event.newProductTitle }}The Wine 49
{{ event.newProductHandle }}wine-49

This event is tied to the reminder time that the client has set in their winem8 settings. To change your reminder time:

  1. Go to winem8.

  2. Go to Settings.

  3. Scroll down to Lead Time Settings.

  4. The reminder time is determined by Subscription Renewal Reminder Lead Time.

  5. Set the number of days before the order is created that you would like to send a reminder.

This is important for curated packs as the renewal date you set in the curated pack is the expected day of payment, so the order creation date will either be on that date or before it, depending on what your Order Fulfilment Lead Time is set to.

Use this flow to trigger a reminder email to your curated pack subscribers. You can use a trigger filter to create separate reminders for the different packs using the pack name to separate them.

In the email content, we recommend reminding the member of their upcoming order, potentially letting them know what is in the upcoming pack, and telling them that they can login to change their pack or change to a custom pack if they would like. They also have time to update their shipping address and payment details.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.curatedPackName }}Summer Reds
{{ event.curatedPackId }}d3ba9943-…
{{ event.curatedPackPrice }}189
{{ event.curatedPackFrequency }}monthly
{{ event.curatedPackProducts }}12
{{ event.$value }}189.0
{{ event.lastRenewalDate }}ISO date
{{ event.nextRenewalDate }}ISO date
{{ event.orderCreationDate }}ISO date (when the order will be scheduled)

winem8 - Renew Custom Subscription Reminder

Section titled “winem8 - Renew Custom Subscription Reminder”

This event is tied to the reminder time that the client has set in their winem8 settings. To change your reminder time:

  1. Go to winem8.

  2. Go to Settings.

  3. Scroll down to Lead Time Settings.

  4. The reminder time is determined by Subscription Renewal Reminder Lead Time.

  5. Set the number of days before the order is created that you would like to send a reminder.

For custom packs, the next renewal date is listed in the customer profile. This is the date they will be charged. Your Order Fulfilment Lead Time will determine how many days before this date the order is created, and then the reminder will be the number of days set before the order creation date.

In the email content, we recommend reminding the member of their upcoming order, telling them that they can login to change the contents of their pack or to a curated pack if they would like. They also have time to update their shipping address and payment details.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.subscriptionPrice }}189
{{ event.subscriptionFrequency }}monthly
{{ event.subscriptionDiscount }}15
{{ event.$value }}189.0
{{ event.lastRenewalDate }}ISO date
{{ event.orderCreationDate }}ISO date
{{ event.orderFulfilmentDate }}ISO date

Sent when the curated pack is prepared manually in winem8. This flow could be customised based on the Pack Name that the user is receiving using a Trigger Filter. Currently this email can be manually updated with the current pack contents prior to the pack being prepared in winem8.

This will send immediately when curated packs are created, unless there is a time delay set.

Call to actions from this email could direct users to keep an eye out for shipping, confirm details if you have a delay between the orders being created and payment being taken, or let you know if there are any issues.

If you have a delay set between the order being created and payment being taken, we recommend using this metric to create a flow as a final reminder to your members.

If you have no delay or a short delay set up between an order being created and payment being taken, we recommend not using this metric and instead using the reminder metric.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.curatedPackName }}Summer Reds
{{ event.curatedPackId }}d3ba9943-…
{{ event.curatedPackPrice }}189
{{ event.curatedPackFrequency }}monthly
{{ event.curatedPackProducts }}12
{{ event.$value }}189.0
{{ event.lastRenewalDate }}ISO date
{{ event.nextRenewalDate }}ISO date

Triggered automatically when a custom subscription comes up for renewal based on the individual subscriber’s sign-up date and renewal frequency.

Call to actions from this email could direct users to keep an eye out for shipping, confirm details if you have a delay between the orders being created and payment being taken, or let you know if there are any issues.

If you have a delay set between the order being created and payment being taken, we recommend using this metric to create a flow as a final reminder to your members.

If you have no delay or a short delay set up between an order being created and payment being taken, we recommend not using this metric and instead using the reminder metric.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.subscriptionPrice }}189
{{ event.subscriptionFrequency }}monthly
{{ event.subscriptionDiscount }}15
{{ event.$value }}189.0
{{ event.lastRenewalDate }}ISO date
{{ event.nextRenewalDate }}ISO date

Fired when a renewal payment fails. The payload includes the card details that were declined, so the email can nudge the customer about a specific card (Visa ending 0341 expiring 12/2026) rather than a generic “payment failed” message.

Alternatively, route this metric to an internal address if you’d rather follow up with the customer manually instead of sending them an automated email.

Variables

VariableExample
{{ event.subscriptionId }}d9d029a0-…
{{ event.shopifyOrderId }}gid://shopify/Order/2806173270153
{{ event.amount }}7695 (minor units, i.e. cents)
{{ event.failureMessage }}Your card was declined.
{{ event.declineCode }}generic_decline
{{ event.declineMessage }}The bank did not return any further details with this decline.
{{ event.cardBrand }}visa
{{ event.cardExpMonth }}12
{{ event.cardExpYear }}2026
{{ event.cardLast4 }}0341

Triggered when payment on a renewal has failed enough times to hit the alert threshold. Intended for a stronger “please update your card” message than the first-attempt Payment Failure event.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.orderId }}d9d029a0-…
{{ event.packType }}custom
{{ event.subscriptionPrice }}189
{{ event.subscriptionFrequency }}monthly
{{ event.$value }}189.0
{{ event.nextRenewalDate }}ISO date
{{ event.renewalAttempts }}5

Fired when a renewal payment is held up because the customer’s bank requires extra authentication (3D Secure / SCA step-up). The payload includes a short-lived, single-use magic-link URL the customer uses to complete authentication without needing to log in.

Variables

VariableExample
{{ event.slug }}N1ke6YxgC
{{ event.shopifyOrderName }}#1010
{{ event.amount }}189
{{ event.$value }}189.0
{{ event.actionUrl }}https://{store}/apps/subscriptions/payment-action/<token>
{{ event.actionId }}<uuid> (for support cross-reference)

(Only needed with Wait List) winem8 - Added to Wait List

Section titled “(Only needed with Wait List) winem8 - Added to Wait List”

First interaction with a member — sent when they join the waitlist. They access this by creating an account on the store and choosing to Join the Wait List. The call to action on this could be something like “if you can’t wait you can shop online here”.

No event variables — the customer’s profile is the only payload.

(Only needed with Wait List) winem8 - Accepted to winem8

Section titled “(Only needed with Wait List) winem8 - Accepted to winem8”

Second interaction with a member — sent when they are “accepted” via the winem8 admin console. Once this action is triggered the user can now login and join the Flight Club by selecting a pack or creating a custom pack and checking out. Call to action should be to visit /apps/subscriptions/cart and login to complete their sign up.

No event variables — the customer’s profile is the only payload.