The No Vacancy Co.

Cloudbeds guides · Tracking

Cloudbeds Google Ads conversion tracking: the setup that works.

Google Ads says zero bookings. Cloudbeds and GA4 say the bookings happened. Here is which of the three Cloudbeds-to-Google-Ads paths fits your setup, the two settings that silently hide or double count bookings, and the one test booking that proves it.

By Giuseppe Gaspari, founder. Updated October 2026. Cloudbeds and Google documentation is linked wherever we quote it, current as of this date.

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

The short version

On the GTM connection (the one Cloudbeds recommends), Cloudbeds Google Ads conversion tracking is an import, not a tag: link GA4 to Google Ads, import the purchase key event, make sure it is Primary rather than Secondary, and keep the GA4 lookback at 90 days. Google’s documented way to carry the ad click to the booking engine is the Conversion Linker’s cross-domain link, not a server-side plugin. The built-in Conversion ID and Label fields are a different path, for properties on the GA4-direct connection.

  1. Confirm the GA4 side is already working.
  2. Link GA4 to Google Ads and switch on auto-tagging.
  3. Mark purchase as a key event and set the GA4 lookback to 90 days.
  4. Import purchase into Google Ads as a conversion with its value.
  5. Make sure the imported conversion is Primary, not Secondary.
  6. Check the conversion window and wait for the data.

Time needed: about 45 minutes once the GA4 setup is done, plus one test booking.

The problem

Why Google Ads can’t see your Cloudbeds bookings.

Cloudbeds is clear about where its job ends. Its tracking responsibilities guide (updated September 2026) says it provides the fields and passes booking data to your tags, and that it does not configure or troubleshoot “your GA4, GTM, Google Ads, or Meta accounts.” Its Immersive Experience 2.0 guide (updated October 2026) puts it in one line: “Google Ads: Conversion tracking requires manual setup on the property’s website.”

When Google Ads shows nothing, check these three things first:

  1. The click never made it to the confirmation page. On the hosted booking engine the guest leaves your domain for hotels.cloudbeds.com. Without a Conversion Linker set to link across domains, the ad click ID stays behind and the booking arrives as a stranger.
  2. Nothing on the confirmation page reports to Google Ads. GA4 received the purchase, but no import or conversion action was ever created, or it was created on a trigger that cannot see Cloudbeds’ events.
  3. The conversion exists but is Secondary. It is recorded, it is just invisible in the Conversions column and ignored by Smart Bidding.

You may read that the click ID is lost at the Cloudbeds handoff and that the fix has to be server-side. On a live Cloudbeds property we manage, Google Ads’ only booking conversion is the imported GA4 purchase (Primary, category Purchase, 90-day window), and over the 30 days to October 11, 2026 it attributed about 90 bookings to three named campaigns. GA4 on the same property credits 55 of 142 purchases to google / cpc with the campaign name, every one recorded on hotels.cloudbeds.com. That property runs both the GA4 connection and GTM, so it proves the import path rather than a GTM-only setup on its own, but the decoration and import mechanics are the same. Google built the Conversion Linker documentation ’s cross-domain linking for exactly this jump between two domains, so set that up and check it with the test booking below before you pay for anything else. Server-side has real uses, covered below, but it is not the first fix.

First decision

Which of the three paths is yours.

Cloudbeds lets the booking engine connect to Google in one of two ways, GA4 direct or Google Tag Manager, and its support guide is firm that you use one, not both: “If GTM is enabled, all tags (including GA4, Ads, and Facebook) must be placed inside your GTM container.” Add the Immersive Experience 2.0 embed and you have three situations.

Your Cloudbeds setupUse this pathWhy
Hosted booking engine (hotels.cloudbeds.com or us2.cloudbeds.com) with the GTM connectionPath A: import the GA4 purchase key event into Google AdsCloudbeds sends purchase as a Google tag command. A Google Ads conversion tag sitting on a GTM Custom Event trigger never sees it, so we recommend importing the GA4 purchase instead.
Hosted booking engine with the GA4-direct connectionPath B: Cloudbeds' built-in Conversion ID and Conversion Label fieldsCloudbeds fires its own conversion event on the confirmation page with send_to, transaction_id, value, and currency.
Immersive Experience 2.0 embedded on your own domainPath A on your own site's containerThe booking flow runs on your domain. Cloudbeds says the Google tag or GTM container must be initialized on the hotel's website and that Google Ads needs manual setup there. No cross-domain hop for the booking itself.

