The No Vacancy Co.

Cloudbeds guides · Tracking

Cloudbeds GA4 setup: 7 steps to track every direct booking.

Most Cloudbeds properties have Google Analytics “installed” and still can’t say which ad or search produced a booking. Here is the setup that fixes it, in the order that works, with the traps we see on real properties.

By Giuseppe Gaspari, founder. Updated September 2026. Steps follow Cloudbeds’ own help documentation, current as of this date.

Fifteen-plus years running paid search, SEO, and conversion tracking for tourism and lodging operators. Full bio

The short version

  1. Pick one connection: GTM (recommended) or GA4 direct.
  2. Create your GA4 property and GTM container.
  3. Connect the GTM container to the Cloudbeds booking engine.
  4. Put your GA4 Google tag in the container.
  5. Set up cross-domain tracking and exclude Cloudbeds as a referral.
  6. Mark purchase as a key event and import it into Google Ads.
  7. Test with a real booking before you trust a single number.

Time needed: about an hour, plus one test booking.

The problem

Why Cloudbeds tracking breaks.

A Cloudbeds booking happens on two websites. The guest finds you on your own site, clicks Book Now, and finishes on the Cloudbeds booking engine at a different domain. Unless both sides share one tracking setup and hand the visitor across, Google Analytics sees two strangers, and the booking loses its source.

Cloudbeds is also clear about where its help stops. Its tracking responsibilities guide says it provides the fields and passes booking data to the data layer, but it does not configure or troubleshoot your GA4, Tag Manager, Google Ads, or Meta accounts. That part is on the property.

Step by step

The 7 steps.

  1. 1

    Pick one connection: GTM (recommended) or GA4 direct

    Cloudbeds gives you two options under Settings → Booking Engine → Analytics: a GA4 connection or a GTM connection. You must choose one. Cloudbeds states that running both side by side is not supported.

    Choose GTM. It lets you run GA4, Google Ads conversion tracking, and the Meta Pixel from one container, and Cloudbeds itself recommends it. GA4 direct is fine only if GA4 is the one tool you will ever use.

  2. 2

    Create your GA4 property and GTM container

    In Google Analytics, create a property for the hotel and a web data stream for your website. Copy the Measurement ID that starts with G-.

    In Google Tag Manager, create an account and a Web container named after the property. Copy the container ID that starts with GTM-. You will use this same container on your website and on the booking engine, so both sides of the booking journey report to one place.

  3. 3

    Connect the GTM container to the Cloudbeds booking engine

    In Cloudbeds:

    1. Click the account icon and open Settings.
    2. Go to Booking Engine, then the Analytics tab.
    3. Select GTM Connection and paste your GTM- ID.
    4. Save.

    While you are in Settings, open Booking Engine → Summary and note your booking engine link. It usually starts with hotels.cloudbeds.com or us2.cloudbeds.com. It confirms which Cloudbeds domain your guests land on.

  4. 4

    Put your GA4 Google tag in the container

    This is the step most setups miss. Cloudbeds does not know your GA4 property when you use the GTM connection. It sends its booking events (including purchase with revenue and the reservation ID) as Google tag commands, and they only reach your GA4 if your container loads a Google tag with your Measurement ID.

    1. Google tag: tag type Google Tag, Tag ID = your G- ID, trigger All Pages.
    2. Conversion Linker: add one, triggered on All Pages. It keeps ad click IDs intact.
    3. Publish the container, then install the same container on every page of your website (WordPress plugin, Wix, Squarespace, or the manual snippet).

    You do not need to build separate GA4 Event tags for purchase, add to cart, or checkout. On a live Cloudbeds property we checked, GA4 received every booking-engine event (engine loads, add to cart, checkout, and purchase with full revenue) through the Google tag alone. Adding your own purchase tag on top risks counting every booking twice.

  5. 5

    Set up cross-domain tracking and exclude Cloudbeds as a referral

    Your website and the booking engine live on different domains. Without cross-domain tracking, GA4 treats the jump to Cloudbeds as a brand-new visitor, and every booking gets credited to cloudbeds.com / referral instead of the ad or search that actually brought the guest in.

    1. GA4 → Admin → Data streams → your web stream → Configure tag settings.
    2. Configure your domains: match type “Contains”, add your root domain and cloudbeds.com.
    3. List unwanted referrals: add cloudbeds.com as a backstop.

    “Contains” matching covers subdomains, so cloudbeds.com catches both hotels.cloudbeds.com and us2.cloudbeds.com. This setting has no API; it is set in the GA4 interface only.

  6. 6

    Mark purchase as a key event and import it into Google Ads

    In GA4 Admin → Events, mark purchase as a key event. Then link GA4 to Google Ads (GA4 Admin → Product links) and, in Google Ads, import the GA4 purchase key event as a conversion with its revenue value.

    For Cloudbeds on the GTM path, the GA4 import is the reliable route: the booking data already reaches GA4 with value and reservation ID, and cross-domain tracking from step 5 carries the ad click across to the booking engine. Cloudbeds’ separate built-in Google Ads fields live under the GA4-direct connection, which you are not using. The Google Ads side, including the Secondary-to-Primary switch and the 90-day window, has its own guide: Cloudbeds Google Ads conversion tracking.

    Make it the only primary booking conversion. A second booking conversion (a “Book Now click” goal, or a Google Ads purchase tag added on top) counts bookings twice and teaches Smart Bidding to chase phantom revenue.

  7. 7

    Test with a real booking before you trust a single number

    1. Open GTM Preview on your website and click through to the booking engine.
    2. Check the booking engine URL: it should carry a _gl= parameter. No _gl means cross-domain is not working.
    3. Make a real booking on a refundable rate, then cancel it.
    4. In GA4 DebugView or Realtime, confirm purchase arrived with a value, a transaction_id, and your original source, not “cloudbeds.com”.

    One trap: Google serves its tag scripts with a 15-minute browser cache (the cache-control header on gtm.js and gtag.js reads max-age=900). If you change a setting and re-test right away in the same browser, you can see the old behaviour. Wait 15 minutes, or test in a private window.

