> ## Documentation Index
> Fetch the complete documentation index at: https://docs.1club.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Tag Manager

> Load a Google Tag Manager container on your member portal and CMS website

This integration loads a Google Tag Manager (GTM) container on your 1Club public-facing surfaces - the member portal and the CMS website - without any code changes. Paste your container ID once and 1Club injects the GTM snippet on every page load. From there, your GTM workspace controls what fires (GA4, Meta Pixel, conversion pixels, custom tags, and so on).

## Before you start

You need a GTM container ID in the format `GTM-XXXXXXX`. Find it on the workspace overview screen in [tagmanager.google.com](https://tagmanager.google.com), next to your container name.

If you want to use Google Analytics 4, configure the GA4 Configuration tag inside your GTM container. 1Club does not accept a standalone GA4 measurement ID - everything goes through GTM.

## Connect Google Tag Manager

1. In the admin, go to **Settings → Integrations** and click **Activate** on the Google Tag Manager card.
2. Paste your **GTM Container ID** into the form. It is normalized to uppercase on save and must match `GTM-` followed by letters or digits.
3. Click **Save**.

The container ID is stored on your organization. The next page load on your member portal and CMS website includes the GTM snippet. No redeploy or cache flush is required.

## Where the tag loads

1Club injects two things on every public page render:

* The standard GTM script (`https://www.googletagmanager.com/gtm.js?id=GTM-XXXXXXX`), loaded with Next.js `afterInteractive` strategy so it does not block first paint.
* The noscript iframe fallback for visitors with JavaScript disabled.

Both the member portal (`{org}.portal.1club.ai` or your custom portal domain) and the CMS website (your branded site) read the container ID from your organization settings and load the same container.

## What gets tracked

1Club only loads the container. What it tracks is entirely up to your GTM workspace. Typical setups include:

* Page views on the marketing site and member portal.
* Conversion events for sign-up, booking confirmation, purchase, or contact-form lead.
* Custom dataLayer events you trigger from GTM tags.

### Events pushed by 1Club

The member portal and CMS website push a small set of standard events to `window.dataLayer` automatically. Create a **Custom Event** trigger in GTM with the matching name and forward to GA4 (or any other tag).

| Event name        | Fires when                                           | Parameters                                                                                                                                                                      |
| ----------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `page_view`       | Every client-side route change in portal and website | `page_path`, `page_title`                                                                                                                                                       |
| `login`           | A member signs in                                    | `event_source` (`portal` or `website`)                                                                                                                                          |
| `sign_up`         | A new member account is created                      | `event_source`                                                                                                                                                                  |
| `sign_out`        | A member logs out of the portal                      | `event_source`                                                                                                                                                                  |
| `booking_created` | A booking is confirmed                               | `booking_id`, `event_source`                                                                                                                                                    |
| `payment_success` | Stripe checkout returns to the success page          | `booking_id` (if any), `invoice_id` (if any), `event_source`                                                                                                                    |
| `form_submitted`  | The contact form on a CMS site submits successfully  | `form_type` (always `contact` for the contact form), `form_category` (the category the visitor picked, if any), `form_location` (the page path the form was on), `event_source` |

All non-`page_view` events also carry `event_source` so you can split GA4 reports by surface.

### Suggested GA4 mapping

For drop-in GA4 coverage, map the events above to GA4's recommended names where they line up, and pass them through as-is otherwise:

* `sign_up` and `login` already match GA4's recommended events - forward with **Event Name** `{{Event}}` and GA4 surfaces them in the standard user-engagement reports.
* `payment_success` maps to GA4's `purchase` if you also pass `transaction_id`, `value`, and `currency`. If you don't have those yet, forward as `payment_success` and report on it as a custom event.
* `form_submitted` is a good fit for GA4's recommended `generate_lead` event. Either forward as `form_submitted` or remap to `generate_lead` in your GA4 Event tag - whichever you prefer for reporting.

## Cookie consent

The GTM snippet runs on every page load. If you operate under GDPR, ePrivacy, or similar regulations, configure consent in your GTM container using Google's Consent Mode and gate marketing or analytics tags on the appropriate consent state. 1Club's cookie banner records the visitor's preferences but does not configure GTM tags for you.

## Disconnect

Clear the **GTM Container ID** field and save. The GTM snippet stops being injected on subsequent page loads. Existing visitors with the script already loaded keep it until they navigate away or refresh.

## Troubleshooting

* **Tag not firing** - confirm the ID format (must start with `GTM-`, uppercase, letters and digits only) and that you saved the form. Then open your public site and use [Tag Assistant](https://tagassistant.google.com) to confirm the container loaded.
* **Events missing in GA4** - GTM publishes are independent of 1Club. Confirm the GA4 tag inside your container is firing on the right triggers and that you published the latest workspace version in GTM.
* **Tag loads on portal but not website (or vice versa)** - both surfaces read from the same organization setting, so a missing tag usually means the ID was not saved, the site is on an older cached HTML response, or the public org payload was not refreshed. Reload the page once to pick up the latest container ID.
