Best Practice: First and Last Touch Attribution via Contact UTM Fields

An often overlooked, but primary contributor to the attribution challenge is the good old CRM, especially Salesforce. The reason isn’t immediately apparent, either.

Attribution is one of those terms thrown around by sales and marketing teams, but few companies ever actually achieve clear, systematic visibility into ROI (without having to spend days in spreadsheets). This guide reveals best practices for clean, consistent first and last touch attribution.

The Challenge

One of the core challenges that marketing, sales and growth teams face is in achieving clear attribution that reveals the efficacy of their efforts. Attribution can quickly become a complex topic in general, but anyone who has worked in a growth role knows that wrangling even the ‘simple’ stuff, like paid digital, can be tricky.

Answering even simple questions, like “how many customers came from Google Ads?” and “do Facebook leads convert to customers at a higher rate than other channels?” can turn into frustrating technical and data challenges, meaning hours normalizing data in spreadsheets.

Often overlooked as a primary contributor to this challenge is the good old CRM, especially Salesforce. The reason isn’t immediately apparent, either.

Ode to the CRM

Paid digital platforms are full of data, but are notorious for over-reporting conversions (assuming you have conversions set up properly, which isn’t easy) and only show aggregate performance, not user-level performance. What we really want is a customer-level view of attribution so we trace the pathways of our most valuable customers.

CRMs hold our customer-level data, but the fundamental issue is that most CRMs are designed to capture and store information that describes contacts. Achieving clear attribution requires tracking the actions those people took and where those actions took place (starting with first-touch source).

Said another way, CRMs are good at collecting data points about people or businesses (fields on their record), but fall short when it comes to storing and reporting on the events that happen throughout the customer journey.

What about marketing automation tools?

Marketing automation tools have layered this functionality on top of CRMs (Pardot, HubSpot, etc.), but even then, the user actions themselves live ‘under the hood’ and can only be leveraged within the tool itself. Sure, you can look at user behavior to do things like list-building and triggering automations (i.e., build a list of leads who did X and Y, or, if a lead does X and Y, add them to Z workflow), but additional analysis requires...exporting the data into a spreadsheet.

Many marketing automation tools have “built in” attribution features (like “Original Source” in HubSpot or the Google Analytics feature in Pardot), but again, real users know that those out-of-the box solutions are error-prone and limited in their ability to manage complexity or granularity.

Reporting problems for sales and marketing

One of the most common side effects of limited access to activity and attribution features is that many teams simply live with a primitive, campaign or channel-level view of attribution and efficacy, occasionally performing laborious, ad-hoc analysis in spreadsheets when performance is poor or in preparation for planning and strategy cycles (we’ve all experienced the pre-board meeting scramble…).

Specifically, reporting is limited to what is essentially campaign membership (the knowledge that someone was part of a campaign) or ‘standard’ source fields, which often require modification to match the needs of a particular business. (This often results in significant proliferation of campaigns, many times lacking clear structure, which further complicates reporting down the road.)

Teams that do attempt more granular attribution within the context of a CRM (even when tools like HubSpot and Pardot are used) inevitably go down the path of creating custom fields that represent user actions, which is a slippery slope that quickly leads to unmanageable complexity both for automation and reporting.

Proliferation of custom fields also significantly decreases the sustainability of the system because there’s often a single person who understands and can manage the fragile setup (and who is also the ‘go-to’ for any ad-hoc reporting questions).

A simple solution

The basic solution is surprisingly simple: leveraging UTM parameters, a common paradigm in web analytics, as custom fields on contact records.

