HomeGuidesAPI Reference
ChangelogHelp CenterCommunityContact Us
Guides

Integrate a hotel and travel platform

Learn how to integrate a hotel and travel platform with Klaviyo.

Overview

This resource will help you as you build an integration between a hotel and travel platform and Klaviyo. It will walk you through understanding the basics of the Klaviyo data model and run through important profile and event data use cases. Where relevant, there will be links to associated resources for deeper understanding.

Since Klaviyo allows data to come in all formats with our schema-less data architecture, it's important to follow best practices, such as creating top-level fields for segmentation. Check out our integration FAQ for more information.

Building an integration with Klaviyo

If you are a partner interested in building a Klaviyo app, explore our guide to joining the Klaviyo ecosystem.

Understanding Klaviyo

Data categories

Klaviyo separates information into three broad primary data categories — events, profiles, and objects. (This is a non-exhaustive list of data types in Klaviyo, but highlighting the most common use cases for hotel and travel brands)

Events

Events are extremely versatile, since they can be used to record any type of timestamped action and can include associated information. Metrics are events grouped by type.

Profiles

Profiles are people. You can use either an email, phone number, or (not recommended) a specified guest ID as a primary identifier. Klaviyo supports custom profile properties with the following data types: strings, integers, floats, dates, booleans, arrays/lists, or JSON (e.g., Birthday, Preferred Location, Dietary Restrictions).

Objects

Objects are stateful representations of your data. Objects enable you to map diverse data concepts into Klaviyo with a many-to-one relationship, like reservations.

Additional Data Categories

In Klaviyo, you can also use catalogs, web feeds, lists & segments, campaigns, and templates. Catalogs are supported through the Catalogs API or via a JSON feed. Web feeds are supported either through a JSON or XML endpoint.

For each item in the catalog, consider including the following details:

  • Unique ID: can be text, numeric, or alphanumeric, but must be unique
  • Title: the name of the item
  • URL: the website at which a person can find this item
  • Image URL: a URL at which the image for this item is hosted
  • Description: a text description of the item
  • Price: numeric item price, no currency symbol
  • Categories: comma-separated list/array of categories, tags, or collections associated with an item
  • Variants: Variants for each parent item, with full item details per variant
  • Inventory: Inventory available for each variant (Klaviyo does not support storing location-based inventory at this time)
  • Sale Price (if available)

Since Klaviyo allows data to come in all formats with our schema-less data architecture, it's important to follow best practices, such as creating top-level fields for segmentation.

Data use cases

Data pushed into Klaviyo is used to personalize both the types of messages and the content within those messages that a profile receives. You can send messages through Klaviyo's supported channels (Email, Text Messaging, and Mobile Push) through Campaigns and Flows. Outside of messaging, profile and event information can be used for segmentation, personalized/dynamic content in messages, flow filtering, and personalized on-site content like forms.

Models

Below are all of the events hotel and travel integrations are using for success. We recommend all of the events in each relevant category to build an integration.

Profile Data

Profile Properties

Regardless of your use case, these are the most common profile properties that you'll want to pass into Klaviyo. Note that only email (recommended identifier), phone number, or external ID (not recommended identifier) are required.

Resources:

Profile API Overview

Profile PropertyDescription
Email (Recommended as primary identifier)The profile's valid email address (must be <= 100 characters)
First NameFirst name
Last NameLast name
Phone NumberKlaviyo's APIs only accepts the E.164 format (e.g., +15005550006)
Example Profile Properties:
  • Street address
  • City
  • Organization
  • Country
  • State/Region
  • External ID
  • Tags
  • Interests
  • Allergies
  • DietaryPreferences
  • CommunicationMethods
  • Notes/Custom
  • PreferredLanguage
  • Hometown
  • Gender
  • MaritalStatus
  • Pronouns
  • NumberOfKids
  • Nationality
  • ReturningGuestStatus
  • Birthday
  • Title
  • Locale
  • GuestsClassification
  • PreferredSpaceFeatures

Consent Data