Not sure which connection you have? Cloudbeds Settings → Booking Engine → Analytics shows either a GA4 Measurement ID or a GTM container ID. Whether your booking engine is hosted or embedded is under Booking Engine → Embeds.

Path A · GTM connection

Import the Cloudbeds purchase into Google Ads.

This is the path for most properties, because it is the connection Cloudbeds recommends and the one that lets GA4, Google Ads, and the Meta Pixel live in one container. Cloudbeds’ own Google Ads article says that on the GTM connection, Google Ads “must be configured directly in GTM.” We use the GA4 import instead because Cloudbeds sends its booking events as Google tag commands, which an Ads tag on a GTM Custom Event trigger does not pick up. Six steps.

  1. 1

    Confirm the GA4 side is already working

    Everything on this page sits on top of the Cloudbeds GA4 setup. Before you touch Google Ads, confirm three things: the same GTM container is installed on your website and connected in Cloudbeds, so it runs on both sides; it holds a Google tag with your G- Measurement ID and a Conversion Linker with “Enable linking across domains” on and your Cloudbeds domain listed; and GA4 DebugView shows purchase arriving with a value and a transaction_id.

    The Conversion Linker is the piece that answers the “lost gclid” worry. Per Google’s Tag Manager documentation, the Linker stores the ad click information in first-party storage and, with cross-domain linking on, appends a linker parameter to links that point at the domains you list. The Linker on the destination reads it back. We checked this on a live Cloudbeds property we manage (October 2026): with a test click ID on the landing page, the Book Now link picked up a _gl parameter on click, and decoding it gave back the same click ID. The test booking at the end of this page is how you confirm it on yours. Our free Cloudbeds GTM template ships with both tags already built.

  2. 2

    Link GA4 to Google Ads and switch on auto-tagging

    GA4 Admin → Product links → Google Ads links → link the account that runs the hotel’s campaigns. In Google Ads, Admin → Account settings → Auto-tagging must be on; that is what puts the click ID on the landing-page URL in the first place.

    Google’s import documentation lists three prerequisites: the link, auto-tagging, and Editor (or Administrator) access on the GA4 property. If the property belongs to a previous agency, get it transferred to the hotel’s own Google account before you go further.

  3. 3

    Mark purchase as a key event and set the GA4 lookback to 90 days

    GA4 Admin → Events → toggle Mark as key event on purchase. Then GA4 Admin → Attribution settings. Two settings there decide how Google Ads will count the import:

    1. Lookback window, other key events: 90 days (the default; 30 and 60 are the other options, per Google’s attribution settings page). Keep 90, the longest option: any booking made more than 30 days after the ad click falls outside a 30-day window and is not counted.
    2. Channels eligible for credit: Google paid channels. Per Google’s import documentation, this has been the default since June 2023 for properties creating a Google Ads link for the first time, and it keeps the imported number comparable to a native Google Ads tag instead of sharing credit with organic.
  4. 4

    Import purchase into Google Ads as a conversion with its value

    Google Ads → Goals → Conversions → Summary → New conversion action → Import → Google Analytics 4 properties → Web → tick purchase. Set the category to Purchase. Google requires that category for Smart Bidding on hotel campaigns, and it is the right label for a Search campaign too.

    Use the value Cloudbeds sends (the reservation total) and count every conversion, because two bookings from one click are two bookings. Cloudbeds sends the reservation ID as transaction_id.

  5. 5

    Make sure the imported conversion is Primary, not Secondary

    This is the setting that hides bookings. Google’s import documentation says Google Ads marks a conversion as secondary “when your Google Ads account already has goals from an Analytics property,” and that conversion actions based on Google Analytics key events “are set to ‘secondary’ conversion actions to prevent counting the same event twice for bidding.” Per Google’s primary and secondary conversion actions page, a Secondary action is reported in the All conversions column only and is not used for bidding. It is easy to stop here, see zeros, and conclude the tracking is broken. Check this setting on every import, whatever the default turned out to be.

    Open the action → Settings → Goal and action optimization → Primary. Then look at every other conversion action in the account. A “Book Now click” goal, a page-view goal on the confirmation URL, or a leftover Google Ads purchase tag that is also Primary means every booking counts twice and Smart Bidding chases phantom revenue. One Primary booking conversion. Everything else Secondary or removed.

  6. 6

    Check the conversion window and wait for the data

    Google Ads’ own conversion window defaults to 30 days and can be set from 1 to 90 for Search, per its conversion windows page. For an imported GA4 key event, the same page says the window change has to be made in Google Analytics. That is the 90-day lookback from step 3. Leave it there.

    Do not judge the import on its first day. Once a few days of real bookings have come through, compare it with Cloudbeds. Even when everything is set up right, expect Google Ads to show fewer bookings than Cloudbeds: it only reports the bookings it can connect to an ad, and guests who clear cookies or switch devices break that connection. On the live property above, about 1 booking in 10 still lands in GA4 as hotels.cloudbeds.com / referral, mostly guests who reached the booking engine from a Cloudbeds email or a saved link rather than through the site.

