| Purpose | Set up, embed, and maintain Cloudbeds Booking Engine Immersive Experience 2.0 on your property website. |
| Best for | Property admins, managers, owners, and the website developer responsible for implementation. |
| Use this when | You want to install, configure, customize, or troubleshoot Immersive Experience 2.0 on a property website. |
| Requirements | Premium Embeds access, your website domain, your property code, and access to your website HTML. |
| Expected result | Immersive Experience 2.0 loads on an authorized property website using the supported loader and selected embed mode. |
| Limitations | Template-based or no-code site builders may handle custom scripts differently. Do not place Immersive Experience 2.0 web component tags inside iframes. |
Introduction
Cloudbeds Booking Engine Immersive Experience 2.0 embeds the booking journey directly into your property website without using iframe-based masking. Your website must be authorized through Whitelisted domains, and the supported loader script must be installed in the website HTML before the web component can render.
Use this guide for the implementation itself and for technical considerations that can affect the booking flow, including Consent Management Platforms (CMPs), site builders, tracking, search parameters, and custom styling. For a general overview of the Booking Engine, see Cloudbeds Booking Engine: Everything you need to know.
Table of contents
- About Immersive Experience 2.0
- Install Immersive Experience 2.0
- Cookie consent and CMP setup
- Setup considerations and troubleshooting
- Search parameters and tracking
- Customize Immersive Experience 2.0
About Immersive Experience 2.0
Cloudbeds Booking Engine Immersive Experience 2.0 is a web-based component that lets guests search availability, select rooms and rates, enter guest details, and complete payment directly from your property website. It can be implemented as a full-page experience or opened from a Book Now button.
Key benefits
The Immersive Experience 2.0 introduces unique features designed to elevate your guests' booking experience on your own website:
- Higher conversion rates: Fewer clicks, faster load times, and a cohesive brand experience drive more bookings.
- More customization: Build a unique and memorable guest experience without the constraints of a standard iframe.
- Data-driven growth: Access key metrics and insights to optimize your booking process and boost direct bookings.
- Increased trust: The secure, seamless booking flow builds guest confidence, encouraging them to complete the reservation process.
Web-based vs. iframe-based components
In contrast to iframe-based systems, this integrated web-based component offers:
- Faster website load times
- Enhanced brand customization
- A unified booking flow that ensures guests remain on-site from their initial search to payment completion
How it looks
The Immersive Experience 2.0 offers two flexible embed options to suit your property’s website design and user flow. You can choose to embed a full-page Immersive Experience or build and embed a pop-up Immersive Experience.
- The full-page embed functions exactly as it sounds: it places the complete booking engine directly within a page on your website, providing guests with an uninterrupted, fully immersive booking journey from start to finish.
The full-page embed keeps the guest on the property website while they search available accommodations, review rates, and build their reservation.
During checkout, guests enter their contact details, optional additional information, additional guests, and communication preferences without leaving the embedded booking flow.
Before completing the booking, guests can review the property's check-in, check-out, cancellation, and other terms and conditions.
- The pop-up embed option provides a sleek and modern alternative. When a guest clicks the “Book Now” button, a side panel smoothly slides in from the edge of the screen, offering a compact yet fully functional booking experience without navigating away from the current page.
In the pop-up implementation, the guest opens the Immersive Experience from the property's Book Now button while the original website remains visible behind the booking panel.
The booking flow includes:
- Availability search
- Room selection
- Rate display
- Upsell opportunities
- Guest information entry
- Secure payment processing
Within the Immersive Experience 2.0 booking flow (pop-up and full-page), guest search details, including dates, number of guests, promo codes, selected rooms, and checkout progress, are automatically preserved for up to 10 minutes of inactivity. If a guest briefly leaves the booking flow and returns within this timeframe, they will resume exactly where they left off, creating a smoother booking experience and reducing potential drop-off.
Pricing and availability
Access to Immersive Experience 2.0 depends on your Cloudbeds subscription. If Premium Embeds are included in your package, you can access Immersive Experience 2.0 from the Premium section of the Embeds tab.
If Premium Embeds are not included in your package, the Premium section may display a Contact sales option. Click Contact sales to request more information about upgrading to a package that includes Premium Embeds.
Premium Embeds include Immersive Experience 2.0 and related web component solutions. Basic Embeds remain available for simpler widget-based implementations.
Custom payment methods and gateway support
- Gateway support recommendations: We do not recommend using unsupported payment gateways in the Immersive Experience. Once gateways are no longer on a Cloudbeds domain, we have no control over security or PCI compliance.
- Current limitations: Custom payment methods should only be used on hosted environments at this time.
- Future support: Cloudbeds Payments team is working on providing official support for these gateways through custom connections within the PMS UI (User Interface). This feature is scheduled for release in 2026. Customers can expect more specific details on timing as we get closer to the delivery date.
- Support path: For implementation-specific guidance or questions regarding custom payment methods, please contact our Cloudbeds Payments team directly. They manage the entire payments SDK and are best positioned to assist you.
Install Immersive Experience 2.0
Complete the setup below to authorize your website domain, load the supported Immersive Experience script, and add the Booking Engine component to your website. The steps apply to both the full-page and Book Now button implementations.
Any value shown as {PARAMETER} is a placeholder. Replace it with your actual value and remove the curly braces.
Do not place Immersive Experience 2.0 web component tags inside an iframe. This can cause scrolling issues and would require whitelisting every item in the iframe chain, which is not recommended.
Step 1: Confirm Premium Embeds access
Important: Access to Premium Embeds depends on your Cloudbeds subscription.
- If Premium Embeds are included in your package, you can access the Immersive Experience 2.0 options from Booking Engine > Embeds > Premium.
- If Premium Embeds are not included in your package, the Premium section may display a Contact sales option. Click Contact sales to request more information about upgrading to a package that includes Premium Embeds.
- If you are a Cloudbeds Websites customer, you can reach out to the Cloudbeds Websites team for guidance on implementation and activation requests.
Step 2: Add your domain to Whitelisted domains
Add the domain where you will install the Immersive Experience 2.0 in the Whitelisted domains section of the selected Premium Embed. You may add up to 5 domains.
- From your Account Menu
, select Settings
- Click Booking Engine
- Click the Embeds tab.
- In the Premium section, select the Immersive Experience option you want to install.
- In the Whitelisted domains card, click Add domain.
- Enter the domain where the Immersive Experience will be installed, and save your changes.
Both primary domains and subdomains are supported, for example my-hotel.com and booking.my-hotel.com.
Whitelisted domains: How to check the correct domain format
Sometimes, a website's domain can be set up in a way that requires the www to be included. To cover both possibilities, check the domain format your website uses before adding it.
- Open your website and look at the URL in your browser.
- Check if the URL includes www. For example, it may show https://www.yourdomain.com or https://yourdomain.com.
Once you know which format your site uses, enter the matching domain in the Whitelisted domains field. For example, if your site displays with www, whitelist your domain as www.yourdomain.com.
Why domains must be whitelisted
The Immersive Experience is a web component, not an iframe. It runs on your site and makes API requests to Cloudbeds services from your domain. Whitelisting tells Cloudbeds which origins are authorized so those cross-domain requests are accepted.
Step 3: Add the Immersive Experience script
Add the following script in the <head> element on the HTML document from your website:
<script
data-entry="immersive"
src="https://static1.cloudbeds.com/booking-engine/latest/loader.js"
nonce="+imGC13HmyB6zTZ1eTnZMw=="
integrity="sha384-hd98w88pqnDT+lRLwyII/mRmbacols+VWYZF3HKdxnIlTYO+cF38GA1/I/+V8U4a"
crossorigin="anonymous"
type="text/plain"
data-categories="essential"
></script>If your website uses a Consent Management Platform (CMP), complete the CMP setup before publishing the implementation. CMP requirements vary by provider.
Step 4: Embed the Booking Engine
You can render the Immersive Experience in two ways:
- Standard Mode (Full page embed): Also known as the “full-page embed,” this is the default mode where the Booking Engine app is fully integrated into the host website. To embed it, include the following snippet in the HTML where it should be rendered:
<cb-immersive-experience mode="standard" property-code="{PROPERTY_CODE}" />- Popup Mode (Book Now button): This mode renders the Booking Engine app as a popup with a fixed position and overlay. To add a Book Now button that opens the Immersive Experience in a popup:
<cb-book-now-button property-code="{PROPERTY_CODE}" />If you omit the mode attribute, the component defaults to standard.
Find your Property Code
Go to Account Menu > Settings > Booking Engine > Summary tab. Your code is the 6-character alphanumeric value at the end of your Booking Engine link:
https://hotels.cloudbeds.com/reservation/{PROPERTY_CODE}
In the example below, the highlighted segment is the Property Code you should use in your embed (replace the braces and value in your snippet).
Cookie consent and CMP setup
If your website uses a Consent Management Platform (CMP), configure the Immersive Experience so required Cloudbeds resources are treated as essential and are not blocked before the booking flow can load. Follow the provider-specific setup below before publishing the website changes.
Use the provider-specific setting that applies to your CMP:
-
Cookiebot:
data-cookieconsent="ignore" -
OneTrust:
data-ignore-consent="true" -
Quantcast:
data-quantcast-ignore="true" - Termly: Add the custom blocking map below before the Termly script, preferably near the beginning of the HTML.
<script data-termly-config>
window.TERMLY_CUSTOM_BLOCKING_MAP = {
"cloudbeds.com": "essential",
"clientstream.launchdarkly.com": "essential",
"clientsdk.launchdarkly.com": "essential",
"tile.openstreetmap.org": "essential",
"tokenex.com": "essential",
"stripe.com": "essential",
"stripe.network": "essential",
"braintreegateway.com": "essential",
"dlocal.com": "essential",
"authorize.net": "essential",
"pagosonline.net": "essential",
"paypal.com": "essential",
"adyen.com": "essential"
};
</script>Classify the Immersive Experience loader as necessary or essential in your CMP configuration. Use the current loader entry point below. Direct use of cb-immersive-experience.js is deprecated.
<script
data-entry="immersive"
src="https://static1.cloudbeds.com/booking-engine/latest/loader.js"
nonce="+imGC13HmyB6zTZ1eTnZMw=="
integrity="sha384-hd98w88pqnDT+lRLwyII/mRmbacols+VWYZF3HKdxnIlTYO+cF38GA1/I/+V8U4a"
crossorigin="anonymous"
type="text/plain"
data-categories="essential"
></script>Accepting consent does not unblock a script that already tried to load. After accepting consent, guests must refresh the page for previously blocked map, image, and payment resources to appear.
Setup considerations and troubleshooting
The sections below highlight behavior and implementation details that are helpful to know before going live.
Compatibility with site builders
The Immersive Experience has been tested with custom-built websites. Template/no-code site builders may handle custom scripts differently, which could impact functionality.
- Head injection: Confirm you can add the Immersive Experience <script> in the page <head>.
- Whitelisting: Make sure your live (and any staging/preview) domains are added under Whitelisted domains card so API requests are accepted. You can add up to 5 domains.
- Custom CSS/JS: Styles or scripts added in the Booking Engine customization section do not apply automatically to the Immersive Experience; add them to your site's HTML instead.
- Payment page: The payment step may vary depending on the payment method selected.
- If the guest chooses Apple Pay, Google Pay, or another third-party payment option, they will be redirected to the respective third-party page to complete the payment.
- Once the transaction is successful, they will be redirected back to the Immersive Experience confirmation page.
- Deep links and parameters: Search parameters are read only on initial load. If you change the URL after the app has loaded, reload the page to apply them.
Portals
The Booking Engine renders several elements in a fixed position on the screen, for example:
- Modals
- Tooltips
- Calendar
- Rate checker
- Shopping cart banner (on mobile)
- Language and currency selectors
These elements are rendered inside a Portal, which means that instead of following the structure of the DOM tree, they are wrapped by an element with the .cb-portal static class and appended at the end of the body. The portals have different z-index values according to the corresponding layer in our stacking context.
Most websites have stacking contexts themselves, and depending on how they are defined on the imaginary z-axis, they may or may not conflict with the Immersive Experience stacking contexts.
For example, if they are not properly defined, the Immersive Experience’s Rate Checker could be displayed on top of the mobile navigation menu that belongs to the property’s website, or a floating element on the property’s website can be showing on top of the “Book Now” button in the Shopping Cart banner on mobile, blocking it and therefore preventing the user from continuing with the reservation process.
At the moment, we have 4 types of portals: modal, popover, sticky, and tooltip. The type of portal used in each case depends on the type of element that the portal is for. Therefore, all modals will use a modal portal, the Calendar popover and Language and Currency selectors use a popover portal, whereas the Shopping Cart Banner on mobile and the Rate Checker use a sticky portal, to give some examples.
Depending on the type of portal, these are the values that the Immersive Experience uses for the z-index CSS property:
-
Modal:
1400 -
Popover:
1500 -
Sticky:
1100 -
Tooltip:
1800
Troubleshooting overlapping issues
When facing issues with elements rendered by the Immersive Experience that are overlapping other elements from the parent website, we recommend to look for the Portal (element with .cb-portal static class) that contains it and adjust the z-index value accordingly, or to adjust the z-index value of the element from the parent website.
The z-index values for the different types of portals rendered by the Immersive Experience will be customizable by just redefining the CSS variables that are used for this purpose, as shown in the example below:
<style>
/* Scope to the Booking Engine root when overriding */
.cb-bookingengine-root {
--booking-engine-zIndices-sticky: 1100;
--booking-engine-zIndices-modal: 1400;
--booking-engine-zIndices-popover: 1500;
--booking-engine-zIndices-tooltip: 1800;
}
</style>
The Rate Checker is included with all Cloudbeds Booking Engine packages except Legacy plans. Properties on active packages can enable it at no additional cost.
Search parameters and tracking
Immersive Experience can read supported search parameters when the application first loads and can work with website-based analytics and advertising tools. Use the reference sections below when you need to pass search values, configure tracking, or understand Google Hotel Ads parameters.
Search parameters
The Immersive Experience supports the same search parameters as the hosted version. Parameters are read only at initial load and do not update dynamically.
| Name | Type | Description | Example |
| adults | Number | The amount of adults for the reservation, used when searching available accommodations. | adults=2 |
| allotment_block_code | String | The allotment block code to use when fetching accommodations for selected dates. | allotment_block_code=b123456 |
| checkin | YYYY-MM-DD | The selected date for check-in. | checkin=2025-12-01 |
| checkout | YYYY-MM-DD | The selected date for check-out. If checkin is provided but checkout is not, it defaults to the next day. | checkout=2025-12-01 |
| currency | 3-letter ISO-4217 currency code | Selected currency. If none is provided, the Booking Engine uses the property’s default. | currency=brl |
| kids | Number | The amount of kids for the reservation, used when searching available accommodations. | kids=1 |
| promo | String | Promo code to use when fetching accommodations for selected dates. | promo=superpromo |
| rate_plan | Semicolon-separated string | To filter accommodation results based on the rate plans, corresponds to the “Private Rate Plan Name” on the PMS. | rate_plan=3DAYSTAY;LOWSEASON |
| rid | Semicolon-separated numeric string | List of Room IDs to filter accommodation results. | rid=27434;23421 |
| room_type | Semicolon-separated 3-letter string | Corresponds to the “Accommodation Abbreviation” in the PMS and it's used to filter the accommodation results. If no check-in and checkout are provided, the Booking Engine selects tomorrow and the following day automatically. | room_type=PRI;SHA |
| utm_source | String | Used to know the source of the marketing campaign (eg: Google, TripAdvisor, Trivago) | utm_source=Google |
Tracking and analytics
The Immersive Experience supports the same search parameters that the hosted version does. The parameters are read from the window location only at the initial load of the application, which means that dynamic changes in the search parameters won’t make any impact in the Immersive Experience once it’s loaded.
Also, the Immersive Experience doesn’t update the window URL as the hosted version does after certain user actions (for example, selecting checkin and checkout dates).
- Google Analytics 4 / GTM: The Google Tag ID or GTM Container ID must be initialized on the hotel’s website.
- Google Ads: Conversion tracking requires manual setup on the property’s website.
- Meta Pixel: The Meta Pixel script must be added in the HTML <head> for initialization.
For additional configuration details, refer to each tracking platform’s documentation.
Add Google Tag Manager (GTM) or Google Analytics 4 (GA4) scripts manually to the <head> of your HTML to enable tracking.
Google Hotel Ads search parameters
These parameters are appended by Google Hotel Ads and the Booking Engine sends them to the server in the request when making a reservation:
| Parameter |
| gha_advance_booking_window |
| gha_campaign_id |
| gha_google_site |
| gha_is_ad_click |
| gha_is_click_type_hotel |
| gha_is_click_type_room |
| gha_is_hotel_campaign |
| gha_is_promoted |
| gha_length |
| gha_payment_id |
| gha_price_displayed_total |
| gha_promo_code |
| gha_user_country |
| gha_user_currency |
| gha_user_device |
| gha_user_language |
| gha_user_list_id |
Customize Immersive Experience 2.0
Tailor the Immersive Experience using component attributes, plus your own CSS/JS on your website.
Custom codes may require maintenance over time
- As the Booking Engine evolves, self-applied customizations can stop working or need updates.
- Whenever possible, test changes on a staging or draft copy of your site before going live.
Component attributes for cb-immersive-experience and cb-book-now-button
These attributes are shared by both Standard and Popup modes (see Embed the Booking Engine).
The following attributes are all optional (except for the property-code) and both the cb-immersive-experience and cb-book-now-button web components support them.
| Name | Type | Required | Default value | Description |
| currency (*) | 3-letter ISO-4217 currency code | No | Property’s default currency | The currency to be used for the initial load of the Immersive Experience. |
| disable-css-title-reset | yes | no | No | no | yes should be used if the property wants to define their own CSS rulesets for headings in the UI (h1… h6). |
| hide-custom-header | yes | no | No | no | To hide the custom header defined on the PMS. |
| hide-custom-footer | yes | no | No | no | To hide the custom footer defined on the PMS. |
| hide-property-info | yes | no | No | no | To hide the Property Info section in all pages. |
| ignore-search-params (*) | yes | no | No | no | The Immersive Experience by default reads the query parameters in the URL of the host website and uses them in the initial load of the application. It supports the same parameters that the hosted Booking Engine does. |
| lang (*) | auto-detect | 2-letter ISO 639-1 language code | No | Property’s default language. | The language to be used in the initial load of the Immersive Experience, if none is provided, the Immersive Experience will check the lang attribute of the HTML, if it’s not defined either, the property’s default language will be used. If auto-detect value is provided, the Immersive Experience will be loaded in the user’s browser language. |
| mode | standard | popup | No | standard | The mode in which the Immersive Experience should be rendered. A popup should be used when the Immersive Experience is rendered inside a container with a fixed height or maximum height. |
| property-code (*) | 6-digit alphanumeric code that identifies your property. | Yes | Not applicable | The 6-digit alphanumeric code that represents the property. It is the same code used in the Booking Engine URL: https://hotels.cloudbeds.com/reservation/{PROPERTY_CODE}. |
Attributes marked for the initial load are only read once when the app starts. Changing them later on your property won’t affect an already-loaded Immersive Experience.
Book Now button custom attributes
These options apply to the cb-book-now-button component (see the Embed the Booking Engine section) and let you style the button and control the popup’s label and dimensions.
| Attribute | Description |
| class-name | CSS class for styling the button. |
| close-label | Custom label for the close button. |
| height | Height of the popup. |
| width | Width of the popup. |
Example of the Book Now button with label, size, and CSS class:
<cb-book-now-button
property-code="{PROPERTY_CODE}"
class-name="cb-book-now-button"
label="Book Now"
height="90vh"
width="90vw"
/>
Add custom CSS and JavaScript for Immersive Experience
Custom CSS or JavaScript added in the Booking Engine’s customization fields does not automatically apply to the Immersive Experience. These must be manually added to the HTML document.
Add the data-cb-immersive-experience-root attribute to style and script tags to avoid conflicts.
Example of custom CSS:
<style data-cb-immersive-experience-root>
:is(#cb-bookingengine, .cb-bookingengine-root) {
h1 {
font-family: serif;
font-size: 24px;
}
}
</style>
Next Operational Step
After installing and testing Immersive Experience 2.0 on your authorized domain, review the Cloudbeds Booking Engine Embeds tab guide when you need to compare or configure other embed options.
Comments
Please sign in to leave a comment.