Integrate a ticket-based or registration-based platform
Learn how to integrate a ticket-based or registration-based platform with Klaviyo.
If you’ve built your own custom cart solution, or the data you would like to track is not currently supported by one of Klaviyo’s pre-built integrations or partner integrations, or you’ve built your own custom solution, you can integrate with Klaviyo using our APIs, which enable, for example:
- Onsite activity tracking with the JavaScript API.
- Managing lists and segments with the server-side API.
- Creating and managing custom catalogs.
The naming scheme for the events or properties you track may vary depending on your type of business. For example, you may include events, tickets, trips, experiences, courses, webinars or other data related to your business. For the sake of simplicity, in this guide we'll refer to items purchased (e.g., a ticket or registration) as "experiences." Please use your own naming conventions where applicable.
Additionally, if people can subscribe or pay in a subscription-based manner to the experiences you offer, see our guide to integrating a subscription ecommerce platform for additional help.
Key integration components
The key components of integrating an experience-based business are:
- Registrant data
Tracking information such as name, email, phone number, or other profile attributes - Email subscribers
Tracking who is subscribed to your newsletter - Website activity
Tracking who is active on your site, what experiences they view, etc. - Purchase activity
Tracking when a customer places an order, what experiences are ordered, etc. - Experience catalog
Syncing your catalog of experiences to Klaviyo
About JavaScript and server-side event APIs
This guide focuses on how to sync important metrics, or key customer activities, to Klaviyo. These events can be created in the browser with the JavaScript API and on the backend with the server-side API.
Use our JavaScript API to track customer actions during a browsing session:
- Active on Site
When someone visits your website - Viewed Experience
When someone views an experience - Added to Cart
When someone adds an experience to their cart - Started Checkout
When someone lands on the checkout page
Use our server-side API for events that happen on the backend, starting with when a customer places an order:
- Placed Order
When an order successfully processes in your system - Ordered Experience
An event for each item in a processed order - Attended Experience
When an experience date has passed - Experience Updated
When something about an experience is updated (e.g., time, location, etc.) - Canceled Order
When an order is canceled - Refunded Order
When an order is refunded - Next Experience ID
Property representing the ID of the next experience for which a customer is registered; the ID should
correspond with the ID used for that experience in the catalog feed - Next Experience Date
Property representing the date of the next experience for which a person is registered
Use our custom catalog feed for the following:
- Catalog feed
An XML feed or JSON feed of your experience catalog
For populating your Klaviyo product catalog, you can use either a custom catalog feed or the Catalog API. You can only populate products using one option. To shift from a custom catalog feed to the new Catalog API you must first disable the existing custom catalog feed before using the API.
The level of detail in the data you send within these events will determine how you can filter and segment based on these events in Klaviyo. To understand how data must be structured so that key event details are available for segmentation, check out our articles on segment conditions and how to structure your data for segment and flow filters.
The code snippets in this guide use example data. You will need to update the values of the JSON properties in these snippets so that they dynamically pull the relevant information needed for that property.
Check out our Custom integration FAQ for any questions about custom integrations.
JavaScript API for onsite metrics
Active on Site tracking snippet
To be able to publish forms directly from Klaviyo to your site, add the following JavaScript snippet so it appears on every page on your website (the end of the footer is often a good place to add it). Make sure to replace PUBLIC_API_KEY
with your Klaviyo account's six character public API key:
<script type="application/javascript" async
src="https://static.klaviyo.com/onsite/js/PUBLIC_API_KEY/klaviyo.js"></script>
Once you’ve added the snippet above, an Active on Site metric will trigger for any person who is cookied. A browser can be cookied in any of the ways listed in our article on Klaviyo onsite tracking.
Initialize the klaviyo
object
klaviyo
objectEnsure that you have initialized the klaviyo object on your page before executing any of the following code snippets.
Viewed Experience tracking snippet
To set up a browse abandonment flow or build segments based on experience browsing activity, you'll need to add JavaScript event tracking for the Viewed Experience metric. All Viewed Experience metrics are tied to user profiles. Add the following snippet to your experience page template or associated JavaScript:
Make sure to replace
item.___
in the below code snippet with whatever item object your platform uses for experience properties.
<script type="text/javascript">
var item = {
"Title": item.Title,
"ExperienceID": item.ExperienceID,
"Description": item.Description,
"ExperienceDate": item.ExperienceDate,
"Price": item.Price,
"Categories": item.Categories,
"ImageURL": item.ImageURL,
"URL": item.URL
};
klaviyo.push(["track", "Viewed Experience", item]);
</script>
Make sure to update the values of the JSON properties in the snippet so that they dynamically pull from the relevant information needed for that property.
Additionally, if you want to add entries to a “Recently Viewed Items” list in a profile, add the following snippet directly below the Viewed Experience snippet. For more information on how to use the “Recently Viewed Items” feature in a template, check out our article on inserting recently viewed items into an email.
<script type="text/javascript">
klaviyo.push(["trackViewedItem", {
"Title": item.Title,
"ItemId": item.ExperienceID,
"Categories": item.Categories,
"ImageUrl": item.ImageURL,
"Url": item.URL,
"Metadata": {
"Price": item.Price,
"Description": item.Description,
"ExperienceDate": item.ExperienceDate
}
}]);
</script>
Added to Cart tracking snippet
To send abandoned cart emails to visitors who add experiences to their cart, but don’t make it to the checkout page, you’ll need to track an Added to Cart metric. A customer must be identified (i.e., cookied) to track this event. For the payload, you should include all of the cart information (like Started Checkout below) and information about the experience that was just added (like Viewed Experience above).
Here's an example Track request where the cart already contained one item (Barks and Brews) and another item was just added to the cart (Klaviyo Atlanta Workshop):
<script type="text/javascript">
klaviyo.push(["track", "Added to Cart", {
"$value": 9.99,
"AddedItemProductID": "1112",
"AddedItemSKU": "KL-ATL",
"AddedItemProductName": "Klaviyo Atlanta Workshop",
"AddedItemDescription": "Learn about Owned Marketing and how you can take control of your marketing relationships.",
"AddedItemExperienceDate": "2020-01-22 08:30:00",
"AddedItemQuantity": 1,
"AddedItemPrice": 0.00,
"AddedItemCategories": ["Owned Marketing", "Data"],
"AddedItemImageURL": "http://www.example.com/path/to/product/image2.png",
"AddedItemURL": "http://www.example.com/path/to/experience2"
"ItemNames": ["Barks and Brews", "Klaviyo Atlanta Workshop"],
"CheckoutURL": "http://www.example.com/path/to/checkout",
"Items": [{
"ExperienceID": "1111",
"SKU": "BNB1",
"ExperienceName": "Barks and Brews",
"Description": "Bring your dog to the brewery! Includes a free flight and bottomless dog treats.",
"ExperienceDate": "2019-11-13 09:00:00",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ExperienceCategories": ["Beer","Dogs","Flights"],
"ImageURL": "http://www.example.com/path/to/product/image.png",
"URL": "http://www.example.com/path/to/experience"
},
{
"ExperienceID": "1112",
"SKU": "KL-ATL-2020",
"ExperienceName": "Klaviyo Atlanta Workshop",
"Description": "Learn about Owned Marketing and how you can take control of your marketing relationships.",
"ExperienceDate": "2020-01-22 08:30:00",
"Quantity": 1,
"ItemPrice": 0.00,
"RowTotal": 0.00,
"ExperienceCategories": ["Owned Marketing", "Data"],
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"URL": "http://www.example.com/path/to/experience2"
}
]
}]);
</script>
Started Checkout
Checkout data is important if you'd like to send abandoned cart emails once a person makes it to the checkout page. Abandoned cart emails based on Started Checkout, as opposed to Added to Cart, will target shoppers who are potentially more serious about completing their purchase. When someone starts the checkout process, send Klaviyo a metric indicating they’ve started checking out. The best place to trigger this event is either:
- When someone visits the checkout page after they’ve been identified
- When they enter their email address on the checkout page if they have not already been identified
Include all line items details so your abandoned checkout emails can be customized to include pictures, links, and other information about the experiences in someone's cart. Here's an example Track request:
<script type="text/javascript">
klaviyo.push(["track", "Started Checkout", {
"$event_id": "1000123_1387299423",
"$value": 9.99,
"ItemNames": ["Barks and Brews", "Klaviyo Atlanta Workshop 2020"],
"CheckoutURL": "http://www.example.com/path/to/checkout",
"Categories": ["Beer", "Dogs", "Flights", "Owned Marketing", "Data"],
"Items": [{
"ExperienceID": "1111",
"SKU": "BNB1",
"ExperienceName": "Barks and Brews",
"Description": "Bring your dog to the brewery! Includes a free flight and bottomless dog treats.",
"ExperienceDate": "2019-11-13 09:00:00",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ExperienceCategories": ["Beer", "Dogs", "Flights"],
"ImageURL": "http://www.example.com/path/to/product/image.png",
"URL": "http://www.example.com/path/to/experience"
},
{
"ExperienceID": "1112",
"SKU": "KL-ATL-2020",
"ExperienceName": "Klaviyo Atlanta Workshop 2020",
"Description": "Learn about Owned Marketing and how you can take control of your marketing relationships.",
"ExperienceDate": "2020-01-22 08:30:00",
"Quantity": 1,
"ItemPrice": 0.00,
"RowTotal": 0.00,
"ExperienceCategories": ["Owned Marketing", "Data"],
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"URL": "http://www.example.com/path/to/experience2"
}
]
}]);
</script>
The $event_id
should be a unique identifier for the cart combined with the UNIX formatted time when the event was triggered. This allows someone to trigger Started Checkout more than once when they return after adding additional items.
Server-side metrics
We recommend tracking certain metrics on the server-side due to potential limitations of frontend code, security concerns, and general availability of data on the server-side versus the front-end. For example, if someone has a slow connection or a ad-blocking extension on their browser, the JavaScript API requests might not fire. In the case of more crucial metrics (e.g., transactional events and properties) or ones that may contain sensitive data, use our server-side POST create event API. For more information on this question, check out our custom integration FAQ on the topic.
Klaviyo also has SDKs in several languages.
Syncing historical data
Along with your ongoing data, it is best practice to send your historical order data, which will enhance your ability to segment off past data and improve historical accuracy in revenue tracking and predictive analytics. Historical data can be sent to Klaviyo by iterating through your historical orders and generating Track API requests for each server-side event as needed. The special “time” property for these events should be the UNIX timestamp of when that order occurred.
Placed Order
After an order is placed, you should make a Track request to our server-side API. This metric will be used for customer lifetime value (CLV) calculations and predictive analytics in order to get an accurate scope of a customer’s lifetime value and their predicted next order date.
For ongoing data, you can send order data to Klaviyo in one of two ways: real-time or batch.
- Real-time
Make requests as soon as an order is placed - Batch
Write some code that will run (for example) at least every 30 minutes (e.g., on a cron) to send all order events that occurred in that past 30 minutes
If you plan to send abandoned cart messages, you'll need to send order data at a frequency that falls within your flow time delay (at least) in order to stop the flow email from sending to people who have completed their order. For example, if you have a one hour time delay between when someone triggers the abandoned cart flow and when they receive the first email, make sure that you send data at least once every hour to fall within that window and filter those who complete their order out of the flow before the email sends.
For each order, we recommend you send two types of events:
- One event named Placed Order for the entire order.
- This includes a
value
property that represents the total value of the entire order.
- This includes a
- One event for each line item named Ordered Product (see below).
- This includes a
value
property that represents the total cost of an item in the order before any adjustments as well as more SKU-level detailed information about the item.
- This includes a
Key things to be aware of when tracking server-side events:
- Make sure to replace
your-private-api-key
with a private key from your Klaviyo account; this key must have write permissions to create events. - The
unique_id
should be a unique identifier for the order (e.g., Order ID). We recommend using uuidv4 or a similar method to create unique IDs for your events. - If the same combination of event and
unique_id
are sent more than once, we will skip all tracked events after the first with the same combination. value
is a special property that allows Klaviyo to track revenue; this should be the total numeric (not a string), monetary value of the event it’s associated with.- The
Items
array should contain one JSON block/dictionary for each line item. time
is a special property that should bean ISO 8601datetime
(i.e.2022-11-08T00:00:00Z
) for the order date and time.
Here’s an example POST create event request for Placed Order
:
curl --request POST \
--url https: //a.klaviyo.com/api/events/ \
--header 'Authorization: Klaviyo-API-Key your-private-api-key' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'revision: 2024-02-15' \
--data '
{
"data": {
"type": "event",
"attributes": {
"properties": {
"OrderId": "1234",
"Categories": [
"Beer",
"Dogs",
"Flights",
"Owned Marketing",
"Data"
],
"ItemNames": [
"Barks and Brews",
"Klaviyo Atlanta Workshop 2020"
],
"DiscountCode": "Beer Loyalty Discount",
"DiscountValue": 5,
"Items": [
{
"ExperienceID": "1111",
"SKU": "BNB1",
"ExperienceName": "Barks and Brews",
"Description": "Bring your dog to the brewery for a free flight!",
"ExperienceDate": "2019-11-13T09:00:00",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ExperienceCategories": [
"Beer",
"Dogs",
"Flights"
],
"ImageURL": "http://www.example.com/path/to/product/image1.png",
"URL": "http://www.example.com/path/to/experience"
},
{
"ExperienceID": "1112",
"SKU": "KL-ATL-2020",
"ExperienceName": "Barks and Brews",
"Description": "Learn about Owned Marketing and how you can take control of your marketing relationships.",
"ExperienceDate": "2020-01-22T08:30:00",
"Quantity": 1,
"ItemPrice": 0.00,
"RowTotal": 0.00,
"ExperienceCategories": [
"Owned Marketing",
"Data"
],
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"URL": "http://www.example.com/path/to/experience"
}
],
"BillingAddress": {
"FirstName": "John",
"LastName": "Smith",
"Address1": "123 Abc St",
"City": "Boston",
"RegionCode": "MA",
"CountryCode": "US",
"Zip": "02110",
"Phone": "+15551234567"
},
"ShippingAddress": {
"Address1": "123 Abc St"
}
},
"time": "2022-11-08T00:00:00",
"value": 4.99,
"unique_id": "d47aeda5-1751-4483-a81e-6fcc8ad48711",
"metric": {
"data": {
"type": "metric",
"attributes": {
"name": "Placed Order"
}
}
},
"profile": {
"data": {
"type": "profile",
"attributes": {
"email": "[email protected]"
}
}
}
}
}
}
'
Creating an event requires at least one profile identifier. For example, the Placed Order event from the POST Create Event call above uses
Ordered Experience
For each line item, you should also generate an Ordered Experience event. This metric is useful if you plan to create any filters or triggers based on product-specific information (as opposed to the order as a whole) that isn't "top-level" for the Placed Order metric. This metric is also used in conjunction with your Catalog Feed in order to enable personalized recommendations and in the benchmarks feature to calculate average item value and average cart size.
The remainder of the POST create event calls in this guide will use the same headers as the Placed Order call.
{
"data": {
"type": "event",
"attributes": {
"properties": {
"OrderId": "1234567890",
"ExperienceId": "1112",
"SKU": "KL-ATL-2020",
"ExperienceName": "Klaviyo Atlanta Workshop 2020",
"Description": "Learn about Owned Marketing and how you can take control of your marketing relationships.",
"ExperienceDate": "2020-01-22T08:30:00",
"Quantity": 1,
"URL": "http://www.example.com/path/to/product",
"ImageURL": "http://www.example.com/path/to/product/image.png",
"Categories": [
"Owned Marketing",
"Data"
]
},
"time": "2022-11-08T00:00:00",
"value": 0.00,
"value_currency": "USD",
"unique_id": "d47aeda5-1751-4483-a81e-6fcc8ad48711",
"metric": {
"data": {
"type": "metric",
"attributes": {
"name": "Ordered Experience"
}
}
},
"profile": {
"data": {
"type": "profile",
"attributes": {
"email": "[email protected]",
"phone_number": "+15005550006"
}
}
}
}
}
}
Attended Experience
If you’d like to send followup emails about specific experiences, track an Attended Experience event. While you could send these types of emails via campaign after the event date for anyone who purchased it using the Placed Order event, you could end up including people who purchased the experience but did not attend, or who purchased and later canceled their order.
If you have a method of recording attendance, send an Attended Experience event to Klaviyo so you can guarantee that only attendees of a given experience will receive a type of communication. You can also perform reporting based on the number of spots purchased versus the number of actual attendees.
The only update needed is the metric name and the time at which the attendance occurred. You can also track additional details about the attendance itself:
{
"data": {
"type": "event",
"attributes": {
"properties": {
"ExperienceId": "1112",
"SKU": "KL-ATL-2020",
"ExperienceName": "Klaviyo Atlanta Workshop 2020",
"Description": "Learn about Owned Marketing and how you can take control of your marketing relationships.",
"ExperienceDate": "2020-01-22T08:30:00",
"Quantity": 1,
"URL": "http://www.example.com/path/to/product",
"ImageURL": "http://www.example.com/path/to/product/image.png",
"Categories": [
"Owned Marketing",
"Data"
]
},
"time": "2022-11-08T00:00:00",
"value": 0.00,
"unique_id": "d47aeda5-1751-4483-a81e-6fcc8ad48711",
"metric": {
"data": {
"type": "metric",
"attributes": {
"name": "Attended Experience"
}
}
},
"profile": {
"data": {
"type": "profile",
"attributes": {
"email": "[email protected]",
"phone_number": "+15005550006"
}
}
}
}
}
}
Experience Updated
If an experience is updated on your end due to a change of venue, date, etc., the following should happen:
- Update your experience catalog feed (see Catalog feed integration below for more information on catalog setup)
- If this experience is the next upcoming experience for a given person, update the Next Experience ID or Next Experience Date (if either have changed) on that person’s profile (these properties are also discussion in the Next Experience Date section below)
- Track an Experience Updated event for each person registered for that experience
An Experience Updated event allows you to send emails to registrants about experience updates. This event should contain all of the updated information about the event as well as a property specifically calling out what has changed. By including the mapped $id of the event that corresponds to the ID in your experience catalog you can also reference any additional data only passed to the catalog (such as the experience location).
{
"data": {
"type": "event",
"attributes": {
"properties": {
"ExperienceId": "1111",
"WhatChanged": ["Time","Description"],
"SKU": "BNB1",
"ExperienceName": "Barks and Brews",
"Description": "Bring your dog to the brewery for a free flight and bottomless dog treats!",
"ExperienceDate": "2019-11-13T09:30:00"
},
"time": "2022-11-08T00:00:00",
"value": 0.00,
"unique_id": "d47aeda5-1751-4483-a81e-6fcc8ad48711",
"metric": {
"data": {
"type": "metric",
"attributes": {
"name": "Experience Updated"
}
}
},
"profile": {
"data": {
"type": "profile",
"attributes": {
"email": "[email protected]",
"phone_number": "+15005550006"
}
}
}
}
}
}
Canceled Order
If your experience orders are able to be canceled, track a Canceled Order event when someone cancels an order. This event should contain all the information about the canceled order, including a cancelation reason. Each event will have almost the same payload as a Placed Order event. For Canceled Order events to be included in CLV calculations, they must have $event_ids that correspond to a previously tracked Placed Order event.
For event, update the event name and the timestamp and add an additional property for the cancellation reason:
{
"data": {
"type": "event",
"attributes": {
"properties": {
"OrderId": "1234",
"Reason": "No longer needed",
"Categories": [
"Beer",
"Dogs",
"Flights",
"Owned Marketing",
"Data"
],
"ItemNames": [
"Barks and Brews"
],
"DiscountCode": "Beer Loyalty Discount",
"DiscountValue": 5,
"Items": [
{
"ExperienceID": "1111",
"SKU": "BNB1",
"ExperienceName": "Barks and Brews",
"Description": "Bring your dog to the brewery for a free flight!",
"ExperienceDate": "2019-11-13T09:00:00",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ExperienceCategories": [
"Beer",
"Dogs",
"Flights"
],
"ImageURL": "http://www.example.com/path/to/product/image1.png",
"URL": "http://www.example.com/path/to/experience"
},
{
"ExperienceID": "1112",
"SKU": "KL-ATL-2020",
"ExperienceName": "Barks and Brews",
"Description": "Bring your dog to the brewery for a free flight!",
"ExperienceDate": "2020-01-22T08:30:00",
"Quantity": 1,
"ItemPrice": 0.00,
"RowTotal": 0.00,
"ExperienceCategories": [
"Owned Marketing",
"Data"
],
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"URL": "http://www.example.com/path/to/experience"
}
],
"BillingAddress": {
"FirstName": "John",
"LastName": "Smith",
"Address1": "123 Abc St",
"City": "Boston",
"RegionCode": "MA",
"CountryCode": "US",
"Zip": "02110",
"Phone": "+15551234567"
},
"ShippingAddress": {
"Address1": "123 Abc St"
}
},
"time": "2022-11-08T00:00:00",
"value": 4.99,
"unique_id": "d47aeda5-1751-4483-a81e-6fcc8ad48711",
"metric": {
"data": {
"type": "metric",
"attributes": {
"name": "Canceled Order"
}
}
},
"profile": {
"data": {
"type": "profile",
"attributes": {
"email": "[email protected]",
"phone_number": "+15005550006"
}
}
}
}
}
}
Refunded Order
If your experience orders are able to be refunded, track a Refunded Order event when an order is refunded. This event should contain all the information about the refunded order, including a refund reason. Each event will have almost the same payload as a Placed Order event. For Refunded Order events to be included in CLV calculations, they must have $event_ids that correspond to a previously tracked Placed Order event.
For event, update the event name and the timestamp and add an additional property for the refund reason:
{
"data": {
"type": "event",
"attributes": {
"properties": {
"OrderId": "1234",
"Reason": "No longer needed",
"Categories": [
"Beer",
"Dogs",
"Flights",
"Owned Marketing",
"Data"
],
"ItemNames": [
"Barks and Brews",
"Klaviyo Atlanta Workshop 2020"
],
"DiscountCode": "Beer Loyalty Discount",
"DiscountValue": 5,
"Items": [
{
"ExperienceID": "1111",
"SKU": "BNB1",
"ExperienceName": "Barks and Brews",
"Description": "Bring your dog to the brewery for a free flight!",
"ExperienceDate": "2019-11-13T09:00:00",
"Quantity": 1,
"ItemPrice": 9.99,
"RowTotal": 9.99,
"ExperienceCategories": [
"Beer",
"Dogs",
"Flights"
],
"ImageURL": "http://www.example.com/path/to/product/image1.png",
"URL": "http://www.example.com/path/to/experience"
},
{
"ExperienceID": "1112",
"SKU": "KL-ATL-2020",
"ExperienceName": "Barks and Brews",
"Description": "Learn about Owned Marketing and how you can take control of your marketing relationships.",
"ExperienceDate": "2020-01-22T08:30:00",
"Quantity": 1,
"ItemPrice": 0.00,
"RowTotal": 0.00,
"ExperienceCategories": [
"Owned Marketing",
"Data"
],
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"URL": "http://www.example.com/path/to/experience"
}
],
"BillingAddress": {
"FirstName": "John",
"LastName": "Smith",
"Address1": "123 Abc St",
"City": "Boston",
"RegionCode": "MA",
"CountryCode": "US",
"Zip": "02110",
"Phone": "+15551234567"
},
"ShippingAddress": {
"Address1": "123 Abc St"
}
},
"time": "2022-11-08T00:00:00",
"value": 4.99,
"unique_id": "d47aeda5-1751-4483-a81e-6fcc8ad48711",
"metric": {
"data": {
"type": "metric",
"attributes": {
"name": "Refunded Order"
}
}
},
"profile": {
"data": {
"type": "profile",
"attributes": {
"email": "[email protected]",
"phone_number": "+15005550006"
}
}
}
}
}
}
Server-side profile properties
We recommend tracking certain profile properties on the server-side due to the same limitations outlined in the case of the metrics above. Tracking the following profile properties can help you segment customers and send targeted messaging.
Next Experience ID
This profile property should be sent as a string representing the ID for the next upcoming experience a customer has booked. This property should match the ID you map to id
in your catalog feed integration, and will allow you to reference information from your catalog feed about this experience in an email.
Here is an example server-side request payload for Next Experience ID:
"properties": {
"email": "[email protected]",
"NextExperienceID": "1111",
}
Next Experience Date
This profile property should be sent as a date representing the next upcoming date for which the customer has booked an experience. This property will allow you to create date-triggered flows to send messaging before and after the next experience date.
Here is an example server-side request payload for Next Experience Date:
"properties": {
"email": "[email protected]",
"NextExperienceDate": "2019-10-31T00:00:00",
}
Catalog feed integration
Integrating your catalog will allow you to utilize product blocks in emails. To set up a custom catalog integration, please follow the process outlined in our article on syncing a custom catalog feed to Klaviyo.
For the feed of your experiences, include the following information and mapping for each item in the feed:
Item Field | Klaviyo Field to Map To | Expected Data Type | Klaviyo Data Type to Map To |
---|---|---|---|
Unique ID (could be SKU) | $id | string | string |
Experience title | $title | string | string |
Experience URL | $link | string | URL |
Experience description | $description | string | string |
Experience price | price | number (float) | number |
Image URL | $image_link | string | URL |
Categories | categories | array/list of strings | categories |
Street address | $address1 | string | string |
Address 2 | $address2 | string | string |
City | $city | string | string |
State/region | $region | string | string |
Zip/postal code | $zip | string | string |
Country | $country | string | string |
Example flow idea: browse abandonment
Purpose: To re-engage browsers who landed on an experience page but never went on to add it to their cart, you can create a browse abandonment flow.
Trigger: Viewed Experience
Flow Filter: Has Added to Cart zero times since starting this flow AND Placed Order zero times since starting this flow
A more advanced targeting strategy for this flow could include using the property “ExperienceDate” to change the messaging based on how soon the viewed experience is slated to occur (e.g., use more urgent messaging if the experience is in 5 days versus 30 days). This could be achieved with a trigger split in the flow, or conditional logic within the message itself.
Additional resources
Updated 14 days ago