Tracking setup (GTM single source of truth)

Analytics and ads are centralized in Google Tag Manager. The site and app no longer load hard-coded UA, GA4, or Google Ads scripts. This avoids double counting, keeps data in one place, and lets marketing change tracking without code deploys.

Current setup

Property Container / IDs Where
Website (teamflow.com) GTM GTM-M42S7JML Only GTM is loaded; configure GA4 (G-0GS0D1N4H0), Google Ads (AW-1011979083), and conversions inside this container.
App (app.teamflow.com) GTM GTM-5B6NBTBM Only GTM is loaded; app pushes dataLayer events. Configure GA4/Ads inside this container.

Rules (do not break)

  1. Do not add hard-coded tags
    No gtag('config', ...), no UA-, G-, or AW-* script tags in the website or app code. Everything goes in GTM.

  2. Do not duplicate the Google Ads tag
    If a tag is already in GTM, do not add the same one on the page (or you’ll double-count).

  3. Sign-up conversion (recommended)

What the app sends to dataLayer (for GTM)

Configure triggers and tags in GTM to use these events (e.g. GA4 events, Google Ads conversion import).

Next steps in GTM (after this change)

Because UA, GA4, and Google Ads were removed from the page, they must exist inside GTM or no data will flow:

  1. Website (GTM-M42S7JML)
  2. App (GTM-5B6NBTBM)

Changing the GTM container (website)

Container ID is in _config.yml:

gtm_id: GTM-M42S7JML

Snippets are in _includes/gtm-head.html and _includes/gtm-body.html and use GTM-M42S7JML.