CraftedStays automatically fires GA4 ecommerce events throughout the booking funnel — no custom JavaScript needed. All you need to do is connect your GA4 property to your site. There are two ways to do this: directly with a Measurement ID, or through Google Tag Manager (GTM) if you already use GTM for other tracking.
Pick one method only. If you enter a GA4 Measurement ID in CraftedStays and configure a GA4 Event tag in GTM for the same property, every event will be counted twice.
Events Tracked Automatically
CraftedStays fires these standard GA4 ecommerce events across the booking funnel:
Event | When it fires |
| Guest loads a property page |
| Guest selects available dates on a property |
| Guest reaches the checkout page |
| Guest enters payment details |
| Booking is confirmed |
Each event includes travel-specific custom parameters you can register as GA4 custom dimensions: check_in_date, check_out_date, nights, num_adults, num_children, num_pets, bedrooms, max_guests, property_type, city, region, country, and channel.
Option 1: Native GA4 Setup (Measurement ID)
The simplest option. Events are sent directly to your GA4 property from CraftedStays — no GTM required.
Step 1: Find your GA4 Measurement ID
Go to analytics.google.com
Open Admin > Data Streams > your web stream
Copy the Measurement ID — it starts with
G-
Step 2: Add it to CraftedStays
In your CraftedStays dashboard, go to Site > Analytics
Paste the Measurement ID into the GA4 Measurement ID field
Save your changes
Step 3: Verify
Open your site in a browser and visit a property page
In GA4, go to Reports > Realtime
You should see a
view_itemevent appear within a few seconds
To see ecommerce data, go to Reports > Monetisation > Ecommerce purchases.
Option 2: GA4 via Google Tag Manager
Use this method if you already have a GTM container on your site and want all tracking to flow through GTM. This lets you add custom event parameters, build audiences, and control firing conditions from GTM without touching CraftedStays settings.
Step 1: Connect your GTM container in CraftedStays
In your CraftedStays dashboard, go to Site > Analytics
Enter your GTM Container ID (format:
GTM-XXXXXXX) in the GTM Container ID fieldSave — leave the GA4 Measurement ID field empty
Quick start: Import the pre-built template
Instead of building the trigger and tag by hand, you can import our pre-built container snippet. It adds the CE - CS Ecommerce Events trigger and the GA4 Ecommerce Events tag to your existing container in one step — your other tags are untouched.
Copy the JSON below
Save it as a
.jsonfile on your computer (e.g.craftedstays-gtm.json)In GTM, go to Admin > Import Container
Choose the file, select Merge (not Overwrite), and click Confirm
Open the imported GA4 Ecommerce Events tag, replace
G-XXXXXXXXXXwith your GA4 Measurement ID, and saveClick Submit to publish
{
"exportFormatVersion": 2,
"exportTime": "2026-05-22 18:00:00",
"containerVersion": {
"path": "accounts/0/containers/0/versions/0",
"accountId": "0",
"containerId": "0",
"containerVersionId": "0",
"container": {
"path": "accounts/0/containers/0",
"accountId": "0",
"containerId": "0",
"name": "CraftedStays Ecommerce Starter",
"publicId": "GTM-XXXXXXX",
"usageContext": ["WEB"]
},
"builtInVariable": [
{
"accountId": "0",
"containerId": "0",
"type": "EVENT",
"name": "Event"
}
],
"trigger": [
{
"accountId": "0",
"containerId": "0",
"triggerId": "1",
"name": "CE - CS Ecommerce Events",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "MATCH_REGEX",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "view_item|add_to_cart|begin_checkout|add_payment_info|purchase"
}
]
}
],
"fingerprint": "1748000000000"
}
],
"tag": [
{
"accountId": "0",
"containerId": "0",
"tagId": "1",
"name": "GA4 Ecommerce Events",
"type": "gaawe",
"parameter": [
{
"type": "TEMPLATE",
"key": "measurementIdOverride",
"value": "G-XXXXXXXXXX"
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "{{Event}}"
},
{
"type": "BOOLEAN",
"key": "sendEcommerceData",
"value": "true"
},
{
"type": "TEMPLATE",
"key": "ecommerceMacroData",
"value": "dataLayer"
}
],
"firingTriggerId": ["1"],
"fingerprint": "1748000000001",
"tagFiringOption": "NOT_ONCE_PER_EVENT"
}
],
"fingerprint": "1748000000002"
}
}Or set it up manually
Step 2: Enable the Event built-in variable in GTM
CraftedStays pushes events to the dataLayer using the key event (e.g. view_item, begin_checkout). GTM needs the built-in {{Event}} variable enabled to read it.
In GTM, go to Variables > Configure
Under Events, check the box for Event
Click Save
Step 3: Create a Custom Event trigger
Go to Triggers > New
Set Trigger Type to Custom Event
In the Event name field, enter:
view_item|add_to_cart|begin_checkout|add_payment_info|purchaseCheck Use regex matching
Name the trigger (e.g. CS Ecommerce Events) and save
Step 4: Create the GA4 Event tag
Go to Tags > New
Set Tag Type to Google Analytics: GA4 Event
For Configuration Tag, select your existing GA4 Configuration tag (or choose None — Manually Set ID and enter your
G-Measurement ID)Set Event Name to
{{Event}}Expand More Settings > Ecommerce
Enable Send Ecommerce data and set Data source to Data Layer
Under Triggering, select the trigger you created in Step 3
Name the tag (e.g. GA4 Ecommerce Events) and save
Step 5: Test and publish
Click Preview in GTM and open your site
Visit a property page — the CS Ecommerce Events trigger should fire and the GA4 Ecommerce Events tag should appear as fired
Confirm in GA4 Realtime or DebugView that events are arriving
Back in GTM, click Submit to publish your container version
Troubleshooting
Events not showing in GA4
Check GA4 Realtime — new properties can take 24–48 hours to process historical data
Use GA4 DebugView (Admin > DebugView) for immediate event inspection
For the GTM path: confirm the container is published (not just saved as a draft) and the
{{Event}}variable is enabled
Duplicate events in GA4 (GTM path only)
If you see every event counted twice, you have both a GA4 Measurement ID entered in CraftedStays admin and a GTM GA4 Event tag set up. Remove one — either clear the Measurement ID in CraftedStays admin, or delete the GTM GA4 Event tag.
Ecommerce data missing from events
In your GTM GA4 Event tag, confirm that Send Ecommerce data is enabled and the data source is set to Data Layer (not Google Analytics). CraftedStays uses the standard dataLayer ecommerce format.
