UTM Tracking for Newsletter Promotion: A Practical Guide
Tag your newsletter promotion links, confirm your provider stores the values at signup, and compare tagged visits with real subscribers across LinkedIn, Twitter/X, Threads, and Bluesky.
Tag every newsletter promotion link with the same four parameters, point them all at one landing page, and confirm your newsletter provider stores those values when someone subscribes. You then get a real comparison: which platforms and placements sent tagged visits, and which of those visits became subscribers.
Building the links is the easy part. What decides whether any of it works is whether your provider keeps the values at signup, and that differs by provider.
The four parameters worth using
A UTM is a set of labels added to the end of a URL. When someone clicks it, tools in the path can record those labels alongside the visit.
https://example.com/newsletter?utm_source=linkedin&utm_medium=organic_social&utm_campaign=august_newsletter&utm_content=anchor_post
| Parameter | What it answers | Example |
|---|---|---|
utm_source |
Where did the tagged visit come from? | linkedin |
utm_medium |
What kind of channel was it? | organic_social |
utm_campaign |
Which promotion are we comparing? | august_newsletter |
utm_content |
Which placement or format was used? | anchor_post |
Google's campaign URL documentation defines these fields and recommends applying them consistently. Skip utm_term for organic promotion. It exists for keyword distinctions you are not making here.
One scoping rule prevents most reporting messes. Tagging links inside your newsletter measures traffic going out to a site or offer. This guide covers links pointing in to your signup page. If utm_medium=email means both at different times, your rows stop describing the same journey.
Fix the naming convention before you build a single link
The best UTM system is not the most detailed one. It is the one you can still read three months later.
- Write every value in lowercase. These labels are case sensitive, so
LinkedInandlinkedinbecome separate rows. - Pick one word separator and never vary it. Provider examples disagree here, so the choice matters less than the consistency.
- Keep source stable by platform:
linkedin,twitter,threads,bluesky. - Keep medium stable for unpaid social:
organic_social. - Use one campaign name per promotion, launch, or edition.
- Use content only for a comparison that will change a decision.
Promoting one edition across four networks looks like this:
| Placement | Source | Medium | Campaign | Content |
|---|---|---|---|---|
| LinkedIn anchor post | linkedin |
organic_social |
august_newsletter |
anchor_post |
| Twitter/X thread | twitter |
organic_social |
august_newsletter |
thread |
| Threads post | threads |
organic_social |
august_newsletter |
short_post |
| Bluesky post | bluesky |
organic_social |
august_newsletter |
short_post |
The shared campaign value lets you review the promotion as a whole. Source separates platforms. Content separates formats where the distinction is useful.
Do not invent a fresh campaign value for every post. That shatters one promotion into dozens of unrelated rows and makes the basic question harder to answer, not easier.
If LinkedIn is your primary source, how to track newsletter signups from LinkedIn shows the exact setup for post links, Contact Info, and Featured placements.
Give a placement its own content value only when it changes a decision
Unique links earn their place when they preserve a choice. They are waste when they only add labels.
Split the content value when you are comparing a post link against a profile link, testing two calls to action, or publishing genuinely different formats such as a LinkedIn story post and a Twitter/X thread. Reuse one value when two posts are minor rewrites, when volume is too small to read, or when the result will not change what you do next.
That is the same discipline that makes newsletter repurposing work. The goal is not to count everything. It is to learn which distribution choices deserve another cycle.
Build the links by hand or with the Google Campaign URL Builder, then keep one row per comparison in a small sheet. The builder matters far less than the convention. A perfectly formed URL with inconsistent labels still produces fragmented reporting.
What Kit and beehiiv actually record
This is where most UTM guides stop being useful. The parameters are worthless unless something at the end of the path stores them, and the two providers most solo operators use behave differently.
Kit records all five UTM fields. Under Grow, then Landing Pages & Forms, then Reports, Kit breaks attribution down by source, medium, campaign, term, and content, showing visitors, subscribers, and conversion rate for each value (Kit attribution data). Individual subscriber records show the referrer and UTM values, and the Zapier New Form Subscriber trigger carries all five fields (Kit subscriber attribution).
The real limit is narrower than a missing field. Attribution exists for people who sign up through a Kit Form or Landing Page. Subscribers you import, or create through the API, generally arrive with no attribution at all. If most of your list came from an import, the report describes your recent signups rather than your audience.
Beehiiv reports acquisition on source, medium, and campaign. Those three are the fields its subscriber acquisition reporting is built around. Whether the finer distinctions survive on your account is worth one test rather than one assumption, so treat utm_content there as unproven until you watch it land on a real subscriber record. Beehiiv Boosts also carry their own acquisition attribution, which is a separate system from your tagged links and should not be read as ordinary UTM data.
The practical consequence: a utm_content split between your LinkedIn post link and your profile link is directly reportable in Kit, and something to verify before relying on in beehiiv.
Test the path in a clean session
A correct URL can still lose its labels to a redirect, a link shortener, or a form handoff. Test the result rather than trusting the setup, and test it properly:
- Open a fresh private window. Providers can hold acquisition data across a session, so repeat tests in one browser produce misleading results.
- Visit the tagged URL before subscribing, so the labels are present when the form loads.
- Confirm the parameters survive any redirect and are still in the address bar.
- Subscribe with an email address you have not used before.
- Check your site analytics for source, medium, and campaign.
- Open the new subscriber record in your provider and note exactly which values landed.
Repeat with a new address per link. If analytics records the visit but the subscriber carries nothing, you have aggregate campaign evidence and no subscriber-level source. Say so in your reporting rather than filling the gap with what you expected.
Attribution also disappears for ordinary reasons: cookie blocking, privacy tools, in-app browsers, someone switching devices, or an intermediate page that drops the query string. Missing data is a fact about the path, not a number to reconstruct later.
Read the results at three levels
| Level | What it measures | What it is evidence of |
|---|---|---|
| Tagged visits | Recorded arrivals carrying the label | Link use |
| Completed signups | Subscriber records created from those visits | Whether the promise converted |
| Later activity | Provider-reported engagement after signup | Whether those subscribers were worth having |
tagged signup rate = signups carrying the campaign value / tagged visits
Keep the levels separate. One platform can send many visits and few signups while another sends fewer signups who read everything. Ten subscribers who never open are worth less than five who stay. Collapsing that into a single ranking throws away the finding.
A preserved value proves a tagged link was used. It cannot show the full path. Someone may have read months of untagged posts, copied the URL to another device, or heard about you from a friend before the click you recorded. That is why patterns across repeated campaigns matter and single signups do not. For the broader evidence model, read how to track newsletter subscribers who purchase.
The ten-minute review
At the end of each cycle, answer five questions: which tagged links recorded visits, which values appeared on completed signups, where the path lost values, which placement is worth repeating, and what single variable changes next time.
Keep it narrow. If LinkedIn sent more visits but Twitter/X converted better, you do not have a winner yet. Run the comparison again with the same destination and the same naming rules.
Where Distinctful fits
UTM tracking is one input to a growth decision. Distinctful handles the publishing side: turning newsletter ideas into platform-native posts, scheduling them across Twitter/X, LinkedIn, Threads, and Bluesky, and keeping publishing history beside provider-reported newsletter activity.
It does not convert a campaign label into proof of causation. It gives you the context to ask a better question: what did we publish, what did the connected systems report, and what deserves another test?
Start with one promotion this week. One campaign name, one destination, and only the distinctions you will actually review. A small system you maintain beats a detailed one you abandon.
What this cannot tell you
- A UTM value identifies a tagged arrival, not why a person decided to subscribe.
- Forwarded links, copied URLs, cross-device visits, redirects, link shorteners, in-app browsers, and privacy controls can remove or distort the source.
- If the landing page or signup provider does not store campaign values, the missing data cannot be reconstructed later.
- Provider attribution covers signups through the forms that provider tracks. Imported and API-created subscribers usually carry none.
Questions
What UTM parameters should I use for newsletter promotion?
Use utm_source for the platform, utm_medium for the channel, and utm_campaign for the promotion. Add utm_content only when the distinction will change what you do next. Keep every value lowercase and spell it the same way every time.
Does Kit record UTM parameters on subscribers?
Yes, for people who sign up through a Kit Form or Landing Page. Kit reports visitors, subscribers, and conversion rate by UTM source, medium, campaign, term, and content, and shows the referrer on individual subscriber records. Subscribers added by import or through the API generally carry no attribution.
Does beehiiv record UTM parameters?
Beehiiv reports subscriber acquisition centered on source, medium, and campaign. Confirm the finer fields on your own account with a test signup before relying on them, and treat utm_content as unproven there until you see it stored.
Can UTM links tell me which social post caused a newsletter signup?
No. A preserved value identifies the tagged link used for a recorded visit. It does not reveal earlier exposure or prove why the person subscribed. Treat it as campaign evidence, not a verdict.
Do UTM links work without Google Analytics?
The parameters exist regardless, but they are only useful if something in the signup path records them. Your site analytics, form, or newsletter provider may do that. Test the real path instead of assuming the values survive.
Ready to grow your brand?
Grow your newsletter like a professional. Distinctful helps you build an audience everywhere you post and turn readers into revenue.
Related posts
How to Switch Newsletter Platforms Without Losing Your List
Moving between beehiiv, Kit, Substack, or Mailchimp puts four things at risk: your subscribers, your deliverability, your automations, and your paid subscriptions. What actually transfers and what quietly does not.
How to Track Newsletter Signups From LinkedIn
Track newsletter signups from LinkedIn with separate tagged links for post, Contact Info, and Featured placements, then confirm your provider stores the values at signup.
How to Repurpose Newsletter Content for Social Media (Without Sounding Like a Copy-Paste Bot)
Your newsletter is the hardest content you make - and most of its value evaporates after send day. Here's a repeatable system for turning one edition into a week of native social posts that grow the list instead of just filling a feed.