UTM Tracking for Pardot (Account Engagement): How to Build and Validate Campaign Links
UTM tracking in Pardot (now Salesforce Account Engagement) requires the same discipline as any B2B email platform — and has the same auto-UTM trap. Use utm_source=pardot (lowercase, simple, readable in GA4 filter dropdowns) and utm_medium=email for all Pardot email sends: both one-off List Emails and Engagement Studio nurture sequences. Pardot's "Google Analytics Tracking" feature can auto-append UTM parameters, deriving utm_campaign from the email name you entered in Pardot — same problem as Salesforce Marketing Cloud. Disable it and manage all parameters manually with mlz build. Pardot's click-tracking redirect (pi.pardot.com or a custom tracking domain if configured) wraps every link in the email before forwarding recipients to your destination. This redirect is transparent to UTM tracking — it preserves your full UTM query string intact. The only issue is the auto-UTM. Turn it off once at the account level, then use mlz build for every send.
That's the short answer. The longer answer is that Pardot's B2B context — deep Salesforce CRM integration, multi-touch attribution across months-long sales cycles, Engagement Studio nurture programs that run indefinitely — creates specific requirements for campaign slug design that differ from B2C email platforms. A utm_campaign slug on a Pardot nurture program may be the same slug attributed to an Opportunity in Salesforce six months from now. Manual slug entry in Pardot's email editor, spreadsheet-managed lists, or ad-hoc parameter copying across a team all introduce inconsistency that breaks that attribution chain. Use mlz build to generate normalised, stored, validated campaign links as infrastructure — not as a one-off convenience.
The correct utm_source and utm_medium for Pardot
Use utm_source=pardot for all sends originating from Pardot / Salesforce Account Engagement. The value is lowercase, one word, and recognisable in GA4's Traffic Acquisition filter dropdown without institutional knowledge of abbreviations. Avoid salesforce-pardot (redundant), account-engagement (the product's formal current name, but rarely used by practitioners in filter dropdowns), and salesforce alone (too broad — could refer to Salesforce CRM activity or other Salesforce products).
The utm_medium for Pardot email sends is email, for both List Emails and Engagement Studio programs. Pardot is primarily an email automation platform — unlike Salesforce Marketing Cloud, which also sends push and SMS, Pardot's core channels are email, forms, and web tracking. Use utm_medium=web only for links in Pardot landing pages or forms tracked via Pardot web tracking; it is not appropriate for email sends. GA4 maps utm_medium=email to the Email default channel group automatically, so Pardot email traffic is correctly attributed without any custom channel configuration required.
| Pardot send type | utm_source | utm_medium | GA4 default channel |
|---|---|---|---|
| List Email (one-off send) | pardot |
email |
|
| Engagement Studio (nurture program) | pardot |
email |
|
| Pardot landing page / form link | pardot |
web |
Organic or Custom |
All Pardot email sends share utm_source=pardot. The List Email vs. Engagement Studio distinction lives in utm_campaign naming strategy — specifically whether the slug is date-stamped or evergreen — not in the source or medium values.
utm_campaign naming: List Emails vs. Engagement Studio
Pardot has two primary email send patterns, and each requires a different utm_campaign naming approach. The distinction matters because Pardot campaign attribution flows into Salesforce Opportunity records — the utm_campaign slug you choose today may appear on Salesforce reports six months from now when a prospect converts.
List Emails are one-off or scheduled sends to a prospect list — product announcements, event invitations, webinar follow-ups, promotional emails. These sends have a defined point in time, so their utm_campaign slugs should be date-stamped: product-launch-q2-2026, webinar-may-2026, demo-request-nurture (if sent as a one-time batch). Date-stamping makes it easy to compare the same campaign across periods in GA4 and in Salesforce reporting, and distinguishes parallel sends within the same quarter.
Engagement Studio nurture programs are automated multi-step sequences — trial nurtures, onboarding sequences, MQL nurture programs, re-engagement tracks. Programs run continuously with new prospects entering daily, sometimes for months or years without being rebuilt. Use stable evergreen utm_campaign slugs for Engagement Studio: trial-nurture, onboarding-nurture, demo-request-nurture, mql-nurture. Never date-stamp an Engagement Studio slug — you want attribution data to accumulate under a single stable slug over the lifetime of the program. Use utm_content per step to distinguish individual emails within the sequence.
# List Email — one-off send with date-stamped slug
$ mlz build --url "https://example.com/webinar" \
--source "pardot" --medium "email" \
--campaign "webinar-may-2026" --content "main-cta"
{
"tracked_url": "https://example.com/webinar?utm_source=pardot&utm_medium=email&utm_campaign=webinar-may-2026&utm_content=main-cta",
"params": {
"utm_source": "pardot",
"utm_medium": "email",
"utm_campaign": "webinar-may-2026",
"utm_content": "main-cta"
},
"link_id": "lnk_pd4r8c2n",
"stored": true
}
# Engagement Studio step — evergreen slug, utm_content per step
$ mlz build --url "https://example.com/trial" \
--source "pardot" --medium "email" \
--campaign "trial-nurture" --content "step-1-welcome"
Copy the tracked_url from the JSON output and paste it directly into the link field in Pardot's email editor. Pardot's click-tracking redirect wraps the link via pi.pardot.com (or your custom tracking domain) and preserves the full UTM query string when forwarding prospects to the destination — the redirect is transparent to GA4.
How to disable Pardot's built-in UTM tracking
Pardot's "Google Analytics Tracking" feature, when enabled, automatically appends UTM parameters to every tracked link in the email. It derives utm_campaign from the email name you set in Pardot — whatever text you typed when creating the email, including spaces and original casing. "Trial Nurture Step 1 - Welcome" becomes utm_campaign=Trial%20Nurture%20Step%201%20-%20Welcome. GA4 sees this as an entirely separate row from the manually built utm_campaign=trial-nurture slug you set in mlz build. There is no deduplication in GA4 for campaign name variants — these rows never merge.
Disable Pardot's auto-UTM before managing parameters manually with mlz build:
- Account-level default: Your Pardot admin can disable the Google Analytics tracking default in Pardot Settings. Setting this to off means the checkbox defaults to unchecked for all new emails and Engagement Studio programs, preventing team members from accidentally enabling auto-UTM on a send where you've already built manual links. This is the most efficient fix if your entire team manages tracked links through
mlz build. - Per-email override: When creating or editing an email in Pardot, look for the "Google Analytics Tracking" option in the email settings panel. Uncheck it for every email where you are embedding manually built UTM links. This setting overrides the account default for that specific email — useful if a colleague re-enabled it at the account level.
- Engagement Studio programs: Each email step in an Engagement Studio canvas has its own email configuration. Disable the GA tracking option on every email activity in the program before activation. Set this when building the program, not as an afterthought before launch — it's easy to overlook on a multi-step sequence.
Pardot's click-tracking redirect (pi.pardot.com or your custom tracking domain) is separate from UTM auto-tagging. The redirect logs the click in Pardot's built-in analytics and forwards the prospect to your destination URL with the UTM query string intact. Do not disable Pardot's click-tracking. Only disable the "Google Analytics Tracking" checkbox that appends auto-UTM values derived from email names.
Building Pardot links with mlz build
Use mlz build to generate normalised tracked URLs for every Pardot send. For a one-off List Email send:
$ mlz build \
--url "https://example.com/product" \
--source "pardot" \
--medium "email" \
--campaign "product-launch-q2-2026" \
--content "main-cta" \
--validate
{
"tracked_url": "https://example.com/product?utm_source=pardot&utm_medium=email&utm_campaign=product-launch-q2-2026&utm_content=main-cta",
"params": {
"utm_source": "pardot",
"utm_medium": "email",
"utm_campaign": "product-launch-q2-2026",
"utm_content": "main-cta"
},
"validation": {
"valid": true,
"checks": [
{ "check": "url_format", "status": "pass" },
{ "check": "ssl", "status": "pass" },
{ "check": "resolution", "status": "pass", "message": "Destination responded with 200." },
{ "check": "redirects", "status": "pass", "message": "No redirects detected." }
]
},
"link_id": "lnk_pd4r8c2n",
"stored": true
}
For a multi-step Engagement Studio nurture program, build links for every email step with a stable evergreen campaign slug and a unique utm_content value per step:
# Step 1 — trial welcome
$ mlz build \
--url "https://example.com/trial" \
--source "pardot" --medium "email" \
--campaign "trial-nurture" --content "step-1-welcome"
# Step 2 — feature highlight
$ mlz build \
--url "https://example.com/features" \
--source "pardot" --medium "email" \
--campaign "trial-nurture" --content "step-2-features"
{
"tracked_url": "https://example.com/features?utm_source=pardot&utm_medium=email&utm_campaign=trial-nurture&utm_content=step-2-features",
"params": {
"utm_source": "pardot",
"utm_medium": "email",
"utm_campaign": "trial-nurture",
"utm_content": "step-2-features"
},
"link_id": "lnk_pd7m5t9q",
"stored": true
}
# Step 3 — demo CTA
$ mlz build \
--url "https://example.com/demo" \
--source "pardot" --medium "email" \
--campaign "trial-nurture" --content "step-3-demo"
In GA4's Explore report, set utm_campaign=trial-nurture as a segment and add utm_content as a secondary dimension to compare which nurture step drove the most clicks to the demo page — a direct signal for optimising the Engagement Studio step sequence. The stable evergreen slug is what makes this analysis possible; a date-stamped slug would scatter the data across multiple GA4 rows.
B2B context: Salesforce CRM attribution and campaign slug stability
Pardot's tightest integration with Salesforce CRM is campaign attribution — Pardot campaign membership syncs directly to Salesforce Opportunity records, enabling multi-touch attribution reporting across the full B2B sales cycle. When a prospect clicks a Pardot email and converts to an Opportunity six months later, the Pardot campaign tied to that first touch is visible on the Opportunity record in Salesforce.
This creates a specific constraint on utm_campaign naming for Engagement Studio programs: the slug must remain stable for the entire lifetime of the program, because changing it mid-run would break attribution continuity in both GA4 and Salesforce. A slug like trial-nurture that you set when building the program in January should still be the slug on emails firing in September. Use utm_content per step for individual email identification; never revise the campaign slug after a program goes live.
Use utm_term for audience segmentation where the segment is relevant for downstream Salesforce reporting: enterprise, smb, trial-users, mql-segment. Adding utm_term to Pardot email links lets GA4 and Salesforce capture the segment dimension alongside the campaign attribution without requiring separate Pardot programs per segment.
Validating Pardot destination URLs before sending
Pardot List Emails can be scheduled days in advance. Engagement Studio programs run continuously for months or years. Destination URLs change in the interim — landing pages get archived, products launch and retire, URL structures are reorganised. Pardot has no mechanism to alert you when a destination URL in a live Engagement Studio program stops resolving. Every prospect who enters the program after the page goes offline receives a broken link, silently.
Use mlz build --validate to confirm destination URLs resolve before activating a program or scheduling a send. For active Engagement Studio programs, use mlz links list to retrieve all stored tracked URLs and run periodic mlz check <url> spot-checks on program destinations after any website restructure or product launch cycle:
$ mlz check "https://example.com/trial?utm_source=pardot&utm_medium=email&utm_campaign=trial-nurture&utm_content=step-1-welcome"
{
"url": "https://example.com/trial?utm_source=pardot&utm_medium=email&utm_campaign=trial-nurture&utm_content=step-1-welcome",
"valid": true,
"checks": [
{ "check": "ssl", "status": "pass" },
{ "check": "resolution", "status": "pass", "message": "Destination responded with 200." },
{ "check": "redirects", "status": "pass", "message": "No redirects detected." }
]
}
Run mlz links list to see all stored tracked URLs for your account and identify which Engagement Studio programs have destinations that haven't been checked recently. Quarterly spot-checks on active program destinations are the minimum for a B2B team running multi-stage nurtures — Engagement Studio programs with five or more steps and long step delays are the highest-risk candidates for stale destination URLs.
Pardot UTM tracking gotchas
- Pardot's auto-UTM derives utm_campaign from the email name
- When Pardot's "Google Analytics Tracking" feature is active, it reads the email name from Pardot's email editor and appends it as
utm_campaign. "Trial Nurture Step 1 - Welcome Email" becomesutm_campaign=Trial%20Nurture%20Step%201%20-%20Welcome%20Emailin GA4. This creates a separate row from the manually builtutm_campaign=trial-nurtureslug, and GA4 has no deduplication for campaign name variants — these rows never merge. Disable Pardot's GA tracking at the account level first, then manage all parameter values withmlz build. - Pardot's click-tracking redirect does not strip UTM parameters
- Pardot wraps all tracked email links via
pi.pardot.com(or your custom tracking domain) before forwarding prospects to the destination URL. This redirect logs the click in Pardot's built-in analytics. GA4 receives the UTM parameters from the final destination URL after the redirect completes — the click-tracking redirect is transparent to UTM tracking. Do not disable Pardot's click-tracking. Only disable the separate "Google Analytics Tracking" checkbox that appends auto-UTM values from email names. - Engagement Studio slugs must stay stable for multi-touch Salesforce attribution
- Pardot campaign membership syncs to Salesforce Opportunity records for multi-touch attribution reporting. An Engagement Studio program's
utm_campaignslug is tied to the Pardot campaign in Salesforce — changing the slug mid-run would break attribution continuity in both GA4 and Salesforce. Set the slug when building the program, usemlz buildto generate and store it, and never revise it after the program goes live. Useutm_contentper step for individual email differentiation. - utm_medium=web is not correct for Pardot email sends
- Use
utm_medium=emailfor all Pardot email sends — List Emails and Engagement Studio programs alike. The valueutm_medium=webis appropriate for links in Pardot-hosted landing pages or forms tracked via Pardot's web tracking JavaScript, where Pardot is acting as the source of a web session rather than an email click. Usingwebfor email sends would attribute email-driven traffic to a non-email channel in GA4, breaking the default Email channel grouping and muddying channel attribution reports.
Pardot UTM naming conventions
Recommended UTM parameter values for Pardot / Salesforce Account Engagement, aligned with GA4 default channel groupings and Salesforce CRM attribution:
- utm_source:
pardot— lowercase, one word, for all Pardot email sends (List Emails and Engagement Studio). - utm_medium:
emailfor all Pardot email sends. Usewebonly for links in Pardot-hosted landing pages or forms tracked via Pardot web tracking. - utm_campaign: For List Emails (date-stamped):
product-launch-q2-2026,webinar-may-2026. For Engagement Studio programs (stable evergreen):trial-nurture,onboarding-nurture,demo-request-nurture,mql-nurture. Never date-stamp an Engagement Studio slug. - utm_content: For List Emails:
main-cta,header-image,secondary-link. For Engagement Studio steps:step-1-welcome,step-2-features,step-3-demo. Build one tracked URL per distinct link per email. - utm_term: Use for audience segmentation relevant to Salesforce reporting:
enterprise,smb,trial-users,mql-segment.
See the UTM naming conventions guide for the full cross-platform reference and the UTM tracking for developers guide for programmatic generation and validation at scale.
FAQ
- What is the correct utm_source for Pardot emails?
- Use
utm_source=pardot— lowercase, one word. It is recognisable in GA4 filter dropdowns without requiring knowledge of abbreviations or product history, unambiguous compared tosalesforcealone (which could refer to Salesforce CRM activity), and reflects the platform's still-widely-used name even after the rebrand to Account Engagement. Avoidaccount-engagement(too verbose for filter dropdowns),salesforce-pardot(redundant), andsalesforcealone. If your account has historic data under a variant likePardotorPARDOT, create a custom channel group in GA4 to consolidate old values while transitioning all new sends to lowercasepardot. - Does Pardot's pi.pardot.com redirect strip UTM parameters?
- No. Pardot's click-tracking redirect via
pi.pardot.com(or your custom tracking domain, if configured by your Pardot admin) records the click in Pardot's built-in analytics and then forwards the prospect to the full destination URL including your UTM query string. GA4 receives the UTM parameters from the final destination URL after the redirect. The redirect is transparent to UTM tracking. The only UTM problem arises when Pardot's "Google Analytics Tracking" checkbox is active — that feature appends separate auto-UTM values before the redirect, which can overwrite or duplicate your manually built parameters. Disable the checkbox; keep the click-tracking redirect active. - Should I use date-stamped or evergreen campaign slugs for Engagement Studio?
- Always use stable evergreen slugs for Engagement Studio programs:
trial-nurture,onboarding-nurture,mql-nurture. Engagement Studio programs run continuously with new prospects entering daily — sometimes for months or years. Attribution data should accumulate under a single stable slug over the lifetime of the program. Date-stamping a program slug would force you to update every email step's UTM links when the program extends past the date, breaking attribution continuity in both GA4 and Salesforce. Useutm_contentper step —step-1-welcome,step-2-features,step-3-demo— to distinguish individual emails. The campaign slug stays constant; onlyutm_contentvaries. - How do I validate all destination URLs in an Engagement Studio program before activation?
- Build all Engagement Studio email links with
mlz build --validatebefore activating the program. The--validateflag runs url_format, ssl, resolution, and redirect checks on the destination URL at build time, catching broken pages before the program fires. Usemlz links listto retrieve all stored tracked URLs for your account. While the program is active, runmlz check <url>spot-checks on program destinations at least quarterly — Engagement Studio emails can fire months after the program was built, and destination pages change. This is especially important for trial nurture and MQL nurture programs that remain active over long B2B sales cycles.
Related reading
Build Pardot campaign links from the terminal
Pass --source "pardot" --medium "email" to mlz build and get a normalised, validated URL ready to paste into Pardot's email editor — all lowercase, no mixed-case from Pardot's auto-UTM, stable evergreen slugs for Engagement Studio programs and date-stamped slugs for List Emails. Add --validate to confirm every destination resolves before scheduling a send or activating a program.
npm install -g missinglinkz
Free plan: 50 links/month. No credit card. See the UTM tracking for developers guide for the full programmatic workflow.