Travel & Hospitality

The booking started 3 weeks ago. Your cookies expired 2 weeks ago.

Travel purchases have the longest research-to-booking windows in e-commerce. Guests browse for weeks across multiple devices and domains before committing. Safari's 7-day cookie limit ensures you lose attribution long before the booking happens. Datafly Signal's server-set cookies persist for 400 days.

Why travel attribution is broken

The travel booking funnel is uniquely hostile to client-side tracking. Long windows, multiple domains, and high ad spend make every lost attribution point expensive.

Long research windows

Travellers spend 2-4 weeks researching before booking. They visit your site 8-12 times across that window. With client-side cookies capped at 7 days, the first visit that started the journey is erased before the booking that ends it.

Cross-domain booking flows

Main site for research, separate search engine, third-party booking engine, confirmation on yet another domain. Each domain boundary breaks the cookie chain and fractures the user journey into disconnected fragments.

High ad spend, poor attribution

Travel brands spend heavily on Google, Meta, and TikTok ads. When cookies expire before conversion, the booking cannot be attributed to the campaign that drove it. You over-invest in channels that look like they convert and under-invest in ones that actually do.

Cross-Domain Identity

One guest across every domain

The Identity Hub links a traveller's sessions across your main site, search engine, booking engine, and confirmation pages into a single unified profile — even in Safari, even across separate domains.

Main Site

yourhotel.com

Research

Search Engine

search.yourhotel.com

Compare

Booking Engine

book.yourhotel.com

Book

Confirmation

confirm.yourhotel.com

Confirm

Identity Hub

AES-256-GCM encrypted tokens / 60s TTL / single-use nonces

  • Encrypted identity tokens passed between domains via URL parameter
  • Server-side resolution — works in Safari, no client-side storage dependency
  • 60-second TTL with single-use nonces prevent replay attacks
  • Consent-gated — identity linking requires explicit user consent
Attribution

Full attribution through the entire booking window

Client-side cookies expire after 7 days. Server-set cookies from your own subdomain persist for 400 days. Here is what that means for a typical travel booking journey.

Day 1Google ad click

Traveller clicks a Google Ads campaign for "Barcelona hotels" and browses your site.

Client-side: TrackedServer-side: Tracked
Day 3Meta retarget impression

Retargeting ad on Instagram. Traveller returns and compares room types.

Client-side: TrackedServer-side: Tracked
Day 7Client-side cookies expire

Safari ITP wipes all client-set cookies. The traveller is now a "new visitor" to client-side analytics.

Client-side: LostServer-side: Tracked
Day 14Traveller returns to compare

Returns via organic search to compare final options. Client-side: new session, no history. Server-side: recognised, full journey intact.

Client-side: LostServer-side: Tracked
Day 16Booking completed

Traveller books a 5-night stay. Client-side: conversion attributed to organic (wrong). Server-side: attributed to original Google Ads click (correct).

Client-side: LostServer-side: Tracked

Result: Client-side attributes the booking to organic search (wrong channel, wrong ROAS). Server-side attributes it to the Google Ads campaign on Day 1 (correct channel, accurate ROAS).

Pipeline as Code

Travel-specific event mapping

A single Booking Completed event carries your travel-specific fields — destination, dates, room type, booking value, number of travellers — and is simultaneously transformed for each vendor API.

GA4 receives a properly formatted purchase event with item arrays. Meta CAPI receives a Purchase event with content parameters and custom data. Each vendor gets exactly the payload they expect from a single source event.

  • Travel-specific fields: destination, check-in/out, room type, travellers
  • GA4 purchase event with structured item arrays
  • Meta CAPI Purchase with custom travel data
  • PII hashed or stripped before vendor delivery
  • Passport numbers stripped at Org Data Layer
pipeline/booking-completed.ymlYAML
# Booking Completed Pipeline
# Travel-specific fields → multiple vendor deliveries

event: Booking Completed
source: web

