← All Posts
23 Oct 2026·5 min read

GA4 Tracking for Hotel Booking Engines: Why Your Bookings Don't Show Up

Many hotel websites track every click in GA4 except the confirmed booking. Here is why third-party booking engines cause it, and a step-by-step fix: cross-domain tracking, payment gateways and the purchase event.

GA4 tracking for hotel booking engines guide cover, explaining why bookings do not show up in Google Analytics

Open the GA4 property of a typical hotel or resort website and you'll find plenty of data: page views, scrolls, clicks on "Check availability", maybe even "room selection viewed". Then look for the most important event of all, a confirmed booking, and it often isn't there.

A resort I work with had exactly this. GA4 tracked more than a dozen kinds of events on its site, including availability checks and room views, but not a single event for a completed booking. Every marketing report was flying blind at the last step.

If your Google Ads account says it's getting "conversions" but you can't connect them to real bookings, this is probably why.

Why hotel bookings go missing in GA4

Most hotels don't take bookings on their own website. The "Book now" button sends the guest to a booking engine on a different domain, which then sends them to a payment gateway on yet another domain, and back.

Guest journey across three domains: the hotel website, the booking engine, the payment gateway, and the confirmation page where tracking often fails
Every hand-off between domains is a place where tracking can break.

Three things typically go wrong:

  1. 01No cross-domain tracking. When the guest moves from your site to the booking engine, GA4 starts a new session and forgets they came from your Google ad.
  2. 02Payment gateway referrals. When the guest returns from the payment page, GA4 credits the booking to the gateway's domain as a "referral", wiping out the original source.
  3. 03No purchase event. The confirmation page either has no GA4 tag at all, or has one that only records a page view, with no booking value.

Step 1: Find out what your booking engine supports

Before changing anything, ask your booking engine provider:

  • Can we add our own GA4 measurement ID?
  • Do you send a GA4 purchase (or booking) event with value and transaction ID?
  • Do you support cross-domain tracking with our main website?
  • Can we add Google Tag Manager to the booking and confirmation pages?

Many booking engines support some or all of this. Some only allow a confirmation page script. A few support nothing, in which case your CRM or PMS becomes the source of truth.

While you're asking, check whether it's a Google Hotel connectivity partner. That's what puts your direct rate in Google's price list. More in Google free booking links for hotels in India.

Step 2: Use the same GA4 property everywhere

Your website and the booking engine should send data to the same GA4 property. Two separate properties mean two separate stories, neither of them complete.

Step 3: Set up cross-domain measurement

In GA4, go to Admin, then Data streams, choose your web stream, open the Google tag settings, and configure your domains. Add both your website domain and the booking engine domain. This lets GA4 carry the same session across both, so the original source (your Google ad, Instagram, organic search) stays attached to the booking.

Step 4: Stop payment gateways stealing the credit

In the same tag settings, list unwanted referrals: add your payment gateway domains (Razorpay, PayU, CCAvenue, PayPal or whichever you use). GA4 will then stop treating the return from the payment page as a new referral visit.

Step 5: Send a real purchase event

The confirmation step needs a purchase event (or a clearly named booking event) that includes:

  • value: the booking amount
  • currency: INR
  • transaction_id: the booking ID, so GA4 doesn't count a refreshed page twice

Then mark it as a key event in GA4.

Step 6: Use it in Google Ads

Link GA4 to Google Ads and import the purchase event as your primary conversion, or set up a Google Ads conversion tag on the confirmation page directly. Now Google Ads can optimise for bookings, not for clicks on "Check availability".

GA4 booking tracking checklist: same property on both domains, cross-domain measurement, payment gateways as unwanted referrals, purchase event with value and transaction ID, key event, imported into Google Ads, tested with a real booking
Work through it in order, and test with a real booking.

Step 7: Test with a real booking

Use GA4's DebugView or Tag Assistant, make a real (refundable) booking from a tagged link, and check:

  • The session continues from your site to the booking engine without a new source appearing.
  • The purchase event fires once, with the right value.
  • The source shows your test link, not the payment gateway.

What GA4 still won't see

Even with perfect setup, GA4 misses a lot of hospitality revenue:

  • Phone and WhatsApp bookings, which are a large share for many Kerala properties.
  • Bookings from leads that your team closes days later.
  • Guests who block tracking in their browser.

That's why I measure resort ads against the CRM, not just GA4. For the Munnar resort, every lead goes into the CRM and gets an outcome, so we can count booking revenue by channel, which is how we know October 2026 returned 5.9x on ad spend. GA4 then fills in the website bookings that never touch the CRM. See how the full system works.

If you run Meta Ads too, you can also send CRM bookings straight back to Meta. Here's how to use the Conversions API for CRM bookings.

Frequently asked questions

Why doesn't GA4 show my hotel bookings?

Usually because the booking happens on a separate booking engine domain without cross-domain tracking, the payment gateway overwrites the traffic source, or the confirmation page doesn't send a purchase event.

How do I stop Razorpay or PayU showing as a referral in GA4?

Add the payment gateway's domain to the list of unwanted referrals in your GA4 Google tag settings.

Should Google Ads optimise for "Check availability" clicks?

Only as a temporary measure if you have no booking data. It's much better to optimise for confirmed bookings with a value, so Google finds people who book, not people who browse.

Want your booking tracking fixed and your ads measured against real revenue? That's the kind of build-and-measure work I do, with help from vibe coding. Get a quote.

Want this applied to your brand?

Ads, a website that converts, or both: get a custom quote.

Request a Quote →
GA4 for Hotel Booking Engines: Fix Missing Bookings