Consent allows messages to be sent via the Klaviyo platform. Without syncing consent via your integration, consent will need to be captured outside the integration (either uploaded manually or gathered for all contacts in the list again). It is crucial that this connection be built if your platform collects consent in a compliant way.

If possible, it's important to collect both email and text message consent:

  1. During booking experience
  2. On your website (via onsite forms)
  3. During check-in
  4. During check-out
Resources:

Collect email and text message consent via API
Bulk Subscribe Profiles
Create Client Subscription

Consent TypeDescriptionNotes
Email consent (marketing)Whether or not someone is consented to receive email marketing communication.We highly encourage passing consent to Klaviyo. Please review the regulations for where your users are located to ensure that you're staying compliant.
Text message consent (transactional and/or marketing)Whether or not someone is consented to receive text message communication. Consent can be granted separately for marketing and transactional purposes.This consent must be explicit and include disclosure language to be compliant with text message regulations.

User Onsite Activity

These often come from injected Klaviyo javascript on listing pages but could be webhooks/APIs as well. Historic sync is optional, but helpful.

Resources:

JavaScript Track API for onsite metrics

Use Cases:
  • Trigger browse abandonment automation sequences based on guest behavior on your site
  • Trigger abandoned checkout automation sequences when a guest does not complete a booking
EventDescription
Active on SiteThis event occurs when a guest visits your website.
Viewed ListingThis event occurs when a guest views a listing.
Added to CartThis event occurs when a guest adds an item to their cart.
Started CheckoutThis event occurs when a guest begins the checkout process.
Example Event Properties:
  • ListingTitle
  • ListingPrice
  • ListingURL
  • ListingImage
  • ListingAmenities
  • Tags
  • PropertyType
  • CheckInDate
  • CheckOutDate
  • NumberOfGuests
  • CreatedDate

Reservations

Below are examples of the most common data coming from the reservation process. Note that not all of these data points are necessary and you can add additional ones for your use case. We recommend using events to capture critical points in the Reservation journey while using objects to store persistent data about a guest's reservation(s).

Resources:

Events API Overview
Custom Objects API Overview
Sync Reservations as Objects

Use Cases:
  • Trigger post purchase transactional sequences (e.g. booking confirmation)
  • Trigger post purchase marketing automation sequences (e.g., experiences, guest winback)
  • Trigger check-in confirmation automation sequences to welcome guests to your property
  • Trigger check-out confirmation automation sequences to build guest loyalty and get feedback
EventDescription
Created ReservationThis event occurs when a guest starts the reservation process.
Requested ReservationThis event occurs when a guest requests a reservation.
Confirmed ReservationThis event occurs when a guest confirms the reservation.
Checked In to ReservationThis event occurs when a guest checks in to their reservation.
Checked Out of ReservationThis event occurs when a guest checks out of their reservation.
Cancelled ReservationThis event occurs when a guest cancels a reservation.
Completed/Closed ReservationThis event occurs when a reservation is closed or completed.
Updated ReservationThis event occurs when a reservation is updated.
No Show ReservationThis event occurs when a guest is not checked in for their reservation after the specified reservation time.
ObjectDescription
ReservationThis object is used to store data about a guest's reservation(s).
Example Event Properties:
  • ReservationID
  • ConfirmationNumber
  • ReservationGroupName
  • ScheduledCheckInTime
  • ScheduledCheckOutTime
  • ActualCheckInTime
  • ActualCheckOutTime
  • ReservationPurpose
  • ReservationPersonCounts
  • ReservationAdultCounts
  • ReservationChildCounts
  • ListingImages
  • ListingTitle
  • ListingDescription
  • Vouchers
  • OriginChannel
  • ReservationValue
  • Timestamp
Example Object Properties:
  • ReservationID
  • ConfirmationNumber
  • ReservationGroupName
  • ReservationValue
  • ReservationStatus
  • ReservationNumber
  • ListingImages
  • ScheduledCheckInTime
  • ScheduledCheckOutTime
  • ActualCheckInTime
  • ActualCheckOutTime
  • ReservationPurpose
  • ReservationPersonCounts
  • ReservationAdultCounts
  • ReservationChildCount
  • ListingTitle
  • ListingDescription
  • Vouchers
  • OriginChannel

