UTM Tracking for MailerLite Campaigns: How to Build and Validate Email Campaign Links

UTM tracking for MailerLite is straightforward in principle but has one critical gotcha: MailerLite's built-in Google Analytics integration appends utm_source=MailerLite with a capital M and capital L. Because GA4 is case-sensitive, this creates a separate attribution row from utm_source=mailerlite (lowercase) — meaning teams that switch from MailerLite's auto-UTM to manually applied parameters end up with fragmented GA4 reports, and teams that mix both approaches end up with duplicate parameters in their URLs. This article covers the correct UTM parameter values for MailerLite campaigns and automations, how to build consistent tracked links with mlz build, how to disable MailerLite's auto-UTM to avoid the casing conflict, and how to validate destination URLs before every send.

Terminal showing mlz build command with utm_source=mailerlite and utm_medium=email, campaign type cards showing newsletter and automation slug patterns with checkmarks, and a warning card highlighting that MailerLite auto-UTM generates uppercase 'MailerLite' vs lowercase 'mailerlite'.

The correct utm_source and utm_medium for MailerLite

For all MailerLite sends, use utm_source=mailerlite — all lowercase, no hyphens. The utm_medium value is email for all email campaigns and automation emails. MailerLite's product covers regular campaigns (one-time newsletters), automation workflows, RSS campaigns, and A/B split campaigns — all of which use email as the channel:

MailerLite send type utm_source utm_medium GA4 default channel
Regular campaign (newsletter) mailerlite email Email
Automation email (workflow step) mailerlite email Email
RSS campaign (auto-generated from feed) mailerlite email Email
A/B split test campaign mailerlite email Email

The lowercase value mailerlite is intentional. MailerLite's own auto-UTM feature generates utm_source=MailerLite (capital M, capital L). In GA4, MailerLite and mailerlite are two distinct values — they appear as separate rows in the Traffic Acquisition report. If you manually apply lowercase parameters while also having MailerLite's auto-UTM enabled, or if you switch from auto-UTM to manual tracking partway through a campaign, your GA4 reports will show split attribution across both rows. Disable MailerLite's auto-UTM and use mlz build with --source "mailerlite" to ensure consistent lowercase values in every tracked URL.

utm_campaign naming for MailerLite campaigns and automations

MailerLite's two main send types — regular campaigns and automation emails — need different utm_campaign naming strategies. Regular campaigns are one-time sends and benefit from date-stamped slugs so they remain distinguishable in GA4 reports over time. Automation emails run continuously and need stable, evergreen slugs that accurately describe the workflow purpose without a date.

utm_campaign naming by MailerLite send type
# Regular campaign (one-time newsletter) — date in slug
$ mlz build --url "https://example.com/summer-sale" \
  --source "mailerlite" --medium "email" \
  --campaign "summer-sale-june-2026" --content "main-cta"

# Automation email (welcome sequence) — stable evergreen slug
$ mlz build --url "https://example.com/getting-started" \
  --source "mailerlite" --medium "email" \
  --campaign "welcome-automation" --content "day-1-cta"

# A/B test campaign — include test variant in utm_content
$ mlz build --url "https://example.com/offer" \
  --source "mailerlite" --medium "email" \
  --campaign "summer-sale-june-2026" --content "subject-a-cta"

For MailerLite A/B split test campaigns, both variants share the same utm_campaign slug. Use utm_content to distinguish them — for example, utm_content=subject-a-cta and utm_content=subject-b-cta for subject line A/B tests, or utm_content=design-a-cta and utm_content=design-b-cta for layout tests. This lets you compare variant performance directly in GA4's Explore reports by filtering on utm_content, while both variants contribute to the same utm_campaign row for total campaign attribution.

For RSS campaigns — MailerLite's feature that automatically sends emails when new posts are published to a feed — use a stable slug that reflects the RSS source: utm_campaign=blog-rss-digest or utm_campaign=weekly-roundup-rss. Since RSS campaigns repeat automatically, a date in the slug is impractical. Use utm_content with a post identifier or send date if you need to distinguish individual RSS sends in GA4.

Building MailerLite campaign links with mlz build

mlz build generates a normalised tracked URL with lowercase hyphen-separated values and stores the link for auditing. For a MailerLite regular campaign:

