What is UTM performance?
UTM performance breaks attributed results down by the UTM tags on the visits that
led to each order: utm_source, utm_medium, utm_campaign, utm_content and
utm_term. It answers "which of my tagged links earned margin?" at whatever level
of detail you tag at, for the period you pick.
Formula
attributed margin (UTM group, period) = Σ credit given to touches carrying those tags
orders (UTM group, period) = number of distinct orders with such a touch
Worked example
An order books €76 of contribution margin after a newsletter visit
(newsletter / email) and a paid search click (google / cpc). Under linear
attribution each touch is credited €38. Grouped by source / medium, both rows show
one order and €38 of margin. If the same order had two google / cpc clicks with
different utm_campaign values, the source / medium row would still count it as one
order; grouped by campaign, it appears once in each campaign's row.
How Saldo Metrics computes it
The attribution engine credits every order's revenue and margin across its tracked
touches, per model, in fact_attribution. v_utm_attributed_touch keeps the
touches of your default attribution model with their order date, UTM tags and
the channel / campaign the engine tied them to; v_utm_performance sums them per
UTM tag set and day. The section groups those rows by the level you choose. Revenue,
margin and attributed orders add up; the Orders column is a distinct count of
the orders in the group, because one order can carry several tags that merge into
the same row. Touches with no UTM at all form their own "(no UTM)" row. Channel and
campaign show the single value the group's touches resolved to, or "mixed" when
they disagree. All amounts are EUR at the order's own dates, converted to your
display currency.
Why it matters
Ad platforms report their own campaigns. UTM tags also cover newsletters, influencer links, QR codes and anything else you tag — traffic no ad platform reports on. Reading those at margin rather than revenue shows which links actually pay for themselves.
Common mistakes
- Dividing campaign spend by a UTM row. Spend exists per channel, campaign
and ad, not per
utm_content; the section deliberately shows no ROAS. - Expecting history past your pixel retention window. Attribution is rebuilt from pixel events, which are anonymised after your retention period (365 days by default), so older attributed orders drop out.
- Summing the Orders column. An order can appear in several rows; the total row counts it once.
Where you see this in the app
Marketing → Attribution, in the UTM performance section at the bottom of the tab. It is the only section there that follows the period filter.