Analytics architecture · GTM · GA4 · Paid media · BigQuery

Multi-Domain Tracking & Conversion Measurement Rebuild

The business had traffic, leads and media spend — but no trustworthy conversion number. Old tags still fired, the same form submission reached reporting twice, and regional websites used different event logic. I rebuilt the measurement system so GA4, Google Ads, Meta and CRO teams worked from one governed signal.

Company
Northline Group · anonymized
Scope
12 regional domains
My role
Senior Digital Analyst
Core outcome
One trusted conversion system
Abstract analytics data streams converging into one governed measurement hub
Measurement architecture12 domains converging into one trusted conversion signal
Measurement control · after rebuildProduction verified
Sources12 regional domainshostname + location_id
Single sourceGTMgoverned container
AnalyticsGA4one property
Paid searchGoogle Adsprimary actions
Paid socialMetaverified event
WarehouseBigQueryQA layer
Anonymized architecture · no production IDs0 duplicate routes
Tags audited47

Every tag, trigger and platform connection inventoried.

Legacy tags retired19

Paused, quarantined, approved and removed.

Domains standardized12 / 12

One container, property and event taxonomy.

Duplicate key events0.4%

Down from an 18.7% audit baseline.

The business problem

The company could not tell whether performance changed — or tracking changed.

GA4, Google Ads and Meta reported different lead totals. Some domains sent two page views per load; a form click could be counted even when validation failed; and historic tags still passed conversions to ad platforms. Channel ROI, cost per lead and site-to-site comparisons were therefore unreliable.

That also blocked conversion optimization: an A/B test cannot be trusted when its primary conversion fires twice or fires before the user has actually completed the action.

My Role

I owned the end-to-end measurement rebuild: diagnosis, stakeholder decisions, implementation, cross-platform QA, documentation and the reporting layer used to monitor the new setup.

  • Export and classify the complete GTM inventory
  • Agree Keep / Fix / Stop / Remove decisions with PPC, product and development
  • Design the multi-domain event and parameter taxonomy
  • Configure GA4, Google Ads and Meta delivery through GTM
  • Build BigQuery QA logic and the stakeholder dashboard

Applied Workflow

01

Inventory

Tags, triggers, variables, scripts and account links.

02

Reproduce

Test every hostname, device and conversion path.

03

Decide

Approve ownership and retirement with stakeholders.

04

Rebuild

One container, taxonomy and source of truth.

05

Activate

Verified signals to Ads, Meta and GA4.

06

Monitor

BigQuery reconciliation and alert thresholds.

Google Tag ManagerInventory, folders, triggers and release control
Google Analytics 4Event model, key events and DebugView
BigQuery + SQLDeduplication, hostname views and QA
Google AdsPrimary / Secondary conversion governance
Meta Events ManagerDataset, custom events and diagnostics
Tag AssistantNetwork-level firing validation
Looker StudioAcquisition and measurement health dashboard
Tracking PassportLiving ownership and change-control document
i

Portfolio-safe case. The company, domains, IDs and absolute volumes are fictionalized. Counts and percentages are normalized representative data; the audit logic, architecture, governance process and implementation decisions reflect the real work.

01 · Audit before changing production

Every tag received an owner, a purpose and a decision.

I did not delete unknown tags on sight. First I traced what each one sent, reproduced its trigger, checked the destination account and documented the business action. The resulting table was reviewed with PPC, product and development before anything was paused.

Keep12

Correct, required and owned.

Fix / rename8

Valid purpose, broken logic or naming.

Stop19

Legacy, duplicate or no longer used.

Remove8

Obsolete scripts after observation window.

GTM audit registerAnonymized reconstruction
Tag / triggerObserved behaviorDecisionReason and action
GA4 · Google tag · All pagesInitialization — All Pages
Two configuration calls on 4 domainsFixKeep one GTM implementation; remove the CMS copy.
UA · All Pages · LegacyPage View — All Pages
Still sending sessions to an unused propertyStopPause, move to legacy folder, remove after 14-day QA.
GA4 · lead_click_oldClick — CSS selector
Fired before form validationStopReplace with success callback and unique event_id.
Ads · Lead import from GA4Imported key event
Same outcome also sent directly from GTMSecondaryRetain one bidding route; keep import for comparison only.
Meta · Base pixel · CMSCustom script
Loaded alongside the GTM base pixelRemoveCentralize ownership in GTM and verify Test Events.
GA4 · pricing_viewCustom event — pricing module
One event with valid hostname and location_idKeepStandardize name and document as a micro-conversion.
01Evidence

