Google Tag Manager

For teams using GTM as the hub for GA4, Google Ads, and any other tag-managed tool. You'll have Zellify funnel events pushed into the GTM dataLayer with consistent naming. You need a GTM container and a Zellify campaign.

What this integration does#

Zellify loads the GTM container on funnel pages. Every funnel event pushes a dataLayer object that GTM triggers can pick up. Configure GA4, Google Ads, or any tag-managed tool inside GTM as usual.

GTM is campaigns-only: GTM is configured per campaign. Bare funnel links (/f/<id> without a campaign) won't load the GTM container. If you're running Google Ads — which depends on GTM for conversion tracking — your traffic must go through a campaign link.

Connect GTM#

  1. Open Dashboard → Campaigns → <campaign> → Settings.
  2. Enable Google Tag Manager.
  3. Paste your GTM container ID (format GTM-XXXXXXX).
  4. Save.

Unlike Meta and TikTok, GTM is not tied to a traffic-source choice. You can run GTM on a Meta-sourced campaign alongside the Meta Pixel.

Where to find your container ID#

Open Google Tag Manager and copy the container ID at the top of the dashboard.

Events pushed to dataLayer#

Funnel eventdataLayer event nameTrigger
Page viewpage_viewA funnel page is viewed
LeadleadA lead event is triggered
Page completedpage_completedA user navigates away from a funnel page
Email capturedemail_capturedA user submits their email
Checkout presentedcheckout_presentedThe checkout or payment form is shown
Payment method addedpayment_method_addedA user enters their payment method
Payment succeededpayment_succeededA payment completes successfully
Payment failedpayment_failedA payment fails
Trial startedtrial_startedA free trial begins
Subscription startedsubscription_startedA paid subscription begins

See Event reference for the canonical taxonomy.

Payload structure#

Every dataLayer push has the same shape:

Code
1{2  event: "<event name from the table above>",3  timestamp: "2026-04-26T12:34:56.789Z",4  data: { /* event-specific fields */ },5  context: { /* funnel and session metadata, see below */ }6}

Context fields (every event)#

page_location, page_title, page_slug, funnel_id, campaign_id, experiment_id, external_id, event_id, fbp, fbc, country, region.

Data fields by event#

page_completed, email_captured — the user's funnel answers and form responses.

checkout_presented, payment_method_added, payment_succeeded, payment_failed, trial_started, subscription_started

  • checkout session or transaction id
  • total amount (decimal)
  • currency code
  • product category
  • items array, with each item carrying:
    • productId
    • priceId
    • price (decimal)
    • quantity
    • paymentTyperecurring or one_time
    • name (optional)

Using these events in GTM#

Create a GTM trigger on the dataLayer event name and a GA4 Event tag that reads data.* and context.* variables. For Google Ads conversions, wire the payment_succeeded event to an Ads conversion action with the data.amount and data.currency parameters.

Test and verify#

  1. Enable GTM's Preview mode against the funnel domain.
  2. Walk through a test funnel.
  3. Confirm the dataLayer pushes appear in the preview console.

:::tip Use GA4 DebugView alongside GTM Preview to confirm end-to-end tagging. :::

Going live#

Publish your GTM container. Confirm real events land in GA4 or Google Ads.

Troubleshooting#

SymptomLikely causeFix
dataLayer not pushingGTM container ID mismatch or missingRe-paste the container ID (format GTM-XXXXXXX)
GA4 events missing parametersTag not reading dataLayer variablesAdd matching dataLayer variables in GTM and map them on the tag
payment_succeeded counted twice in GA4Both the Zellify tag and a custom Ads tag firingConsolidate on one conversion tag
Campaigns
Where GTM is configured.
Event reference
Canonical event taxonomy.
Meta integration
Pair with GTM for full Meta coverage.