Skip to content
HotelSEO Lab
← The Lab
Distribution, Metasearch & Analytics

Setting Up GA4 for a Hotel (Booking Funnel + Events)

A no-fluff, step-by-step guide to configuring GA4 for an independent hotel so you can actually see your booking funnel, events, and channel attribution.

HotelSEO LabJanuary 19, 2026 11 min

Most independent hotels I audit have GA4 installed. Almost none of them have GA4 set up. There is a difference, and that difference is roughly the gap between “we have a smoke detector” and “the smoke detector has a battery in it.”

The default Google Analytics tag will happily count pageviews until the heat death of the universe and tell you basically nothing useful about whether people are booking rooms. No funnel. No revenue. No idea whether your organic traffic converts better than your paid traffic. You are flying a plane by looking at the seatbelt sign.

This post fixes that. We are going to set up GA4 the way a hotel actually needs it: a real booking funnel, proper events with revenue attached, clean channel attribution, and three reports you will genuinely open on a Monday morning. The goal of all this measurement, by the way, is not analytics for its own sake. It is to find where your direct bookings leak out, so you can plug the holes, claw back margin, and lean a little less hard on the OTAs charging you 15 to 25 percent per reservation.

Let’s get the battery into the smoke detector.

Why hotel GA4 is genuinely different (and harder)

A normal ecommerce site sells things on the same domain the whole way through. Add to cart, checkout, thank-you page, all on coolsocks.com. GA4 loves this. It works out of the box.

Hotels almost never have this. Your marketing site is on yourhotel.com. Your internet booking engine (IBE) — the thing that takes the actual reservation — is very often on a different domain owned by your booking-engine vendor. Something like secure-booking.somevendor.com or reservations.cloud.

Here is what that breaks if you do nothing:

So before you touch a single event, you have to solve cross-domain tracking. This is the part everyone skips, and it is the part that matters most.

The number one reason a hotel’s GA4 undercounts bookings is unconfigured cross-domain tracking between the marketing site and the booking engine. If GA4 shows way fewer reservations than your PMS, check this first, before you blame anything else.

Step 1: Lay the plumbing (GA4 property + Google Tag Manager)

Do this once, correctly, and everything downstream gets easier.

  1. Create a GA4 property (if you somehow don’t have one). One property per hotel brand. If you run two properties, like a hotel and a separate spa or restaurant site, give each its own GA4 property and a shared “roll-up” later only if you really need it. Don’t over-engineer on day one.
  2. Install Google Tag Manager (GTM), not the raw gtag snippet. I know, another container, another thing to learn. But GTM is what makes the events below possible without bothering a developer every single time. Put the GTM container on every page of both your marketing site and, where your vendor allows it, your booking engine.
  3. Connect GA4 to GTM with a single GA4 Configuration tag firing on All Pages. This is your base tag. Everything else hangs off it.
  4. Turn off internal traffic. Add a filter so your own front desk, your home IP, and your agency don’t pollute the data. Nothing makes a 40-room hotel’s conversion rate look weird like the GM refreshing the homepage 60 times a day.

If your booking engine vendor flatly refuses to let you add GTM or a GA4 measurement ID to their pages — and some do — ask them specifically whether they support server-side conversion postback or a GA4 measurement ID passthrough. Many of the big booking engines now do. If yours genuinely supports nothing, that’s a real strike against it, and worth weighing the next time your contract is up.

Step 2: Configure cross-domain measurement

In the GA4 admin, under your data stream, open Configure tag settings → Configure your domains. Add every domain a guest can touch on the way to a booking:

This tells GA4 to pass the client ID across domains using a URL parameter (you’ll see _gl= appended to links — that’s the linker doing its job, leave it alone). Now the search-to-room-to-checkout journey stays a single session by a single user, and the booking gets credited to the channel that actually earned it.

Two gotchas worth a paragraph each:

The referral exclusion. Even with cross-domain set up, list your booking-engine domain under List unwanted referrals so GA4 doesn’t credit the booking engine itself as the traffic source. Otherwise half your bookings look like they came from your own reservation system, which is both useless and a little sad.

Test it for real. Open your live site, click Book Now, and watch GA4’s Realtime → DebugView. You should see one continuous user moving from yourhotel.com to the booking domain without a new session spawning. If a fresh user appears the moment you cross over, your cross-domain config isn’t live yet. Don’t move on until this works.

Step 3: Build the booking funnel as events

GA4 is event-based, which is great, because a hotel booking is a sequence of events. We’re going to map the guest’s path to a set of standard GA4 ecommerce events. Using the standard names matters — GA4 has built-in reports that only light up if you use them exactly.

Here’s the funnel, event by event:

Guest actionGA4 eventKey parameters to send
Searches dates/availabilitysearch (or view_search_results)check-in, check-out, guests, nights
Views a specific room typeview_itemroom name, room id, rate, currency
Selects a room / adds to cartadd_to_cartroom, rate, nights, value
Reaches the checkout/guest-details pagebegin_checkouttotal value, currency, items
Enters payment detailsadd_payment_infovalue, currency
Completes the reservationpurchasetransaction id, value, currency, items

