GTM Container Audit — Flowcode
Context: Pre-website-relaunch audit requested by Brad Mims (Flowcode). PMax campaign ($200/d) just unpaused — conversion signal quality is upstream-critical.
Executive Summary
The container is functional but has significant conversion-tracking gaps that directly undermine the $200/d PMax campaign. The core issue Cameron flagged is confirmed: Google Ads conversion tags fire on free-signup and self-serve events, not on HubSpot pipeline/SQL stages. PMax is optimizing for low-value signal.
Critical Fix Before PMax Scales
| # | Issue | Impact | Effort |
|---|---|---|---|
| C1 | Google Ads conversions fire on userCreatedAccount, userSubmittedProPayment — not HubSpot SQL/pipeline stages |
PMax optimizes on free signups, not enterprise pipeline | Medium |
| C2 | No Meta pixel base code in container — only orphaned fbq("track","CompleteRegistration") custom HTML |
Zero Meta attribution, cross-channel blind spot | Low |
| C3 | Universal Analytics tags still active (UA-134093328-2) — UA sunset July 2023 | Dead tags, potential page-load overhead | Low |
| C4 | GA4 page_view event (Tag 391) duplicates built-in GA4 config page_view (Tag 389) | Inflated pageview counts in GA4 | Low |
High High-Priority Issues
| # | Issue | Impact |
|---|---|---|
| H1 | 12 Google Ads conversion tags on a single account (AW-759682899) — unclear which are primary vs. secondary | Conversion double-counting risk, PMax confusion |
| H2 | Second Google Ads account (AW-647436322) has 1 conversion tag — unknown owner/purpose | Potential rogue tracking |
| H3 | Enhanced conversions inconsistent — enabled on 6 of 12 tags, disabled on 6 | Degraded match rates on half of conversions |
| H4 | 25+ paused custom HTML tags (Brad's cleanup) — still in container | Clutter, risk of accidental re-enable |
| H5 | No HubSpot lifecycle/pipeline event triggers exist in GTM | Cannot wire conversion tags to SQL stages without new triggers |
1. Container Snapshot
Active Tags (26)
| Tag ID | Type | Name / Purpose | Fires On |
|---|---|---|---|
| 314 | Google Ads Conversion | AW-759682899 / MGhtCMrY7NgB | (unknown trigger mapping) |
| 316 | Google Ads Conversion | AW-759682899 / TiKFCOix-tgB — with value, enhanced conv | (unknown trigger mapping) |
| 329 | Google Ads Conversion | AW-647436322 / bxYGCIq5vPEB — different account | (unknown trigger mapping) |
| 348 | Google Ads Conversion | AW-759682899 / w9KiCOW0-v8B — enhanced conv | userCreatedAccount or similar |
| 349 | Google Ads Conversion | AW-759682899 / wVz8CNHa3P8B — enhanced conv | userCheckedOutSuccessfully |
| 386 | Google Ads Conversion | AW-759682899 / z6_jCOv5qoAY — enhanced conv | Revenue_ContactSales_Submitted_Form |
| 388 | Google Ads Conversion | AW-759682899 / 3EftCIC4q4AY | Revenue_ContactSales_Submitted_Form |
| 415 | Google Ads Conversion | AW-759682899 / nS6fCLSUgpUZ | BookDemo_SubmittedForm |
| 420 | Google Ads Conversion | AW-759682899 / LfhRCPeCkJoZ | (unknown) |
| 431 | Google Ads Conversion | AW-759682899 / LoNzCJHhhcwZ — enhanced conv | (unknown) |
| 439 | Google Ads Conversion | AW-759682899 / XjhgCLGH1e4Z | (unknown) |
| 455 | Google Ads Conversion | AW-759682899 / YUYCCO7KqqUb | User_Submits_BAL_Form |
| 315 | GCLID Tracking (gclidw) | URL passthrough enabled | All Pages |
| 321 | Universal Analytics | UA-134093328-2 — Page View | All Pages |
| 353 | Universal Analytics | Event: Flowcode > Create Account - New | userCreatedAccount |
| 354 | Universal Analytics | Event: Flowcode > Submit Pro Payment - New | userSubmittedProPayment |
| 360 | Universal Analytics | Event: Pro > Get Started Click | userStartedProConversion |
| 372 | Google Ads User Data | AW-759682899 — enhanced conversion upload | All Pages |
| 384 | LinkedIn Conversion | Partner ID: 2949218 | LinkedIn-specific trigger |
| 389 | GA4 Config | G-S8MHVTV29S — send_page_view: true | All Pages |
| 391 | GA4 Event | page_view DUPLICATE | All Pages |
| 435 | GA4 Event | Contact_Sales_Submission | Revenue_ContactSales_Submitted_Form |
| 436 | GA4 Event | SEM_LP_Contact_Sales | Revenue_LandingPage_Submitted_Form |
| 361 | Custom HTML | fbq("track","CompleteRegistration") — orphaned (no base pixel) | userCreatedAccount |
| 411 | Custom HTML | HubSpot script (8765124) — OneTrust gated | All Pages |
| 458 | Custom HTML | Snowplow pixel (conversions.flowcode.com/pixel-tracker) | (unknown) |
Paused Tags (~30)
These are Brad's cleanup — previously active tags now paused. Recommendation: After confirming nothing breaks (2 weeks), delete them. Paused tags still load in the container and add weight.
Triggers (25)
| # | Trigger | Type | Notes |
|---|---|---|---|
| 0 | gtm.js | Page View | All pages |
| 1 | userDownloadedFlowcode | Custom Event | Product action |
| 2 | userCreatedAccount | Custom Event | Low-value for PMax Free signup |
| 3 | userStartedProConversion | Custom Event | Mid-funnel |
| 4 | userSubmittedProPayment | Custom Event | Self-serve payment |
| 5 | userCheckedOutSuccessfully | Custom Event | Self-serve checkout |
| 6 | userCompletedProConversion | Custom Event | Self-serve complete |
| 7 | userCreatedFlowpageAccount | Custom Event | Product action |
| 8 | gtm.formSubmit | Form Submission | Generic |
| 9 | LinkedIn trigger | Regex match | Partner-specific |
| 10 | userSubmittedLead | Custom Event | Lead form — closer to pipeline |
| 11 | Revenue_ContactSales_Submitted_Form | Custom Event | HIGH value Enterprise contact |
| 12 | userClickedCreateFlowcode | Custom Event | Product action |
| 13 | gtm.historyChange | History Change | SPA navigation |
| 14 | userClickedContactSales | Custom Event | CTA click (not submission) |
| 15-18 | Element/click triggers | Element Visibility | Onboarding-related |
| 19 | URL = app.flowcode.com/signup | Page View | Signup page load |
| 20 | URL = flowcode.com/submit | Page View | Thank-you page |
| 21 | BookDemo_SubmittedForm | Custom Event | HIGH value Demo request |
| 22 | Revenue_LandingPage_Submitted_Form | Custom Event | Landing page form |
| 23 | LinkedIn_LandingPage_Submitted_Form | Custom Event | LinkedIn-attributed form |
| 24 | EOY_Report_Button_Clicked | Custom Event | Campaign-specific |
| 25 | User_Submits_BAL_Form | Custom Event | BAL form |
Variables (25+)
| # | Type | Purpose |
|---|---|---|
| Macro 0 | Event | {{Event}} |
| Macro 1 | URL | Full URL |
| Macro 3 | Enhanced Conversion Data | Email (manually provided) — used by enhanced conversion tags |
| Macro 4 | Cookie | _fluid cookie |
| Macro 5 | DOM Element | flowcode_id input value |
| Macro 7 | GA Settings | UA-134093328-2 config (dimensions 1, 3, 5) |
| Macro 14 | Custom JS | Session ID generator |
| Macro 15 | GA Settings | UA-134093328-6 (second UA property?) |
| Macro 17 | Custom JS | Extract email from form |
| Macro 18 | DOM Element | upgrade-auth-form-email-input |
| Macro 22 | URL | HOST component |
| Macro 23 | URL | PATH component |
2. Conversion-Tracking Sanity Check
Google Ads Conversion Linker
PASS- GCLID tracking tag (315) fires on All Pages with URL passthrough enabled
- User data upload tag (372) fires on All Pages with enhanced conversion data
Google Ads Conversion Tags
FAIL CriticalPrimary account: AW-759682899 (maps to customer 844-432-8711)
12 conversion tags exist. The problem: most fire on product/self-serve events, not enterprise pipeline stages.
| Conversion Label | Fires On | Value Signal | PMax Impact |
|---|---|---|---|
MGhtCMrY7NgB | Unknown | Low | Unknown |
TiKFCOix-tgB | Account creation / checkout (has value) | Medium | Optimizes for self-serve |
w9KiCOW0-v8B | userCreatedAccount | LOW | PMax chases free signups |
wVz8CNHa3P8B | userCheckedOutSuccessfully | Medium | Self-serve revenue |
z6_jCOv5qoAY | Contact Sales form | HIGH | Correct signal |
3EftCIC4q4AY | Contact Sales form | HIGH | Correct signal |
nS6fCLSUgpUZ | Book Demo form | HIGH | Correct signal |
LfhRCPeCkJoZ | Unknown | Unknown | Unknown |
LoNzCJHhhcwZ | Unknown | Unknown | Unknown |
XjhgCLGH1e4Z | Unknown | Unknown | Unknown |
YUYCCO7KqqUb | BAL form submission | Medium | Depends |
Secondary account: AW-647436322 — 1 conversion tag (bxYGCIq5vPEB). Unknown owner. Needs investigation — is this an old account, agency account, or partner?
What's Missing: HubSpot Pipeline Events
There are zero triggers for HubSpot lifecycle stage changes (MQL, SQL, Opportunity, Customer). The dataLayer pushes on the Webflow site only fire:
Revenue_ContactSales_Submitted_Form(form submit)LinkedIn_LandingPage_Submitted_Form(LinkedIn UTM form submit)
These are top-of-funnel form submissions. There is no mechanism to feed back which leads became SQLs or opportunities to GTM/Google Ads. This is the fundamental gap:
Fix: This likely cannot be solved in GTM alone. Requires Google Ads offline conversion import via HubSpot integration or API, feeding GCLID + conversion action back when a lead reaches SQL stage.
Meta Pixel
FAIL- No Meta pixel base code (
fbq('init', ...)) exists anywhere in the container - One orphaned custom HTML tag (361) fires
fbq("track","CompleteRegistration")— this will error in browser sincefbqfunction is never defined - The live site does NOT load
connect.facebook.netor any Meta pixel script - Result: Zero Meta attribution. Cross-channel attribution is blind to Meta.
GA4
PASS (with one issue)- G-S8MHVTV29S is properly installed via GA4 Config tag (389) on All Pages
send_page_view: trueis set in the config tag- BUT Tag 391 fires an additional
page_viewevent on All Pages → duplicate pageviews - Custom events exist for
Contact_Sales_SubmissionandSEM_LP_Contact_Sales— good - GA4 is NOT removed by Brad's cleanup — confirmed still active
- Partner ID 2949218 installed via sandboxed tag (384)
- Fires on a LinkedIn-specific trigger
LinkedIn_LandingPage_Submitted_FormdataLayer event fires when UTM source = LinkedIn- Working correctly
Other Tracking on Live Site
Found in page source (outside GTM):
| Platform | Details |
|---|---|
| Heap Analytics | Loaded in head |
| Datadog RUM | Browser monitoring (OneTrust gated) |
| HubSpot | Chatbot/forms via Webflow integration + GTM tag (411) |
| Drift | Chat widget |
| Intercom | Support widget |
| OneTrust / CookieLaw | Consent management (eed4f849-6744-46e9-8b81-04d191129887) |
| ZoomInfo | Visitor identification (obfuscated script) |
| Cloudflare | Challenge platform |
3. Orphan Check
Triggers Without Tags (Potential Orphans)
| Trigger | Status |
|---|---|
| userDownloadedFlowcode | May only fire paused tags |
| userCreatedFlowpageAccount | Likely fires paused tags |
| gtm.historyChange | Fires Tag 26 (index) — may be active |
| userClickedCreateFlowcode | May only fire paused tags |
| EOY_Report_Button_Clicked | Campaign-specific — likely expired |
Variables Not Referenced
| Variable | Concern |
|---|---|
Macro 6 — Cookie: dtxcookie (decoded) | Dynatrace cookie — is Dynatrace still in use? |
| Macro 15 — GA Settings UA-134093328-6 | Second UA property — different from UA-134093328-2 used by active tags |
Macro 18 — DOM: upgrade-auth-form-email-input | References old app DOM element — may not exist on new site |
4. Oddities & Cleanup Items
| # | Finding | Severity |
|---|---|---|
| 1 | Universal Analytics still active — Tags 321, 353, 354, 360 fire on page views and events to UA-134093328-2. UA was sunset July 2023. These send data nowhere useful. | Medium |
| 2 | Duplicate GA4 pageview — Config tag (389) already sends page_view. Event tag (391) sends another. Remove Tag 391. | Low |
| 3 | Orphaned fbq call — Tag 361 calls fbq("track","CompleteRegistration") but no Meta pixel base code exists. This throws a JS error on every userCreatedAccount event. |
Low |
| 4 | ZoomInfo obfuscated script — loaded in page body outside GTM. Not unusual but worth knowing it's there. | Info |
| 5 | HubSpot form ID duplication — The Webflow contact form has 0-1_contact_sales_utm_source hidden field repeated 8 times with the same HubSpot form ID (9392218a-dac1-4c52-8fba-5dec7ea893d0). Likely a Webflow bug, not GTM, but could cause issues with HubSpot attribution. |
Low |
| 6 | OneTrust gating — HubSpot script (Tag 411) and Datadog RUM are behind optanon-category-C0002 (performance cookies). If a user declines cookies, HubSpot tracking and Datadog break. This is correct for GDPR but means EU traffic is partially untracked. |
Info |
| 7 | 30 paused tags still in container — adds ~15-20KB to container download. Delete after 2-week validation. | Low |
| 8 | Container version 182 — very high version count suggests frequent edits without a version naming/notes discipline. Consider using GTM Workspaces for future changes. | Info |
5. Recommendations (Priority Order)
- Wire HubSpot lifecycle stage → Google Ads conversion via API or HubSpot's native Google Ads integration
- Feed GCLID + timestamp + conversion action when a contact reaches SQL stage
- Set this as the primary conversion action in Google Ads for PMax
- Demote
userCreatedAccountto secondary/observe-only
- In Google Ads UI → Conversions → check which are set as "Primary" vs "Secondary"
- Only enterprise-quality conversions (Contact Sales, Book Demo, SQL) should be Primary
- All self-serve events (account creation, pro payment) should be Secondary (observe-only)
- Add
fbq('init', 'PIXEL_ID')+fbq('track', 'PageView')as a new tag on All Pages - Fix Tag 361 to work with the base pixel, or replace with proper Meta conversion tag
Sending data to a dead endpoint. UA was sunset July 2023.
Config tag (389) already handles this. Tag 391 causes inflated pageview counts.
Either install Meta pixel or remove the tag. Currently throws a JS error on every userCreatedAccount event.
Identify owner of secondary Google Ads account, remove if unused.
Enable on all 12 Google Ads tags, or consciously disable on secondary ones. Currently inconsistent: enabled on 6, disabled on 6.
~30 paused tags still add ~15-20KB to container download weight.
Remove triggers that only fire paused/deleted tags.
dtxcookie, second UA settings, old DOM selectors.
Version notes on every publish, workspace-based workflow. Container is at version 182 with no naming discipline.
Appendix: Tracking IDs Reference
| Platform | ID | Status |
|---|---|---|
| GTM Container | GTM-KQMLVD6 | Active on www + app |
| Google Ads (primary) | AW-759682899 (customer 844-432-8711) | Active |
| Google Ads (secondary) | AW-647436322 | Active — unknown owner |
| GA4 | G-S8MHVTV29S | Active |
| Universal Analytics | UA-134093328-2 | Dead (sunset 2023) |
| Universal Analytics (#2) | UA-134093328-6 | Dead (variable only) |
| Partner 2949218 | Active | |
| Meta Pixel | NONE | Not installed |
| HubSpot | 8765124 | Active (via GTM + Webflow) |
| Heap | (loaded outside GTM) | Active |
| Datadog RUM | (loaded outside GTM) | Active (OneTrust gated) |
| ZoomInfo | (obfuscated, outside GTM) | Active |
| Snowplow | conversions.flowcode.com | Active |
| OneTrust | eed4f849-6744-46e9-8b81-04d191129887 | Active |