Note: Nabooki provides and natively supports the booking platform's data layer output. We are unable to configure, audit, or troubleshoot custom third-party GTM containers, Meta Pixels, or individual advertising accounts beyond the standard setup detailed below.If you are new to analytics, the terminology can be confusing. Here is a simple breakdown of how these tools work together:
Google Analytics 4 (GA4): This is your reporting dashboard. It collects and displays your booking revenue, website visitor numbers, and tour performance reports.
Google Tag Manager (GTM): This is the courier/messenger. It sits on your website and booking tool, captures booking actions as they happen, and safely delivers that data to GA4 (as well as Meta or Google Ads).
Think of GTM as the engine that sends the information, and GA4 as the dashboard where you read the results.
Before following this setup guide, ensure you have active accounts for both services. If you don't have them yet, click the links below to set them up for free:
A Google Analytics 4 Account
What you need: Your GA4 Measurement ID (looks like G-XXXXXXXXXX)
Where to find it: Log in to GA4 > Click Admin (gear icon) > Data Streams > Click your website stream > Copy the Measurement ID
A Google Tag Manager Account
What you need: Your GTM Container ID (looks like GTM-XXXXXXX).
Where to find it: Appears in bold in the top header bar of your Google Tag Manager workspace.
Manager Access to Nabooki
You'll need access to your Nabooki account to paste your GTM ID.

