Dokumentaatio
Selaa dokumentaatiota

UTM campaign tracking

Track UTM campaigns with visitors, conversions, revenue, cost, CPA and ROAS, build tagged links with the UTM builder, and clean up near-duplicate UTM values.

Näytä Markdown-muodossa

Campaign report#

Watch: Campaign tracking: which marketing campaigns make money (2:13)

Campaign tracking that shows which campaigns make money: visitors, sales, conversion rate, revenue and return on ad spend side by side, counted by you.

Transcript

You spent money on five campaigns last month. Which one actually paid for itself? If you don't know, next month's budget is a guess.

I'm James, founder of Privatus Analytics. Let me show you how to know for certain.

Here's where you look today. The ad platform's own dashboard. It tells you the campaign brought a thousand clicks and a great cost per click. It's grading its own homework. Clicks aren't customers. The campaign that brought the most traffic is often not the one that sold. So the loud campaign gets more money, and the quiet one that was actually converting gets cut. Your own data isn't much help, because your links are a mess. One person typed Facebook, another typed facebook, and now one campaign is two rows. And to join clicks to sales, the ad platforms want their pixel on your site, following your visitors around the web so they can take credit. You end up with numbers written by the people you're paying, and a budget decided by whoever shouts loudest.

With Privatus Analytics, it starts with clean links. The builder fixes capitals and spaces, and a shared library means nobody types one by hand again. Then open your campaigns report. Every campaign, side by side. Visitors, sales, conversion rate and revenue. Now the truth shows. The campaign with the most traffic often isn't the one that sold. Add what each campaign cost, and you see your cost per customer and your return on ad spend, counted by you, not by the platform. No pixel follows your visitors anywhere. There's no cookie, so every visitor from every campaign is counted, not just the ones who clicked accept. Short on time? Ask Claude or ChatGPT, over MCP, which campaign deserves more budget.

Your budget goes to what works. You know which campaign brought the customers, and what each one cost you, from numbers nobody else wrote. And your visitors aren't followed around the internet so an ad platform can take the credit.

Put next month's budget where it pays. Start free at privatusanalytics.com.

The Campaigns report with visitors, conversions, revenue, cost, CPA and ROAS for each campaign.
The Campaigns report with visitors, conversions, revenue, cost, CPA and ROAS for each campaign.

Campaigns rolls UTM-tagged traffic up by campaign, then source and medium, with visitors, visits, conversions, conversion rate, revenue and, when you add costs, cost, CPA (cost ÷ conversions) and ROAS (revenue ÷ cost). It lists the 100 busiest campaigns, with a total row.

Conversions are counted for one goal. Choose it under Conversions for (the first active goal by name is used until you do). Without a goal, conversions stay at zero. Revenue is all the revenue of the campaign's visits, whatever the goal.

UTM values come from the landing page of each visit. Values are compared as sent, so Facebook and facebook are reported as different values (see UTM hygiene below).

Costs#

Campaign costs, CPA and ROAS are part of the Business and Enterprise plans. On other plans the campaign report shows visits, conversions and revenue without them, the Costs tab says which plan has it, and the cost endpoints respond with 402 with the code plan_limit. Costs you entered before are kept and are read again when you upgrade.

In Campaigns → Costs, add spend per campaign per month by hand, or upload a CSV with a header row and the columns campaign, month (YYYY-MM), amount and, optionally, currency (the upload box shows the exact template). A file can be up to 1 MB, and its first 5,000 rows are imported.

Each campaign has one cost per month, so saving or importing the same campaign and month again replaces the amount. The campaign name is matched to utm_campaign without regard to case. Without a currency a cost uses the site currency. Other currencies are converted to it for the report. Spend with no exchange rate yet is shown in its own currency and left out of cost, CPA and ROAS. A month's cost is spread evenly over its days, so a report for part of a month counts part of the cost. A campaign with a cost and no visits is still listed.

Anyone who can view the site sees the costs. Adding, importing, editing and deleting them needs the content.write permission.

UTM builder#

Campaigns → UTM builder builds a tagged link from a landing page URL and the five UTM values (source, medium, campaign, content and term), and shows the link as you type. A preset fills in the source and medium:

