Integrate a Ticket-based or Registration-based Platform

read
Last updated at:

Overview

If you've built your own custom cart solution, or the ecommerce data you would like to track in Klaviyo is not yet supported by one of our pre-built 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 something else related to your business. For the sake of simplicity, in this guide we'll refer to items purchased (e.g. a ticket or a registration) as "experiences." Please use your own lingo where applicable.

The key components of integrating an experience-based business are:

  • Registrant data
  • Email subscribers
  • Website activity
  • Experience activity
  • Experience catalog

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 following setup for experience-based businesses.

Use this as a checklist when setting up your integration:

  • Use our JavaScript Track API for the following:
    • Active on Site - When people visit your website
    • Viewed Experience - When someone views an experience
    • Added to Cart - When an experience is added to someone’s cart
    • Started Checkout - When someone lands on the checkout page
  • Use our server-side Track API for the following:
    • Placed Order - When an order successfully processes on 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 event changes (time, location, etc)
    • Cancelled Order - When a customer cancels their order
    • Refunded Order - When a customer’s order is refunded
  • Use our server-side Identify API for the following:
    • Next Experience ID - Property representing the ID of the experience which corresponds to the ID used for that experience in the catalog feed
    • Next Experience Date - Date property representing the date of the next experience for which a person registered
  • Use our custom Catalog Feed for the following
    • Feed of Experiences - An XML feed or JSON feed of your experience catalog

The detailed data you send to Klaviyo along with website, purchase, and checkout events will determine how you can filter and segment these events in Klaviyo. To understand how data must be structured so that key event details are available for segmentation, check out our guide on segment conditions.

Note that the snippets in this guide use example data. You will need to update the values of the JSON properties in these snippets such that they dynamically pull from the relevant information needed for that property.

If you have questions about custom integrations, check out our custom integration FAQ or reach out to our Support Team for help.

On Site Behaviors (JavaScript Track API)

To enable our JavaScript API and our ability to publish forms to your site, add the following snippet such that it appears on every page on your website. (Often the end of the footer is a good place to add this.) Make sure to replace PUBLIC_API_KEY with your Klaviyo account's 6 character Public API Key:

<script type="application/javascript" async
src="https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=PUBLIC_API_KEY"></script>

Active on Site

Once you’ve added the snippet above, Active on Site should now trigger for any person who is cookied:

Viewed Experience

If you'd like to set up a browse abandonment flow or build segments based on experience browsing data, you"ll need to add JavaScript event tracking for Viewed Experience. On your experience page template, add a snippet like the following:

<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>

You can additionally track the recently viewed item to a person's profile under a "Recently Viewed Items" section by adding on the following snippet:

<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>

After Viewed Experience web tracking has been configured for your site, this data will begin populating in your Klaviyo account as known visitors browse your pages.

Added to Cart

If you’d like to send abandoned cart emails before someone lands on the checkout page, you’ll need to track information about the cart when someone takes a particular action. For this we recommend sending an Added to Cart event when someone adds an item to their cart. A person will still need to have been "identified," or cookie-ed, to track this event. For the payload, you should include all of the cart information (like Started Checkout below) and information about the item 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 2020):

