Contact without context says too little

SpySearch analytics: service intent, phone, email and two forms, with lead validation, error tracking and integrations across GA4, Ads and Clarity.

SpySearch analytics preserves service context from an offer click to contact. It distinguishes contact channels, two forms, confirmed submissions and form errors.

Not every contact means the same thing

For SpySearch, a company detecting listening devices, hidden cameras and GPS trackers, we prepared analytics covering transitions from service offers to contact. The Google Tag Manager setup included Google Analytics 4, Google Ads, Microsoft Clarity and a custom script sending events to the dataLayer.

Measurement separates interest in individual services, phone and email clicks, message submissions and callback requests.

Everyone reaches Contact. Not for the same reason.

Buttons for different services lead to the same contact page. Knowing that a user opened “Contact” does not preserve the difference between interest in a vehicle inspection, trace analysis or securing a meeting room.

The website also supports two submission paths: a full message form and a short callback request. Their outcomes had to be distinguished, while separating the choice of contact method from a confirmed form submission.

A button can carry more than its destination URL

We designed the intention_click event with parameters describing user intent and service type. Rules use the button text, the page on which it was clicked and the destination URL. “Order trace analysis,” “Check the vehicle now” and “Secure the room” received separate service labels. For “Book an audit” and “Book a discreet audit,” we separated the audit-booking intent, including transitions from the homepage and the About page.

Phone-number and email-address clicks were described with the shared contact_click event and a contact-type parameter. This allows contact-channel choice to be analyzed independently from service-button transitions.

Clicking send is not yet a lead

The two Contact Form 7 forms received separate analytics identifiers: contact_form for a message and callback_form for a callback request. GA4 and Clarity submissions were tied to wpcf7mailsent, the form mechanism's confirmation of a successful send. This allows both paths to be distinguished within the generate_lead event.

Before passing a submission to GA4 and Clarity, we added a check of the event-ID format and whether it had already been handled in the current browser session. Only a verified signal triggers the submission tags, limiting repeated processing of the same event.

We also tracked three separate form problems: validation error, message-send failure and spam classification. The lead_form_error event passes the error type and form identifier to GA4 and Clarity, providing a basis for identifying which path contains friction.

The same signal serves a different role in each system

In Clarity, we prepared events and labels for service intent, contact type, submitted forms and errors. They make it possible to select sessions connected with a specific action and inspect how that interaction unfolded. We also added Analytics client-ID and session-ID variables.

In Google Ads, we configured the form tag and tags for phone-number and email-address clicks, together with the Google tag and conversion-linking mechanism.

Custom events describe the service, contact channel and form-handling outcome. They do not transmit the content of the enquiry or data entered into fields, which matters given the nature of submissions made to SpySearch.

18 tags — but preserved context matters more

The resulting configuration contains 18 tags, 8 rules and 6 custom variables. It connects measurement of service interest with separate contact channels, two submission types and form errors.

SpySearch gained a foundation for assessing which offer elements lead users toward contact, how users choose the contact method and where they encounter problems when sending an enquiry.

One contact page serves many services?

We design measurement so that moving to a form does not erase what the user was looking for, which contact channel they chose and whether the enquiry was actually submitted.