Connect Google Tag Manager or Google Analytics 4 to your booking page to measure traffic, funnel drop-off, and booking conversions. RentalTide pushes booking events into the GTM dataLayer so you can build triggers, tags, and conversion goals in your own Google account.
Tags are configured per location, so each location can report into its own container or property.
Setting up
- Go to Integrations in the admin sidebar.
- Find Google Tags and click Manage.
- Choose the location you are configuring.
- Paste one of:
- a GTM container ID --
GTM-XXXXXXXX - a GA4 measurement ID --
G-XXXXXXXXXX
- a GTM container ID --
- Click Save.
The tag loads on that location's booking page and booking widget within a few minutes. Configuration is cached for up to 5 minutes, so allow that long before testing.
Which one should I use?
Either works. Both receive booking, checkout, and purchase events.
GTM container (GTM-) | GA4 measurement ID (G-) | |
|---|---|---|
| Pageviews in GA4 | Yes, via a GA4 tag in the container | Yes, automatically |
view_item / begin_checkout / purchase | Yes, as dataLayer events | Yes, sent straight to your property |
| Setup work | Build triggers and tags yourself | None |
| Meta / Google Ads / other vendors' tags | Yes | No |
| Control over what fires and when | Full | None |
Pick a GA4 measurement ID if you only want GA4 reporting -- events arrive with no container setup at all.
Pick a GTM container if you run other tags (Google Ads, Meta, LinkedIn, call tracking) or want control over triggers and consent.
Do not enter both for one location. A location holds one tag.
Verifying it works
- Open your booking page in a browser.
- Open GTM Preview / Debug mode, or the Tag Assistant extension.
- Confirm the container connects and
booking_page_loadedappears in the event list. - Click into a rental and confirm
view_itemfires.
If nothing appears: confirm the tag ID is saved against the location you are actually browsing, wait 5 minutes for the cache, and check that no ad blocker is stripping the container.
Ecommerce events
These follow the GA4 recommended ecommerce schema, so a standard GA4 tag in GTM picks them up with no custom mapping.
| Event | Fires when | Data |
|---|---|---|
view_item | A customer opens a rental's detail page | items[] with item_id, item_name |
begin_checkout | A customer reaches the checkout page | value, currency, items[] |
purchase | A booking is created and paid | transaction_id (the booking's rental ID), value, currency, items[] with price and quantity |
purchase fires for customer-made web bookings only. Bookings your staff create in the admin or POS are not web conversions and do not fire it.
A cart booking sends one purchase per order with every rental in items[] and the full order total as value, so basket size and revenue both report correctly.
Setting up a conversion goal
GA4 measurement ID: nothing to do. purchase arrives as a GA4 event. Mark it as a key event under Admin -> Events to get conversion reporting and Google Ads bidding.
GTM container:
- Create a GA4 Event tag.
- Event name:
purchase. - Trigger: Custom Event, event name
purchase. - Check Send Ecommerce data, source Data Layer.
- Publish the container, then mark
purchaseas a key event in GA4.
The same pattern works for begin_checkout and view_item.
Booking funnel events
RentalTide also sends its own named events. They are not GA4 standard names: on a GA4 measurement ID they arrive as custom events you can report on directly; in a GTM container you need a Custom Event trigger for each one you want to use.
| Event | Fires when | Useful fields |
|---|---|---|
booking_page_loaded | The booking page finishes loading the tag | customer_id, location_id, ref_affiliate |
boats_data_loaded | The rental catalog loads | boats_count, filtered_by_date, selected_date |
boats_data_error | The catalog fails to load | error_message |
direct_boat_view | Someone lands on a direct link to one rental | inventory_id |
booking_context_update | Location, branding, or integration state resolves | location_id, ref_affiliate |
custom_code_loaded | Your custom header/footer code is active | has_header_code, has_footer_code |
Every dataLayer push also carries a timestamp in milliseconds.
Why page_view matters
The booking flow is a single-page app: catalog, rental details, checkout, and confirmation all happen without a full page reload. Left alone, Google records one pageview for the entire visit, so no report can show where customers drop off. The page_view event covers each step after the first. In a GTM container, either use it as a Custom Event trigger for your GA4 tag, or enable History Change triggering -- not both, or steps count twice.
booking_context_update fires whenever page state changes, so it can fire several times per visit. Do not use it as a funnel step or a conversion trigger.
Attributing affiliate and referral traffic
ref_affiliate carries the ?ref= value from the booking page URL, so you can segment affiliate traffic in GA4 by registering it as a custom dimension in your GA4 tag.
Tracking bookings from your own website
When your website uses the RentalTide embed script (embed-booking.js: the inline booking widget, the booking popover your "Book now" links open, the floating button), the booking page runs inside a frame on your site. The tag you save in RentalTide runs inside that frame. A tag on your own site cannot see into it, so the script also reports every completed booking to your page. By default:
- It pushes a
rentaltide_booking_completeevent onto your page'sdataLayer, withtransaction_id(the booking ID),value,currencyanditems[]underrentaltide. It is not a GA4purchase, so it fires none of your existing triggers: nothing changes in your reports until you build a tag for it (a Custom Event trigger onrentaltide_booking_complete, reading the fields with Data Layer Variables such asrentaltide.value). - It fires a
rentaltide:booking-completebrowser event ondocumentwith the same fields inevent.detail(plusevent.detail.ecommerce, ready for GA4), for sites without GTM. A site running plaingtag.jscan forward it:
No names, emails or phone numbers are sent to your page.
Sending a GA4 purchase to your page
Add data-forward-events="purchase" to the embed script tag:
The script then also pushes a standard GA4 purchase (with ecommerce holding transaction_id, value, currency and items[]), so the conversion-goal steps above work unchanged in your site's container: a GA4 Event tag on a purchase Custom Event trigger, with ecommerce data from the Data Layer.
To push nothing onto your dataLayer at all, use data-forward-events="false". The browser event still fires, and does nothing unless your own code listens for it.
Avoid counting a booking twice
The tag saved in RentalTide and a tag on your website are on two different pages. If both send a purchase to the same GA4 property or Google Ads conversion, every booking counts twice. That is why the purchase push is off unless you ask for it.
- Using the same container or property on your site and in RentalTide? Leave
data-forward-eventsoff (or set it to"false"). The tag in RentalTide already records the purchase. - Only turn on
"purchase"when the property on your site is NOT also the tag saved in RentalTide, or after removing the tag from the location in RentalTide.
Both sides use the booking ID as transaction_id, which Google uses to drop repeated conversions where it can, but do not rely on that.
Other pixels
Google Tags are independent of the other tracking integrations. Set these up separately under Integrations:
| Integration | Events sent |
|---|---|
| Meta Conversion API | PageView on load, Purchase on booking |
| TikTok Pixel | Page view on load, CompletePayment on booking |
| Custom Code | Anything you inject into the booking page's header or footer |
You can also fire Meta and TikTok events from inside GTM if you prefer to manage them there -- but do not install the same pixel in both places, or every event is counted twice.
Notes and limits
- One tag per location. A location with no tag of its own falls back to an account-level tag if one was configured before per-location tags existed.
- On your all-locations booking page, the tag loads once the customer picks a location (or opens a rental), and that location's tag receives their checkout and purchase. If they switch to a location with a different tag, events go to the new location's tag only.
- Tag IDs are validated on save.
GTM-IDs are 6--10 characters after the prefix;G-IDs are 6--12. - Changes take up to 5 minutes to appear on the live booking page.
- If you embed the booking widget on your own website and that site already loads the same GTM container, RentalTide detects it and will not load it a second time -- your existing container receives the booking events directly.
- Refunds and cancellations are not yet reported to Google, so GA4 revenue reflects bookings made, not net of refunds.
- Removing a tag stops it loading on the next page load; it does not delete data already in your Google account.

