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
- You import a GA event name as a goal in the Convert UI (e.g.,
purchase,sign_up,add_to_cart) - The tracking script watches for that event name being pushed to the
dataLayer - When the event fires, the script checks if it meets the matching criteria
- 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:
- The GA event name must be imported as a goal in the Convert UI
send_tomust match — If the event payload includes asend_toproperty, 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:
| Field | Requirement |
|---|---|
transaction_id | Must be present, non-empty, not null/undefined/false |
value | Must 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
send_to Matching RuleThis is the most common source of confusion:
| Scenario | Result |
|---|---|
Event has send_to: "G-ABC123", experience configured with G-ABC123 | Matched |
Event has send_to: "G-ABC123", experience configured with G-XYZ789 | Rejected |
Event has no send_to property | Accepted (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_tocheck 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
- Fire a duplicate event without
The experience_impression Event
experience_impression EventWhen 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=deniedand be filtered from GA reports
Recommendation: Keep the default behaviour (wait for page_view).
Troubleshooting
| Symptom | Likely Cause |
|---|---|
| Conversions not tracking | Check send_to matches the experience's measurement ID |
| Revenue not tracking | Verify 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 experience | Check which experiences are bucketed and connected to the goal |
| Duplicate conversions | Verify the event isn't firing multiple times on the page |
Updated about 1 month ago