<script type="text/javascript">
   _learnq.push(["track", "Added to Cart", {
     "$value": 9.99,
     "AddedItemProductID": "1112",
     "AddedItemSKU": "KL-ATL-2020",
     "AddedItemProductName": "Klaviyo Atlanta Workshop 2020",
     "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 2020"],
     "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 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>

Started Checkout

Checkout data is important if you'd like to send abandoned checkout emails. When someone starts the checkout process, you'll send Klaviyo an event indicating they started checking out. The best place to trigger this event is when someone visits the checkout page after they’ve been "identified" or when they enter their email address on the checkout page if they have not already been identified.

You'll want to make sure you include all the details of the line items so your abandoned checkout emails can be customized to include pictures, links, and other information about the products 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 the 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, or general availability of data on the server-side versus the front-end. For example, if someone has a slow connection/computer or a JavaScript-blocking plugin on their browser, the JavaScript requests might not fire. In the case of more crucial metrics (like those for orders and other transactional events and properties) or ones that would contain sensitive data, use our server-side Track API.

We have libraries available for Python, Ruby, and PHP, but in a general sense, the API just requires making an HTTP GET request with a base64 encoded JSON payload. More information on our Track and Identify APIs can be found in our Klaviyo API Reference Guide.

Placed Order

After an order is placed, you should make a Track request to our server-side API.

It's a good practice to send your historical order data as well. This will enhance your ability to segment off that data and improve historical accuracy in revenue tracking. Historical data can be sent to us by iterating through your historical orders and generating Placed Order and Ordered Product Track API requests for each. The special “time” property for these events should be the UNIX timestamp of when that order occurred.  More details on these metrics below.

You'll want to send order data to Klaviyo in one of two ways: real-time or batch.

  • Real-time - You'll make requests as soon as an order is placed
  • Batch - You’ll write a script that will run at least once an hour to send all events that occurred in that past hour

If you plan to send abandoned cart/checkout emails, you'll need to send order data at least at a frequency that falls within your email delay in order to stop the email from going 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, you'll need to make sure that you send data over at least once every hour.

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.
  • One event for each line item named Ordered Experience
    • 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

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 (eg. 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 numerical, monetary value of the event with which it’s associated.
  • The "Items" array should contain one dictionary for each line item.
  • time is a special property that should be a UNIX timestamp of the order date and time.

Here’s an example Track request payload for Placed Order:

{
   "token": "PUBLIC_API_KEY",
   "event": "Placed Order",
   "customer_properties": {
     "$email": "john.smith@test.com",
     "$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,
     "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

For each line item, you should also make Track request payload for an Ordered Experience event. This event becomes useful if you plan to create any filters or triggers based on experience-specific information (as opposed to an order as a whole) that isn't "top-level" on the Placed Order event. This event is also used in conjunction with your Catalog Feed in order to enable personalized recommendations:

{
   "token": "PUBLIC_API_KEY",
   "event": "Ordered Experience",
   "customer_properties": {
     "$email": "john.smith@test.com",
     "$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
}

Attended Experience

If you’d like to send followup emails about specific experiences, it might make sense to send an Attended Experience event. While you could send these types of emails after the event date for anyone who paid for it using Placed Order, that strategy may also include people who have purchased a spot but never attended. It could also include people who originally ordered and then canceled their spot. If attendance is taken or marked in some way, 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 payload for an event like this would look something like this:

{
   "token": "PUBLIC_API_KEY",
   "event": "Attended Experience",
   "customer_properties": {
     "$email": "john.smith@test.com",
     "$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 becomes updated on your end due to a change of venue, date, etc, a few things should happen:

  • Update your experience catalog feed (discussed in a later section)
  • 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 (discussed in a later section)
  • Send an Experience Updated event for each person registered for that experience

An Experience Updated event will allow you to send an email to those registrants about the changes to that experience. 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 your experience catalog (ExperienceID in this case), you can also reference any additional data only passed to the catalog (like the experience location).

{
   "token": "PUBLIC_API_KEY",
   "event": "Experience Updated",
   "customer_properties": {
     "$email": "john.smith@test.com",
     "$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 and Refunded Order

Depending on if your experiences are able to be cancelled or refunded, you may want to send additional events that reflect these actions. Each of these “order-related” events will have almost the same payload as a Placed Order event.

For Cancelled Order and Refunded Order to be included in CLV calculations, they must have $event_ids that correspond to a previously tracked Placed Order event

For each of these events, update the event name and the timestamp and add an additional property for the cancellation or refund reason:

Cancelled Order

{
   "token": "PUBLIC_API_KEY",
   "event": "Cancelled Order",
   "customer_properties": {
     "$email": "john.smith@test.com",
     "$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

{
   "token": "PUBLIC_API_KEY",
   "event": "Refunded Order",
   "customer_properties": {
     "$email": "john.smith@test.com",
     "$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 potential limitations of frontend code, security concerns, or general availability of data on the server-side versus the front-end. 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 profile properties (like those for upcoming events and other transactional data and properties) or ones that would contain sensitive data, use our server-side Identify API.

We have libraries available for Python, Ruby, and PHP, but in a general sense, the API just requires making an HTTP GET request with a base64 encoded JSON payload. For more information on our Track and Identify APIs, head to our Klaviyo API Reference Guide.

Next Experience ID

This profile property should be sent as a string representing the ID for the next/upcoming experience a person 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 Date:

{
   "token": "PUBLIC_API_KEY",
   "properties": {
     "$email": "john.smith@test.com",
     "NextExperienceID": "1111",
   }
}

Next Experience Date

This profile property should be sent as a date representing the next/upcoming date for which the person has booked an experience. This property will allow you to:

Create date-triggered flows to send messaging before/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": "john.smith@test.com",
     "NextExperienceDate": "2019-10-31 00:00:00",
   }
}

Syncing Historical Data

It's a good practice to send us your historical order data as well. This will enhance your ability to segment off that data and improve historical accuracy in revenue tracking. This data can be sent to us by iterating through your historical orders and generating Placed Order and Ordered Product Track API requests for each.

Catalog Feed Integration

Our catalog feed integration allows you to sync a feed of your "catalog" of experiences to your Klaviyo account. Integrating your catalog will allow you to use our Product Feeds and Product Blocks in emails in order to show dynamic experience recommendations to people who view your content. In order to set up a custom catalog integration, please reach out to our Support Team. They will pass along the documentation and examples for this setup. They'll also need to be notified once the setup is complete in order to activate the feed on your account.

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

A 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

Other Considerations

If people can subscribe or pay in a subscription-based manner to the experiences you offer, you can follow our guide to integrating a subscription ecommerce platform

Example Flows Ideas

Browse Abandonment

Re-engage browsers who landed on an experience page but never went on to add it to their cart.

Trigger: Viewed Experience

Flow Filter: Has Added to Cart 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).

Additional Resources

x
Was this article helpful?
2 out of 4 found this helpful