Skip steps 2 to 4

Get the free Cloudbeds GTM template

One importable file with the Google tag and cross-domain Conversion Linker already built. Change two values and publish.

Reference

The events Cloudbeds sends to GA4.

These are the events the Cloudbeds booking engine (Booking Engine Plus and the Immersive Experience) pushes, per its GA4 events documentation. They arrive in GA4 through your Google tag, so you can check them in DebugView and use them to build funnels.

EventFires whenKey parameters
cb_booking_engine_loadBooking engine finishes loadingproperty_id, be_source
add_to_cartGuest adds a room or add-oncurrency, value, items
remove_from_cartGuest removes a room or add-oncurrency, value, items
begin_checkoutGuest page loadsstart_date, end_date, coupon, value
purchaseConfirmation page after bookingtransaction_id, value, tax, nights, coupon
conversionConfirmation page (GA4-direct Google Ads fields only)send_to, transaction_id, value

Every event also carries property_id and be_source. The conversion event only fills in its Google Ads fields if a Conversion ID and Label were entered under the GA4-direct connection; on the GTM path in this guide you will generally not see it fire, so use step 6 and the Google Ads tracking guide instead. Sources: Cloudbeds Help Center, Connect Google Analytics with Cloudbeds Booking Engine, Google Analytics Events in Cloudbeds Booking Engine, and Google Ads integration with Cloudbeds Booking Engine.

From real properties

6 mistakes that wreck your Cloudbeds booking data.

  1. 1

    Running the GA4 and GTM connections at the same time

    Cloudbeds supports one. Pick GTM and put GA4 inside the container.

  2. 2

    Switching to GTM without putting your GA4 Google tag in the container

    The most common silent failure: the booking engine loads fine, but no booking data reaches GA4, because the events have no Google tag to go to.

  3. 3

    Skipping cross-domain tracking

    Every booking shows up as cloudbeds.com referral traffic, and your ads look like they never convert.

  4. 4

    Counting bookings twice in Google Ads

    GA4 import plus a GTM conversion tag, or a "Book Now click" goal alongside real purchases. Keep one primary conversion: the actual booking.

  5. 5

    Sending every Book button to the same generic link

    A guest who clicked a specific cabin lands on an unfiltered search and has to start over. Link each room page as directly as your booking engine allows, and ask Cloudbeds support which link formats your setup supports.

  6. 6

    Trusting GA4 to tell new guests from returning ones

    GA4's "new user" means a new browser, not a guest who has never stayed with you. That answer lives in Cloudbeds, not Analytics.

Beyond GA4

The number GA4 can’t give you.

With the seven steps done, GA4 will tell you which channel produced each booking. It still can’t tell you whether that guest had ever stayed with you before. A past guest who books on a new phone looks exactly like a stranger.

That matters, because the question worth paying for is “did marketing bring me someone new?” The reliable answer comes from your booking engine: match each reservation’s guest email against your Cloudbeds guest history. It is exactly how The No Vacancy Co. bills. We fund the ads and get paid only on new-guest direct bookings, counted on your Cloudbeds export, not on our dashboard.

The Direct-Booking Playbook cover

Free 16-page PDF

The Direct-Booking Playbook

OTA math, 11 dead-season moves, the agency red flags, a 90-day plan, and two worksheets in one download.

Common questions

Cloudbeds and GA4, answered.

Should I connect Cloudbeds to GA4 directly or through Google Tag Manager?
Through Google Tag Manager. Cloudbeds recommends it, and it lets you run GA4, Google Ads conversion tracking, and the Meta Pixel from one container. You can only use one connection method at a time; running both is not supported.
Why do my Cloudbeds bookings show as cloudbeds.com referral traffic in GA4?
Cross-domain tracking is not set up. Add your website domain and cloudbeds.com under Configure your domains in your GA4 web stream's tag settings, and add cloudbeds.com to the unwanted referrals list. Then test that the booking engine URL carries a _gl parameter.
What GA4 events does the Cloudbeds booking engine send?
Cloudbeds documents six: cb_booking_engine_load, add_to_cart, remove_from_cart, begin_checkout, purchase, and conversion. The purchase event includes the reservation ID as transaction_id, the total value, tax, nights, and any promo code.
Does Cloudbeds support set up my Google Analytics?
No. Cloudbeds provides the tracking fields and passes booking data to the data layer, but its published support scope excludes configuring or troubleshooting your GA4, GTM, Google Ads, or Meta accounts. That setup is the property's responsibility or its marketing partner's.
How do I get Cloudbeds bookings into Google Ads as conversions?
Link GA4 to Google Ads and import the GA4 purchase key event, with its value, as your primary conversion. Cloudbeds already sends purchase to GA4 through your Google tag, and cross-domain tracking carries the ad click across. Keep it as the only booking conversion so nothing is counted twice.
Can GA4 tell me which bookings came from brand-new guests?
Not reliably. GA4 counts a new browser as a new user, so a returning guest on a new phone looks new. The accurate answer comes from matching reservation guest emails against your Cloudbeds guest history.

Rather not do this yourself?

We set up Cloudbeds tracking properly as part of every engagement, then fund the ads and get paid only on new guests who book direct.

Book a private call