Klaviyo metrics & personalisation
Klaviyo Metrics
Section titled “Klaviyo Metrics”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.
Working with variables
Section titled “Working with variables”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.
Common variables
Section titled “Common variables”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.
| Variable | Example | Notes |
|---|---|---|
slug | N1ke6YxgC | Short id of the subscription; shown in the winem8 admin UI too |
packType | custom / curated | Which subscription kind |
$value | 189.0 | Klaviyo’s standard event-revenue property |
lastRenewalDate / nextRenewalDate | ISO date | Subscription lifecycle dates |
shippingAddress | Shopify address object | Includes address1, address2, city, country, first_name, last_name, province, zip, phone |
activationUrl | Shopify customer activation URL | Only on signup events; the link the customer clicks to set their store password |
Lifecycle events
Section titled “Lifecycle events”winem8 - New Curated Subscription
Section titled “winem8 - New Curated Subscription”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
| Variable | Example |
|---|---|
{{ 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.
winem8 - New Custom Subscription
Section titled “winem8 - New Custom Subscription”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
| Variable | Example |
|---|---|
{{ 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.
winem8 - Subscription Updated
Section titled “winem8 - Subscription Updated”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
| Variable | Example |
|---|---|
{{ event.slug }} | N1ke6YxgC |
{{ event.packType }} | custom |
{{ event.lastRenewalDate }} | ISO date |
{{ event.nextRenewalDate }} | ISO date |
winem8 - Subscription Cancelled
Section titled “winem8 - Subscription Cancelled”Triggered automatically when a subscription is cancelled either by the customer or a Shopify admin user.
Variables
| Variable | Example |
|---|---|
{{ event.slug }} | N1ke6YxgC |
{{ event.packType }} | custom |
{{ event.lastRenewalDate }} | ISO date |
{{ event.nextRenewalDate }} | ISO date |
winem8 - Subscription Manually Renewed
Section titled “winem8 - Subscription Manually Renewed”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
| Variable | Example |
|---|---|
{{ event.slug }} | N1ke6YxgC |
{{ event.packType }} | custom |
{{ event.lastRenewalDate }} | ISO date |
{{ event.nextRenewalDate }} | ISO date |
winem8 - Subscription Renewal Skipped
Section titled “winem8 - Subscription Renewal Skipped”Triggered automatically when a customer skips their next subscription renewal. The next renewal date is pushed forward by one cycle.
Variables
| Variable | Example |
|---|---|
{{ 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
| Variable | Example |
|---|---|
{{ 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 |
Renewal events
Section titled “Renewal events”winem8 - Renew Curated Pack Reminder
Section titled “winem8 - Renew Curated Pack Reminder”This event is tied to the reminder time that the client has set in their winem8 settings. To change your reminder time:
-
Go to winem8.
-
Go to Settings.
-
Scroll down to Lead Time Settings.
-
The reminder time is determined by Subscription Renewal Reminder Lead Time.
-
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
| Variable | Example |
|---|---|
{{ 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:
-
Go to winem8.
-
Go to Settings.
-
Scroll down to Lead Time Settings.
-
The reminder time is determined by Subscription Renewal Reminder Lead Time.
-
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
| Variable | Example |
|---|---|
{{ 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 |
winem8 - Renew Curated Pack
Section titled “winem8 - Renew Curated Pack”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
| Variable | Example |
|---|---|
{{ 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 |
winem8 - Renew Custom Subscription
Section titled “winem8 - Renew Custom Subscription”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
| Variable | Example |
|---|---|
{{ event.slug }} | N1ke6YxgC |
{{ event.subscriptionPrice }} | 189 |
{{ event.subscriptionFrequency }} | monthly |
{{ event.subscriptionDiscount }} | 15 |
{{ event.$value }} | 189.0 |
{{ event.lastRenewalDate }} | ISO date |
{{ event.nextRenewalDate }} | ISO date |
Payment events
Section titled “Payment events”winem8 - Payment Failure
Section titled “winem8 - Payment Failure”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
| Variable | Example |
|---|---|
{{ 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 |
winem8 - Fulfill Order Payment Failed
Section titled “winem8 - Fulfill Order Payment Failed”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
| Variable | Example |
|---|---|
{{ 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 |
winem8 - Payment Action Required
Section titled “winem8 - Payment Action Required”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
| Variable | Example |
|---|---|
{{ 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) |
Waitlist events
Section titled “Waitlist events”(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.