Preset utm_source utm_medium
Newsletter newsletter email
Social post linkedin social
Paid search google cpc
Paid social meta paid_social
Print / QR print qr
Partner partner referral

Check link checks every value. Capital letters are lowercased and spaces become underscores. The landing page URL must start with https:// or http://. A value that looks like personal data (an email address, a token, a UUID or other long id, or a long number) is an error, and no link is built until you remove it.

Copy the link, or use Save to library to keep it in the link library.

Campaigns → Links keeps the tagged links your team uses, so everyone copies the same URL instead of typing UTM values again. Save one from the UTM builder with Save to library, or start from New link.

Field Rules
Name Required, up to 120 characters. A label for the library, not part of the URL
Landing page URL Required. Starts with https:// or http://, has no spaces and is up to 2,048 characters
Source, Medium, Campaign, Content, Term Optional utm_* values. Saved in lowercase, with spaces turned into underscores, and cut at 255 characters
Tags Optional, separated by commas. Saved in lowercase. A tag is cut at 40 characters and a link keeps its first 20 tags
Notes Optional free text, for example where the link is used

A link is not saved when its UTM values look like personal data (an email address, a token, a UUID or other long id, or a long number).

The tagged URL#

Every saved link shows its tagged URL: the landing page URL with the link's UTM parameters added. If the landing page URL already has one of those parameters, the link's value replaces it. Other query parameters are kept. Copy puts the tagged URL on your clipboard, from the list or from the link's own page.

Search and tags#

The list shows the newest links first. Search matches the name, the landing page URL and the campaign. Choose a tag from the menu, or click a tag on a link, to see only the links with that tag.

QR codes#

QR code on a link shows a code for its tagged URL, for posters, flyers and packaging. Download SVG saves it as a vector file, which scales to any print size.

Tip: Scan the code with a phone before you send it to print.

A saved link is the landing page URL itself, not a redirect or a short link, so the library does not count clicks. Visits that arrive through the link appear in the campaign report under its campaign, source and medium, like any other tagged visit. A link with a campaign has a See campaign performance shortcut to that report.

Deleting a link only removes it from the library. Copies already in emails, ads or print keep working, and their visits stay in your reports.

Anyone who can view the site can open the library, copy links and download QR codes. Saving, editing and deleting a link needs the content.write permission (see roles).

UTM hygiene#

Campaigns → UTM hygiene checks the utm_source, utm_medium and utm_campaign values in the selected period and lists:

  • Near-duplicate values that differ only by case, spaces or punctuation (Facebook vs facebook, e-mail vs email), with the visits for each and a suggested spelling.
  • Values to tidy that break the lowercase, underscore style (capital letters, spaces, hyphens or other punctuation), with a suggested value. Up to 50 are listed.
  • Sources we don't recognize: utm_source values that are not on the list of well-known sources. Up to 50 are listed.

The check reads the 500 most visited values of each parameter.

These are suggestions only, and nothing is changed for you. Fix the links at the source (the UTM builder keeps new ones consistent). Set up alias opens Site settings → Channels, where a custom channel rule can put the variants in the same channel.

Tips#

  • Use utm_source for where (newsletter, linkedin), utm_medium for the type (email, cpc, social) and utm_campaign for the campaign.
  • utm_medium values like cpc, paid or display put visits in a paid channel, and email puts them in Email.
  • Never put personal data (emails, customer ids) in UTM parameters.

API#

The campaign report, costs, builder, hygiene check and link library are REST resources under /sites/<site id>/campaigns and MCP tools:

Area REST path MCP tools
Campaign report /sites/<site id>/campaigns campaigns_list
Costs /sites/<site id>/campaigns/costs campaign_costs_list, campaign_costs_create, campaign_costs_update, campaign_costs_delete, campaign_costs_import
UTM builder /sites/<site id>/campaigns/builder campaigns_builder
UTM hygiene /sites/<site id>/campaigns/hygiene campaigns_hygiene
Link library /sites/<site id>/campaigns/links links_list, links_get, links_create, links_update, links_delete, links_qr

links_qr returns the QR code as SVG text. Its optional size is the module size in pixels, from 2 to 20. The API reference lists every input.