← ALL POSTS
Getting Started

Build a Campaign Tracking System That Actually Works

Set up UTM parameters, short links, and analytics into one campaign tracking system that tells you where your clicks come from.

aActurity TeamAPR 12, 2026 · 10 MIN READ
Dashboard showing campaign tracking with UTM parameters and click analytics

Most marketing teams don't have a tracking problem. They have a scattered-data-across-nine-tabs problem.

Someone on the team creates a short link for a Facebook ad. Someone else tags a newsletter link with UTMs, but spells the campaign name differently. A third person shares a raw URL on LinkedIn with no tracking at all. Three weeks later, the monthly report goes out, and nobody can tell which channel actually drove signups. The data exists, technically. It's just useless because nothing connects to anything else.

Building a campaign tracking system isn't complicated. It's four or five decisions made upfront, enforced consistently, and connected to a single place where you can look at the results. This post covers the full setup, from naming your UTM parameters to reading your first campaign report.

Start With the Naming Convention or Don't Start at All

This is the part everyone skips, and it's the part that wrecks everything downstream.

UTM parameters are key-value pairs appended to a URL. There are five of them: utm_source, utm_medium, utm_campaign, utm_term, utm_content. You probably know this already. The problem isn't understanding what they are. Your team will use them inconsistently the moment you look away.

Set these rules before creating a single link.

  1. Lowercase everything. Facebook and facebook are different values in analytics. Pick one. Lowercase wins because nobody has to think about it.
  2. Use hyphens, not underscores or spaces. spring-sale, not spring_sale or Spring Sale. Spaces get encoded as %20 and make URLs ugly.
  3. Lock your source names to a fixed list. Write them down. facebook, google, linkedin, email, direct-mail, or whatever your channels are. If it's not on the list, it doesn't get used.
  4. Name campaigns by quarter and initiative. 2026-q2-product-launch beats new-campaign-3 every single time. You'll have 200 campaigns by year-end, and future you needs to scan a list and know what each one was.

We wrote a longer breakdown of UTM tag structure and mistakes if you want the deep version. For a concrete scheme with a fixed vocabulary per field, see our guide to UTM naming conventions. Those four rules alone put you ahead of a team that has none.

One thing to know before you rely on any tool to hold the line. Acturity checks the UTM values in a campaign for obvious problems, such as an empty field, a reserved word like none or null, or a medium like ppc where cpc is the standard. It does not force lowercase, and it does not compare your values against a list of allowed sources. Those rules stay with your team.

Create Links That Carry the Tracking With Them

Raw URLs with UTM parameters are long. Something like example.com/pricing?utm_source=facebook&utm_medium=paid-social&utm_campaign=2026-q2-product-launch&utm_content=video-ad-v2 doesn't fit in a tweet, looks terrible in an email, and nobody is typing that into a browser from a print ad.

Short links fix this.

Every tracked URL should become a short link that's clean enough to share anywhere. The short link redirects to the full URL, UTMs and all, so the tracking travels with the click and stays out of the ad, the email or the post.

Here's the basic workflow.

  1. Build your destination URL with the correct UTM parameters attached
  2. Create a short link pointing to that full URL
  3. Use the short link everywhere, in ads, emails, social posts and QR codes on print materials
  4. Every click hits the short link first, then redirects to the tagged destination

The UTM string stays out of the ad or email, and the visitor only sees it in the address bar after landing. Your analytics tool picks up every parameter at that point.

A shared shortener domain makes your links look disposable. A domain of your own, such as go.example.com/spring-sale, tells people who sent it. That's the case for custom branded domains.

Group Everything Into Campaigns, Not Just Folders

This is where a lot of setups fall apart. Teams create dozens of tracked links, but they live as individual items in a list. No structure, no grouping. When it's time to report on a campaign's performance, someone exports a CSV and starts filtering by hand.

Don't do that.

Campaign tracking in Acturity lets you group links under a single campaign. A campaign has a name, an optional start and end date, and its own UTM values. Source, medium and campaign name are required, and term and content are optional. Open a campaign and you see total clicks, performance over time, a chart that compares the links inside it, and breakdowns by country, device and browser.

Here is the detail that shapes the whole setup. When someone clicks a link that belongs to a campaign, Acturity adds the campaign's UTM values to the destination as it redirects. If the destination already has a parameter with the same name, the campaign's value replaces it. So every link in one campaign shares the same source, medium and campaign name.

That leads to a simple rule. Make one Acturity campaign for each combination of channel and medium, and give them all the same utm_campaign value. Your analytics tool then rolls everything up under one campaign name, while Acturity keeps each channel separate. Campaign names must be unique within your account, so a consistent pattern like feature-launch-email and feature-launch-linkedin also keeps the list readable.

Setting a start and end date on each campaign matters more than it seems. When you run 15 campaigns in a quarter, the dates tell you at a glance which ones are live.

Wire Your Analytics So the Data Goes Somewhere Useful

Tracking clicks on short links gives you one layer of data. You also need that data to reach wherever your team looks at numbers, whether that's Google Analytics, a CRM, or a spreadsheet.

Two things happen when someone clicks a tracked short link.

First, Acturity records the click with device type, location, referrer and timestamp. That data lives in your link analytics dashboard and shows up shortly after the click.

Second, the person lands on your destination URL with the UTM parameters attached. Your website's analytics tool, most likely Google Analytics, picks up those parameters and attributes the visit to the right source, medium and campaign.

