Back
Marketing

UTM Parameter Builder at Going

As Going has continued to scale, I recognized that inconsistencies in our UTM creation could easily go from a minor inconvenience to a major issue, so I created this automated builder that delivers precisely tailored URLs across both teams and traffic sources.

Forrest Schaffer
Senior Manager, Growth Marketing at Going Previously One Strong Herd, Coinbase, Seer Interactive

This is a UTM parameter builder that any team can leverage to standardize their UTM taxonomy. We didn't have a process in place to ensure people were using the correct naming convention. As a result, this made our last-click attribution framework super fragile because it would be impossible to catch every variation. This builder was created with small and large teams in mind across general marketing, email/customer marketing, organic social, and user acquisition/growth.

For a better viewing experience, I’d recommend checking this out in Google Docs via the “use in” link above.

Campaign Taxonomy

When it comes to choosing sources, you ultimately need to work backwards from the question, “Where are people coming to our website from?” A good place to start is to list all of the paid advertising channels you’re running in addition to other popular sources from other teams. Each organization will have different sources based on how they drive traffic to their site. For example, some folks have a Quora strategy, so that would be listed under sources.

Campaign Taxonomy

UTM Taxonomy

UTM Taxonomy

General Marketing Builder

Our martech setup at Going is actually quite simple, as we’ve been fortunate to hire extremely talented data and software engineers on the team. Our current stack, including platforms for data engineering to be able to do their thing, looks like: Javascript cookie for capturing UTM/URL parameters, PostHog for logging page view (and other) events, Snowflake for data storage and transformation compute, dbt for defining the transformation logic, Airflow for automating any Python scripts we use (mainly for APIs), and finally Preset for data visualization. We also use Braze as our email marketing platform. This setup has been fantastic because we own all of our data and can unify it at the user level which avoids the use of a CDP (customer data platform).

We currently use a last touch attribution model which is our team’s general focus. It goes without saying that you should iron out your UTM standardization to ensure a simple attribution model like first-touch or last-touch will be failproof. This will set your team up for success when it’s time to transition towards a more complicated model, like a multi-touch attribution model. In a similar fashion to UTM standardization becoming more important as organizations ask more sophisticated questions, your attribution models will likely go through a similar transition. However across the board, UTM parameters and the standardization of those parameters are the foundation so the sooner you can get things cleaned up, the better!

General Marketing Builder

Originally all teams were under the same tab, however, I decided to split out each team into their tab for a few reasons. The first was to provide each team with their own little workspace. I realized very quickly that if we had everyone in the same tab it would get super chaotic. The second reason allowed me to control the standardization and nuances across each team. In order to reduce the number of choices someone would have to make when building a URL, it was easiest to separate tabs. For example, our Member Success team only leveraged Kustomer at the time. Instead of making them scroll through the 20-something sources list, I just made it show only 1 option for “Kustomer” on the drop down. Finally, each team had different rules for how they wanted to use UTM parameters. For example, some folks genuinely didn’t need both utm_content and utm_term. As a result, I needed to build some =IFS statements which provided the logic for URLs to show correctly even if certain UTM parameters were missing. On the other hand, some teams posted very specific URL queries for site searches (e.g. https://www.going.com/search?query=new) which required me to build a different logic.

One other note about splitting teams out: this was another attempt at priming folks to understand how their standardization would flow into Preset, our data visualization tool. By seeing the UTM data in a specific way over and over, team members would start to know what to filter by in Preset to find their data.

Mbr Success Builder

Social Builder

Social Builder

Email Builder

Email Builder

UA - Google

Taking things a step further with user acquisition, I decided to break things out even more. Each ad network has its own dynamic value per UTM parameter that will pull in details I want. So in a similar story to other teams, it can be a little overwhelming to remember which dynamic value goes with each source/channel. For utm_content on Google, I would prepopulate {creative} but for Meta I would use {{ad.name}}.

I also pull in some other information, for example from Google, like campaign ID and ad group ID which looks like this: &campaignid={campaignid}&adgroupid={adgroupid}_{_adgroup}. I do not want that floating around randomly in Meta URLs because we do not pull that data into our warehouse.

UA Google

UA - Meta

UA Meta

UA - TikTok

UA - TikTok


Related Artifacts