Skip to main content

Using Your Own Google Tag Manager Container

How to use your own GTM container on your storefront and embedded widgets, with a full reference of all dataLayer events and an importable GTM template.

If you need full control over your tracking setup, you can replace Understory's default Google Tag Manager (GTM) container with your own. This lets you configure exactly which tags fire on your storefront — including Google Analytics 4, Google Ads, Meta Pixel, and any other tags you need.

This is an advanced option. When you enable your own GTM container, Understory's built-in tracking integrations for GA4, Google Ads, and Meta Pixel are disabled. You take over responsibility for configuring those tags yourself inside your GTM container.


How to Enable Your Own GTM Container

Requirements: Admin access and an existing Google Tag Manager account.

  1. Go to Marketing > Overview — in the left-hand menu of your Backoffice, then open the Settings tab

  2. Find the Google Tag Manager section — it's listed alongside GA4, Google Ads, and Meta Pixel

  3. Enter your Container ID — in the format GTM-XXXXXXX (find this in your GTM account under Admin > Container Settings)

  4. Toggle the switch to Active — and click Save

Once saved, your GTM container loads on your storefront instead of Understory's default container.


What Changes When You Use Your Own Container

Replaced:

  • Understory's default GTM container is fully replaced by yours — only one container loads at a time

  • The individual GA4, Google Ads, and Meta Pixel integrations in Marketing > Overview > Settings are disabled automatically. You cannot enable them alongside your own GTM container

Still works:

  • Your storefront continues to push all tracking events to the dataLayer — your GTM container picks these up automatically

  • UTM campaign parameters are still captured and preserved

  • Understory's internal analytics (used for your dashboard metrics) continue to work independently

You are now responsible for:

  • Creating and configuring all tags in your GTM container (GA4, Google Ads, Meta Pixel, etc.)

  • Setting up cookie consent mode

  • Configuring conversion tracking

  • Testing that your tags fire correctly


Quick Start with GTM Templates

We provide importable GTM container templates with pre-configured tags, triggers, and variables. Choose the template that matches your setup:

  • Storefront template — for customers who use their own GTM container on the Understory storefront

  • Widget template — for customers who embed the Understory booking or gift card widget on their own website and want to track widget interactions

The template files are not currently available for download from the Backoffice. Reach out to us in the chat window and we'll send you the JSON file you need.

You can import both if you use the storefront and widgets together — the shared variables and Google Tag configuration have the same names, so GTM merges them automatically.

What's included

Each template imports an Understory folder into your GTM container. Everything is prefixed with "Understory - " so you can easily identify imported items alongside your own tags.

Storefront template:TypeWhat's includedTags

Google Tag (GA4 config), GA4 Event tags for select_item, view_item, add_to_cart, begin_checkout, purchase, Conversion Linker

Triggers

Custom event triggers for all storefront events including on_receipt and private_request_submitted

Variables

Data Layer variables for ecommerce data, the booked session ID, and a placeholder GA4 Measurement ID

Widget template:TypeWhat's includedTags

Google Tag (GA4 config), GA4 Event tags for view_item, add_to_cart, begin_checkout, Conversion Linker

Triggers

Custom event triggers for understory_view_item, understory_add_to_cart, understory_begin_checkout

Variables

Data Layer variables for ecommerce data and a placeholder GA4 Measurement ID

How to import

  1. Get the template file — save the template JSON file to your computer

  2. Open your GTM container — go to Admin > Import Container

  3. Choose the file — select the template JSON file

  4. Select "Merge" — choose "Rename conflicting tags, triggers, and variables" to safely add the Understory items alongside your existing setup

  5. Review and confirm — GTM shows a summary of what will be added

After importing

  1. Open the variable "Understory - GA4 Measurement ID" — replace G-XXXXXXXXXX with your actual GA4 Measurement ID

  2. Preview and test — use GTM's Preview mode to verify events fire correctly

  3. Publish — when everything looks good, publish your container

If you imported an earlier version of this template before, you may end up with unused Understory - DLV - receipt.* variables alongside the new ones. They are harmless, but you can safely delete them once nothing references them.


Storefront DataLayer Events

Your storefront pushes the following events to the dataLayer. These follow the standard GA4 ecommerce schema.

Page Viewspage_view — Fires on every page navigation.