Orders

Below are examples of the most common events coming from the ordering process for hotel and travel integrations. Typically, orders represent items that a guest has added to their reservation (e.g. merchandise, in-stay purchases). Note that not all of these events are necessary and you can add additional ones for your use case.

Resources:

Events API Overview

Use Cases:
  • Trigger post purchase transactional sequences (e.g. order confirmation)
  • Trigger post purchase marketing automation sequences (e.g., upsell, winback)
  • Filter marketing automation sequences based on items guests have ordered
  • Analyzing and segmenting purchase behavior for individual line items within an order
  • Factored into models for order prediction and customer lifetime value (CLV)
EventDescription
Placed Order (most important)This event is tracked when an order was placed and includes all of the product information about the items purchased, store information, and order details that can be used in messages.
Ordered ProductThis event is tracked when a customer places an order, but a separate event is tracked for each item someone purchases. For example, if someone buys a coffee and a sandwich, 1 Placed Order event will be tracked along with 2 Ordered Product events; 1 Placed Order event for the purchase as a whole, and then 1 Ordered Product event for the coffee and 1 Ordered Product event for the sandwich. This is useful when creating behavioral segments based on product variant options and other detailed information that's not available in the Placed Order event.
Fulfilled OrderThis event is tracked when an order is marked as "fulfilled" in your restaurant. The event Klaviyo tracks includes all product information regarding the items someone purchased including product names and images so you can use that information in purchase follow up emails.
Refunded OrderThis event is tracked when a customer completes the checkout process in your restaurant and a payment is made, but the customer requests the payment to be returned. The event Klaviyo tracks includes all of the product information about the items someone purchased including product names, images, and variant information.
Closed OrderThis event is tracked when an order is considered complete.
Adjusted OrderThis event is tracked when an order has been fully or partially adjusted or refunded.
Cancelled OrderThis event is tracked when an order was canceled by a user or the system.
Example Event Properties:
  • Value
  • Timestamp
  • Items
  • ItemCount
  • ItemCategories
  • FulfillmentMethod
  • OrderID
  • ProductID
  • Quantity
  • Collections
  • VariantTitle
  • DiscountApplied
  • DiscountCodes
  • OrderingProvider
  • VendorName
  • Currency
  • PaymentType
  • ProductURL
  • ImageURL
  • RefundAmount
  • AdjustmentType
  • AdjustmentReason
  • CanceledReason
  • SKU
  • Tags
  • Source

Loyalty

Out of all of the apps for hotel and travel businesses, loyalty apps differ the most based on how the structure is set up. Below are the most common loyalty events, but feel free to customize based on what's important to your application.

Resources:

Events API Overview

Use Cases:
  • Trigger post redemption transactional sequences (e.g. order confirmation, new tier welcome)
  • Trigger post welcome marketing automation sequences (e.g., encouraging loyalty sign up)
EventDescription
Signed Up (most important)This event occurs when a guest signs up for your loyalty program.
Created RedemptionThese events happen when a guest updates a redemption.
Updated RedemptionThese events happen when a guest updates a redemption.
Applied RedemptionThis event is generated when a redemption gets applied.
Checked-InThese events happen when a user checks in to the loyalty program or for a specific gift.
Earned RewardThis includes user rewards gifted/issued events triggered as they happen.
Converted Points to RewardThis event is triggered when the points earned by a guest are turned into rewards.
Completed CardThis event is generated when a guest's loyalty card gets completed.
Example Event Properties:
  • LocationID
  • LocationName
  • CreatedDate
  • ExpirationDate
  • Barcode
  • RedemptionCode
  • RewardID
  • DiscountAmount
  • RewardType
  • RewardName
  • PointsSpent
  • PointsEarned
  • AdditionalProperties
  • UpdatedDate
  • RedeemedPoints
  • RedemptionType

Common gotchas

The primary gotchas are:

  • Using the wrong naming convention so dynamic content does not populate correctly
  • Nesting data so it is unreachable using segmentation

Follow this Identify common gotchas article to optimize your integration.