# Where do our best users come from?

> A step-by-step walkthrough of acquisition in ClickClacks: tag links with UTM parameters, understand visit-level referrer and UTM, rank sign-ups by source, define your best users as a segment, compare how well each source activates and retains, and build your own channels.

- Canonical URL: https://clickclacks.io/docs/walkthroughs/acquisition
- Section: Walkthroughs
- Last updated: 2026-09-26

The campaign that brings the most visitors isn’t always the one that brings customers who stay. This walkthrough ranks Acme CRM’s sources by volume first, then by the quality of the people they bring, and ends with channels you define yourself.

## The question {#question}

_Which referrers and campaigns bring the people who go on to activate and keep using Acme CRM?_ This builds on the [activation funnel](https://clickclacks.io/docs/walkthroughs/activation-funnel.md) and [retention](https://clickclacks.io/docs/walkthroughs/retention.md) walkthroughs, and on the tracker running on both the marketing site and the app.

## 1. Tag your links {#tag}

Referrers show where people came from on their own. UTM parameters say which of _your_ efforts brought them. ClickClacks reads `utm_source`, `utm_medium`, `utm_campaign`, `utm_term` and `utm_content` from the page’s address, up to 200 characters each. Acme tags every link it controls:

```title="tagged links"
https://acme.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=2026-10-product-update
https://acme.com/?utm_source=google&utm_medium=cpc&utm_campaign=crm-for-agencies&utm_term=crm+software
https://acme.com/blog/pipeline-reviews?utm_source=linkedin&utm_medium=social&utm_campaign=pipeline-guide
```

- **Pick one spelling and keep it.** Values are stored as sent, so `Newsletter` and `newsletter` are two sources in every report. Lower case throughout is easiest.
- **Use `utm_medium` for the kind of traffic** (`cpc`, `email`, `social`) and `utm_source` for where it ran. Step 8 builds channels from the medium.
- The tracker also notes which ad click IDs were present (`gclid`, `fbclid`, `msclkid`) as `$click_id`, without keeping their values.
- Campaign properties come from the query string. If your snippet has `data-query="off"`, none are recorded (see [Autocapture](https://clickclacks.io/docs/autocapture.md)).

## 2. How a visit is attributed {#visit}

In reports, **Referrer** and the **UTM** properties describe the _visit_, not the single event: the referrer the session landed with, and the first UTM value it carried. Every event in that visit carries those same values.

So when someone lands on `acme.com/pricing?utm_source=newsletter`, reads three pages, clicks into the app and signs up, `Signed up` counts toward the newsletter, even though the sign-up page had no tags. Two things to know:

- **A new visit starts fresh.** A session ends after 30 minutes without activity. If someone comes back tomorrow by typing the address and signs up then, that sign-up’s visit is direct.
- **Your own domains don’t count as referrers.** Moving from `acme.com` to `app.acme.com` is _Direct / none_, not a referral, as long as both are listed and identity is carried.

Need the value on one event itself? Under **Show advanced properties**, use **Referrer (this event)** or **UTM source (this event)**.

## 3. First look in Overview {#overview}

1. Open **Overview** and set the dates to **Last 30 days**.
2. Read the **Referrers** list.
3. To see one campaign, click **Add filter**, pick **UTM source**, choose **is**, tick `newsletter` and press **Apply**.

> **What you should see**
>
> The top five referrers, counting visitors by where their _first visit in the range_ came from, so each person appears in one row. With the filter on, every number on the page counts only people whose visit came from the newsletter.

That is volume. The rest of this walkthrough is about quality.

## 4. Rank sign-ups by source {#signups}

1. Open **Insights** and click **New insight**.
2. Set the series to `Signed up`, counted as **Unique people**.
3. Click **Add breakdown**, choose **Event property**, then **UTM source**, and **Top 10**.
4. Switch the chart to **Bar** and set the dates to **Last 90 days**.
5. Save it as _Sign-ups by source_.

> **What you should see**
>
> One bar per source, plus _Other_ for everything beyond the top 10 and _(not set)_ for sign-ups whose visit had no UTM tags. For those, change the breakdown to **Referrer** to see where the untagged ones came from.

> **Sending sign-ups from the server?**
>
> Chart the browser-side event for attribution. A server event sent without a browser session ID isn’t part of any visit, so it has no visit referrer or UTM of its own.

## 5. Define your best users {#best}

“Best” should be something you can count. For Acme, it is people who work deals regularly. Save that as a [segment](https://clickclacks.io/docs/glossary.md#term-segment):

1. Open **People** › **Segments** and click **New segment**.
2. Add **did** `Deal created`, **at least** 5 times, **in the last** 30 days.
3. Name it _Active dealmakers_ and click **Save segment**.

If your app sends a plan trait with `identify`, **has person property**`plan` _is_ `growth` works too. Keep it a **Live** segment, so people join and leave as their behaviour changes.

> **What you should see**
>
> The live preview’s count of matching people. If it’s tiny, loosen the rule; you need enough people for a breakdown to mean anything.

## 6. Where the best users came from {#best-sources}

1. Open _Sign-ups by source_.
2. In the filter bar, open the people chip (**Who to count**) and pick _Active dealmakers_.
3. Set the dates to **Last 12 months**, so their sign-ups fall inside the range.

> **What you should see**
>
> The same bars, counting only today’s active dealmakers by the source of the visit in which they signed up. Compare the order with step 4: at Acme, the newsletter is fourth by sign-ups but first here.

Use **Save as new** if you want to keep this version next to the original. The segment is part of the saved insight.

## 7. Compare quality, not volume {#quality}

Two reports you already have answer “do they activate?” and “do they stay?” per source:

- **Do they stay?** In [Retention](https://clickclacks.io/docs/walkthroughs/retention.md), with `Signed up` as the starting event, choose **Break down by** › **UTM source** and compare W1 and W4. Retention reads the visit’s value on each person’s first `Signed up`, so cohorts split by the campaign that brought the sign-up visit.
- **Do they activate?** A funnel’s **Break down by** works differently: it reads the value on each person’s step 1 event itself, not the visit’s. On Acme’s funnel, whose step 1 is the `/pricing` pageview, only people who landed on pricing from a tagged link get a value. Use **Compare segments** with the channel segments in step 8 instead.

> **What you should see**
>
> A source that is high on sign-ups but low on W4 retention, and, after step 8, a channel that converts worse through the funnel. That is where budget is buying visitors rather than customers.

## 8. Build your own channels {#channels}

ClickClacks doesn’t group traffic into channels for you. Define the ones you care about as segments, then compare them side by side, up to five at a time. Segment conditions read the properties stored on each event, not the visit’s values, so each channel is “had a pageview that itself carried this tag or referrer”. That is the landing pageview: `utm_*` are stored on events whose own address had them, and `referrer` on the first pageview of each page load.

| Channel | Segment condition |
| --- | --- |
| Paid | **did** `$pageview` where `utm_medium` **is** `cpc` |
| Email | **did** `$pageview` where `utm_medium` **is** `email` |
| Social | **did** `$pageview` where `utm_medium` **is** `social` |
| Search | **did** `$pageview` where `referrer` **contains** `google` and `utm_medium` **is not set** |

1. Create each segment in **People** › **Segments** › **New segment**: add a **did** condition on `$pageview`, click **Filter by event property**, and pick (or type) the raw property name, `utm_medium` or `referrer`. Up to five property filters per event, all of which must match. Give the condition a window long enough to cover the sign-ups you’re comparing, such as **in the last** 90 days.
2. On the activation funnel or in Retention, click **Compare segments** and tick your channels.

> **What you should see**
>
> One row or line per channel, plus _Other_ for everyone in none of them.

These are “ever came through this channel in the window” segments, so someone who arrived by email and later by an ad is in both, and counts in both. For single-touch attribution by the sign-up visit, use the Insights and Retention breakdowns in steps 4 and 7 instead, which read the visit’s values.

## 9. Save it and keep it {#keep}

- On _Sign-ups by source_, click **Add to board** and pick _Acme weekly_. Insights need saving first, because a tile shows the saved version.
- Boards don’t take a segment filter of their own, so save the _Active dealmakers_ version as its own insight and add that too. In the dialog, choose **Keep this report’s filters** so the segment comes with it.
- After a big campaign, check **Realtime**’s **Arriving from** panel to watch people land.

## Common mistakes {#mistakes}

- **Judging sources by visitors.** Volume is step 3. Decisions come from steps 6 and 7.
- **Inconsistent tags.** `Newsletter`, `newsletter` and `email-newsletter` are three sources. Write the tagging rules down in your [tracking plan](https://clickclacks.io/docs/walkthroughs/tracking-plan.md).
- **Tagging internal links.** A visit takes the first UTM value it carries, so a tagged link between your own pages can label a visit that arrived untagged. Tag only links that bring people in.
- **A redirect that drops the query string.** The UTM tags never reach the page, and the visit looks direct or referred instead.
- **Treating _(not set)_ as “direct”.** It means no UTM tags. Check **Referrer** for where those people came from.
- **Reading a short range with a behaviour segment.** If the range doesn’t include when your best users signed up, their sign-ups aren’t counted.

## Next {#next}

Good attribution depends on consistent events and tags, agreed up front. Write them down: [Design a tracking plan](https://clickclacks.io/docs/walkthroughs/tracking-plan.md).

## Related {#related}

- [Referrer and UTM](https://clickclacks.io/docs/guides/filters.md#referrer): The visit, not the click.
- [Insights](https://clickclacks.io/docs/guides/insights.md): Breakdowns and bar charts.
- [Segments](https://clickclacks.io/docs/guides/segments.md): Build the groups you compare.
- [Events and properties](https://clickclacks.io/docs/properties.md): Every campaign property.
