Google Tag Manager is a distribution box: you plug in Google Analytics, the Meta Pixel, TikTok, Google Ads, all powered by the same events. You add or remove a destination without ever asking us for anything.
If you work with an agency or a webmaster, this article is the one to pass on to them.
Google Tag Manager is not active by default. It is activated upon request to our team. A Tag Manager container can execute code on pages where your buyers' data transit. We activate the feature for organizers who need it.
Where to paste your container ID
Your ID starts with GTM- and looks like GTM-XXXXXXX. You find it at the top of your Tag Manager workspace.
For all your events (recommended)
Organizer profile → Settings → Tracking & Pixels
For a specific event
Your event → Advanced configurations → Tracking & Pixels
An event that defines its own container replaces the organization's one, only for Tag Manager. Your other IDs (Google Analytics, Meta Pixel) continue to be inherited normally.
Two scenarios
Scenario A: your buyers purchase on passpass.be
Your container is loaded on your event page and on your organizer page. It receives all the events of the journey.
Security restriction: our pages host a purchase session and personal data. The "custom HTML" tags and the "custom JavaScript variables" of your container will not execute. Everything else works normally: Google Analytics, Google Ads, Meta Pixel, TikTok, and other models from the Tag Manager gallery.
Scenario B: the ticketing is integrated on your site
The widget sends its events directly into the dataLayer of your page, on your own domain. Your Tag Manager runs on your site, as usual.
No restrictions from us: it's your site, your rules
No third-party cookie, no broken session, no loss of attribution
A more reliable measurement than a redirect to passpass.be
Nothing to enter in PassPass for this scenario: just have your container installed on your site. The Tag Manager field on your dashboard is only for scenario A.
The only condition: your site's domain must be listed in the widget's authorized domains.
What your container receives
These events are identical in both scenarios:
view_item_list : a list of events has been displayed
select_item : an event from the list has been clicked
view_item : an event page has been opened
add_to_cart / remove_from_cart : ticket added or removed from the cart
select_promotion : a promo code has been applied
begin_checkout : the purchase journey starts
add_payment_info : a payment method is chosen
payment_started : departure to payment (last measurable point before Stripe)
purchase : sale confirmed
purchase_cancelled : return from payment without purchase
order_expired : cart expired
generate_lead : contact form sent
Data structure
E-commerce information is in an ecommerce object, in the standard Google Analytics 4 format. Information specific to PassPass is at the root, prefixed pp_.
{
"event": "purchase",
"pp_organization_id": "...",
"pp_organization_name": "Ma structure",
"pp_event_id": "14",
"pp_event_name": "Conférence 2026",
"pp_language": "fr",
"ecommerce": {
"transaction_id": "8421",
"value": 205.20,
"currency": "EUR",
"coupon": "EARLY10",
"items": [
{
"item_id": "tkt_standard",
"item_name": "Entrée Standard",
"item_category": "Conférence 2026",
"price": 100.00,
"quantity": 2,
"index": 0
}
]
}
}
Amounts are in decimal euros, never in cents.
When a buyer arrives from your organizer page or from the list widget, item_list_id is retained until purchase. You can measure the revenue generated by your organizer page. The list widget ID is embed_event_list.
Configure Tag Manager
1. Create a variable for the event name
Variables → New → type Data Layer Variable
Key name: event. Name it DLV - event.
2. Create a unique trigger
Triggers → New → type Custom Event
Check "Use regex matching", then paste:
^(view_item_list|select_item|view_item|add_to_cart|remove_from_cart|select_promotion|begin_checkout|add_payment_info|payment_started|purchase|purchase_cancelled|order_expired|generate_lead)$
3. Create a Google Analytics 4 tag
Tags → New → type Google Analytics: GA4 event
Event name:
{{DLV - event}}Expand More settings → E-commerce → check "Send e-commerce data", source Data Layer
Trigger: the one created in step 2
A single tag covers all events. The e-commerce box automatically maps items, amounts, and transaction ID.
4. Add the PassPass context
Create a data layer variable for pp_event_id, pp_event_name, pp_organization_name and pp_language, then add them in Event Parameters on the tag.
Then declare them in Google Analytics: Admin → Custom Definitions → Event scope, copying the names exactly. Without this step, they arrive but remain invisible in the reports.
5. Publish
Preview mode is not enough: click Submit for your tags to apply to your real visitors.
Exclude Stripe from traffic sources
Payment goes through Stripe, then the buyer returns. Without this setting, Google Analytics attributes all your sales to Stripe instead of your campaigns.
Admin → Data Streams → your stream → Configure tag settings → List of unwanted referrals
Add:
stripe.comcheckout.stripe.comembedded.passpass.be(only if you use embedded widgets)
Test
Open Preview mode in Tag Manager by entering the relevant URL (passpass.be for scenario A, your own site for scenario B)
Unfold the journey: events appear in the left column, your tags under Tags Fired
Check in Google Analytics → Admin → DebugView. Preview mode automatically enables debugging
Upon returning from Stripe, the preview session will be lost. Check the purchase in Reports → Real-time, one minute later. Take a paid ticket to test: a free ticket does not go through payment and does not trigger the same journey.
This is intentional (scenario A). Use the corresponding template in the Tag Manager gallery. On your own site (scenario B), no restrictions apply.
We only allow one container per page. Two containers would share the same data layer. Group your tags into a single container.
On passpass.be, only visitors who have accepted cookies are measured. A gap of 30 to 60% is common. On your own site, it's your consent banner that decides.
Yes, both fields are independent. But if your container already contains a Google Analytics configuration, do not enter the same ID in both: you would count each sale twice.
The expected format is GTM-XXXXXXX. A G- ID is Google Analytics, a GT- a Google tag, an AW- a Google Ads account.