In fact, with commonplace logic and only 5 custom fields on the contact record (in addition to the ‘standard` 5 UTM fields), we can passively record both first and last touch attribution data for form fills.

Here’s the step-by-step process:

1. Links are tagged using a clear, consistent structure (more on the difficulty and necessity of this below)

2. When someone enters the funnel by filling out a form, the tags populate hidden UTM fields (source, medium, campaign, content, term) in the form, which are written to the contact record (this is one of the oldest tricks in the book, but still surprisingly rare). Here's what this looks like in Pardot:

3. If the form fill is the contact’s first interaction with you, the initial set of UTM values is copied to un-editable “first touch” fields (we generally call them something like “first_touch_utm_source”, for example). Those values memorialize the contact’s source (first-touch) entry point.

  • This is very simple to accomplish with logic in most systems. The rule would be something along the lines of: If utm_source is known and first_touch_utm_source is unknown, copy the value of utm_source into first_touch_utm_source

4. Subsequent form fills by a contact overwrite the standard UTM fields, the current values of which represent a user’s last touch.

Here's what it looks like when a contact has two touchpoints from different channels:

This certainly enables more meaningful reporting within platforms by allowing you to get a significant amount of insight into attribution by querying contact records alone (many times removing the need to report on separate objects, which can be challenging).

The true power, though, is that a simple contact export can be combined with data from other sources (like spend data from ad platforms) to get an accurate and granular view of channel efficacy and ROI.

But wait, isn’t a first-touch/last-touch view more primitive than what you can see in tools like Pardot and HubSpot?

The short answer is yes, it is. Said another way, it’s simple to build a list of users who filled out X form, then viewed Y landing page, then opened and clicked Z email.

In our experience, though, asking that question likely means you haven’t felt the fire of trying to create meaningful reports based on those user actions, especially around ROI.

Creating a list is just one piece of the puzzle—tying that list to other meaningful data points, or portraying that user journey in meaningful ways, is a different game and almost always requires actually exporting those lists to combine them with other data.

Note that the point of this post isn’t to decry the shortcomings of these tools, but to point out that CRMs fundamentally aren't designed to present data in a way that makes reporting on complex customer journeys easy.

First and last touch data at the contact record level in your CRM is a best practice

The reality for almost all businesses is that the CRM is a core component of any marketing and sales technology stack and is often the ‘source of truth’ for customer data. (Even in a data warehouse scenario, the CRM is a data source.) At a minimum, the customer data in the CRM powers sales and marketing operations.

Because your customer data is your most valuable asset and attribution reveals how to optimize your business, having first and last touch data at the contact level in your CRM is a critical best-practice that ensures basic insight to ROI no matter how your marketing and sales technology stack changes.

Think about a scenario where all of your software systems failed and you had to start from scratch using only an export of your customer data from your CRM.

That’s an extreme example, but play out the situations for the company that had fairly granular first and last touch data and the company who didn’t. If you felt your stomach turn thinking about the second situation, you’re in good company.

Creating redundancy and portability in your customer data is only the beginning of the benefits, though. As I mentioned above, reporting becomes easier inside and outside of your software platforms and syndicating attribution information to other systems is often much simpler.


The challenge of capturing UTMs for user actions where they don’t submit information

One thing to consider is that this system works seamlessly in the context of initial inbound lead capture where a user is created when they submit a form and subsequent touchpoints are also form submit actions.

There are plenty of use-cases (and business models), though, where additional touchpoints for existing leads don’t have a mechanism for submitting information, by design (think about viewing or downloading content).

Capturing non-form-submit user actions is possible, though not always elegant. Many marketing automation tools will allow you to trigger workflows that allow you to update UTM fields based on user actions, which is extremely useful, but depending on the number of touchpoints you have, you can end up managing a significant number of automations, which can be cumbersome, time-consuming and fragile (which tends to limit scalability).

At that point, though, you’re really in need of a more robust solution for multi-touch user flows and attribution (which I discuss briefly below).

The challenge of a consistent system for tagging

The other thing to consider is that inconsistent and messy link tagging can make the value of this best practice irrelevant.

Anyone who has switched agencies or taken management of paid digital in-house has dealt with messy link tagging and the challenge of reconciling multiple values that mean the same thing (i.e., source = google or google-ads or adwords, etc.). You may be capturing attribution data, but if it isn’t consistent, you’ve created a significant reporting challenge for yourself (and a huge

As with all reporting, maintaining clean, consistent data is paramount, which is why we help all of our clients implement strict systems, tooling and data governance for link tagging.

The ultimate solution

While UTM parameters at the contact level are a best practice that every business should use (and are almost always an immediate win for B2B companies), they aren’t a comprehensive solution, especially for complex digital customer journeys that involve multiple types of touchpoints.

Here’s a quote from one of our previous posts that gives a high-level overview of our belief on the best way to solve this problem:

[The ultimate solution is] what we call a data-first ‘martech stack’ or ‘growth-tech stack.’ In this paradigm, you start by designing a data structure that defines your funnel, then deciding how you’ll capture that data, independently of any individual tool. The goal is to route that data to whatever [CRM], automation and analytics tools you want.

We all must crawl before we walk, though, and ensuring you have first and last touch data written to your contact records is a great (and simple) place to start.


Get weekly Go-to-Market Insights relevant for companies with $5MM - $50MM in revenue.