When you promote a landing page through ads, newsletters or social posts, you want to know which channel actually brought each supporter. CamBuildr records the UTM parameters of every visit and attaches them to everything a person does — so you can see, filter and automate by acquisition source.
What are UTM parameters?
UTM parameters are small tags you add to the links you share. CamBuildr understands the five standard ones:
utm_source – where the traffic comes from (e.g.
google,facebook,newsletter)utm_medium – the channel type (e.g.
cpc,email,social)utm_campaign – the campaign name (e.g.
spring-appeal)utm_term – optional keyword or targeting detail
utm_content – optional variant, e.g. to tell two ad creatives apart
A tagged link looks like this: https://your-page.org/petition?utm_source=facebook&utm_medium=social&utm_campaign=spring-appeal
In addition to the five UTM parameters, CamBuildr also records the ad click IDs that advertising platforms append to their links automatically:
fbclid – Meta (Facebook/Instagram) click ID
gclid – Google Ads click ID
li_fat_id – LinkedIn ads click ID
Click IDs are opaque per-click tokens, so they are stored with each interaction for reference (e.g. for exports or webhook integrations) but are not shown in the interface and cannot be used in filters — use the UTM parameters for that.
cbp is reserved by CamBuildr: it carries the prefill token that lets a landing page recognise the recipient of one of your emails, and it is removed from the address bar once the page has read it. Do not use it as a parameter name of your own. See Prefilling Forms in Apps.
How CamBuildr captures them
There is nothing to configure. When a visitor opens a landing page through a tagged link, CamBuildr remembers the parameters for that browser session and attaches them to whatever the visitor does next:
signing up through a form
donating or purchasing (the attribution is kept even though the payment confirmation arrives later)
answering a survey
voting or submitting content
Because the parameters are remembered for the session, the attribution survives multi-step flows — a supporter who reads the page first and donates a few minutes later is still credited to the original ad. Double-opt-in confirmations keep the attribution as well.
Where you see them
On a person's profile you'll find a Marketing attribution card showing two touchpoints:
First touch – the parameters of the very first tracked interaction. This answers "which channel won this supporter?"
Last touch – the parameters of the most recent tracked interaction. This answers "which channel re-activated them most recently?"
Each entry in the person's activity timeline also shows the parameters that were recorded with that specific action, so you can trace every single signup, donation or survey answer back to its source.
Filtering target audiences by source
In the target audience builder you'll find the UTM Attribution filter in the Landing page activity category. Pick:
First touch or Last touch
the parameter (
utm_source,utm_medium,utm_campaign,utm_termorutm_content)the comparison: is a specific value, is known (has any value) or is unknown (was never recorded)
Some examples:
Everyone whose first touch
utm_sourceisgoogle— supporters originally won through Google ads.Everyone whose last touch
utm_campaignisspring-appeal— people most recently activated by that campaign, e.g. for a follow-up mailing.Everyone whose first touch
utm_sourceis unknown — supporters who arrived organically or through untagged links.
Like all target audiences, these update automatically: as soon as a new interaction changes a person's attribution, their memberships are recalculated.
Filtering by the source of one specific interaction
First and last touch describe a person's overall journey — but they move as the person keeps interacting. When you want to evaluate one concrete campaign, filter the interaction itself instead: every activity-based filter (signed up on a landing page, donated, purchased, answered a survey, voted, submitted content) has a "coming via" option next to its date and count filters.
Switch it on, pick the parameter and choose is a specific value or is known (any value). The filter then only counts interactions that carried those parameters:
Signed up on landing page X coming via
utm_campaignisspring-appeal— exactly the people your spring appeal converted on that page, no matter what they did before or since.Donated coming via
utm_sourceisfacebook— donors whose donation itself came through Facebook, e.g. to measure what a specific ad budget produced.Signed up coming via
utm_sourceis known — all signups that arrived through any tagged link, as opposed to organic ones.
Rule of thumb: use UTM Attribution (first/last touch) to describe people, and the "coming via" option to describe conversions. The "coming via" attribution is frozen at the moment of the interaction and never changes afterwards — ideal for evaluating a specific ad spend. It combines freely with the date and count filters, e.g. "donated in the last 30 days coming via google".
Seeing everyone who came through one UTM value
Every UTM parameter shown on a person's activity timeline is a link. Click it to open the source breakdown for that one kind of interaction, already narrowed to the parameter and value you clicked — so the people behind it are listed straight away.
The breakdown covers a single kind of interaction (its name, and the vendor and context it was recorded with) and lists one row per value of the parameter you are grouping by. Use the pills above the table to switch between utm_source, utm_medium, utm_campaign, utm_term and utm_content. Each row shows three numbers:
Actions – how many times that interaction was recorded carrying this value.
People – how many distinct people are behind those actions.
Share – how much of all the interactions in the period this row accounts for.
Actions is therefore always the same as or higher than People: the same person submitting the same form twice counts as two actions and one person. The row labelled No tag collects the interactions that carried no value for this parameter at all — direct traffic, untagged links, imports and API calls. It has nothing to do with the person tags in your database. Only the top 25 values are listed; the line above the table tells you how many distinct values there are altogether and how many of the interactions were tagged at all.
The period control is the same one the other statistics screens use: Last 7 days, Last 30 days, Last 90 days, This month, Last month, This year, or a custom from/to range. It opens on the last 30 days. A window longer than 366 days is shortened to the most recent 366 days, and the screen says so when that happens.
Click a row to list the people behind that value. That list stops at the first 10,000 people; the total number of distinct people is always shown above it, so you can tell when the list is truncated. To work with the complete set, use Build a target audience on that panel: it opens the target audience builder with the matching activity filter and its "coming via" option already set to that parameter and value. Refresh then gives you the true count and Export CSV the full list. The button is not offered for the No tag row, nor for interactions that have no matching activity filter.
This screen has no entry of its own in the navigation — the UTM tags on a person's timeline are the way in, and the URL can be bookmarked once you are there. For the same breakdown across a whole campaign or a whole landing page, open that record, click the Statistics icon and switch to the Sources tab.
Why the numbers differ from Meta or Google Ads
CamBuildr and an ad platform count different things, so the totals will not match — and neither of them is wrong:
CamBuildr counts only interactions that actually carried the parameter at the moment they were recorded. Meta and Google Ads additionally report modelled and view-through conversions inside their own attribution windows, which CamBuildr never sees.
The parameters are remembered per browser tab. If someone taps an ad in the Meta in-app browser and the link is then reopened in their normal browser, the second visit starts a fresh, untagged session — the conversion is still recorded, just without the tags.
Anyone who reaches the page through an untagged route — a shared screenshot, a typed URL, a redirect that drops the query string — lands in the No tag row.
The two sides have to cover the same period. The breakdown counts interactions by the day they happened; an ad platform reports them against the day of the click.
This is not a consent question: CamBuildr reads the parameters straight from the link and does not need a cookie banner opt-in to record them. If a large share of your conversions ends up under No tag, the usual cause is untagged links rather than anything a visitor declined.
Using attribution in workflows
Both filters are available in workflow condition nodes. For example, start a workflow when someone signs up, then branch: supporters whose signup came via your newsletter get one welcome journey, paid-ad signups get another.
If you have not built one before, Workflows: automating what happens after someone acts walks through the canvas, the four kinds of step and how conditions branch — and Cora can build the whole thing from a sentence.
Sending parameters through the API
If you create people through the CamBuildr API, the tracking parameters can simply be sent as fields of the request body — handy when you forward form data from another tool as-is:
{ "email": "[email protected]", "utm_source": "partner-site", "utm_medium": "referral" }
Alternatively, group them in a tracking object to keep them clearly separated from the person's own fields:
{ "email": "[email protected]", "tracking": { "utm_source": "partner-site", "utm_medium": "referral" } }
Both forms work on the people endpoint and the tracking-link endpoint; if both are present, the top-level fields win. Either way the parameters are stored on the created action exactly like parameters captured on a landing page, and feed the person's first/last touch the same way. The click IDs (fbclid, gclid, li_fat_id) are accepted in both forms as well.
Good to know
Use a consistent, lowercase naming scheme (
facebook, not sometimesFacebook) — filters match exact values.The first set of parameters a visitor arrives with is kept for their browser session; opening the same page later in a new session or on another device counts as a new touch.
Parameter values are stored up to 255 characters; longer values are shortened.
Attribution from historical form signups that already carried UTM parameters is included, so first/last touch may already be filled for existing supporters. The "coming via" interaction filter applies to donations, surveys and other non-form interactions recorded from the feature release onwards.