Browsing Eventsselect_item — A visitor clicks an experience card in your storefront's experience listing.

This event fires only from that listing. It does not fire when a visitor opens an experience page from a direct link, search results, your own website, or the embedded widget. If most of your traffic links straight to experience pages, expect this event to be rare compared to view_item — that is normal, not a tracking fault.

PropertyExample Value

item_list_id

companyProfile

item_list_name

Company Profile

items[].item_id

Experience ID

items[].item_name

Experience name

items[].affiliation

Understory

items[].item_category

experience

view_item — A visitor opens an experience detail page.

PropertyExample Value

currency

EUR

value

Total price

items[].item_id

Experience ID

items[].item_name

Experience name

items[].affiliation

Understory

items[].item_category

experience

Booking Flow EventsIdentifying the booked session. One experience runs many sessions, so the experience ID alone cannot tell a Tuesday sitting apart from a Saturday one. The experience_event_id property names the specific session, which lets you follow a single session all the way through to purchase.

Experiences booked on open hours have no session until the booking is actually made, so the property is absent on their add_to_cart and begin_checkout events and appears for the first time on on_receipt. It is always absent for gift cards and punch cards. When there is no session, the property is left out entirely rather than sent empty.

add_to_cart — A visitor selects guests and proceeds in the booking flow.

PropertyExample Value

currency

EUR

totalPrice

Total price

experience_event_id

The selected session's ID (scheduled experiences only)

items[].item_id

Experience ID

items[].item_name

Experience or variant name

items[].affiliation

Understory

items[].item_category

experience or addon

items[].item_variant

Variant ID (in the form variant/<id> or addon/<id>)

items[].price

Unit price

items[].quantity

Number of guests

begin_checkout — A visitor starts the payment process.

PropertyExample Value

currency

EUR

value

Checkout total

experience_event_id

The booked session's ID (scheduled experiences only)

items[].item_id

Variant ID

items[].item_name

Ticket type name (for example Adult)

items[].affiliation

Understory

items[].item_category

variant/experience

items[].item_category2

Experience name

items[].item_category3

Experience ID

items[].price

Unit price

items[].quantity

Number of guests

Gift card and punch card checkouts

Gift cards and punch cards push their own begin_checkout event with a single item. They have no session, so experience_event_id is never sent for them.

PropertyGift cardPunch card

value

Total charged (including fees)

Total charged (including fees)

items[].item_id

Your company ID

Punch card type ID

items[].item_name

Voucher

Punchcard

items[].item_category

voucher

punchcard

items[].price

Gift card amount

Punch card price

items[].quantity

1

1

Purchase Eventon_receipt — A purchase is completed. This is the most important event for conversion tracking.

Important: This event is named on_receipt, not the standard GA4 purchase. The GTM template handles this mapping for you — the included "Understory - GA4 Event - purchase" tag listens for on_receipt and sends it to GA4 as a purchase event. If you're setting this up manually, create a custom event trigger for on_receipt.

PropertyExample Value

transaction_id

Unique receipt ID (use this for conversion deduplication)

experience_event_id

The booked session's ID (bookings only — not sent for gift cards or punch cards)

receiptId

Receipt ID

receiptCreatedDate

When the order was created

currency

EUR

value

Order total (excluding gift card payments)

items[].item_id

Variant ID (or voucher ID for gift cards)

items[].item_name

Item name

items[].affiliation

Understory

items[].item_category

variant/experience or voucher

items[].item_category2

Item name

items[].item_category3

Experience ID

items[].price

Unit price (VAT inclusive)

items[].quantity

Quantity

items[].currency

EUR

items[].vat_rate

VAT rate (e.g. 0.25)

items[].vat_amount

VAT amount

Also available under payload. Everything in the table above except experience_event_id is sent a second time, nested under a payload key, with the two category fields spelled item_category_2 and item_category_3. That was the original format for this event and it still works, so existing container mappings need no changes. New setups should use the properties in the table above — they match every other event and GA4's own purchase shape.

Note that item_category2 means something different on this event than it does on begin_checkout: here it is the line item's name, while on begin_checkout it is the experience name. Only item_category3 (the experience ID) means the same thing on both events, so use that one when joining the funnel together.

Other Eventsprivate_request_submitted — A visitor submits a private event request form.

PropertyExample Value

formattedDate

Requested date

