Campaign Tracking in Adobe Analytics: Tracking UTMs and CIDs

Get Frederik Werner's method for campaign tracking in Adobe Analytics using UTMs and CID tracking codes.
Frederik Werner
Aug, Tue 01, 2023

Campaign tracking in Adobe Analytics can be a challenge. In this article, Frederik Werner shows you how to track both CIDs and UTMs in Adobe Analytics to help you get the best of both worlds.

Adobe Analytics is one of the most flexible analytics solutions on the market. While that is great to utilize for almost every use case imaginable, it also brings some unique challenges. For example, there often is no clear way to implement a certain feature as similar results could be achieved in slightly different ways, not all of them being the ideal solution.

A good example for this is campaign tracking. To track a campaign in Adobe Analytics, the widely accepted best practice is to use a generic Campaign ID, commonly through the "cid" URL parameter. In Adobe Analytics, we would then translate a generic ID (like "SEA-123") into more specific information through Classifications, like a campaign name, channel, or even budget information. Doing that, we don't have to expose all required information in the URL and are able to adjust information retroactively if needed. Even better, tools like Accutics Standardize make it super easy to manage those IDs across the whole company.

But life is not always that easy. Marketing campaigns are often run by agencies that just love their UTMs, as they can just cram everything in the URL without any governance. Thinking beyond analytics, many other martech tools (like CRM or personalization tools) tend to only work with UTM tags. I've seen many newsletter tools automatically attaching UTMs but have no easy workflow for other parameters. As a result, we often find ourselves with only UTMs attached to the URL but without a proper CID. 

It is quite clear that we should strive to make CIDs the standard in our company but that it can be a very long up-hill battle. But what do you do until then? In my personal opinion, it can easily make sense track both CIDs and UTMs to Adobe Analytics, at least when the alternative to UTMs is simply nothing. For that reason, this post intends to help you get your campaign tracking to a good place, where both CIDs and UTMs are tracked in a sane way. First, let's look at the setup in Adobe Launch.


Join the Mastering Adobe Analytics series

Frederik Werner shares his advanced-level skills to help you get bigger wins and more actionable insights from Adobe Analytics in this Accutics Academy series.

Check it out

Adobe Launch Setup

Once we have decided to track both CIDs and UTMs, we need to get Adobe Launch to capture all desired parameters. To start, let's create 6 new Data Elements, one for each UTM parameter plus the CID:

Next, I'm going to create an additional Data Element that simply concatenates the UTM parameters. That way, we don't have to use additional dimensions or Context Data to capture all UTMs at once. The easiest way to concatenate values in Launch is through the Constant Data Element Type, like below:

As you can see, I'm simply pulling all of my UTMs into a single value, separated by a dollar sign "$" as delimiter. If the dollar sign is something that occurs often in your UTMs (to which I would ask "WHY?!") you can use any other character or even multiple characters instead.

Next up, let's create a bit of logic to only return the string of concatenated UTMs if they are actually present. If we wouldn't do that, we would always track "$$$$" (only the separators) if there aren't any UTMs present. To do that, we can use the very handy Conditional Value Data Element like below:

With this handy Data Element, we ensure that the we only use the long string of UTMs if at least the UTM Source parameter is present. The "is truthy" operator simply checks if it contains a value, ensuring we don't introduce a lot of noise to our data.

Now that this is in place, we have to take care of the logic that figures out if we should track the CID or UTMs. Since the CID is usually the more "valuable" parameter, we should use it wherever possible and only fall back on UTMs if the CID is not there. To do that, we once again use our handy Conditional Value Data Element Type:

The logic here is very similar to what we've done before. We check if the CID parameter exists; if it does, we use it directly; if it doesn't, we use the concatenated UTMs, which only return a value if the source is present. Pretty nifty, right?

Now, with all of this in place, we can simply use the URL: Campaign Parameter Data Element you see above in the Adobe Analytics Extension for the Campaign Parameter:

And that's all we need! With this simple setup, we're now able to track both UTMs and CIDs to Adobe Analytics, all while giving preference to the more valuable CID. Now, let's look at what we need to set up in Adobe Analytics.

Get actionable marketing analytics insights straight to your inbox

Sign up to newsletter

Adobe Analytics setup for UTMs and CIDs

Now we are tracking both CIDs and UTMs into Adobe Analytics' Campaign variable, aka eVar0. The long string of concatenated UTMs is not the most readable value to work with, so let's turn it into something better!

We are going to repurpose our existing Classifications to take the UTM string and pull it into the existing dimensions. This part is very specific to your company, my current campaign Classifications looks something like this:

Some of those fit the UTM parameters already! Next, let's head over to Classification Rule Builder to define the logic that pulls the values apart again. For the format we've used above (using $ as delimiter), a regular expression to separate the values would be "(.*)\$(.*)\$(.*)\$(.*)\$(.*)" like below:

All that is left to do is to assign the groups from our regular expression to the appropriate classification dimensions. As you can see in rows 9 through 13, I'm doing my best to map the existing Classification dimensions to the UTMs. For the last three rows, I don't have anything to match, so I'm using the static value of "Not available (UTMs used)" to annoy my users into using CIDs (as they should!).

With this neat setup, my marketing stakeholders can now use both CIDs and UTMs for their landing pages and be sure that everything is tracked. If they use both for the same URL, we prefer the more valuable CID. 


I hope this post was helpful to you. As I've demonstrated, we do have an effective way to bring balance to the force between UTMs and CIDs and track the best information available. By tracking some default values for unavailable Classifications, we can even use UTM tracking as a way to motivate our Adobe Analytics users to choose the right approach.

No more lost campaign data from that rouge marketing agency, yay!

Relates articles


Get the latest marketing analytics insights

No-nonsense marketing and analytics best practices from international industry leaders, straight to your inbox.
Sign up