org_data_layer:
  schema: travel/booking-v2
  pii:
    email: sha256
    phone: sha256
    ip_address: mask
    passport_number: strip
  consent:
    required: [analytics, marketing]

pipelines:
  - vendor: google_analytics_4
    event_name: purchase
    mapping:
      transaction_id: properties.booking_id
      value: properties.booking_value
      currency: properties.currency
      items:
        - item_id: properties.destination
          item_name: properties.destination_name
          item_category: properties.room_type
          price: properties.booking_value
          quantity: properties.travelers

  - vendor: meta_conversions_api
    event_name: Purchase
    mapping:
      event_id: properties.booking_id
      value: properties.booking_value
      currency: properties.currency
      content_ids:
        - properties.destination
      content_type: hotel
      content_name: properties.destination_name
      custom_data:
        check_in: properties.check_in_date
        check_out: properties.check_out_date
        travelers: properties.travelers
        room_type: properties.room_type

Attribution models for long booking cycles

Travel research spans weeks and crosses multiple domains. Every ad platform claims the booking. Signal's configurable attribution models let you credit the channels that actually influenced the decision — not just the last click before checkout.

Last Click

Attribute the booking to the final touchpoint. Clean baseline for migration from platform-native attribution.

First Click

Credit the dreaming/inspiration phase — the ad that planted the destination idea weeks before booking.

Time Decay

Weight credit toward the booking phase while acknowledging the research that preceded it.

Position Based

40/20/40 — credit both the inspiration campaign and the final booking driver.

Linear

Equal credit across the 3-6 week research journey. No channel invisible.

Custom Rules

Define logic per product — flights, hotels, packages, ancillaries. Different journeys, different models.

Frequently asked questions

Why do travel buyers cause attribution problems for client-side tracking?
Travel research-to-booking windows run 30-90 days, with luxury and group travel often longer. Safari ITP's 7-day cap on JavaScript-set cookies means the gtag _ga, Meta _fbp, and TikTok _ttp cookies expire mid-research for half your visitors. By the time the customer returns to book, client-side identity is gone. 400-day server-set first-party cookies cover the full search-to-confirmation cycle including Safari users.
How does cross-domain identity work for OTAs and brand-direct flows?
Cross-domain identity resolution via OIDC + PKCE means a customer who researches on the OTA, then visits the airline's direct site, then completes booking via a confirmation email link, is stitched into one journey. The same anonymous_id flows across every domain in the booking path. Sign-in events on any surface link the anonymous_id to a loyalty programme user_id, after which all subsequent visits resolve to the same customer record.
How does this work with our GDS and PSS booking systems?
Booking events from your GDS (Sabre, Amadeus) or PSS (Navitaire, AirIT) flow into the same pipeline server-to-server. The same anonymous_id ties web research to mobile app browsing to call-centre bookings to confirmation emails. Final-bind attribution flows back to the original click ID — gclid, fbclid, ttclid, msclkid — even if the click was 60 days earlier. Loyalty programme matching joins the booking record to the customer's historical purchase patterns.
Can it handle peak booking traffic during sales periods?
The platform is single-tenant Kubernetes inside your own cloud, with horizontal scaling on every component. Capacity is sized for 10x your current peak by default. Black Friday, Boxing Day, summer-launch, and other peak booking periods are absorbed with predictable latency. Real customer events queue through Kafka with backpressure handling, so traffic spikes do not lose events.
Does this support our loyalty programme integration?
Yes. Loyalty events (tier change, point earn, point burn, status update) flow through the same pipeline as web and app events. The combined event stream feeds your CDP for audience segmentation (e.g. "high-tier loyalty customers who searched but did not book"), your warehouse for ML-driven offer modelling, and ad vendors for matched-list activation against loyalty members.

Attribute every booking to the right channel

See how Datafly Signal recovers the attribution data that expires before your guests book — and links their journey across every domain they touch.