mlz build — MailerLite newsletter primary CTA
# Primary CTA in a MailerLite regular campaign
$ mlz build \
  --url "https://example.com/summer-sale" \
  --source "mailerlite" \
  --medium "email" \
  --campaign "summer-sale-june-2026" \
  --content "main-cta"

{
  "tracked_url": "https://example.com/summer-sale?utm_source=mailerlite&utm_medium=email&utm_campaign=summer-sale-june-2026&utm_content=main-cta",
  "params": {
    "utm_source": "mailerlite",
    "utm_medium": "email",
    "utm_campaign": "summer-sale-june-2026",
    "utm_content": "main-cta"
  },
  "link_id": "lnk_ml4s7n2p",
  "stored": true
}

Copy the tracked_url and paste it into MailerLite's email editor as your link destination. With MailerLite's auto-UTM disabled (covered in the next section), MailerLite's click-tracking redirect passes this URL to the destination with all UTM parameters intact.

For automation emails, build each step's links with a stable campaign slug and a unique utm_content value per step:

mlz build — MailerLite automation step link
# Day 3 email in the welcome automation sequence
$ mlz build \
  --url "https://example.com/features" \
  --source "mailerlite" \
  --medium "email" \
  --campaign "welcome-automation" \
  --content "day-3-features-cta"

{
  "tracked_url": "https://example.com/features?utm_source=mailerlite&utm_medium=email&utm_campaign=welcome-automation&utm_content=day-3-features-cta",
  "params": {
    "utm_source": "mailerlite",
    "utm_medium": "email",
    "utm_campaign": "welcome-automation",
    "utm_content": "day-3-features-cta"
  },
  "link_id": "lnk_ml7w3k9s",
  "stored": true
}

How to disable MailerLite's auto-UTM (and why you must)

MailerLite includes a Google Analytics tracking integration that, when enabled, automatically appends UTM parameters to every link in your campaign. The generated values use mixed case: utm_source=MailerLite, with a capital M and capital L. In GA4, MailerLite and mailerlite are two separate values — they appear as distinct rows in Traffic Acquisition reports.

If you apply manually built UTM parameters (using mlz build) and also have MailerLite's auto-UTM enabled, MailerLite appends its own parameters after yours. When the same UTM key appears twice in a URL's query string (e.g. ?utm_source=mailerlite&utm_source=MailerLite), GA4 records only one value. The resulting attribution is unpredictable and depends on which parameter set MailerLite appends last. The only reliable fix is to disable MailerLite's auto-UTM entirely and use manually built parameters for all tracked links.

To disable MailerLite's Google Analytics UTM tracking:

  • For regular campaigns: When creating or editing a campaign in MailerLite, look for the Settings or Tracking step in the campaign wizard. Find the "Google Analytics" or "Enable tracking" toggle and turn it off. The exact label varies by MailerLite's current interface version.
  • For automation emails: Inside the automation builder, individual email action blocks may have their own tracking settings. Check each email block's settings and disable the Google Analytics integration if present.
  • Account-level setting: Some MailerLite plans allow you to configure a default tracking behaviour at the account level. If your MailerLite account has a global Google Analytics setting, disable it there so it applies to all new campaigns by default.

Once disabled, MailerLite's click-tracking redirect forwards subscribers to your destination URL with the full query string intact — including your manually applied UTM parameters — without appending any MailerLite-generated values.

Validating MailerLite destination URLs before sending

Use mlz build --validate to confirm destination URLs respond correctly before sending a MailerLite campaign or activating an automation:

mlz build with --validate before MailerLite campaign send
$ mlz build \
  --url "https://example.com/summer-sale" \
  --source "mailerlite" \
  --medium "email" \
  --campaign "summer-sale-june-2026" \
  --content "main-cta" \
  --validate

{
  "tracked_url": "https://example.com/summer-sale?utm_source=mailerlite&utm_medium=email&utm_campaign=summer-sale-june-2026&utm_content=main-cta",
  "validation": {
    "valid": true,
    "checks": [
      { "check": "url_format", "status": "pass", "message": "URL format is valid." },
      { "check": "ssl", "status": "pass", "message": "URL uses HTTPS." },
      { "check": "resolution", "status": "pass", "message": "Destination responded with 200.", "details": { "response_time_ms": 198 } },
      { "check": "redirects", "status": "pass", "message": "No redirects detected." }
    ]
  },
  "link_id": "lnk_ml4s7n2p",
  "stored": true
}

