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.
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
Search Engine
search.yourhotel.com
Booking Engine
book.yourhotel.com
Confirmation
confirm.yourhotel.com
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
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.
Traveller clicks a Google Ads campaign for "Barcelona hotels" and browses your site.
Retargeting ad on Instagram. Traveller returns and compares room types.
Safari ITP wipes all client-set cookies. The traveller is now a "new visitor" to client-side analytics.
Returns via organic search to compare final options. Client-side: new session, no history. Server-side: recognised, full journey intact.
Traveller books a 5-night stay. Client-side: conversion attributed to organic (wrong). Server-side: attributed to original Google Ads click (correct).
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).
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
# 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_typeAttribute 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.