Step 1, done for you

Get the free Cloudbeds GTM template

One importable container with the Google tag and the cross-domain Conversion Linker already built. Change two values, publish, then start at step 2.

Path B · GA4-direct connection

Cloudbeds’ built-in Google Ads fields.

If the booking engine connects to GA4 directly, Cloudbeds offers two extra fields for Google Ads. Its Google Ads integration article (updated September 2026) opens by saying GTM is the recommended approach and that the direct route “may not offer the same level of advanced tracking or data consistency.” If you are staying on GA4 direct anyway, here is how it works.

  1. In Google Ads, create a conversion action (category Purchase, value from the tag, window 90 days) and note its Conversion ID and Conversion Label.
  2. In Cloudbeds: Settings → Booking Engine → Analytics → GA4 connection. Two fields appear: Google Ads Conversion ID and Google Ads Conversion Label.
  3. Enter the ID with the AW- prefix (Cloudbeds accepts it without, but says to include it so the event fires correctly) and the Label. Save.

Read the warning in that article twice: “If you do not include your Conversion Label, a Page Load Conversion Action will trigger, which could cause double conversions.” Both fields, or neither.

What fires is Cloudbeds’ own conversion event on the confirmation page. Per the events documentation (updated July 2026) it carries send_to (your ID and Label), transaction_id, value, currency, and the items. Cloudbeds sends the reservation ID as transaction_id with it.

One honest gap. On the GA4-direct connection there is no Tag Manager container on the booking engine, so the cross-domain hand-off relies on the primary-domain setting Cloudbeds asks for when you connect GA4 and on Google’s own tag linking. We have not run a click-to-booking test on a property that uses only the GA4-direct connection. Before you trust Path B, do the test booking below and check that the conversion in Google Ads shows the campaign, not “unknown”.

Embedded engine

Immersive Experience 2.0: what changes, and what doesn’t.

Immersive Experience 2.0 is Cloudbeds’ booking engine as a web component on your own site, no iframe, part of the Premium Embeds package. The guest searches, picks a room, and pays on your site (Cloudbeds notes one exception: Apple Pay, Google Pay, and other third-party payment options send the guest to the provider’s page and back to the confirmation page). Per the setup guide, your domain must be whitelisted, the loader script goes in your HTML, and “the Google Tag ID or GTM Container ID must be initialized on the hotel’s website.”

For Google Ads that is good news: the booking runs on your own domain, so there is no hand-off to a Cloudbeds domain to lose the click on. Cloudbeds’ events documentation lists immersive-experience as a source on its purchase event, so the booking events are built to fire on your site. We have not yet run a test booking on an Immersive Experience 2.0 property, so confirm in GA4 DebugView that purchase arrives in your own property with a value and transaction ID before you follow the Path A steps.

