Why Mailchimp Doesn’t Tell You Where Your Subscribers Came From
Mailchimp is one of the most widely used email marketing platforms in the world. Millions of WordPress sites use it to collect subscribers and run campaigns. But Mailchimp has a blind spot: it captures who signed up, not what drove them to sign up.
Your Mailchimp audience might have 3,000 subscribers. Did they come from Google Ads? Facebook? Organic search? A referral from a partner? Mailchimp doesn’t know, and neither do you — unless you build the tracking yourself.
This guide shows you how to wire up UTM-based lead source tracking between WordPress and Mailchimp so every subscriber’s profile includes the campaign and channel that brought them in.
What You’re Missing Without Lead Source Data
Most email marketers track opens and clicks. Those metrics tell you how subscribers behave after they join your list. But they don’t tell you which acquisition channels are building a high-quality list vs. a low-quality one.
With lead source data in Mailchimp, you can:
- See which campaigns drive signups — not just impressions or website visits, but actual email subscribers
- Compare list quality by source — do Google Ads subscribers open at 40% while Facebook subscribers open at 18%? That changes where you invest
- Segment and personalize by source — send a different welcome sequence to someone who found you via organic search vs. a paid ad
- Calculate true cost per subscriber — if you’re spending $2,000/month on Facebook and getting 200 subscribers, that’s $10/subscriber — worth knowing
How Mailchimp Lead Source Tracking Works
The mechanics follow the same pattern used across all CRM and email platform integrations:
- A visitor arrives on your WordPress site via a tagged URL (UTM parameters in the query string)
- A first-party cookie captures those UTM values and stores them for the duration of the session (and beyond, if set to persist)
- When the visitor fills out a Mailchimp opt-in form, hidden fields in the form are populated with the stored UTM values
- On form submission, those values are sent to Mailchimp as custom merge fields on the subscriber’s profile
The result: every new subscriber in your Mailchimp audience has source, medium, campaign, and landing page data attached to their contact record.
Step 1: Tag Your Traffic Sources With UTM Parameters
UTM parameters are the query string values that tell your tracking system where a visitor came from. They look like this:
https://yoursite.com/?utm_source=facebook&utm_medium=paid-social&utm_campaign=summer-sale&utm_content=carousel-v2
Tag every paid ad, every email campaign link, and every social post you share. Organic search doesn’t need tags — you’ll see those as “(organic)” in your tracking. Direct traffic (no referrer) shows up without UTM data, which is expected.
If you run Google Ads, enable auto-tagging instead of manual UTMs — Google will append its own gclid parameter automatically, which carries more data than manual UTMs for Google campaigns.
Step 2: Capture UTMs in a First-Party Cookie on Landing
UTM parameters only exist in the URL on the first pageview. The moment a visitor clicks to another page, they’re gone from the address bar.
You need a script that runs on every page load, checks the URL for UTM parameters, and writes them to a cookie if it finds any. The cookie persists across pageviews so the data is available when the visitor finally fills out a form.
A basic version of this script:
// On page load
const params = new URLSearchParams(window.location.search);
const utmFields = ['utm_source','utm_medium','utm_campaign','utm_content','utm_term'];
utmFields.forEach(field => {
const value = params.get(field);
if (value) {
document.cookie = field + '=' + encodeURIComponent(value) + '; path=/; max-age=' + (60*60*24*90);
}
});
This writes each UTM to its own cookie with a 90-day expiry. Most attribution tools use a 30-90 day window — adjust based on your typical sales cycle.
Step 3: Create Custom Merge Fields in Mailchimp
Mailchimp stores subscriber data in merge fields. The default fields are EMAIL, FNAME, LNAME, and PHONE. You need to add custom merge fields for each UTM value you want to capture.
In Mailchimp, go to Audience > Manage contacts > Settings > Audience fields and *|MERGE|* tags and add the following fields (type: Text for all):
- Lead Source — merge tag:
*|LEADSRC|* - Lead Medium — merge tag:
*|LEADMED|* - Lead Campaign — merge tag:
*|LEADCAMP|* - Lead Content — merge tag:
*|LEADCONT|* - Lead Keyword — merge tag:
*|LEADKW|* - Landing Page — merge tag:
*|LANDPG|*
Keep these fields hidden from the subscriber (not visible on the public form) — they’re for your internal tracking only.
Step 4: Populate Hidden Form Fields With Cookie Data
Now you need a script that reads those UTM cookies and populates the hidden Mailchimp merge fields on your opt-in forms when the page loads.
If you’re using embedded Mailchimp forms on your WordPress site:
// After the form is in the DOM
function getCookie(name) {
const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
return match ? decodeURIComponent(match[2]) : '';
}
const fieldMap = {
'LEADSRC': 'utm_source',
'LEADMED': 'utm_medium',
'LEADCAMP': 'utm_campaign',
'LEADCONT': 'utm_content',
'LEADKW': 'utm_term'
};
Object.entries(fieldMap).forEach(([mergeTag, cookieName]) => {
const input = document.querySelector('[name="' + mergeTag + '"]');
if (input) input.value = getCookie(cookieName);
});
// Also capture current URL as landing page
const landingInput = document.querySelector('[name="LANDPG"]');
if (landingInput) landingInput.value = getCookie('landing_page') || window.location.href;
If you’re using a WordPress form plugin (WPForms, Gravity Forms, Fluent Forms) with a Mailchimp integration, you’ll add hidden fields to your form and use the same cookie-reading approach to populate them on load. The integration will then map those fields to the Mailchimp merge fields you created.
Step 5: Verify the Data Is Flowing
Before you trust your Mailchimp source data, run a complete test:
- Open a link with UTM parameters in an incognito window (e.g.,
yoursite.com/?utm_source=test&utm_medium=email&utm_campaign=test-run) - Navigate around your site for a page or two
- Submit your opt-in form with a test email address
- In Mailchimp, find that subscriber and check their profile — the Lead Source, Lead Medium, and Lead Campaign fields should show the UTM values you used
If the fields are blank, work backwards: are the cookies being written? (Check in browser DevTools > Application > Cookies.) Are the hidden form fields being populated? (Inspect the form HTML.) Is the integration mapping the fields correctly?
Using Lead Source Data in Mailchimp
Once data is flowing, you can put it to work:
Segment by source: Create segments for subscribers where Lead Source equals “google”, “facebook”, “organic”, etc. Analyze open rates, click rates, and conversion rates by segment.
Trigger source-specific automations: Use merge field conditions in your automation triggers to send different welcome sequences based on how someone found you. A subscriber from a Google Ads campaign for a specific product is in a different mindset than someone who found your lead magnet through a blog post.
Track subscriber acquisition in reports: Export your audience with the source fields and analyze in a spreadsheet or connect to a reporting tool. You’ll see subscriber growth by channel over time.
Improve your ad targeting: If subscribers from one campaign have dramatically lower engagement than others, that’s a signal your ads may be attracting the wrong audience — even if the click-through rate looks good.
The Simpler Approach: Use a WordPress Attribution Plugin
The setup above works, but it requires custom JavaScript on every form, maintenance when you update your forms or switch form plugins, and careful testing across different browsers and form types.
A dedicated WordPress attribution plugin handles all of this automatically. You install it once, connect it to Mailchimp, and it passes lead source data to every new subscriber without per-form configuration.
Sales Provenance is built for this exact use case. It captures UTM parameters and landing page data on arrival, persists them through the browsing session, and passes them to Mailchimp (and other email and CRM platforms) automatically. No custom JavaScript. No form-by-form setup. Clean source data on every subscriber from day one.
If tracking which channels are building your Mailchimp list matters to your business, Sales Provenance is the fastest way to get it working.