Double Google tag

Tag Assistant and the network log showed two GA4 configuration requests on four sites: one from the CMS and one from GTM.

Remove the CMS script and make GTM the sole owner.
02Evidence

False-positive lead

The click trigger fired even when required fields failed validation. A second event fired after the successful server response.

Trigger only on confirmed success; attach event_id.
03Evidence

Duplicate Ads route

The same lead reached Google Ads from a direct GTM tag and an imported GA4 key event, both marked Primary.

Use one Primary route and demote the comparison signal.

Cleanup followed a controlled retirement process

Approved legacy tags were first paused and moved into 99_Legacy_Stopped with date, owner and replacement noted. After a 14-day observation window and regression QA across all hostnames, obsolete tags were deleted and the decision was recorded in the Tracking Passport change log.

01Stakeholder approval
02Quarantine folder
03Observation + removal
02 · Rebuild the measurement architecture

One container and one GA4 property — without losing local detail.

Twelve regional websites needed portfolio reporting and site-level accountability. I deployed the same GTM container and GA4 stream across every domain, then used hostname, location_id and form_type to separate performance in BigQuery and reporting.

Production event flow

12 / 12 domains covered
domain-a.testpage_hostname = east
domain-b.testpage_hostname = west
+ 10 hostnameslocation_id required
GTMshared container
versioned release
GA4behavior + key events
Google Adsapproved conversions
Metacustom lead event
BigQueryraw QA + reporting mart
Business event taxonomySame name and definition across every hostname
EventTrigger conditionRequired parametersGA4Ads useMeta use
lead_submitConfirmed form success responseevent_id, hostname, location_id, form_typeKey eventPrimaryOptimize
schedule_completeBooking confirmation receivedevent_id, hostname, location_idKey eventPrimaryOptimize
phone_clickTap on tracked phone linkhostname, location_id, placementKey eventSecondaryMeasure
contact_startFirst valid form interactionhostname, location_id, form_typeStandardSecondaryMeasure
pricing_viewPricing module becomes visiblehostname, location_id, page_typeStandardObserveObserve
-- Daily duplicate and hostname QA SELECT event_date, REGEXP_EXTRACT(page_location, r'^https?://([^/]+)') AS hostname, event_name, COUNT(*) AS event_rows, COUNT(DISTINCT event_id) AS unique_actions, SAFE_DIVIDE(event_rows - unique_actions, event_rows) AS duplicate_rate FROM analytics.events_* WHERE event_name IN ('lead_submit','schedule_complete') GROUP BY 1,2,3;

Why BigQuery was necessary

GA4 interface totals alone could not expose the same event_id arriving twice or identify which hostname lost tracking after a release.

  • Deduplicate confirmed actions by event_id.
  • Compare domains through hostname and location_id.
  • Reconcile paid-platform totals with validated leads.
  • Alert when event volume or parameter coverage changes.
Governance deliverable

Tracking Passport

A living source of truth for Analytics, PPC, CRO and Development — updated with the implementation, not after it.

Open the template

The passport lets a new analyst understand what is connected, what fires, where each event goes and which actions influence bidding — without opening every platform first.

01Accounts & identifiersGA4, GTM, Google Ads, Meta and supporting platform IDs.
02Platform connectionsGTM → GA4 / Ads / Meta and GA4 ↔ Ads status with QA notes.
03GTM inventoryExact tag, trigger, status, purpose and Keep / Fix / Stop decision.
04GA4 event mappingBusiness action → dataLayer event → trigger → tag → key-event status.
05Ads conversion reviewPrimary vs Secondary decision and the single approved delivery route.
06Change log & handoverDate, component, reason, owner and production validation.
03 · Activate and verify paid-media signals

Ads and Meta received the same confirmed business outcome — once.

The rebuild separated optimization outcomes from diagnostic micro-actions. Google Ads used a single Primary route for each approved conversion, while Meta received a custom form-completion event from the same confirmed success signal.

