Blog

Data Analytics

Attribution That Survives Your Tool Stack: Keeping UTMs From Ad to Booking to CRM

Attribution That Survives Your Tool Stack: Keeping UTMs From Ad to Booking to CRM

UTMs get lost when redirects, forms, booking tools and CRM syncs don't pass them on. Capture them on landing, store them, and write them to the contact once.

UTMs get lost when redirects, forms, booking tools and CRM syncs don't pass them on. Capture them on landing, store them, and write them to the contact once.

7 min read
Portrait of Omer Faruk Ilhan.
Omer Faruk Ilhan
Business Analyst

Blog

Data Analytics

Attribution That Survives Your Tool Stack: Keeping UTMs From Ad to Booking to CRM

UTMs get lost when redirects, forms, booking tools and CRM syncs don't pass them on. Capture them on landing, store them, and write them to the contact once.

7 min read
Portrait of Omer Faruk Ilhan.
Omer Faruk Ilhan
Business Analyst
Dithered illustration looking along a stone aqueduct as a thin yellow stream runs through every arch, while a marble hand presses a clay seal into the one cracked joint.
logo of Facebook
logo of X
logo of LinkedIn
logo of Reddit
logo of Telegram
Contents
No headings found on page

UTM parameters get lost because each tool between the ad and the CRM has to pass them on, and most don't by default. Redirects drop the query string, visitors click to a second page, forms don't capture the values, and booking tools and CRM syncs don't map them. The fix is to capture UTMs on the first page, store them, and write them to the contact once.

Picture a B2B services firm running LinkedIn and Google ads to a landing page. The page links to a pricing page, which has an embedded scheduling widget, and bookings sync to the CRM through an automation. The ads are tagged carefully. Three months later, most new deals in the CRM show "Direct" or "Offline" as their source, and the marketing team can't say which campaign filled the calendar. Every tool worked. None of them handed the campaign data to the next one.

Why do UTM parameters get lost between tools?

UTMs live in the URL of the first page a visitor lands on, so they disappear as soon as the visitor moves on, unless something saves them. Every handoff after that is a place where they can fall off.

The common breaks, in the order a visitor meets them:

  1. Redirects. A link shortener, a www redirect or a regional redirect that doesn't forward the query string sends the visitor to a clean URL. Google's auto-tagging help page warns of the same problem for its own click ID: if your site uses redirects, the parameter has to reach the final landing page.

  2. The second page. The visitor reads the landing page, then clicks to pricing or a contact page. That new URL has no UTMs.

  3. The form. The form sends name, email and company, but nothing reads the UTMs from the page and sends them too.

  4. The booking tool. An embedded or linked scheduler is a separate application. It only knows the campaign if you pass the values to it.

  5. The sync. The automation that creates the CRM contact maps the fields someone thought of on the day, and campaign fields weren't among them.

  6. Overwrites. A later visit or a second form fill replaces the original values, so the first campaign is lost even when capture works.

You can't rely on the referrer to fill the gap. The default browser Referrer-Policy is strict-origin-when-cross-origin, which sends only the origin, not the full URL, to another site. The query string with the UTMs isn't part of it.

A sealed letter carried through a line of doorways, its yellow wax seal fallen at one threshold while a marble eye watches from the end

What are UTM parameters, and which ones should you use?

UTM parameters are tags added to a link's URL that tell analytics and CRM tools where a visit came from. Google Analytics asks for three on every tagged link: utm_source, utm_medium and utm_campaign.

Google Analytics' URL builder guide lists the full set:

  • utm_source: the referrer, for example google, newsletter or linkedin.

  • utm_medium: the marketing medium, for example cpc, email or social.

  • utm_campaign: the campaign, promotion or slogan.

  • utm_term: the paid keyword.

  • utm_content: which creative or link within the same campaign.

  • utm_id, utm_source_platform, utm_creative_format and utm_marketing_tactic: optional extras for campaign IDs, the buying platform, the ad format and the targeting.

Google also notes that parameter values are case sensitive: utm_source=google and utm_source=Google count as two sources. A short written naming convention (lowercase, fixed values for medium, one campaign name per campaign) prevents most reporting clean-up later.

Ad platforms add their own click IDs as well. A GCLID, short for Google Click Identifier, is the parameter Google Ads adds to the landing page URL when auto-tagging is on. Treat click IDs the same way as UTMs: capture them on landing and store them with the contact.

How do you carry UTMs from the landing page to the form?