Three details from the same guide that do bite:

  • Consent banners. If you run a consent management platform, Cloudbeds’ resources have to be marked essential or the booking flow will not load. Cookiebot uses data-cookieconsent="ignore", OneTrust uses data-ignore-consent="true", and a guest who accepts consent after a script was blocked has to refresh the page.
  • Search parameters load once. UTM and date parameters are read when the component first loads and never again, so a Book Now link that changes the URL after load does nothing.
  • Hotel Ads parameters are passed through. The parameters Google Hotel Ads appends are sent to the Cloudbeds server with the reservation, per the same guide.

The honest edge cases

When you really do need server-side tracking.

Server-side products for Cloudbeds exist because the browser path has real limits. For getting Google Ads to count bookings at all, start with Path A: it uses Google’s own documented tools and costs nothing. Here is where server-side earns its place.

  • Enhanced Conversions. Google’s match-rate booster needs a hashed email or phone at conversion time. The parameters Cloudbeds documents for purchase and conversion include the reservation ID, value, currency, dates, items, and promo code, and none of them is a guest email or phone number. To send them you need a reservation webhook or the Cloudbeds API feeding a server you control.
  • Phone and walk-in bookings that started with an ad click, and cancellations you want subtracted from the value Google optimizes toward. Both are offline conversion imports or adjustments, which are server jobs by definition.
  • Ad-blocker loss on a property where most guests book from desktop with blockers on. Real, but measure the gap before you pay to close it.

If you do go there, a developer can build it with the Cloudbeds API and a small serverless function, and hosted products exist. Either way, set up Path A first. The server-side layer adds to a working import. It does not replace one.

On Smart Bidding: Google’s Target ROAS page asks for at least 15 conversions in the past 30 days for Search, and 50 a week at the campaign level for hotel campaigns. Fifty a week is over 200 tracked conversions a month from hotel campaigns alone. Check your own import numbers against both bars before you choose Target ROAS.

Proof

Test it with one real booking.

  1. Click your own ad once (a real ad click is the only way a test booking can show up in Google Ads), then click through to the booking engine. To check only the cross-domain hand-off without paying for a click, add ?gclid=test123 to your landing page URL instead; that is enough for step 2, but that booking will not show up as a Google Ads conversion.
  2. On the hosted engine, the URL must carry a _gl= parameter. If it does not, the cross-domain link is not working and Google Ads will not be able to tie the booking to the click.
  3. Make a real booking on a refundable rate. Use Tag Assistant on the confirmation page and GA4 DebugView to see purchase arrive with a value and transaction ID.
  4. In Google Ads, open Goals → Conversions → Diagnostics for the action. Check that it moves from “No recent conversions” to recording. If it has not moved by the next day, recheck steps 2 to 5.
  5. Cancel the test booking in Cloudbeds. Note the reservation ID so you can subtract it from the month’s count.

One trap carried over from the GA4 guide: 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), so a change you just published can look like it did nothing in the same browser. Wait 15 minutes, or test in a private window.

Check these first

6 mistakes that break Cloudbeds Google Ads tracking.

  1. 1

    Leaving the imported purchase as Secondary

    Google marks imported GA4 key events Secondary when the account already has goals from an Analytics property. A Secondary purchase never reaches the Conversions column or Smart Bidding. Check it and set it to Primary.

  2. 2

    Two Primary booking conversions

    GA4 import plus a Book Now click goal, or Path A and Path B running at once, or a leftover Google Ads purchase tag. Every booking counts twice. Keep one Primary: the actual booking.

  3. 3

    Conversion ID without a Conversion Label

    On the GA4-direct connection Cloudbeds warns that a missing label fires a page-load conversion action, which double counts. Enter both, with the AW- prefix.

  4. 4

    Conversion Linker without cross-domain linking, or with the wrong Cloudbeds domain

    The click ID stays on your site and the booking lands as a cold visitor. Check whether your engine lives at hotels.cloudbeds.com or us2.cloudbeds.com and list the one you use.

  5. 5

    A conversion window shorter than 90 days

    Any booking made more than 30 days after the click falls outside a 30-day window. Keep the GA4 lookback at 90 days, or set a native Google Ads action to 90.

  6. 6

    Treating Google Ads conversions as the invoice

    Ad-platform data is for optimization. The booking-engine export is the ledger. Pay or bill on the Cloudbeds reservation list, never on the Conversions column.

