UTM Parameters in AcelleMail — Tracking Clicks to Your Analytics Tool

Configure UTM tags once in your campaign settings — AcelleMail appends them to every link in the email automatically. This guide walks the campaign-level + global UTM settings, the post-send click report, and how the UTMs land in Google Analytics or Plausible.

Why UTMs and where they go

UTM parameters are query-string tags appended to your campaign's outbound links — ?utm_source=newsletter&utm_medium=email&utm_campaign=spring_launch — that your analytics tool (Google Analytics, Plausible, Fathom, Matomo) reads to attribute traffic + conversions back to the email that drove them.

Without UTMs, every click from your email shows up as (direct) / (none) in analytics. With UTMs, you see "spring_launch newsletter drove 1,847 sessions and 312 conversions" — the kind of report you can defend in a quarterly review.

The good news: AcelleMail handles this for you at the campaign level. Set it once, every link gets tagged.

Set UTMs in the campaign builder

1. Open campaign settings → URL parameters

When you create or edit a campaign, the Tracking (or URL parameters) section in campaign settings has fields for the standard UTM keys:

  • utm_source — where the click came from. For email: usually newsletter or your brand name like acellemail.
  • utm_medium — the channel. Almost always email for AcelleMail-driven sends.
  • utm_campaign — the specific campaign identifier — spring_launch_2026, weekly_digest_w17, cart_abandonment_v3.
  • utm_term (optional) — usually paid-search specific, sometimes used for segment-of-list identification.
  • utm_content (optional) — variant identifier — header_cta vs footer_cta to A/B test which link position pulls more.

A standard configuration:

utm_source:   newsletter
utm_medium:   email
utm_campaign: spring_launch_2026

Click Save. AcelleMail will append these to every link in the email automatically — you don't need to add ?utm_source=... to each individual <a href> in the body.

2. Verify in Preview

Open the email Preview, hover over any link — the URL shown at the bottom of the screen will include the UTM query string. If you don't see it:

  • Check that Tracking is enabled in the campaign settings (some installs default it off)
  • The link is to your own domain (some setups skip UTM-tagging on external partner links)
  • The URL doesn't already have query parameters that conflict (AcelleMail will append &utm_source=... rather than overwrite)

Read the click report after sending

Tracking log — per-click audit

Campaign → Tracking log tab shows every action (open, click, bounce) with timestamp + subscriber:

Tracking log — per-event audit

For UTM verification, find a Click row → the destination URL stored is the original link (without UTMs) — AcelleMail tracks the click event server-side via the redirect, then forwards the user to the URL with UTMs appended.

Click log — link-level click breakdown

The Click log tab focuses on click events specifically:

Click log per subscriber

Links report — aggregated per-link totals

The Links report rolls everything up — per-link click count + unique clickers:

Links report — per-link aggregate

This is the most useful view for content optimization: "Did our footer CTA outperform the header CTA?" → look at the per-link click count.

Click map — visualisation of where clicks went

The Click map overlays click counts on the rendered email:

Click map overlay

The heatmap tells you the same thing as the Links report, but visually — useful for layout decisions ("our main button is below the fold; almost all clicks come from the inline text link above").

Campaign overview — top-line metrics

The campaign Overview tab shows the summary:

Campaign overview

This is what you screenshot for stakeholder reports — open rate, click rate, unsubscribe rate, all aggregated.

How the UTMs show up in Google Analytics

After the campaign sends and recipients click, your analytics tool (GA4 / Plausible / etc.) starts recording sessions with the source = newsletter / medium = email / campaign = spring_launch_2026.

In Google Analytics 4: Reports → Acquisition → Traffic Acquisition → filter by Session source / medium = newsletter / email.

In Plausible: filter by Source = newsletter directly on the dashboard.

The UTMs persist across page navigations within the session, so even if the recipient clicks your email → lands on /pricing → navigates to /signup → converts, the conversion is attributed back to the email.

Common UI signals + fixes

Symptom Likely cause UI fix
Click count on AcelleMail report doesn't match analytics-tool sessions UTM-tagged links going through redirect strip the UTMs at some hop Verify the destination URL in Preview hovers — should still have UTMs after AcelleMail's click-redirect
Multiple campaigns showing up as same source in analytics Same utm_campaign value used for both sends Use unique utm_campaign per send — include week or version number
utm_source = (direct) in GA despite UTMs being set Analytics drops UTMs on HTTPS → HTTP redirects, OR JS-driven SPAs that don't read URL params Make sure your destination uses HTTPS end-to-end; if SPA, configure your analytics tool to read query string on every route change
Want to A/B test header vs footer CTA Use utm_content differently per variant — header_cta vs footer_cta But: AcelleMail's campaign-level setting applies one utm_content to all links; need link-level override (see Advanced)

