Overview

The client form page (Booking Step 2) captures detailed information about the selected rooms, extras, and pricing. This step provides crucial data for understanding booking composition and revenue optimization.

Event: init

The init event fires when users reach the client information form after selecting their rooms.

Trigger Condition

  • User accesses the client form/checkout page

Data Layer Structure

The client form event provides comprehensive booking details including:
ParameterTypeDescription
stepStringAlways "CLIENTFORM"
homeStringHost domain name
hotelIdNumberHotel identifier
chainIdNumberChain identifier
hotelNameStringHotel display name
deviceString"DESKTOP_TABLET" or "MOBILE"
languageStringBrowse language (ISO 639-1)

Products Object Structure

The products object contains detailed breakdowns of rooms and extras:

Rooms Array

Each room in the booking includes:
{
  "roomName": "Double Room",
  "rateName": "Standard Rate Room Only",
  "rateId": "23434-34654-34535-545",
  "boardName": "Room Only",
  "priceWithoutTaxes": 435.25,
  "priceWithTaxes": 465.23,
  "unitaryPriceWithoutTaxes": 87.05,  // Per night average
  "numRooms": 1,
  "occupation": {
    "numAdults": 2,
    "numChildren": 0,
    "numBabies": 0
  }
}

Extras Array

Each extra/add-on includes:
{
  "extraId": 83733,
  "extraName": "Welcome Package",
  "amount": 2,                         // Quantity
  "nightsToApply": 1,                  // Nights applicable
  "totalPriceWithTaxes": 13.20,
  "totalPriceWithoutTaxes": 12.10,
  "unitaryPriceWithTaxes": 6.60,       // Per unit price
  "unitaryPriceWithoutTaxes": 6.05
}

Complete Data Layer Example

{
  "step": "CLIENTFORM",
  "home": "www.hotelname.com",
  "hotelId": 10030559,
  "chainId": null,
  "hotelName": "Hotel Name",
  "device": "DESKTOP_TABLET",
  "language": "en",
  "checkin": "10/03/2024",
  "checkout": "15/03/2024",
  "nights": 5,
  "country": "US",
  "coupon": "",
  "currency": "EUR",
  "userCurrency": "EUR",
  "totalPriceWithTaxesWithExtras": 494.93,
  "totalPriceWithTaxesWithoutExtras": 465.23,
  "totalPriceWithoutTaxesWithExtras": 462.35,
  "totalPriceWithoutTaxesWithoutExtras": 435.25,
  "totalExtrasWithTaxes": 29.70,
  "totalExtrasWithoutTaxes": 27.10,
  "totalExtrasTaxes": 2.60,
  "totalTaxes": 32.58,
  "numRooms": 1,
  "numAdults": 2,
  "numChildren": 0,
  "numBabies": 0,
  "products": {
    "rooms": [{
      "roomName": "Single Room",
      "rateName": "Single Room 2 persons Room Only",
      "rateId": "23434-34654-34535-545",
      "boardName": "Room Only",
      "priceWithoutTaxes": 435.25,
      "priceWithTaxes": 465.23,
      "unitaryPriceWithoutTaxes": 87.05,
      "numRooms": 1,
      "occupation": {
        "numAdults": 2,
        "numChildren": 0,
        "numBabies": 0
      }
    }],
    "extras": [{
      "extraId": 83733,
      "extraName": "Wine Package",
      "amount": 2,
      "nightsToApply": 1,
      "totalPriceWithTaxes": 13.20,
      "totalPriceWithoutTaxes": 12.10,
      "unitaryPriceWithTaxes": 6.60,
      "unitaryPriceWithoutTaxes": 6.05
    }]
  }
}

GTM Implementation

Analytics Insights

Extras Performance

Track which add-ons are most popular and their contribution to revenue

Price Sensitivity

Analyze the impact of taxes and extras on conversion

Occupancy Patterns

Understand booking composition (adults, children, rooms)

Board Basis Preference

Monitor which meal plans guests prefer

Best Practices

Data Privacy: The client form event doesn’t include personal information (name, email) at this stage. This data is only available in the confirmation step.
Currency Handling: Always use the userCurrency field for conversion tracking to ensure accurate revenue reporting in multi-currency setups. The currency field represents the hotel’s base currency, while userCurrency is the actual transaction currency used by the guest.