Mikhail Kuznetsov
The Eye relic
Relic 16 of 25 · The Eye

Tracking Setup Guide

The Eye of Horus: protection, healing and royal power. It sees everything.

Credit every sale to the ad, email or page that earned it.

The chain every sale has to travel

A sale can only be credited if the source survives every hop between the first click and the payment. Most tracking breaks at one weak link, usually the form or the checkout. Walk the chain in this order and fix the first break you find.

  1. Link: every link you control carries UTM parameters.
  2. Page: the landing page reads those parameters and keeps them.
  3. Form: hidden fields write them onto the lead record.
  4. CRM: the contact stores first touch and last touch separately.
  5. Checkout: the purchase is tied to the same contact, with value and currency.
  6. Platforms: the ad platforms receive the conversion back, browser and server side.

One naming convention, used everywhere

Reports only add up if everyone tags the same way. Lowercase, no spaces, hyphens between words. Write this down once and share it with anyone who creates links.

ParameterAnswersRuleExample
utm_sourceWhere did they come from?The platform or senderfacebook, google, newsletter, youtube
utm_mediumWhat kind of traffic?Pick from a fixed list onlypaid-social, cpc, email, organic-social, referral
utm_campaignWhich push?Offer + monthvsl-launch-2026-10
utm_contentWhich ad, email or link?Creative or placement namehook-pricing-v2, footer-link
utm_termWhich audience or keyword?Ad set or keywordlookalike-buyers, funnel-agency

Your fixed medium list

paid-social, cpc, email, sms, organic-social, referral, partner, …

Ready-made link templates

Meta ads (paste into the URL parameters field)

utm_source=facebook&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_term={{adset.name}}&utm_content={{ad.name}}

Meta fills the names in automatically, so name your campaigns, ad sets and ads with the same convention.

Google Ads (tracking template)

{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_term={keyword}&utm_content={creative}

Keep auto-tagging switched on as well, so the gclid is added next to your UTMs.

Email

?utm_source=newsletter&utm_medium=email&utm_campaign=[sequence-name]&utm_content=[email-number]-[link-name]

Bio link and organic posts

?utm_source=instagram&utm_medium=organic-social&utm_campaign=bio-link

Your own

?utm_source=… &utm_medium=… &utm_campaign=… &utm_content=…

Capture it on the lead

01

Add hidden fields to every form

utm_source, utm_medium, utm_campaign, utm_content, utm_term, gclid, fbclid, landing page URL and referrer. If your form tool can fill hidden fields from the URL, turn that on.

02

Keep the parameters past page one

Visitors browse before they convert, and the UTMs fall off the URL. Store them in a first-party cookie or local storage on the first visit and fill the hidden fields from there.

03

Store first touch and last touch

Two sets of fields on the contact. First touch is written once and never overwritten. Last touch is updated on every new conversion. You need both to see which channel starts sales and which one closes them.

04

Ask the buyer too

Add one open field to your booking or checkout form: "Where did you first hear about [brand]?" Self-reported answers catch podcasts, word of mouth and dark social that no pixel sees.

The events to send

Fire each event from the browser (pixel or tag) and from your server (Conversions API, enhanced conversions). Send the same event ID from both so the platform counts it once.

EventFires whenSend with it
PageViewAny page loadsNothing extra
LeadOpt-in form submitsEmail and phone (hashed), event ID
ScheduleA call is bookedEmail, phone, event ID
InitiateCheckoutCheckout page loadsProduct, value, currency
PurchasePayment succeeds (from the payment webhook, not the thank-you page)Value, currency, order ID, email, phone

Test it before you trust it

  • Click a tagged link in a private window and submit the form with a test email.
  • Open that contact in your CRM: all five UTMs, landing page and click ID are filled in.
  • Browse two more pages, then convert: the UTMs are still captured.
  • Make a test purchase: the order is attached to the same contact with the right value.
  • Check the platform event tool: one Purchase, not two, with browser and server both received.
  • If checkout is on another domain, confirm the parameters cross over to it.
  • Repeat the whole test after any change to forms, checkout or page builder.

Where tracking usually leaks

LeakSymptomFix
Redirects strip the query stringLots of "direct" trafficPass parameters through every redirect and short link
Embedded forms in an iframeHidden fields emptyPass the parameters into the embed URL
Purchase fired on thank-you pageDuplicate or missing salesFire from the payment webhook on the server
Mixed naming"Facebook", "fb" and "facebook" as three sourcesOne convention, a shared link builder sheet
No event IDPlatform reports double the salesSame ID from browser and server

Want this built for you instead of by you?

Return to the vault