Common UTM conventions worth adopting

Field Recommended pattern Why
utm_source One per-channel identifier, lowercase, hyphenated Stays consistent across years; "newsletter" works forever
utm_medium Always email for AcelleMail sends Standard convention; analytics tools group it predictably
utm_campaign {campaign_type}_{date_or_version}_{variant} cart_abandon_2026q2_a is parseable + sortable
utm_content Variant identifier when A/B testing header_cta vs footer_cta; button_red vs button_green
utm_term Only when running paid keyword tests in parallel Usually leave blank for organic email
Advanced: per-link overrides, dynamic UTM via merge tags, integration patterns

When the campaign-level UTMs aren't granular enough — typically when you're A/B testing within a single send, or when you need per-recipient personalization in the UTM itself — drop to link-level overrides.

Per-link override in the email body:

Click any link in the AcelleMail builder → right panel → Tracking section. Toggle "Override campaign UTMs for this link". Set per-link values:

header CTA:
  utm_source:   newsletter
  utm_medium:   email
  utm_campaign: spring_launch_2026
  utm_content:  header_cta

footer CTA:
  utm_source:   newsletter
  utm_medium:   email
  utm_campaign: spring_launch_2026
  utm_content:  footer_cta

This gives you two click reports in your analytics tool, both attributed to spring_launch_2026, but you can break down which CTA pulled more.

Dynamic UTM via merge tag (per-recipient personalization):

Write the link directly in HTML mode with the merge tag in the URL:

<a href="https://example.com/upgrade?utm_source=newsletter&utm_medium=email&utm_campaign=spring_launch&utm_term={{ subscriber.signup_plan }}">
  Upgrade your plan
</a>

Now utm_term = pro or enterprise per recipient. Useful for cohort analysis in GA4: "did the click-to-upgrade rate differ across plan tiers?"

Server-side click-to-conversion attribution:

If you're running your own backend (e.g. a Laravel app, a Next.js app), capture UTMs server-side at first request and persist them in the session or a cookie:

// Laravel middleware example
if ($request->has('utm_source')) {
    session([
        'first_touch' => [
            'source' => $request->get('utm_source'),
            'medium' => $request->get('utm_medium'),
            'campaign' => $request->get('utm_campaign'),
            'landed_at' => now(),
        ],
    ]);
}

Then attach to the conversion event when the user signs up or purchases. This sidesteps analytics-tool quirks (especially the GA4 referrer-detection limits) for your most important conversions.

Integration with Plausible / Fathom (privacy-friendly analytics):

Both read the standard UTM query-string params with no extra configuration. Filter the dashboard by Source = newsletter to see all email-driven traffic; further filter by Campaign = spring_launch_2026 for per-campaign attribution. No GA4 setup ceremony required.

AcelleMail API to populate UTM values dynamically per campaign:

If you create campaigns programmatically (e.g. from a marketing-automation backend), the campaign update endpoint accepts the UTM fields:

curl -X PATCH "https://acellemail.com/api/v1/campaigns/{campaign_uid}" \
  -H "Authorization: Bearer $ACELLE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "track_open": true,
    "track_click": true,
    "url_tags": {
      "utm_source": "newsletter",
      "utm_medium": "email",
      "utm_campaign": "weekly_digest_w17",
      "utm_content": "auto_generated"
    }
  }'

Useful for: triggered campaigns where the campaign name encodes a date (weekly_digest_w17 → week 17), automated A/B variant naming, or syncing UTM conventions across many campaigns in bulk.

Disabling AcelleMail's click-redirect — by default, AcelleMail's tracker rewrites every link to a tracking redirect (e.g. https://acellemail.com/c/abc123/d/xyz) so it can count the click before forwarding. The UTMs survive the forward. If you need raw direct links (e.g. for a press release where the URL should be pristine), turn off click tracking per campaign: campaign settings → Tracking → uncheck Track click → UTMs are still appended, but no redirect hop.

Related articles

5 comments

3 comments

  1. tranminh.devop…
    The funnel-attribution model explanation is the clearest I've read. The 'last-touch vs first-touch' framing especially
  2. emma.whitaker
    Can the analytics be exported to a data warehouse? We feed everything into BigQuery for cross-channel reporting.
    1. admin
      short answer: yes — set the MySQL session variable from your worker's .env on boot and you'll get the longer timeout per connection. We'll add an explicit recipe in the next refresh.
  3. bos.devops
    We had to add custom UTM parameters to get the cross-campaign attribution we wanted — the defaults weren't quite enough.
    1. admin (edited)
      Confirming your experience matches what we see in support cases. We'll cite the cause-#5 'wait it out' guidance more prominently in the next revision

More in Analytics & Reporting