Measurement and budget
How to Track Which Ad Brought a Hotel Booking (GA4 and Your Booking Engine)
Tag every ad link, measure your website and booking engine as one visit, and record each booking with its value. In Google Analytics 4 (GA4) that means UTM tags or auto-tagging on ads, cross-domain measurement with one Google tag on both domains, and a purchase event marked as a key event. Without them, bookings often show up as referrals.
Many small hotels cannot say which ad brought which booking, so every marketing decision becomes a guess. This guide explains the usual cause and the fix, step by step, in Google Analytics 4 (GA4). How GA4 and Google Ads work comes from Google's own help pages.
Why does GA4 lose track of hotel bookings?
Many hotel websites send guests to a booking engine on a different domain to choose dates and pay. Google says that without cross-domain measurement, each domain sets its own cookies with separate IDs, so Analytics counts one person moving between the domains as more than one user and session (Google Analytics Help). The booking is then credited to your own website, as a referral, instead of to the ad the guest first clicked.
An illustrative example: your Instagram ads bring 200 visits in a month, and the booking engine records 6 bookings from them. In GA4, those bookings show your own website as the source, so the ads seem to have brought nothing. Switching them off would be the wrong decision.
How do you track which ad brought a booking?
1. Use the same Google tag on both sites
Google says every domain in cross-domain measurement must use the same Google tag ID from the same web data stream. Ask your booking engine provider whether you can add your GA4 tag to its pages, or whether it has its own GA4 connection.
2. Turn on cross-domain measurement
In GA4, go to Admin, then Data streams, and choose your web stream. Open Configure tag settings, then Configure your domains. Add your website's domain and your booking engine's domain, and save. To check it works, click from your website into the booking engine: the address should now contain a parameter called _gl.
3. List unwanted referrals
If guests leave for a payment page on another domain and come back, GA4 can count that payment site as the source of the booking. Google's unwanted referrals guide explains how to list such domains under Configure tag settings, so they are not credited. Google uses a payment processor as its own example.
4. Tag every ad link
Google Ads can add a click ID called GCLID to every ad link for you, and Google says auto-tagging is on by default for new accounts. For other ads, such as Meta, Instagram and email, add UTM tags to the link. Google says to always use these three (Google's guide to campaign URLs):
- utm_source, where the visit came from, such as instagram
- utm_medium, the type of ad, such as paid_social or email
- utm_campaign, the campaign name, such as autumn_weekends
Google notes that the values are case-sensitive, so pick one spelling and keep it.
5. Record each booking as a purchase
The booking confirmation page should send a GA4 purchase event. Google's purchase event reference lists a transaction ID, which stops one booking being counted twice, along with the value and the currency. Then mark purchase as a key event in Admin, so bookings appear in your reports.
Google says the purchase value should not include tax. Decide whether your booking value includes fees, write it down, and keep it the same every month, or your cost per booking will drift.
What should the monthly report show?
Once tracking works, one table answers most questions: for each channel, the bookings, their value, what the channel cost, and that cost as a share of the booking value. The last column is the one to compare with booking-site commission.
| Channel | Bookings | Booking value | Cost | Cost as share of value |
|---|---|---|---|---|
| Google Hotel Ads | 14 | $9,240 | $980 | 10.6% |
| Instagram ads | 9 | $5,130 | $720 | 14.0% |
| Email to past guests | 7 | $4,410 | $60 | 1.4% |
| Booking site (20% commission) | 30 | $19,800 | $3,960 | 20.0% |
Illustrative numbers, excluding taxes. The booking-site row counts commission only.
For what each booking site really costs once add-ons are counted, see the real cost of an OTA booking. To decide how much to put into each channel, read how much a hotel should spend on marketing.
What if your booking engine will not take your GA4 tag?
Ask your provider three questions. Can it add your GA4 tag to the booking pages? Does it send a purchase event with the booking value? Does it keep UTM tags and click IDs when a guest moves from your website into the engine? If the answer to all three is no, the engine's own reports may be the only record of where bookings came from, so ask how to export them each month.
Why does tracking come before more ad spend?
Without it, you cannot compare a channel's cost per booking with the 20% to 30% that booking sites usually take once add-ons are counted. MarginStay connects to your booking system before any ad goes live, links every booking to the ad that brought it, and sends a monthly booking report. See how it works, or work out what cheaper bookings could save you. For one channel worth tracking closely, read Google Hotel Ads for small hotels. Running ads on Facebook or Instagram? Read Facebook and Instagram ads for hotels.
MarginStay sets up booking tracking for the hotels it works with, so we have a stake in this topic. How GA4 and Google Ads work comes from Google's own help pages, read on October 1, 2026. The examples are illustrative.
Booking tracking: quick answers
Why do my hotel bookings show as referral traffic in GA4?
Usually because your booking engine is on a different domain. Google says that without cross-domain measurement each domain sets its own cookies, so one guest looks like separate users and sessions, and the booking is credited to your own website as a referral. Set up cross-domain measurement with the same Google tag on both domains.
How do I set up cross-domain tracking for a hotel booking engine?
In GA4, open Admin, then Data streams, and choose your web stream. Open Configure tag settings, then Configure your domains, add your website and booking engine domains, and save. Both domains must use the same Google tag ID. Test it by clicking into the booking engine and checking the address contains _gl.
Which UTM tags should hotel ads use?
Google says to always use utm_source, utm_medium and utm_campaign, for example instagram, paid_social and autumn_weekends. Values are case-sensitive, so keep one spelling. Google Ads can tag its own links automatically with a click ID called GCLID, and auto-tagging is on by default for new accounts.
What should a hotel count as a conversion in GA4?
The completed booking. Send a purchase event from the booking confirmation with a transaction ID, the booking value and the currency, then mark purchase as a key event in Admin. Google says the transaction ID helps you avoid counting one booking twice, and that the value should not include tax.
Want every booking linked to the ad that brought it?
Talk to us about tracking and ads that send guests to your own booking page, with a monthly report of what each booking cost.