Read the UTMs when the visitor first lands, save them in the browser for the session, and put them into hidden form fields when the visitor submits. That way it doesn't matter how many pages they click through before converting.

A hidden field is a form field the visitor doesn't see that sends a value with the submission. HubSpot's guide to hidden form fields says they can capture URL parameters such as utm_campaign and store them in contact properties. Most form tools have an equivalent.

A marble fingertip pressing a yellow wax seal onto one new line in an open ledger, loose unsealed slips scattered at the edge

What the capture step needs

  • A small script on every page that reads UTMs and click IDs from the URL on arrival and saves them in a first-party cookie or session storage.

  • First touch kept separately from last touch. Save the first values once and don't overwrite them; update a separate set on each new tagged visit.

  • Hidden fields on every form filled from that stored data, not only from the current URL.

  • One list of field names used by the website, the forms, the scheduler and the CRM.

If the booking or checkout step sits on a different domain, Google Analytics needs cross-domain measurement, which adds a _gl parameter to links between your domains so the visit counts as one user. That keeps your analytics sessions joined; it doesn't write anything to your CRM.

How do you keep UTMs through a booking tool like Calendly?

Pass the stored UTMs to the scheduler explicitly, then read them back from the booking data. A scheduler can only report the campaign it was given.

Calendly is a common case. Its conversion tracking guide supports five parameters: utm_source, utm_medium, utm_campaign, utm_content and utm_term. Values must be 255 characters or less, or they may not be tracked. Its embed guide shows how to pass UTM values into an embedded scheduler, including pulling them from the page URL with a short script. Calendly's developer FAQ says the values are then available in the webhook payload and the List Event Invitees endpoint, under tracking.

Two practical points follow:

  1. Pass the stored values, not the current URL. By the time a visitor opens the scheduler on the pricing page, the URL has no UTMs. Use the values saved on landing.

  2. Map the tracking fields in your sync. If an automation in n8n, Zapier or Make creates the CRM contact from the booking webhook, add the tracking fields to that mapping. This is the step most often skipped.

How do you make the CRM keep the right source?

Store first-touch and last-touch campaign fields as separate properties on the contact, write the first-touch set once and never overwrite it, and match new submissions to existing contacts before creating new ones.

Three rules keep the data usable:

  • Write-once first touch. The original source should be set by the first submission or booking and protected from later updates, whether by a workflow condition or by only filling empty values.

  • Deduplicate on the way in. A booking that creates a second contact splits the history: the form fill has the UTMs and the booking has the meeting. Clean Your CRM Data Before You Add AI covers matching rules and ownership.

  • Copy the source to the deal. Reports on revenue usually run on deals, not contacts. When a deal is created, copy the contact's first-touch fields onto it so the report doesn't depend on later contact changes.

If you are still choosing a CRM, HubSpot vs GoHighLevel for Service Businesses Adding AI compares how the two handle forms, bookings and automation.

How do you test that attribution survives the whole journey?

Run a tagged test visit through every path a real buyer takes and check each tool for the values at the end. Do it before a campaign launches and after any change to the site, forms or automations.

  1. Build a test link for each live channel with a unique campaign value, such as utm_campaign=test_linkedin_nov.

  2. Click from the real ad preview or post, not a typed URL, so redirects and shorteners are included.

  3. Browse to a second page before converting.

  4. Submit the form and check the hidden fields arrived on the contact.

  5. Book through the scheduler and check the tracking fields in its booking record or webhook.

  6. Check the CRM contact and deal for first-touch and last-touch values.

  7. Visit again with a different tag and confirm the first-touch values didn't change.

  8. Delete or mark the test records so they don't sit in reports.

Write down where each test failed. The answer is usually one or two specific handoffs, not the whole stack.

How we approach it at Vizio AI

We start by drawing the journey as it is: every ad, link, redirect, page, form, scheduler, automation and CRM object a lead passes through. Then we run tagged test visits along each path and mark where the values stop.

The fixes are usually small and specific: one capture script, one set of field names shared across tools, hidden fields on every form, the tracking fields added to the sync, and write-once rules in the CRM. Only when the data arrives intact do we build reporting on top, as in our public work on a Marketing Data Dashboard and a Digital Marketing Analytics Dashboard.

This is part of the funnel and data work of our Growth Studio.

Sources

FAQs.

01

Should I use first-touch or last-touch attribution?

Keep both and decide per question. First touch shows which channel brings new people in, which matters for budget between channels. Last touch shows what finally moved someone to book or buy, which matters for campaign and page decisions. Storing both on the contact costs little, while rebuilding a lost first touch later is usually impossible because the original visit data is gone.

