Google Analytics

Created 20 August 2026 • Updated 20 August 2026

dataLayer Reference (Every Stage of the Journey)

Beyond the confirmation page purchase event, the PMS pushes a page-data object (request / hotel / cart / guest) into the dataLayer on every step of the booking journey, before GTM itself loads. This is useful for building additional tags (step-level remarketing audiences, cart-abandonment triggers, etc.) or for debugging why a value isn't reaching GA4. The table below is what fires at each stage, captured directly from a live test booking.

dataLayer Reference Topics

Data

The table below is what fires at each stage, captured directly from a live test booking.

Stage URL Segment What Fires
1. Availability (Your Stay) /availability (segment: availability) Consent Mode defaults, GA4 config, gtm.js / gtm.dom / gtm.load, scrollDepth x2. Page-data object with empty cart and guest.
2. Extras /availability/enhancements (segment: enhancements) Same boilerplate tags (full page reload on every step). Page-data object now shows room + rate plan + the bundled Breakfast product.
3. Guest Details /availability/guest (segment: guest) Same boilerplate tags. Page-data object shows any extras added (e.g. Dog Charge, House White Wine) alongside Breakfast. guest is still empty the form hasn't been submitted yet.
4. Payment /availability/payment (segment: payment) Same boilerplate tags. Page-data object now includes full guest PII: name, email, phone, address.
5. Confirmation /availability/confirm (segment: confirm) Same boilerplate tags, plus the separate purchase / ecommerce object described in previous pages this is what the GA4 Purchase tag reads.

What's Inside the page-data object, stage by stage

Stage cart / guest contents observed (live test, 22-23 Jul 2026 booking)
1. Availability cart.booking.total: 0. No reservation array yet. guest: {}
2. Extras cart.booking.total: 13700. reservation[0].rate: "In House Bed & Breakfast". products: [{quantity:2, label:"Breakfast", price:null}] (the bundled rate inclusion)
3. Guest Details cart.booking.total: 18200. products now: Dog Charge (£20.00), House White Wine (£25.00), Breakfast (bundled). guest: {} (form not yet submitted)
4. Payment Same cart as above. guest is now fully populated: fullname, firstname, surname, email, phone, full address (house / city / county / postcode / country)
5. Confirmation cart.booking.reference: real booking number. Same reservation / products detail, plus the separate purchase / ecommerce object
From the Payment stage onward, this page-data object carries the guest's full name, email, phone number and postal address in plain text. It sits in dataLayer for any tag configured in the container to read, not only the GA4 tags described in this guide - worth auditing what else in your container (or any third-party pixels loaded via it) reads dataLayer.guest.