That purchase event is the whole ballgame. It needs a unique transaction_id (use the confirmation number so you can dedupe against your PMS), a real value (the room revenue — decide once whether it’s pre-tax or post-tax and never change your mind), and a currency. Get those three right and GA4’s revenue reporting comes alive.

A few hotel-specific notes:

If you only do one thing from this entire post, make it this: get a real purchase event firing with a real revenue value on the booking confirmation page. A funnel with no revenue at the bottom is just a list of things people didn’t buy.

Step 4: Fix channel attribution so you can trust it

Now that bookings flow in with revenue attached, you need to trust where they came from. Two jobs here.

Tag your own campaigns with UTMs. Any link you control that points at your site — email newsletters, your Instagram bio, a metasearch listing, a paid social ad — should carry UTM parameters so GA4 files it correctly. Untagged links fall into “direct” or “referral,” which is where good marketing goes to die uncredited. If you’re running Google Hotel Ads or metasearch, tag those links carefully; it’s the only way to prove they pay off. We go deep on that in metasearch for independent hotels and on the specific (and very winnable) fight of bidding on your own brand in Google Hotel Ads.

Understand GA4’s default channel groups. GA4 sorts traffic into Organic Search, Paid Search, Direct, Referral, Organic Social, Email, and so on. For a hotel, watch three of them like a hawk:

The honest caveat: GA4 only ever sees bookings made on your own website. A reservation completed on an OTA never touches your domain, so it will never appear in GA4. That’s fine — treat GA4 as your direct-channel scoreboard. Your job isn’t to make the OTAs vanish from the picture (they won’t, and chasing that is a fool’s errand). Your job is to grow the direct column on this scoreboard quarter over quarter so your overall mix gets healthier. Our take on building a healthy OTA mix is the strategy that sits on top of this measurement.

Step 5: The three reports you’ll actually open

You don’t need 40 dashboards. You need three.

1. The Funnel Exploration

In GA4’s Explore section, build a Funnel exploration using the events from Step 3 in order: view_itemadd_to_cartbegin_checkoutadd_payment_infopurchase. Turn on “show elapsed time” and the open-funnel option.

This is the single most valuable report a hotel can have, because it shows you where guests fall out. Purely as an illustration of how to read it: imagine 1,000 people view a room, 300 add it to the cart, 120 begin checkout, and only 70 finish. That 300-to-120 cliff is screaming that something on your guest-details page is scaring people off — a surprise fee, a clunky form, a slow load. (Those numbers are made up to show the shape of the thing, not a benchmark to compare yourself against.) You fix the worst step, then re-check next month. That’s the entire game.

2. Traffic acquisition, segmented by Key Event

Go to Reports → Acquisition → Traffic acquisition and add purchase (and its revenue) as the metric. Now you can see, channel by channel, not just who visits but who books and how much they’re worth. Organic visitors might convert at half the rate of email but bring ten times the volume — you can’t make a single smart budget decision without seeing this side by side.

3. A simple revenue-by-room landing page view

Use the Landing page report (or a Free-form Exploration) crossed with purchase revenue. This tells you which entry pages — which room pages, which offers, which blog posts — actually lead to money. Spoiler: it’s usually not the pages you’d guess, and it will completely reorder your content priorities.

A sane setup checklist

Before you call it done, confirm all of these:

Work that list top to bottom and you’ll have GA4 doing the one thing it’s for: telling you, in plain numbers, where your direct bookings are leaking and which channels deserve more of your money. That’s how you stop guessing, win back more direct reservations, and keep a little more of your own margin instead of handing it to a commission line.

If wiring all this up sounds like a weekend you’d rather spend running your actual hotel, that’s literally what we do. We set up clean, hotel-specific GA4 and the SEO and AEO work that fills the top of that funnel. See what an engagement looks like, or just book a call and we’ll start with your funnel.

FAQ

Quick answers

Do I need GA4 if my booking engine already gives me reports?

Yes, because your booking engine only sees the people who reached the booking engine. GA4 sees the whole journey from search and ads to the room page to the abandoned cart, so you can find where bookers leak out before they ever hit the IBE.

Why does GA4 show fewer bookings than my PMS?

Almost always cross-domain tracking. If your booking engine sits on a different domain than your main site, GA4 counts the handoff as a new session and a new user unless you configure cross-domain measurement, which inflates direct or referral traffic and breaks attribution.

Can GA4 tell me how much revenue came from organic search versus OTAs?

GA4 measures revenue from bookings made on your own site, broken down by channel like organic, paid, and direct. It does not see bookings that happen on an OTA, since those never touch your site, so treat GA4 as your direct-channel scoreboard.

What is the single most important GA4 event for a hotel?

The purchase event with a real transaction value. Everything else, from begin_checkout to add_to_cart, only matters because it helps you explain why purchase did or did not happen.

Free intro call

Let's go find out why the OTAs are outranking you for your own name.

20 free minutes. We'll look at your hotel live, show you where you're invisible — on Google and in the AI answers — and tell you straight whether we can help.

No lock-in · No 12-month handcuffs · You talk to the strategist