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, you can integrate with Klaviyo using our JavaScript API, server-side API, and custom catalog integration.
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 Track and Identify APIs
This guide focuses on how to sync important metrics, or key customer activities, to Klaviyo. While our JavaScript and server-side Track and Identify APIs can be used interchangeably, we recommend using the setup in the following checklist. For a deep dive on why this structure works best, head to our article Getting started with Track and Identify APIs.
- Use our JavaScript Track API for the following metrics:
- 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
- Active on Site
- Use our server-side Track API for the following metrics:
- 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.) - Cancelled Order
When an order is cancelled - Refunded Order
When an order is refunded
- Placed Order
- Use our server-side Identify API for the following profile properties:
- 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
- Next Experience ID
- Use our custom catalog feed for the following:
- Catalog feed
An XML feed or JSON feed of your experience catalog
- Catalog feed
Filtering and segmenting on these events and profile properties is based on the level of detail in the event data sent to Klaviyo. For example, if you want to filter customers based on those who ordered products in a specific category, you’ll want to include item categories for your Ordered Product events. If the event is lacking the Category property, you won’t be able to filter users by it. 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 Track API for onsite metrics
Active on Site tracking snippet
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/klaviyo.js?company_id=PUBLIC_API_KEY"></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.
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. On your experience page template, add the following snippet:
<script type="text/javascript">
var _learnq = _learnq || [];
var item = {
"Title": "Barks and Brews",
"ExperienceID": "1111",
"Description": "Bring your dog to the brewery! Includes a free flight and bottomless dog treats.",
"ExperienceDate": "2019-11-13 09:00:00",
"Price": 9.99,
"Categories": ["Beer","Dogs","Flights"],
"ImageURL": "http://www.example.com/path/to/product/image.png",
"URL": "http://www.example.com/path/to/experience"
};
_learnq.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">
_learnq.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">
_learnq.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">
_learnq.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 frontend. For example, if someone has a slow connection or a JavaScript-blocking plugin on their browser, the JavaScript 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 Track API. For more information on this question, check out our Custom integration FAQ.
Klaviyo has libraries in several server-side languages. Generally, the API requires making an HTTP GET request with a base64 encoded JSON payload. More information can be found in our Track and Identify API reference.
Key things to be aware of when tracking server-side events:
- Make sure to replace
PUBLIC_API_KEY
with your public API key - The
$event_id
should be a unique identifier for the order (e.g., Order ID) - If the same combination of
event
and$event_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, in your Klaviyo account’s currency- The "Items" array should contain one JSON block/dictionary for each line item.
time
is a special property that should be a UNIX timestamp of the order date and time
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 an entire order including shipping, tax,
discounts, etc.
- This includes a $value property that represents the total value of an entire order including shipping, tax,
- One event for each line item named Ordered Experience
- This includes a $value property that represents the total cost of an experience in the order before any
adjustments as well as more SKU-level detailed information about the experience
- This includes a $value property that represents the total cost of an experience in the order before any
Here’s an example Track request payload for Placed Order:
{
"token": "PUBLIC_API_KEY",
"event": "Placed Order",
"customer_properties": {
"$email": "[email protected]",
"$first_name": "John",
"$last_name": "Smith",
"$phone_number": "5551234567",
"$address1": "123 Abc st",
"$address2": "Suite 1",
"$city": "Boston",
"$zip": "02110",
"$region": "MA",
"$country": "USA"
},
"properties": {
"$event_id": "1234",
"$value": 4.99,
"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! 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"
}
],
"BillingAddress": {
"FirstName": "John",
"LastName": "Smith",
"Company": "",
"Address1": "123 abc street",
"Address2": "apt 1",
"City": "Boston",
"Region": "Massachusetts",
"RegionCode": "MA",
"Country": "United States",
"CountryCode": "US",
"Zip": "02110",
"Phone": "5551234567"
},
},
"time": 1387302423
}
Ordered Experience
In addition to tracking a Placed Order event for each customer’s order, we recommend making a Track request payload for an Ordered Experience event for each line item in the order. This should include a $value property that represents the total cost of an experience in the order before any adjustments, as well as more SKU-level detailed information about the experience.
This event is useful if you plan to create any filters or triggers based on experience-specific information (as opposed to the order as a whole) that isn't "top-level" in the Placed Order event. This event is also used in conjunction with your catalog feed to enable personalized recommendations.
{
"token": "PUBLIC_API_KEY",
"event": "Ordered Experience",
"customer_properties": {
"$email": "[email protected]",
"$first_name": "John",
"$last_name": "Smith"
},
"properties": {
"$event_id": "1234_KL-ATL-2020",
"$value": 9.99,
"OrderId": "1234",
"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,
"URL": "http://www.example.com/path/to/experience2",
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"ExperienceCategories": ["Owned Marketing","Data"]
},
"time": 1387302423
}
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 cancelled 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.
Here’s an example Track request payload for Attended Experience:
{
"token": "PUBLIC_API_KEY",
"event": "Attended Experience",
"customer_properties": {
"$email": "[email protected]",
"$first_name": "John",
"$last_name": "Smith"
},
"properties": {
"$event_id": "1234_KL-ATL-2020",
"$value": 9.99,
"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,
"URL": "http://www.example.com/path/to/experience2",
"ImageURL": "http://www.example.com/path/to/product/image2.png",
"ExperienceCategories": ["Owned Marketing","Data"]
},
"time": 1387302423
}
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 section 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).
{
"token": "PUBLIC_API_KEY",
"event": "Experience Updated",
"customer_properties": {
"$email": "[email protected]",
"$first_name": "John",
"$last_name": "Smith"
},
"properties": {
"$event_id": "1234_BNB1",
"$value": 9.99,
"ExperienceID": "1111",
"WhatChanged": ["Time","Location"],
"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:30:00",
"Quantity": 1,
"ExperienceCategories": ["Beer","Dogs","Flights"],
"ImageURL": "http://www.example.com/path/to/product/image.png",
"URL": "http://www.example.com/path/to/experience"
},
"time": 1387302423
}
Cancelled Order
If your experience orders are able to be cancelled, track a Cancelled Order event when someone cancels an order. This event should contain all the information about the cancelled order, including a cancellation reason. Each event will have almost the same payload as a Placed Order event. For Cancelled 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:
{
"token": "PUBLIC_API_KEY",
"event": "Cancelled Order",
"customer_properties": {
"$email": "[email protected]",
"$first_name": "John",
"$last_name": "Smith",
"$phone_number": "5551234567",
"$address1": "123 Abc st",
"$address2": "Suite 1",
"$city": "Boston",
"$zip": "02110",
"$region": "MA",
"$country": "USA"
},
"properties": {
"$event_id": "1234",
"$value": 4.99,
"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! 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"
}
],
"BillingAddress": {
"FirstName": "John",
"LastName": "Smith",
"Company": "",
"Address1": "123 abc street",
"Address2": "apt 1",
"City": "Boston",
"Region": "Massachusetts",
"RegionCode": "MA",
"Country": "United States",
"CountryCode": "US",
"Zip": "02110",
"Phone": "5551234567"
},
},
"time": 1387312956
}
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:
{
"token": "PUBLIC_API_KEY",
"event": "Refunded Order",
"customer_properties": {
"$email": "[email protected]",
"$first_name": "John",
"$last_name": "Smith",
"$phone_number": "5551234567",
"$address1": "123 Abc st",
"$address2": "Suite 1",
"$city": "Boston",
"$zip": "02110",
"$region": "MA",
"$country": "USA"
},
"properties": {
"$event_id": "1234",
"$value": 4.99,
"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! 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"
}
],
"BillingAddress": {
"FirstName": "John",
"LastName": "Smith",
"Company": "",
"Address1": "123 abc street",
"Address2": "apt 1",
"City": "Boston",
"Region": "Massachusetts",
"RegionCode": "MA",
"Country": "United States",
"CountryCode": "US",
"Zip": "02110",
"Phone": "5551234567"
},
},
"time": 1387312956
}
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 Identify API request payload for Next Experience ID:
{
"token": "PUBLIC_API_KEY",
"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 Identify API request payload for Next Experience Date:
{
"token": "PUBLIC_API_KEY",
"properties": {
"$email": "[email protected]",
"NextExperienceDate": "2019-10-31 00: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 over 2 years ago