So you get two data sources that should roughly agree. If they differ a lot, something is off in the chain. A common cause is a UTM mismatch between what you meant to tag and what ended up on the destination. We covered how to connect link data to analytics and ad platforms in detail, and it's worth reading if your numbers look wrong. Some difference between the two is normal, and our guide on why click counts don't match Google Analytics explains why.

For teams that want click events pushed to other tools without waiting for pageviews, webhooks send a notification for every click. Point them at any tool that accepts webhooks, directly or through a no-code tool, and the click arrives with the link id, short code, time, referrer, location and device. The webhook does not carry your UTM values, so match on the link id.

A Practical Example, a SaaS Feature Launch Across Three Channels

Theory is nice, but here's what this looks like in practice.

Say you're launching a new feature and promoting it by email, on paid social, and as an organic LinkedIn post. You create three campaigns in Acturity, all with utm_campaign set to 2026-q2-feature-launch.

Campaign "feature-launch-email" has utm_source=email and utm_medium=newsletter. It holds two links. The header button links to go.example.com/feature-launch, whose destination is example.com/new-feature?utm_content=header-cta. The footer button links to go.example.com/feature-launch-footer, with utm_content=footer-cta in its destination. The campaign sets no utm_content of its own, so the one in each destination is left alone.

Campaign "feature-launch-paid-social" has utm_source=facebook and utm_medium=paid-social. Its links point to go.example.com/fb-feature, with a destination that carries utm_content=carousel-v1.

Campaign "feature-launch-linkedin" has utm_source=linkedin and utm_medium=organic-social, with one link, go.example.com/li-feature.

Now open each campaign. In the email campaign the compare-links chart shows whether the header or the footer button gets the clicks. Across the three campaigns you see which channel brings traffic and which one is burning budget for nothing. Say the Facebook campaign brings 400 clicks while LinkedIn brings 60. That's a reallocation decision you can make in week one, instead of discovering it in the post-mortem. (Those numbers are made up for the example.)

Want to test two landing pages for the Facebook ad? Set up an A/B test on that link and let traffic split between the two destinations. No duplicate campaigns, no manual math.

Reading the Numbers Without Drowning in Dashboards

Here's a common mistake. Teams build the tracking system, create all the links, run the campaign, and then check results once. Maybe twice. At the end, someone pulls a number and drops it into a slide deck. That's not measurement. That's archaeology.

Check campaign performance at least weekly during an active campaign, and more often if you're spending money on ads. Look at four things.

  • Click volume by source. Which channels are driving traffic?
  • Click-to-conversion rate. Not just clicks, but what happened after the click. This needs conversion tracking set up on the destination side.
  • Geographic and device breakdown. Say 60% of your clicks come from mobile and your landing page is poor on phones. You've found your problem.
  • Trend over time. A link that got 500 clicks on day one and 12 on day five tells a different story than steady traffic over two weeks.

The analytics metrics that matter post goes deeper on this. The short version is that if you only look at total clicks, you miss most of what the data can tell you.

If you run campaigns both online and offline, say a direct mail piece alongside a digital push, you'll want QR codes on the physical materials that point to tracked short links. We wrote a full guide on tracking offline campaigns with QR codes that covers the print-specific traps.

Keeping the System Clean After Month One

The first campaign you track will be immaculate. Perfect UTMs, clean naming, all links grouped correctly. By campaign number twelve, someone will have typed utm_source=FB instead of facebook, and your reporting will split what should be one source into two.

Preventing drift is a process problem more than a tool problem. A few habits help.

Type UTM values in one place. The campaign form is a good choice, because the values are set once and applied to every link in the campaign. Nobody retypes them into individual URLs, which removes a whole class of typos.

Keep your campaign list pruned. Mark finished campaigns as completed. Name them so the list is scannable six months from now. If you wouldn't recognize test-campaign-final-v3 in October, rename it before you launch.

And audit your UTM data once a month. Open your campaign list, go through the source and medium of each campaign, and look for duplicates or odd entries. Ten minutes of cleanup saves hours of confused reporting later.

FAQ

Do I need short links if I'm already using UTM parameters?

Technically, no. UTMs work on raw URLs. But raw URLs with UTM strings run past 150 characters, look terrible when shared, and are hard to use in print or social. Short links wrap the tracking in a clean URL and add their own click analytics on top. For anything shared outside a hidden hyperlink in an email, you want both.

How many UTM parameters should I use per link?

At minimum, always use utm_source, utm_medium, and utm_campaign. Those three give you channel attribution, and Acturity requires them on every campaign. Add utm_content when you're running multiple creatives or placements within the same channel, because it's how you tell the header button from the footer button in the same email. utm_term is mostly for paid search keywords, so skip it unless that applies.

What if my team doesn't follow the naming convention?

That's the most common failure mode, and it's a people problem more than a tech problem. Two things help. First, make the campaign form the one place UTM values get typed, so each value is entered once. Second, run a five-minute UTM audit at the start of each campaign review meeting. Public accountability works better than documentation nobody reads.


Building a tracking system is a one-time setup that pays off on every campaign you run after it. The naming convention, the link structure, the campaign grouping, the analytics pipeline: set each one up once, keep to it, and you'll know which marketing efforts are earning their budget. Acturity's campaign tracking tools handle the link creation, UTM management, and analytics in one place, which makes the consistency part a lot less painful.

SHAREX / TwitterLinkedIn

Keep reading

One useful email, every couple of weeks.

Marketing tips and product updates. No spam, unsubscribe anytime.