participants

Number of participants


Embedded Widget DataLayer Events

If you use the Understory booking or gift card widget on your own website, the widgets also push ecommerce events to the dataLayer. These events are prefixed with understory_ to avoid interfering with any existing tracking you have on your site.

The widget events use the same item data structure as the storefront events (currency, value, items with item_id, item_name, affiliation, etc.), so you can process them in the same way.

Important: The widgets do not load GTM — they only push events to the dataLayer. If you have GTM installed on your website, these events are picked up automatically. If you don't have GTM, the events are safely ignored.

Booking Widget Eventsunderstory_view_item — The widget loads and displays an experience.

PropertyExample Value

currency

EUR

value

0

items[].item_id

Experience ID

items[].item_name

Experience name

items[].affiliation

Understory

items[].item_category

experience

understory_add_to_cart — A visitor selects guests and proceeds to the confirmation step.

PropertyExample Value

currency

EUR

value

Total price

items[].item_id

Experience ID

items[].item_name

Experience and variant name

items[].affiliation

Understory

items[].item_category

experience or addon

items[].item_variant

Variant ID

items[].price

Unit price

items[].quantity

Number of guests

understory_begin_checkout — A visitor confirms their booking and proceeds to payment.

PropertyExample Value

currency

EUR

value

Checkout total

items[].item_id

Experience ID

items[].item_name

Experience and variant name

items[].affiliation

Understory

items[].item_category

experience or addon

items[].item_variant

Variant ID

items[].price

Unit price

items[].quantity

Number of guests

Gift Card Widget Eventsunderstory_view_item — The gift card widget loads.

PropertyExample Value

currency

EUR

value

0

items[].item_id

gift-card (or experience ID for experience gift cards)

items[].item_name

Gift Card (or experience name)

items[].affiliation

Understory

items[].item_category

voucher

understory_begin_checkout — A visitor proceeds to payment for a gift card.

PropertyExample Value

currency

EUR

value

Gift card amount

items[].item_id

gift-card (or experience ID)

items[].item_name

Gift Card (or experience name)

items[].affiliation

Understory

items[].item_category

voucher

items[].price

Gift card amount

items[].quantity

1

Using widget events in GTM

The understory_ prefix means these events won't accidentally trigger tags you've set up for other products on your site. The widget GTM template includes triggers that listen for the prefixed event names and forward them to GA4 as standard ecommerce events (view_item, add_to_cart, begin_checkout).


DataLayer Variables

These variables are pushed to the dataLayer before your GTM container loads on the storefront, so they're available to all your tags:

VariableDescription

company_id

Your Understory company ID

measurement_id

Your GA4 Measurement ID (if configured)

conversionLinkerDomains

Domains for cross-domain tracking (includes your storefront domain automatically)

Campaign parameters. If a visitor arrives with campaign parameters in the URL, the storefront stores them and merges them into every event it pushes, including page_view. This covers campaignSource, campaignGclid, and any utm_ parameters you use. You can read them with Data Layer variables like any other property, which is useful for attribution on your conversion tags.


Tips for Setting Up Conversion Tracking

Google Ads Conversions

  1. Create a Google Ads Conversion Tracking tag in your GTM container

  2. Set the trigger to fire on the on_receipt event

  3. Use the transaction_id property as the Order ID — this prevents duplicate conversions from being counted

  4. Map value to the conversion value and currency to the currency (both are also available as payload.value and payload.currency)

Google Analytics 4

If you're using the Understory GTM templates, GA4 is already configured — just replace the Measurement ID placeholder. If you're setting up manually:

  1. Create a Google Tag using your Measurement ID

  2. Add GA4 Event tags for each ecommerce event you want to track

  3. Create Data Layer variables to extract the event properties (currency, value, items) and map them as event parameters

Meta Pixel

  1. Add the Meta Pixel base tag to your container

  2. Map the storefront events to Meta standard events — for example, on_receipt → Purchase, begin_checkout → InitiateCheckout, view_item → ViewContent


Cookie Consent

When you use your own GTM container, you manage consent mode. The storefront reads consent status from the dataLayer, so if you implement Google Consent Mode v2 in your container, it will be respected across all tracking.


Did this answer your question? If not, please reach out to us in the chat window at the bottom to the right, and we'll be happy to help 🤗

Did this answer your question?