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.
| 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. |
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.
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).
Sign-up conversion (recommended)
signup_completed to dataLayer after sign-up.signup_completed (or map it to GA4 sign_up), then import that conversion into Google Ads (GA4 → Admin → Conversions → Import from GA4).page_view – { event: 'page_view', page_path: route } on route change.user_identified – { event: 'user_identified', user_id: '<auth0_sub>' } when the user is logged in.signup_completed – { event: 'signup_completed' } when sign-up finishes (use this for conversion import).Configure triggers and tags in GTM to use these events (e.g. GA4 events, Google Ads conversion import).
Because UA, GA4, and Google Ads were removed from the page, they must exist inside GTM or no data will flow:
signup_completed or website form), then in Google Ads go to Tools → Conversions → New conversion action → Import → Google Analytics 4 and select that event. Do not add a separate Google Ads conversion tag that fires on the same action (to avoid double counting).signup_completed dataLayer event for the conversion you import into Google Ads.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.