Clycyo
Attribution & Revenue7 min read

Newsletter Attribution: Which Emails Drive Signups and Revenue

UTM-tagged links plus an identify() call on confirmation turn every subscriber into an attributable journey. The complete newsletter attribution setup, end to end.

Newsletters are the highest-trust channel most companies own, and the worst-measured. Open rates lie (Apple Mail Privacy Protection inflates them), click rates stop at the landing page, and whatever happens after — the signup, the upgrade, the invoice — vanishes into 'direct traffic'. The fix is not another email tool. It is two small conventions on your side of the fence: tagged links and an identify() call.

Why newsletter traffic shows up as 'direct'

Most email clients open links without sending a referrer header. Without UTM parameters, your analytics has literally no way to know the visit came from an email. Every untagged newsletter link silently donates its credit to 'Direct' — which is why 'Direct' is the biggest channel in so many dashboards.

Convention 1: tag every link, the same way, forever

https://yoursite.com/pricing
  ?utm_source=beehiiv
  &utm_medium=email
  &utm_campaign=jun_2026_launch
  • utm_source = the platform (beehiiv, mailchimp, resend) — not 'newsletter', which belongs in…
  • utm_medium = email. Always. This is how all email traffic groups together.
  • utm_campaign = a dated, descriptive slug: jun_2026_launch, drip_onboarding_3. Future-you will read these in a report; write them legibly. Full conventions in the UTM guide.

A tracker with first-touch capture (Clycyo stores the first UTM set on the visitor record automatically) preserves this credit even when the subscriber comes back days later without the tag.

Convention 2: identify on confirmation

When a subscriber confirms double opt-in on your site, attach the email to the visitor record:

// Double-opt-in success page
window.webanalytics.identify(subscriber.email, {
  source: 'newsletter',
  provider: 'beehiiv',
  list: 'product_updates',
  consented_at: new Date().toISOString(),
});

Now the anonymous click-through and the known subscriber are one record. When that person upgrades to a paid plan in August, the revenue event lands on a journey whose first touch reads utm_campaign=jun_2026_launch. That is the sentence 'this email made us money', backed by data.

If confirmation happens on the provider's domain instead of yours, capture window.webanalytics.getVisitorId() before redirecting and send the identify server-side from the provider's webhook — the exact payload is in the docs.

The reports this unlocks

  • Subscribers per campaign: identify events grouped by utm_campaign — deliverability translated into actual signups, not opens.
  • Revenue per campaign: payments grouped by first-touch campaign. The April drip that 'underperformed' on clicks may quietly be your best revenue email.
  • Time-to-convert: days between newsletter click and payment — sets honest expectations for how long email nurture takes.
  • Content resonance: which landing pages newsletter readers actually engage with, including how fast those pages loaded for them.

Mistakes that quietly ruin the data

  1. Tagging some links and not others in the same email — the untagged ones leak credit to Direct.
  2. Renaming conventions mid-year (Newsletter vs newsletter vs email) — UTMs are case-sensitive strings, and reports split on every variant.
  3. Identifying with different emails in different places (plus-aliases, typos) — normalize to lowercase before calling identify().
  4. Measuring opens at all. Optimize for clicks and conversions; opens stopped being a signal in 2021.

The whole setup is two conventions and perhaps an hour of work, and it permanently upgrades every email you send from 'probably helped?' to a revenue line. The same mechanics power full revenue attribution — newsletter attribution is just its most satisfying special case.