Nabooki's booking tool is a modern "Single Page Application." As a customer selects a tour and adds it to their cart, the screen updates dynamically without reloading the web page. This creates a faster, smoother checkout experience that minimises drop-offs.
What this means for tracking: Standard triggers like "Page View" or "History Change" will not capture rich cart or invoice data. Even though the final booking confirmation URL may change, relying solely on a page load will miss vital transaction details like order total, discount codes, and individual items. Instead, tracking is event-based, automatically sending data-rich signals (Custom Events) to GTM at key moments.
Download the Template File: Scroll to the bottom of this help article and download the attachment for our pre-configured container file: nabooki-gtm-ga4-starter-container.json (do not open or edit the JSON file directly on your computer).
Import into Google Tag Manager:
Under the Container column, select Import Container.
Click Choose container file and select nabooki-gtm-ga4-starter-container.json.
Under Choose workspace, select Existing > Default Workspace.
Under Import option, select Merge, then choose Overwrite conflicting tags, triggers, and variables.
Click Confirm.
Add Your GA4 Measurement ID:
Navigate to Variables > User-Defined Variables in the left sidebar.
Click on the variable named GA4 Measurement ID.
Replace G-XXXXXXXXXX with your actual GA4 Measurement ID (copied from GA4 Admin > Data Streams) and click Save.
Connect GTM to Nabooki Admin Settings:
Copy your GTM Container ID from the top header in GTM (looks like GTM-XXXXXXX).
Log in to your Nabooki Admin Settings, navigate to Tracking / Analytics, paste your Container ID into the designated field, and save changes.
Before relying on live data, verify your tags in GTM Preview mode:
In Tag Manager, click Preview in the top-right corner, enter your website URL that contains the booking widget and click Connect.
In the new browser tab, open the Nabooki booking tool, add an item to the cart, and complete a test booking (you can set the service to $0 or use a 100% discount promo code so no money is charged).
Switch back to the Tag Assistant tab and verify that GA4 Event - add_to_cart and GA4 Event - purchase appear under Tags Fired.
Preview Mode Won't Connect? Privacy-focused browsers like Brave (via Brave Shields) or browser extensions like uBlock Origin block Tag Assistant. Please complete setup and testing using standard Google Chrome with ad-blockers temporarily disabled.In GTM, click the blue Submit button in the top-right corner.
Type a Version Name (e.g., "Nabooki GA4 Setup") and click Publish.
Once your setup is complete, Google Analytics 4 begins collecting real-time e-commerce data. Here is where to find your data and how to interpret it for your business:
Where to find it: GA4 > Admin > DebugView.
What it shows: As you perform test bookings, live event nodes for add_to_cart and purchase will pop up on a timeline. Clicking on a purchase event displays the exact revenue value, transaction ID, and item names pushed by Nabooki.
Where to find it: GA4 > Reports > Monetisation > Ecommerce purchases.
What it shows: A comprehensive breakdown of your business's top-performing tours, ticket types, and services. You can view item revenue, total item quantity booked, and cart addition rates.
Where to find it: GA4 > Admin > Key Events (formerly Conversions).
What it means: Confirm purchase is toggled on as a Key Event. This allows GA4 to attribute sales directly to your traffic sources (e.g., Organic Search, Google Ads, Meta Ads, Email Marketing), showing you exactly which marketing channels generate real revenue for your business.
If you already have an established GTM container and prefer adding these events manually rather than importing our starter template:
Create Custom Event Triggers: Create three triggers using the type Custom Event and enter the exact event names: purchase, add_to_cart, and remove_from_cart. Set them to fire on All Custom Events.
Create GA4 Event Tags: Create a Google Analytics: GA4 Event tag for each of the three events. Attach your existing GA4 Measurement ID (or Configuration Tag) and assign the matching Custom Event trigger.
Enable E-Commerce Data (Critical Step): In each GA4 Event Tag, expand More Settings, check the Send Ecommerce data box, and select Data Layer as the source. This checkbox is essential. Without it, GA4 will receive the event name but completely drop your booking totals, item lists, and transaction IDs.
You can repurpose the custom triggers created by the Nabooki starter template to track ad-driven sales and optimise bidding:
Meta Pixel & TikTok Pixel: Create a new tag for your pixel in GTM and attach it directly to the Custom Event - purchase trigger to measure ROAS (Return on Ad Spend).
Google Ads Conversion Tracking: Create a Google Ads Conversion tag, set the trigger to Custom Event - purchase, and map the value and transaction_id directly from the data layer
The Nabooki booking flow runs inside an iframe (such as a pop-up modal) hosted on our domain. An automated event relay allows merchant pixels on the root domain to access ad click IDs and first-party cookies:
Events pushed to the dataLayer inside the booking tool are posted via postMessage to the parent window
Nabooki's embed snippet (iframeResizer.js loaded from our CDN) intercepts this message and pushes it directly into the parent page's dataLayer
GTM Container Priority Order: Agent GTM (if configured) > Merchant GTM > Nabooki Default GTM
To prevent item data bleeding between sequential cart actions (a common GA4 bug), Nabooki automatically executes dataLayer.push({ ecommerce: null }); immediately before firing any new e-commerce event payload.
| Event | Trigger Condition | Key Tracking Rules |
add_to_cart / remove_from_cart | Fires when an item is added or removed during checkout. | value reflects the specific affected item(s) total (unit price × quantity), NOT the cart total. Omits transaction_id. |
purchase | Fires when an order is created and payment is confirmed. | Idempotent: strictly fires ONCE per Order Token. Returns value: 0 if a 100% promo code is applied. |
currency: ISO 4217 code (e.g., "AUD"). Customer PII is never transmitted.
value: Invoice subtotal after discounts (for purchase) or item total (for cart events).
transaction_id: Nabooki Order Token (included in purchase only).
coupon: Promo code name if applied; otherwise null.
Agent code: Exposes client slug on client/agent bookings to separate agent activity from direct site traffic.
Items Array Parameters (items[]):
item_id: Booking ID / Service ID
item_name: Invoice item description / service name
price: Pre-discount item total (strictly labelled price, not price_per_unit)
quantity: Item quantity
Standard Purchase Payload:
{
"event": "purchase",
"ecommerce": {
"currency": "AUD",
"value": 1372.99,
"transaction_id": "5198804",
"coupon": null,
"items": [
{
"item_id": 342555,
"item_name": "Pricing categories - Price 2",
"price": 1206.66,
"quantity": 1
},
{
"item_id": 342556,
"item_name": "Pricing categories - Price 1",
"price": 166.33,
"quantity": 1
}
]
}
}
Purchase Payload (100% Discount Applied):
{
"event": "purchase",
"ecommerce": {
"currency": "AUD",
"value": 0,
"transaction_id": "5198807",
"coupon": "GTMTEST2",
"items": [
{
"item_id": 342560,
"item_name": "Pricing categories - Price 2",
"price": 1206.66,
"quantity": 1
},
{
"item_id": 342561,
"item_name": "Pricing categories - Price 1",
"price": 166.33,
"quantity": 1
}
]
}
}If you need assistance, contact our support team:
💬 Live Chat: Click the chat icon in the bottom-right corner of the screen.
📧 Email: support@nabooki.com