Beyond Google Ads

The number Google Ads still can’t give you.

With the import working, Google Ads will tell you which campaign produced each booking and what it was worth. It still cannot tell you whether that guest had ever stayed with you before. A past guest who clicks your ad from a new phone is a brand-new conversion as far as Google is concerned.

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

One question at a time

Short answers from this guide.

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 Google Ads, answered.

Why do my Google Ads conversions not match my Cloudbeds bookings?
Three usual causes. The imported GA4 purchase is still a Secondary conversion, so it never shows in the Conversions column. The ad click ID is not carried across to the booking engine because the Conversion Linker is missing or not set to link across domains. Or the conversion window is shorter than the gap between a guest's ad click and their booking. Fix those three before you look for anything exotic.
Does Cloudbeds track Google Ads conversions automatically?
No. Cloudbeds provides the fields and passes booking data to your tags, but its support guide says it does not configure or troubleshoot anything inside your Google Ads, GA4, or Tag Manager accounts. Its Immersive Experience 2.0 documentation says Google Ads conversion tracking requires manual setup on the property's website. The setup is on the property, its marketing partner, or Cloudbeds' paid Professional Services, which the same guide points to.
Should I use the GA4 connection or the GTM connection to track Google Ads on Cloudbeds?
GTM, which Cloudbeds itself recommends. On the GTM connection you track Google Ads by importing the GA4 purchase key event. The built-in Conversion ID and Conversion Label fields only appear under the GA4-direct connection. Cloudbeds says running both connections side by side is not supported.
Why is my imported Cloudbeds purchase conversion marked Secondary in Google Ads?
Because Google marks conversions created from Google Analytics key events as Secondary when your Google Ads account already has goals from an Analytics property, to avoid counting the same event twice for bidding. Open the conversion action, change Goal and action optimization to Primary, and make sure no other booking conversion is also Primary.
Do I need a server-side tool to keep the gclid across the Cloudbeds redirect?
Usually not, if the GTM connection is set up correctly. Google documents the Conversion Linker's cross-domain linking for this hand-off: it adds a linker parameter to links that point at the domains you list, and the Linker on the destination reads it back. Confirm it on your property with a test booking (look for _gl on the booking engine URL). Server-side is worth it for Enhanced Conversions, because the Cloudbeds purchase event carries no guest email or phone, and for offline or phone bookings, cancellation adjustments, and ad-blocker loss.
What conversion window should a hotel use in Google Ads?
Ninety days, the longest option. Google Ads allows 1 to 90 days for Search, and the GA4 lookback that governs imported key events defaults to 90. A booking made more than 30 days after the ad click is not counted in a 30-day window.
Does this setup work for Google Hotel Ads?
We have not tested it, and Google's hotel campaign documentation describes tracking with the Google tag or Tag Manager rather than a GA4 import. That page says the conversion category must be Purchase to be used for Smart Bidding, that the conversion needs a value and a currency (the Cloudbeds purchase event sends both), and that Google only supports last-click attribution for hotel campaigns. Target ROAS on hotel campaigns asks for at least 50 conversions per week at the campaign level; on Search it asks for at least 15 in the past 30 days.

Sources: Cloudbeds Help Center, Google Ads integration with Cloudbeds Booking Engine, Booking Engine Third-party Tracking Integration Guide, Google Analytics Events in Cloudbeds Booking Engine, Immersive Experience 2.0 setup, Connect Google Analytics with Cloudbeds Booking Engine. Google Help: Google Ads conversions from GA4 key events, conversion windows, GA4 attribution settings, Conversion Linker, hotel campaign conversion tracking, Target ROAS, primary and secondary conversion actions.

Rather not do this yourself?

We set up Cloudbeds and Google Ads 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