Google Analytics Event Interception

Overview

When you import a Google Analytics event as a goal in Convert, the tracking script intercepts that event when it fires on the page and records it as a conversion. This page explains the interception model, matching rules, and common pitfalls.

How Interception Works

  1. You import a GA event name as a goal in the Convert UI (e.g., purchase, sign_up, add_to_cart)
  2. The tracking script watches for that event name being pushed to the dataLayer
  3. When the event fires, the script checks if it meets the matching criteria
  4. If it does, the script records a conversion for all experiences the visitor is bucketed into

Important: Importing a goal registers the event name only — it is not tied to a specific GA4 property. The property matching happens at runtime via send_to.

Matching Criteria

For Conversion Events

Two conditions must be met:

  1. The GA event name must be imported as a goal in the Convert UI
  2. send_to must match — If the event payload includes a send_to property, its value must exactly match the measurement ID configured for the experience (or inherited from the project)

If send_to is absent from the event, the event is accepted regardless of which GA4 property fired it.

For Revenue Events (purchase)

In addition to the above, revenue events require:

FieldRequirement
transaction_idMust be present, non-empty, not null/undefined/false
valueMust be present and greater than zero

The event must conform to the standard GA4 purchase event specification.

At Least One Bucketed Experience

There must be at least one active experience that:

  • The visitor is bucketed into
  • Has the corresponding goal connected to it

If no experience matches, the event is ignored even if the event name and send_to match.

The send_to Matching Rule

This is the most common source of confusion:

ScenarioResult
Event has send_to: "G-ABC123", experience configured with G-ABC123Matched
Event has send_to: "G-ABC123", experience configured with G-XYZ789Rejected
Event has no send_to propertyAccepted (any property)

Per-experience configuration: Each experience can have a different GA4 measurement ID. Experiences auto-inherit from the project level but can be overridden.

Multiple GA4 Properties

When your site has multiple GA4 properties, keep these rules in mind:

  • Importing a goal is just registering an event name — it's not property-specific
  • The send_to check happens at runtime against the experience's configured measurement ID
  • If you need the same event to work across properties, either:
    • Fire a duplicate event without send_to, or
    • Ensure each experience is configured with the correct measurement ID

The experience_impression Event

When a visitor is bucketed into an experience, the tracking script sends an experience_impression event to GA4 via the dataLayer. This event is used for reporting in Google Analytics.

Timing: Wait for page_view

By default, the script waits for the first GA page_view event before sending experience_impression. This ensures:

  • GA session data is initialised
  • Source attribution is correct
  • The event is not filtered out by GA Consent Mode

If you disable this (project setting "Do not wait for page_view event"):

  • The impression may arrive before GA initialises
  • It may show as (not set) source in GA reports
  • On consent-gated sites, it may carry pscdl=denied and be filtered from GA reports

Recommendation: Keep the default behaviour (wait for page_view).

Troubleshooting

SymptomLikely Cause
Conversions not trackingCheck send_to matches the experience's measurement ID
Revenue not trackingVerify transaction_id and value are present and valid
(not set) source in GA"Do not wait for page_view" is enabled; disable it
Event tracked for wrong experienceCheck which experiences are bucketed and connected to the goal
Duplicate conversionsVerify the event isn't firing multiple times on the page