For MailerLite automations, validate destination URLs when you first build the automation, and then on a regular schedule — monthly or quarterly — while the automation is active. Active automations continue enrolling new contacts as long as they're running. A destination URL that returns a 404 or redirects to a generic page will continue being clicked by every new subscriber who enters the automation. Use mlz links list to retrieve all stored tracked URLs for your account and re-validate them in bulk.

For MailerLite A/B test campaigns, validate both variant URLs before sending. A/B tests are typically sent to a subset of your list first and then the winning variant sent to the remainder — a broken destination URL in either variant affects the test results, and catching it before the initial send avoids wasting the test on a broken experience.

MailerLite UTM tracking gotchas

MailerLite's auto-UTM generates mixed-case utm_source
MailerLite's built-in Google Analytics integration appends utm_source=MailerLite with capital M and L. In GA4, this is a different value than utm_source=mailerlite — they create separate rows in every GA4 report. If you've been using MailerLite's auto-UTM and switch to manually built parameters, your historical data will show split attribution. To prevent future fragmentation, disable MailerLite's auto-UTM and consistently use mlz build --source "mailerlite" for all new campaigns. For historical data, you can create a custom channel group in GA4 that maps both MailerLite and mailerlite to the same Email channel, but it's cleaner to prevent the split from the start.
RSS campaigns need stable utm_campaign slugs
MailerLite's RSS campaign feature automatically sends an email when new items appear in your RSS feed. If you use the campaign name from MailerLite as the basis for utm_campaign — or if you rely on MailerLite's auto-UTM for RSS campaigns — each auto-generated send may get a different campaign slug, fragmenting attribution across dozens of rows in GA4. Use a stable evergreen slug for all RSS campaign links: utm_campaign=blog-rss-digest applied consistently to every link in your RSS email template. Since the email template is reused for each RSS send, the UTM parameters embedded in the template apply to all sends.
A/B test campaigns: use utm_content not utm_campaign for variant tracking
When running MailerLite A/B split tests, both variants are part of the same campaign — they should share the same utm_campaign value. Using different utm_campaign slugs for variant A and variant B makes it impossible to see the combined campaign performance in GA4, and obscures the comparison. Instead, use the same utm_campaign slug for both variants and distinguish them with utm_content: utm_content=subject-a-cta and utm_content=subject-b-cta. In GA4's Explore report, create a custom dimension breakdown by utm_content to compare variant performance directly.
MailerLite's click tracking and UTM parameter preservation
MailerLite wraps all links in your emails with its own click-tracking redirect (using MailerLite's tracking domain). This redirect records the click for MailerLite's campaign analytics and then forwards the subscriber to your destination URL. MailerLite's redirect preserves the full query string, including your UTM parameters, when forwarding to the destination. The parameters arrive at the destination exactly as you set them in the tracked URL — as long as MailerLite's auto-UTM is disabled. If auto-UTM is enabled, MailerLite appends its own parameters to the URL during the redirect, potentially duplicating or overriding your custom parameters.
utm_content for multiple CTAs in the same email
Most MailerLite campaign templates include multiple CTAs — a primary button, a secondary link in the body text, and a PS link. If all three point to the same destination URL with the same UTM parameters, GA4 cannot distinguish which element drove the click. Use unique utm_content values for each CTA in the same email: utm_content=hero-cta, utm_content=body-link, utm_content=ps-cta. This reveals which email design elements drive conversions without any change to the destination page.

MailerLite UTM naming conventions

Recommended UTM parameter values for MailerLite across all send types, aligned with GA4 default channel groupings:

  • utm_source: mailerlite — all lowercase, no hyphens, for all sends from MailerLite (regular campaigns, automation emails, RSS campaigns, A/B tests).
  • utm_medium: email for all MailerLite email sends.
  • utm_campaign: lowercase hyphen-separated slug — for regular campaigns: summer-sale-june-2026, product-launch-may-2026; for automations: welcome-automation, onboarding-series, re-engagement-automation; for RSS campaigns: blog-rss-digest, weekly-roundup-rss.
  • utm_content: CTA or variant identifier — for regular campaigns: main-cta, secondary-cta, ps-link; for automation steps: day-1-cta, day-3-upgrade-cta, day-7-offer-cta; for A/B variants: subject-a-cta, subject-b-cta.
  • utm_term: Use sparingly — for segment-targeted campaigns where the segment identity is meaningful for attribution: pro-subscribers, trial-users, inactive-30d.

If your team uses MailerLite alongside a transactional email provider (for order confirmations, password resets), keep the naming convention consistent: platform name as utm_source, channel type as utm_medium. See the UTM naming conventions guide for the full cross-channel reference and the UTM tracking best practices guide for governance across multiple email platforms.

FAQ

What utm_source should I use for MailerLite?
Use utm_source=mailerlite — all lowercase — for all sends from MailerLite. MailerLite's own auto-UTM feature generates utm_source=MailerLite with capital letters, which creates a separate GA4 attribution row from mailerlite. Always use lowercase and disable MailerLite's auto-UTM to avoid fragmented reports. Applying utm_source=mailerlite consistently across all campaigns, automations, and RSS sends lets you filter GA4's Traffic Acquisition report by utm_source = mailerlite to see your total MailerLite email channel performance.
How do I stop MailerLite from overwriting my UTM parameters?
MailerLite's built-in Google Analytics integration appends UTM parameters to your links automatically when enabled. If you've already added custom UTM parameters using mlz build, MailerLite's auto-UTM appends a second set of parameters to the URL — including its own mixed-case utm_source=MailerLite value. To prevent this, disable MailerLite's Google Analytics tracking in the campaign settings (look for a "Tracking" or "Google Analytics" section when creating or editing a campaign) and in the settings of individual automation email blocks. Once disabled, MailerLite passes your full custom URL to the destination without modification.
How do I track MailerLite automation emails separately from regular campaigns in GA4?
Use distinct utm_campaign slugs. Regular campaigns are one-time sends — use time-stamped slugs: summer-sale-june-2026, product-update-may-2026. Automation emails run continuously — use stable evergreen slugs that describe the workflow: welcome-automation, onboarding-series, re-engagement-automation. In GA4's Traffic Acquisition report, regular campaigns appear as separate time-specific rows while automation slugs accumulate attribution over time as new contacts move through the workflow. Use utm_content to further distinguish individual emails within an automation step: day-1-cta, day-3-upgrade-cta.
Should I use utm_source=mailerlite or utm_source=MailerLite?
Use lowercase utm_source=mailerlite. GA4 is case-sensitive — MailerLite and mailerlite create separate attribution rows in every report. If your historical data already includes MailerLite (from MailerLite's auto-UTM), switching to lowercase will create a data continuity break in GA4. To minimise fragmentation going forward, disable MailerLite's auto-UTM, adopt lowercase parameters consistently with mlz build, and optionally create a custom channel group in GA4 Admin that maps both values to the Email channel for historical reporting purposes.
Does MailerLite's click tracking preserve my UTM parameters?
Yes — MailerLite wraps your links in its click-tracking redirect, which records the click for MailerLite's own analytics before forwarding the subscriber to your destination. MailerLite's redirect passes the full URL, including your UTM query string, to the destination unchanged. The only exception is when MailerLite's Google Analytics integration is enabled: MailerLite may append its own UTM parameters during the redirect, potentially adding duplicate keys or overriding your values. Disable the integration, use mlz build --validate to confirm your destination resolves correctly, and your parameters will arrive at the landing page exactly as built.

Build MailerLite campaign links from the terminal

Pass --source "mailerlite" --medium "email" to mlz build and get a normalised, validated URL ready to paste into MailerLite's email editor — all lowercase, no mixed-case from MailerLite's auto-UTM, stable slugs for automations and date-stamped slugs for newsletters. Add --validate to confirm the destination resolves cleanly before every campaign send.

npm install -g missinglinkz

Free plan: 1,000 links/month. No credit card. See the UTM tracking for developers guide for the full programmatic workflow.