Event SpecsTravel & Hospitality

Travel & Hospitality Event Spec

This page defines all standard events for travel and hospitality products on Datafly Signal — covering destination discovery, flight, hotel and car search, the booking funnel, and post-booking experiences such as check-in, loyalty, and reviews. Implement these events to enable accurate server-side delivery to advertising and analytics platforms.

💡

Events that overlap with the general e-commerce funnel reuse GA4’s recommended event names (view_item, add_to_cart, begin_checkout, purchase, search, sign_up, login, generate_lead). If you’re migrating from Google Tag Manager, those event names work as-is. Travel-specific events use snake_case names.

All events are sent via datafly.track(). Properties are passed as a flat object in the second argument. Dates should be sent as ISO 8601 strings (e.g. '2026-08-14'). Airport codes should use IATA three-letter codes (e.g. 'LHR', 'JFK'). Monetary amounts should be numbers with a separate currency property using ISO 4217 codes.

⚠️

Never put raw PII (email, phone, name, passport number, free-text review content) in track() properties. Signal hashes and attaches identity server-side. Pass identifiers (booking_id, flight_id, hotel_id) rather than personal data.


Search Events

Events tracking what travellers are searching for.

Fired when a user submits a generic site search. Use the travel-specific search events below for structured flight, hotel, or car queries.

datafly.track('search', {
  search_term: 'cheap flights to lisbon'
})
PropertyTypeRequiredDescription
search_termstringRequiredThe search term entered by the user

destination_searched

Fired when a user searches for a destination (city, country, or region). Used by blueprints to map structured destination intent to platform search events.