Conversion governance after rebuildExact IDs redacted · representative action names
PlatformActionSourceOptimizationStatusQA decision
Google AdsForm SubmittedWebsite · GTMPrimaryActiveConfirmed success only; unique event_id
Google AdsBooking CompletedWebsite · GTMPrimaryActiveConfirmation callback; cross-domain linker verified
Google AdsContact StartedWebsite · GTMSecondaryActiveObservation only; excluded from bidding
Google AdsGA4 Lead ImportGA4 importSecondaryComparisonPrevent duplicate optimization route
MetaWebsiteFormSubmittedDataset · GTMOptimizeReceivingCustom event validated in Test Events
MetaContactStartDataset · GTMMeasureReceivingFunnel diagnostic; not the primary outcome
Tag Assistant

One network request

Each approved event and platform destination fired once after a confirmed action.

12 hostnames · desktop + mobile
GA4 DebugView

Parameters present

hostname, location_id, form_type and event_id arrived with the expected values.

Schema coverage: 99.6%
Google Ads

Bidding signal clean

Only verified business outcomes remained Primary; imports were Secondary.

Diagnostics: recording conversions
Meta Test Events

Custom event received

WebsiteFormSubmitted appeared once with the correct source URL and location key.

Dataset status: active

Acquisition & tracking health dashboard

Data fresh · 52 min
Sessions124.9Kall hostnames
Validated leads1,855unique event_id
Ads ↔ GA4 delta4.8%inside 10% threshold
Duplicate rate0.4%inside 1% threshold
Validated leads by acquisition channelNormalized 30-day view
Google Ads
812
Meta
492
Organic
376
Other
175
04 · Applied result

The rebuild corrected reporting and made optimization decisions defensible.

The immediate outcome was not “more conversions” created by tracking. It was a reliable definition of conversion, a clean signal for bidding, faster issue detection and a measurement layer that CRO could safely use for baselines and experiments.

Duplicate key-event rate18.7% → 0.4%

Repeated confirmed actions removed through trigger fixes and event_id QA.

Six-week production readout
Ads vs validated lead delta31% → 4.8%

One bidding route and scheduled reconciliation replaced mixed totals.

Inside agreed 10% tolerance
Common event schema4 / 12 → 12 / 12

Every domain now uses the same definitions and required parameters.

Hostname-level visibility retained
Issue investigation1–2 days → <30 min

Passport ownership and dashboard thresholds exposed the failing layer.

Typical tracking incident
−26%reported Ads conversions

The first “drop” was the proof that cleanup worked.

After duplicate and micro-conversion actions were removed from Primary reporting, Google Ads showed 26% fewer conversions while validated lead volume stayed stable. This was not lost demand. It was inflated measurement being corrected, so bidding could optimize toward real outcomes instead of easy-to-trigger events.

Practical business valueWhat teams could do differently after launch
01

Paid media optimized to real outcomes

PPC could distinguish Primary business conversions from diagnostic micro-actions and compare channel efficiency without double counting.

02

Portfolio performance became comparable

Leadership could view acquisition, conversion and data quality by hostname while keeping one governed GA4 property.

03

CRO gained a trustworthy primary metric

Experiments could use confirmed lead_submit or schedule_complete events, deduplicated in BigQuery and segmented by domain, source and device.

01

Reliable baselines

Form completion, channel CVR and hostname benchmarks no longer changed because of duplicate tags.

02

Experiment readiness

Exposure, variant, event_id and outcome could be joined in BigQuery for valid A/B-test analysis.

03

Faster diagnosis

A performance decline could be separated from a missing tag, parameter break or source attribution issue.

04

Governed change

Every new tag or conversion required an owner, passport entry, QA evidence and release note.

Why this matters for conversion optimization

experiment_exposurevariant_idlead_submitschedule_completeevent_idpage_hostnamesource_mediumdevice_category

Without trustworthy events, CRO can optimize to a tracking artifact. The rebuild established the measurement contract required to identify friction, prioritize hypotheses and calculate real experiment impact.

What this case demonstrates

Measurement architectureDesigned one scalable GTM and GA4 system across a multi-domain portfolio.
Governance & stakeholder alignmentTurned an unknown legacy container into approved ownership and change control.
Paid-media activationConnected verified conversion outcomes to Google Ads and Meta without duplicate routes.
BigQuery + CRO enablementBuilt QA, reconciliation and experiment-ready data instead of another passive report.