02

Do UTM parameters hurt SEO?

UTMs belong on links you control in ads, emails and social posts, not on internal links within your own site. Tagging internal links resets the source in analytics and creates many URL variants of the same page. Set a canonical URL on each page so search engines treat tagged and untagged versions as one, and keep UTMs off your navigation and on-page links.

03

Can I recover the source of leads that already lost their UTMs?

Only partly. You can sometimes match contacts to ad platform lead lists, form submission records or analytics sessions by date and email, but this is slow and incomplete. It's better to mark those records as unknown, fix capture now, and judge channels on the data collected from the fix onward rather than on a guessed history.

04

Does an ad platform's own conversion tracking replace UTMs?

No. Platform pixels and conversion APIs report results inside that platform, each by its own rules, so they can't give a single view across channels. UTMs and click IDs stored in your CRM let you compare every channel in one place against real deals and revenue. Use both: platform tracking to optimise the ads, CRM fields to decide where the budget goes.

05

Who should own UTM naming in a small team?

One person, usually whoever runs reporting, should own a short written convention and a shared link builder. Everyone who creates campaigns uses the same values for source and medium and a set pattern for campaign names. Review new values monthly and correct mistakes quickly, because inconsistent values split one channel into several lines in every report.

01

Should I use first-touch or last-touch attribution?

Keep both and decide per question. First touch shows which channel brings new people in, which matters for budget between channels. Last touch shows what finally moved someone to book or buy, which matters for campaign and page decisions. Storing both on the contact costs little, while rebuilding a lost first touch later is usually impossible because the original visit data is gone.

02

Do UTM parameters hurt SEO?

UTMs belong on links you control in ads, emails and social posts, not on internal links within your own site. Tagging internal links resets the source in analytics and creates many URL variants of the same page. Set a canonical URL on each page so search engines treat tagged and untagged versions as one, and keep UTMs off your navigation and on-page links.

03

Can I recover the source of leads that already lost their UTMs?

Only partly. You can sometimes match contacts to ad platform lead lists, form submission records or analytics sessions by date and email, but this is slow and incomplete. It's better to mark those records as unknown, fix capture now, and judge channels on the data collected from the fix onward rather than on a guessed history.

04

Does an ad platform's own conversion tracking replace UTMs?

No. Platform pixels and conversion APIs report results inside that platform, each by its own rules, so they can't give a single view across channels. UTMs and click IDs stored in your CRM let you compare every channel in one place against real deals and revenue. Use both: platform tracking to optimise the ads, CRM fields to decide where the budget goes.

05

Who should own UTM naming in a small team?

One person, usually whoever runs reporting, should own a short written convention and a shared link builder. Everyone who creates campaigns uses the same values for source and medium and a set pattern for campaign names. Review new values monthly and correct mistakes quickly, because inconsistent values split one channel into several lines in every report.

Read more.

Dithered illustration looking along a stone aqueduct as a thin yellow stream runs through every arch, while a marble hand presses a clay seal into the one cracked joint.
Attribution That Survives Your Tool Stack: Keeping UTMs From Ad to Booking to CRM
Omer Faruk Ilhan
7 min

UTMs get lost when redirects, forms, booking tools and CRM syncs don't pass them on. Capture them on landing, store them, and write them to the contact once.

Dithered illustration of a marble hand raised in an orator's gesture at the foot of an empty stone amphitheatre, rings of characters spreading up the seats toward one small yellow lamp held up in the rows.
B2B LinkedIn Content in the Age of AI: What Still Works for Founders
Can Dinlenc
8 min

Specific, first-hand posts about real decisions still work. LinkedIn says its feed now cuts engagement bait, recycled posts and automated comments.

Dithered illustration of a marble hand winding the key of a clockwork writing automaton whose quill, tipped in red, fills a ledger with lines of characters.
Claude Code for Operations Teams: Automating Internal Tools Without a Dev Team
Umur Duman
7 min

Non-developers can automate internal work with Claude Code once permissions, written rules and review are in place. What it suits and how to guard it.

Think AI-first.
Move future-fast.

Let’s build what’s next! From product ideas and intelligent workflows to data-driven systems and scalable growth operations.

Have a product idea, AI workflow, data system, or growth challenge that needs clearer execution?

Let’s shape the right system around it.

Think AI-first.
Move future-fast.

Let’s build what’s next! From product ideas and intelligent workflows to data-driven systems and scalable growth operations.