datafly.track('destination_searched', {
  query: 'Lisbon',
  product_id: 'dest_lisbon',
  category: 'city',
  value: 0,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
querystringRequiredThe destination search term entered by the user
product_idstringOptionalIdentifier of the matched destination, if resolved
categorystringOptionalDestination classification (e.g. city, country, region)
valuenumberOptionalIndicative value of the search (e.g. cheapest fare), if known
currencystringOptionalISO 4217 currency code for value

flight_searched

Fired when a user performs a flight search.

datafly.track('flight_searched', {
  origin: 'LHR',
  destination: 'JFK',
  depart_date: '2026-08-14',
  return_date: '2026-08-21',
  passengers: 2,
  cabin_class: 'economy',
  trip_type: 'return',
  results_count: 84
})
PropertyTypeRequiredDescription
originstringOptionalOrigin airport IATA code (e.g. LHR)
destinationstringOptionalDestination airport IATA code (e.g. JFK)
depart_datestringOptionalDeparture date in ISO 8601 format
return_datestringOptionalReturn date in ISO 8601 format. Omit or set null for one-way
passengersnumberOptionalNumber of passengers
cabin_classstringOptionalCabin class: economy, premium_economy, business, first
trip_typestringOptionalTrip type: one_way, return, multi_city
results_countnumberOptionalNumber of results returned

hotel_searched

Fired when a user performs a hotel search.

datafly.track('hotel_searched', {
  destination: 'New York',
  check_in: '2026-08-14',
  check_out: '2026-08-21',
  guests: 2,
  rooms: 1,
  results_count: 120
})
PropertyTypeRequiredDescription
destinationstringOptionalCity, region, or property name searched
check_instringOptionalCheck-in date in ISO 8601 format
check_outstringOptionalCheck-out date in ISO 8601 format
guestsnumberOptionalTotal number of guests
roomsnumberOptionalNumber of rooms requested
results_countnumberOptionalNumber of results returned

car_searched

Fired when a user searches for a hire car.

datafly.track('car_searched', {
  location: 'JFK',
  pick_up_date: '2026-08-14',
  drop_off_date: '2026-08-21',
  car_type: 'suv',
  results_count: 18
})
PropertyTypeRequiredDescription
locationstringOptionalPick-up location (city or airport code)
pick_up_datestringOptionalPick-up date in ISO 8601 format
drop_off_datestringOptionalDrop-off date in ISO 8601 format
car_typestringOptionalCategory of car searched (e.g. economy, suv, luxury)
results_countnumberOptionalNumber of results returned

Browsing Events

Events tracking destination, listing, and product views.

view_item_list

Fired when a user views a results grid of flights, hotels, or cars.

datafly.track('view_item_list', {
  item_list_id: 'hotels-new-york',
  item_list_name: 'Hotels — New York',
  items: [
    { item_id: 'htl_ace_nyc', item_name: 'Ace Hotel New York', price: 229.00, index: 0, item_category: 'Hotels', currency: 'USD' },
    { item_id: 'htl_std_nyc', item_name: 'The Standard High Line', price: 319.00, index: 1, item_category: 'Hotels', currency: 'USD' }
  ]
})
PropertyTypeRequiredDescription
item_list_idstringOptionalMachine-readable identifier for the results list
item_list_namestringOptionalHuman-readable name of the list being browsed
itemsarrayOptionalArray of item objects displayed in the list (see Items Array Schema)

destination_viewed

Fired when a user views a destination page.

datafly.track('destination_viewed', {
  destination: 'Lisbon',
  destination_type: 'city'
})
PropertyTypeRequiredDescription
destinationstringOptionalName of the destination
destination_typestringOptionalDestination classification: city, country, region

listing_viewed

Fired when a user views a specific travel listing (a hotel, flight, package, or experience). The canonical detail-view event for travel inventory; mapped to platform ViewContent.

datafly.track('listing_viewed', {
  product_id: 'htl_ace_nyc',
  product_name: 'Ace Hotel New York',
  category: 'hotel',
  value: 229.00,
  currency: 'USD'
})
PropertyTypeRequiredDescription
product_idstringOptionalIdentifier of the listing being viewed
product_namestringOptionalDisplay name of the listing
categorystringOptionalListing type (e.g. hotel, flight, package, experience)
valuenumberOptionalDisplayed price of the listing
currencystringOptionalISO 4217 currency code for value

view_item

Fired when a user views a structured product detail page (flight fare, hotel room, or car). Reuses the GA4 e-commerce event so travel inventory delivers alongside standard catalogue products. Also accepted as view_content.

datafly.track('view_item', {
  currency: 'GBP',
  value: 649.00,
  items: [
    {
      item_id: 'flt_ba_lhr_jfk_0814',
      item_name: 'LHR → JFK · British Airways',
      item_category: 'Flights',
      item_brand: 'British Airways',
      item_variant: 'Economy',
      price: 649.00,
      currency: 'GBP',
      quantity: 1
    }
  ]
})
PropertyTypeRequiredDescription
currencystringOptionalISO 4217 currency code
valuenumberOptionalMonetary value of the event
itemsarrayOptionalArray containing the viewed item (see Items Array Schema)

flight_viewed

Fired when a user views the details of a specific flight option.

datafly.track('flight_viewed', {
  flight_id: 'flt_ba_lhr_jfk_0814',
  origin: 'LHR',
  destination: 'JFK',
  depart_date: '2026-08-14',
  airline: 'British Airways',
  price: 649.00,
  currency: 'GBP',
  cabin_class: 'economy'
})
PropertyTypeRequiredDescription
flight_idstringOptionalIdentifier for the flight or fare
originstringOptionalOrigin airport IATA code
destinationstringOptionalDestination airport IATA code
depart_datestringOptionalDeparture date in ISO 8601 format
airlinestringOptionalOperating airline name (e.g. British Airways)
pricenumberOptionalDisplayed price
currencystringOptionalISO 4217 currency code
cabin_classstringOptionalCabin class of the viewed fare

hotel_viewed

Fired when a user views the details of a specific hotel.

datafly.track('hotel_viewed', {
  hotel_id: 'htl_ace_nyc',
  hotel_name: 'Ace Hotel New York',
  destination: 'New York',
  check_in: '2026-08-14',
  check_out: '2026-08-21',
  price_per_night: 229.00,
  currency: 'USD',
  stars: 4,
  rating: 8.4
})
PropertyTypeRequiredDescription
hotel_idstringOptionalUnique identifier for the hotel
hotel_namestringOptionalHotel display name
destinationstringOptionalCity or region
check_instringOptionalCheck-in date in ISO 8601 format
check_outstringOptionalCheck-out date in ISO 8601 format
price_per_nightnumberOptionalDisplayed price per night
currencystringOptionalISO 4217 currency code
starsnumberOptionalStar rating (e.g. 4)
ratingnumberOptionalGuest review score (e.g. 8.6)

listing_saved

Fired when a user saves or favourites a travel listing for later. Mapped to platform AddToWishlist.

datafly.track('listing_saved', {
  product_id: 'htl_ace_nyc',
  product_name: 'Ace Hotel New York',
  value: 229.00,
  currency: 'USD'
})
PropertyTypeRequiredDescription
product_idstringOptionalIdentifier of the saved listing
product_namestringOptionalDisplay name of the saved listing
valuenumberOptionalDisplayed price of the saved listing
currencystringOptionalISO 4217 currency code for value

Booking Events

Events tracking the booking funnel from initiation to confirmation and post-booking changes.

add_to_cart

Fired when a user adds a fare, room, or ancillary (seat, bag, insurance) to their basket. Reuses the GA4 e-commerce event.

datafly.track('add_to_cart', {
  currency: 'GBP',
  value: 1298.00,
  items: [
    {
      item_id: 'flt_ba_lhr_jfk_0814',
      item_name: 'LHR → JFK · British Airways',
      item_category: 'Flights',
      item_brand: 'British Airways',
      item_variant: 'Economy',
      price: 649.00,
      currency: 'GBP',
      quantity: 2
    }
  ]
})
PropertyTypeRequiredDescription
currencystringOptionalISO 4217 currency code
valuenumberOptionalMonetary value of the items added
itemsarrayOptionalArray of items added to the basket (see Items Array Schema)

booking_started

Fired when a user begins the checkout or booking flow. Equivalent to GA4 begin_checkout; either name is accepted.

datafly.track('booking_started', {
  booking_type: 'flight',
  item_id: 'flt_ba_lhr_jfk_0814',
  value: 1298.00,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
booking_typestringOptionalProduct being booked: flight, hotel, car, package
item_idstringOptionalIdentifier of the item being booked
valuenumberOptionalTotal price shown at booking start
currencystringOptionalISO 4217 currency code

add_payment_info

Fired when a user submits their payment details during booking. Reuses the GA4 e-commerce event.

datafly.track('add_payment_info', {
  currency: 'GBP',
  value: 1298.00,
  payment_type: 'credit_card',
  booking_type: 'flight'
})
PropertyTypeRequiredDescription
currencystringOptionalISO 4217 currency code
valuenumberOptionalTotal value of the booking
payment_typestringOptionalPayment method type (e.g. credit_card, paypal, apple_pay, points)
booking_typestringOptionalProduct being booked: flight, hotel, car, package

purchase

Fired on the confirmation page after a booking is confirmed and payment taken. This is the most important conversion event — ensure it fires reliably. Equivalent to booking_completed; either name is accepted.

datafly.track('purchase', {
  transaction_id: 'BK-20264821',
  value: 1298.00,
  currency: 'GBP',
  booking_type: 'flight',
  check_in: '2026-08-14',
  check_out: '2026-08-21',
  guests: 2,
  payment_type: 'credit_card',
  items: [
    {
      item_id: 'flt_ba_lhr_jfk_0814',
      item_name: 'LHR → JFK · British Airways',
      item_category: 'Flights',
      item_brand: 'British Airways',
      item_variant: 'Economy',
      price: 649.00,
      quantity: 2,
      currency: 'GBP'
    }
  ]
})
PropertyTypeRequiredDescription
transaction_idstringRequiredUnique booking reference — used for deduplication
valuenumberOptionalTotal revenue amount
currencystringOptionalISO 4217 currency code
booking_typestringOptionalProduct booked: flight, hotel, car, package
check_instringOptionalCheck-in or departure date in ISO 8601 format
check_outstringOptionalCheck-out or return date in ISO 8601 format
guestsnumberOptionalNumber of guests or passengers
payment_typestringOptionalPayment method used (e.g. credit_card, paypal, points)
itemsarrayOptionalItems booked (see Items Array Schema)
⚠️

Always send transaction_id (your booking reference) on purchase events for deduplication. Platforms like Meta CAPI and GA4 use it to prevent double-counting alongside browser-side events.


refund

Fired when a booking is cancelled and a refund issued. Equivalent to booking_cancelled; either name is accepted.

datafly.track('refund', {
  transaction_id: 'BK-20264821',
  value: 974.00,
  currency: 'GBP',
  reason: 'change_of_plans'
})
PropertyTypeRequiredDescription
transaction_idstringRequiredIdentifier of the booking being refunded
valuenumberOptionalAmount refunded
currencystringOptionalISO 4217 currency code
reasonstringOptionalCancellation reason (e.g. change_of_plans, price_issue)

booking_modified

Fired when a confirmed booking is amended (e.g. date change, seat upgrade, name correction).

datafly.track('booking_modified', {
  booking_id: 'BK-20264821',
  modification_type: 'date_change',
  price_difference: 45.00,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
booking_idstringYesBooking reference
modification_typestringOptionalType of change (e.g. date_change, seat_upgrade, name_correction)
price_differencenumberOptionalPrice change resulting from the modification (negative for refunds)
currencystringOptionalISO 4217 currency code

booking_completed

The travel-domain name for a confirmed booking — the primary conversion event. Identical to purchase; send whichever name your stack uses. Always include transaction_id for deduplication.

datafly.track('booking_completed', {
  transaction_id: 'BK-20264821',
  booking_type: 'flight',
  value: 1298.00,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
transaction_idstringRequiredBooking reference — used for deduplication
booking_typestringOptionalflight, hotel, car, package
valuenumberOptionalTotal booking value
currencystringOptionalISO 4217 currency code

booking_cancelled

Fired when a booking is cancelled or refunded. Identical to refund; send whichever name your stack uses.

datafly.track('booking_cancelled', {
  transaction_id: 'BK-20264821',
  value: 1298.00,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
transaction_idstringRequiredBooking reference being cancelled
valuenumberOptionalAmount refunded
currencystringOptionalISO 4217 currency code

Lead Events

Events tracking enquiries and lead capture, common for tour operators, travel agents, and high-value packages.

generate_lead

Fired when a user submits an enquiry, callback request, or quote request. Reuses the GA4 e-commerce event.

datafly.track('generate_lead', {
  lead_type: 'quote_request',
  booking_type: 'package',
  destination: 'Maldives',
  value: 4500.00,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
lead_typestringOptionalNature of the lead (e.g. quote_request, callback, brochure)
booking_typestringOptionalProduct enquired about: flight, hotel, car, package
destinationstringOptionalDestination the enquiry relates to
valuenumberOptionalIndicative value of the enquiry, if known
currencystringOptionalISO 4217 currency code for value

Post-Booking Events

Events covering check-in, check-out, loyalty, and reviews.

check_in_completed

Fired when a traveller completes online or self-service check-in.

datafly.track('check_in_completed', {
  booking_id: 'BK-20264821',
  check_in_method: 'mobile',
  seat_selected: '14A'
})
PropertyTypeRequiredDescription
booking_idstringYesBooking reference
check_in_methodstringOptionalMethod used: web, mobile, kiosk
seat_selectedstringOptionalSeat number selected during check-in (e.g. 14A)

check_out_completed

Fired when a guest or traveller completes check-out.

datafly.track('check_out_completed', {
  booking_id: 'BK-20264821'
})
PropertyTypeRequiredDescription
booking_idstringYesBooking reference

loyalty_points_earned

Fired when points are credited to a customer’s loyalty account.

datafly.track('loyalty_points_earned', {
  programme_id: 'ba_avios',
  points: 1500,
  booking_id: 'BK-20264821'
})
PropertyTypeRequiredDescription
programme_idstringOptionalLoyalty programme identifier (e.g. ba_avios, ihg_one)
pointsnumberOptionalNumber of points earned
booking_idstringOptionalBooking that triggered the earn

loyalty_points_redeemed

Fired when points are redeemed from a customer’s loyalty account.

datafly.track('loyalty_points_redeemed', {
  programme_id: 'ba_avios',
  points: 10000,
  redemption_type: 'flight_discount'
})
PropertyTypeRequiredDescription
programme_idstringOptionalLoyalty programme identifier
pointsnumberOptionalNumber of points redeemed
redemption_typestringOptionalWhat the points were used for (e.g. flight_discount, hotel_upgrade, ancillary)

review_submitted

Fired when a customer submits a rating or review for a travel product.

⚠️

Do not include free-text review content as an event property. Review text may contain PII and is better stored directly in your application database.

datafly.track('review_submitted', {
  booking_id: 'BK-20264821',
  subject_type: 'hotel',
  subject_id: 'htl_ace_nyc',
  rating: 9
})
PropertyTypeRequiredDescription
booking_idstringOptionalBooking the review relates to
subject_typestringOptionalItem being reviewed: hotel, flight, car
subject_idstringOptionalIdentifier of the reviewed item
ratingnumberOptionalRating given, on a scale of 1–10

Account Events

sign_up

Fired when a user completes account registration.

datafly.track('sign_up', {
  method: 'email'
})
PropertyTypeRequiredDescription
methodstringOptionalRegistration method (e.g. email, google, facebook)

login

Fired when a user signs in to their account.

datafly.track('login', {
  method: 'email'
})
PropertyTypeRequiredDescription
methodstringOptionalLogin method (e.g. email, google, facebook)

Items Array Schema

💡

Several events accept an items array. Each object in the array can include the following properties. The items[] array uses GA4-style field names. Signal’s server-side blueprints automatically transform these to vendor-specific formats (e.g., Meta’s contents[] with id/title fields).

PropertyTypeDescription
item_idstringYour internal product, fare, or property ID
item_namestringDisplay name of the flight, hotel, or car
item_categorystringProduct category (e.g. Flights, Hotels, Cars, Packages)
item_brandstringBrand (e.g. operating airline, hotel chain, car supplier)
item_variantstringSelected variant (e.g. Economy, Deluxe King, SUV)
pricenumberUnit price
quantitynumberNumber of units (e.g. passengers, rooms, nights)
indexnumberPosition in list (0-indexed, relevant in list/search contexts)
currencystringISO 4217 currency code
couponstringItem-level coupon or promo code if applicable
discountnumberMonetary discount applied to this item
item_list_idstringIdentifier of the list the item was shown in
item_list_namestringName of the list the item was shown in

Vendor Mapping

The table below shows how Datafly Signal maps travel events to the native event names expected by each vendor’s server-side API. Signal uses the GA4-style event names as its canonical format, and blueprints handle the transformation to vendor-specific payloads.

Signal EventGA4Meta CAPITikTok Events API
searchsearchSearchSearch
destination_searchedsearchSearchSearch
flight_searchedsearchSearchSearch
hotel_searchedsearchSearchSearch
car_searchedsearchSearchSearch
view_item_listview_item_listViewContentViewContent
destination_viewedview_itemViewContentViewContent
listing_viewedview_itemViewContentViewContent
view_itemview_itemViewContentViewContent
flight_viewedview_itemViewContentViewContent
hotel_viewedview_itemViewContentViewContent
listing_savedadd_to_wishlistAddToWishlistAddToWishlist
add_to_cartadd_to_cartAddToCartAddToCart
booking_startedbegin_checkoutInitiateCheckoutInitiateCheckout
add_payment_infoadd_payment_infoAddPaymentInfoAddPaymentInfo
purchasepurchasePurchaseCompletePayment
refundrefund(custom)(custom)
booking_modified(custom)(custom)(custom)
generate_leadgenerate_leadLeadSubmitForm
check_in_completed(custom)(custom)(custom)
check_out_completed(custom)(custom)(custom)
loyalty_points_earned(custom)(custom)(custom)
loyalty_points_redeemed(custom)(custom)(custom)
review_submitted(custom)(custom)(custom)
sign_upsign_upCompleteRegistrationCompleteRegistration
loginlogin(custom)(custom)