Analytics & CRO

How to track hotel bookings made through an external booking system

How to track hotel bookings in GA4: cross-domain setup, confirmed purchase, transaction_id, cancellations and tests of the external booking engine.

By DigitaL+ team4 min read
Analytics columns and a funnel for measuring and improving conversions
Key points

Key takeaways

  • A click to the booking system is not a confirmed booking.
  • Cross-domain measurement requires a compatible setup on both domains.
  • Reconcile bookings by a unique identifier and record refunds separately.
In this article

The guest chooses a room on the hotel website, moves to an external booking engine and completes the booking there. If measurement ends at the "Book" button, the hotel sees interest but has no reliable link between the campaign and confirmed bookings.

Short answer

To track hotel bookings in GA4 through an external system, you need to connect permitted measurement between the domains, send an event on actual confirmation and use a unique transaction_id. If the provider doesn't allow the necessary integration, measure the transition separately and reconcile confirmed bookings through its report or API. Don't present clicks as purchases.

First clarify what a confirmed booking means

Creating a request, successfully paying a deposit and a confirmed booking can happen at different times. Agree with the hotel and the provider which state triggers the primary result. For a booking paid on site, the confirmation may be valid without an online payment; the value must have a clear business meaning.

Also record what it includes: the price of the stay, a deposit or another component. Don't add a deposit and the full value as two separate revenues from one stay. Analytics booking revenue is not the same as accounting-recognized revenue or nights actually stayed.

Event map for the hotel journey

ActionSample eventWhat it proves
Click to the booking enginebooking_engine_click — a custom eventMoving to the booking
Choosing a room and rateselect_item, if the data is availableA selection, not a purchase
Start of checkoutbegin_checkoutA started procedure
Confirmed bookingpurchase with transaction_idA result by the agreed rule
Amount refundedrefund with transaction_idAn actual refund
Cancellation without a refundbooking_cancelled — a custom eventA change in operational status

The map is a design template, not a promise that every system provides all the events. Don't send the guest's name, email, phone or notes to GA4.

What cross-domain measurement does

With a compatible setup, the _gl parameter helps GA4 keep the identifiers when moving between domains. Check whether the hotel website and the booking engine use the correct shared GA4 configuration and whether the provider supports this mechanism. Simply adding the external domain in the hotel's settings doesn't install measurement on the third-party system.

Test the actual link or form the guest goes through. Watch the redirects: the parameter may be removed before the final page. Excluding unwanted referrals doesn't replace connecting the user and doesn't create a missing purchase event.

Questions for the provider before implementation

  • Can GA4 or GTM be added, and who manages the configuration?
  • When exactly is the final confirmation available?
  • Are the booking's identifier, value and currency provided?
  • Are the parameters kept during redirects and payment?
  • Is there an API or webhook for confirmation, change and cancellation?
  • How are the cookie choice and permitted data transfer managed?

For a server-side integration, use a controlled process and verified identifiers. An API notification without a link to the original visit may give a count of bookings, but not enough data to reliably attribute the ad source.

A test protocol before you rely on the report

  1. Open the website with a known test source and go through the real booking path.
  2. Check _gl, the setup of both domains and the available events in the diagnostic tools.
  3. Make a test booking with the hotel's permission; record its identifier and the expected value.
  4. Check whether purchase arrives after the confirmation and whether it has the correct transaction_id, value and currency.
  5. Reload the confirmation page and repeat the server notification in a test environment. No new logical purchase should be created.
  6. Check a declined payment, a cancellation and an applicable refund.

In web streams, GA4 uses the transaction ID to deduplicate purchases. The identifier must be unique to the booking, non-empty and contain no personal information. This doesn't remove the need to prevent unnecessary sending of events in the integration itself.

How to reconcile GA4 with the booking system

Compare a list of identifiers and statuses for one period, time zone and currency. Separate confirmed, cancelled and actually completed stays. Note the bookings with no measurement because of the user's choice or a technical limitation; don't expect all systems to give identical numbers.

If you see a difference, first check the definitions and the timing of the event. The general diagnostics are in why GA4 and the business system show different results. For hotels and tourism businesses DigitaL+ combines measurement setup with integrations with external systems, first checking what the specific provider actually supports.

Frequently asked questions

Can everything be set up only on the hotel website?

Only if the provider offers a suitable mechanism for confirmation and measurement. A click to a third-party domain doesn't prove the booking was completed.

Should we use purchase for every availability request?

No. An availability request is a separate action. The primary result must match the explicitly defined state "confirmed booking".

Is a cancellation always a refund?

No. A cancellation and a refund are different events. For a cancellation without a refund, keep the operational status separately instead of sending a refund that doesn't exist.

Sources and verification

Official sources

  1. Google Analytics: measuring across domainsThe _gl parameter, configuration conditions and redirects.
  2. Google Analytics: transaction ID and duplicate purchasesUnique purchase identifiers and handling refunds.
Real projects

Related examples from the portfolio

Luxury Hotel Royal Prague - a DigitaL+ project

Luxury Hotel Royal Prague

Analysis of existing traffic and inquiries, and automation of the booking system

For Luxury Hotel Royal Prague we carried out a detailed analysis of existing traffic and inquiries and automated the booking system in order to optimize the customer…

View the project →
United Bulgarian Bank - a DigitaL+ project

United Bulgarian Bank

Awareness campaign on Google and Facebook

We took part in one of the awareness campaigns for preferential terms and UBB's "OK credit" option. A landing page was created for this purpose, to which…

View the project →
STDR Tech - a DigitaL+ project

STDR Tech

Website Migration

We migrated the website from OpenCart to Shopify and carried out basic technical SEO, writing suitable metadata for their products.

View the project →
D+
Author and expert editor

DigitaL+ team

Editorial team

The article has been edited against the agency's practice and the official sources cited.

View expert profile →
Continue on this topic

Related guides

From knowledge to execution

If the topic is part of a real project, we can turn it into a prioritized plan, implementation and measurement.

Get in touch with DigitaL+
We use cookies to personalize content and ads, to provide social media features and to analyze our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. View more
Cookies settings
Accept
Decline
Privacy and Cookie Policy
Privacy & Cookies policy
Cookie nameActive

Privacy and cookies

DIGITAL PLUS SOLUTIONS LTD. processes inquiry information and website technical data. The site includes Google Analytics, OpenAI advertising measurement and Cloudflare technology. This notice does not replace consent where required.

Read our full English Privacy Policy for purposes, recipients, retention criteria, your rights and the privacy contact.

Save settings
Cookies settings
Back to top
Call Now Button