Skip to content
Back to Resources
How-To

Mailchimp Analytics: Campaign Performance in Context

Skopx Team
July 27, 2026
12 min read

Mailchimp analytics will happily tell you that a campaign was opened by half your list. It will not tell you, on its own, whether that campaign produced a single dollar. The gap between those two facts is where most email programs quietly lose the plot: the numbers on the report screen are real, they are just measuring the wrong end of the funnel. This guide is about closing that gap. It covers what Mailchimp actually measures, why list health sits underneath every other metric, how to read campaign results by cohort instead of by average, and how to connect email performance to what happens afterward in your CRM and your billing system.

None of this requires a data team. It requires a small number of decisions made once and then held to.

What Mailchimp analytics actually measures

Mailchimp reports on the events it can observe. That set is narrower than most people assume.

It observes sends and delivery outcomes: hard bounces, soft bounces, and delivery. It observes link clicks, because the links are rewritten to pass through Mailchimp first. It observes opens, inferred from a tracking pixel loading. It observes unsubscribes and abuse complaints fed back through feedback loops with mailbox providers. If you connect a supported store, it observes orders attributed to a campaign. If you enable UTM tagging, it hands the baton to your web analytics tool and stops watching.

Everything else, whether a lead entered a sales sequence, whether a trial converted, whether the subscription renewed in month three, happens outside Mailchimp's field of view. No amount of staring at the report screen will surface it.

The open rate problem, stated precisely

Since 2021, Apple's Mail Privacy Protection preloads remote images for Apple Mail users through a proxy, regardless of whether the recipient read the message. Apple documented this behavior when it shipped. The practical consequence is that a meaningful and unknown share of your recorded opens are machine events, and the share varies by audience: consumer lists skew heavily toward Apple Mail, B2B lists sent to corporate Google Workspace or Microsoft 365 accounts less so.

This does not make open rate useless. It makes it a different instrument than it used to be. Open rate is now best read as a deliverability trend line, not a performance measure. If opens collapse week over week for the same audience segment, something changed in inbox placement and you should investigate. If opens rise after a subject line test, you have learned very little, because you cannot separate human curiosity from proxy prefetching.

Click rate survived better, because clicking still requires intent. Click to open rate did not survive, because its denominator is contaminated. Use unique clicks divided by delivered as your primary engagement metric and stop reporting click-to-open entirely.

MetricWhat it genuinely provesWhat it hidesThe follow up question
Open rateYour mail is reaching inboxes and images are loadingWhether a human read anythingDid opens drop for one mailbox provider specifically?
Unique click rateReal intent from real peopleWhether the click led anywhere usefulWhat share of clickers took the next step within 14 days?
Unsubscribe rateMismatch between promise and contentSilent disengagement, which is far largerHow many contacts have not clicked in 180 days?
Abuse complaint rateAcute reputation damage in progressWhich segment or source caused itWhich signup source do the complainers share?
Bounce rateList hygiene and address decayWhether you are sending to a stale segment at allWhen were these addresses last active?
Ecommerce revenue in MailchimpPurchases on the attribution window Mailchimp appliesRevenue that landed in billing, not the storefrontDoes this match what the payment processor recorded?

The right column is the whole article in miniature. Every Mailchimp metric is a prompt for a question that has to be answered somewhere else.

List health is the metric underneath every other metric

Campaign performance is downstream of whether you can reach anyone at all. Deliverability is not a dark art, it is a set of thresholds enforced by mailbox providers.

In February 2024, Google and Yahoo began enforcing requirements for bulk senders: authenticate mail with SPF and DKIM, publish a DMARC record, support one-click unsubscribe in the message headers, and keep spam complaint rates below 0.3 percent, with Google stating that senders should aim to stay well under 0.1 percent. These are published requirements from both companies, not folklore. If you are above the complaint threshold, nothing else in your reporting matters, because your reach is being throttled at the door.

The four numbers that describe a list

Track these per send and per segment, not just globally:

  1. Reachable contacts: subscribed, not bounced, not suppressed. This is your true audience size, and it is usually smaller than the number you are billed for.
  2. Complaint rate per send, broken out by mailbox provider. Gmail and Outlook can behave very differently.
  3. Hard bounce rate, watched as a level and as a slope. A sudden spike usually means you mailed an old segment or imported a bad list.
  4. Recency distribution: what share of the list clicked something in the last 30, 90, 180, and 365 days. This is the single most predictive health number and almost nobody reports it.

That recency pyramid drives your sunset policy. Contacts who have not opened or clicked in a defined window get a re-permission sequence, then get suppressed. Suppression is not deletion, it is a promise you stop mailing them. Teams resist this because the list shrinks. The list was already smaller than it looked. Removing unreachable addresses raises delivered rates, lowers complaint rates, and, because Mailchimp bills by contact tier, often lowers what you pay. Check current pricing on Mailchimp's own site before assuming what a cleanup saves you.

Cohort response: stop averaging strangers with regulars

A campaign result of "3 percent unique clicks" is an average across people who joined the list yesterday and people who joined three years ago, across customers and non-customers, across a webinar list and a content upgrade list. That average describes nobody. It is the email equivalent of reporting the mean temperature of a house with the oven on and a window open.

The fix is to cut every campaign report by cohort, consistently, every time.

Signup cohort. Group contacts by the month they joined. New cohorts almost always outperform old ones. If your overall click rate is flat while your newest cohort is falling, acquisition quality is degrading and the aggregate number is hiding it behind volume.

Acquisition source. Contacts from a content download, a paid lead magnet, a conference badge scan, and a checkout opt-in are four different populations. Complaint rates in particular concentrate in specific sources. When complaints spike, the first cut to make is by source, not by campaign.

Lifecycle stage. Prospect, active trial, paying customer, churned customer. Send the same newsletter to all four and the aggregate response tells you nothing about any of them. Customers click product news; prospects click education. Mixed reporting averages those into mush.

Engagement tier. Clicked in 90 days, clicked in 180, dormant. Reporting your open rate without noting that 60 percent of the list is dormant is reporting a fiction.

You can build these as Mailchimp segments and tags, and you should. But the moment you want to cut by anything that lives in another system, deal stage, plan tier, months since first payment, you have left Mailchimp's territory and need a join.

Connecting Mailchimp analytics to CRM and billing outcomes

This is where the work is. Email is a mid funnel instrument, and its value shows up as pipeline and revenue in systems that do not talk to Mailchimp by default.

Getting the join keys right

The naive join is on email address, and it breaks in predictable ways:

  • Casing and whitespace. Normalize to lowercase and trim before comparing. Always.
  • Plus addressing. sam+news@company.com and sam@company.com are one human at most providers. Decide whether you collapse them and apply the rule consistently.
  • Multiple addresses per person. The person who subscribed with a personal address may pay with a work address. In B2B this is common enough to distort every number you produce.
  • Role addresses. billing@, info@, and team@ map to accounts, not people. They belong in a separate bucket.
  • The payer is not the reader. In B2B, procurement pays and a practitioner reads. Joining email to invoice will systematically undercount influence.

The durable fix is to stop treating email as the primary key. Store your CRM contact ID and your billing customer ID as fields on the Mailchimp contact, populated when the record is created or synced. Then joins run on stable identifiers and email becomes a fallback for the records you have not resolved yet. Report the resolution rate honestly: if you can only match 70 percent of clickers to CRM records, every downstream revenue number carries that caveat.

UTM discipline

Tag every campaign with a utm_campaign value that matches the campaign identifier in Mailchimp, not a human description that someone retypes differently each month. A predictable convention such as email_2026-07_product-launch lets you join web sessions, CRM source fields, and Mailchimp reports without fuzzy matching. Inconsistent UTMs are the most common reason email revenue reporting silently understates itself.

Choosing an attribution window and writing it down

There is no correct window, only a consistent one. Pick a model, document it, and apply it to every campaign:

  • Last touch, 7 days. Harsh, good for ecommerce and transactional-adjacent sends.
  • Influenced, 30 days. A contact who clicked within 30 days before an opportunity was created counts as influenced. Useful for B2B where the cycle is long.
  • First touch. Credits the campaign that acquired the contact. Answers a different question: which content builds the list that later converts.

Report one primary model and note the others as context. Switching models between meetings is how email teams lose credibility with finance. If you also report payment outcomes, the framing in Stripe Revenue Analytics is a useful companion, since campaign influence and recognized revenue are not the same number and should never be presented as if they were.

A measurement stack that survives contact with reality

Here is where each question genuinely gets answered, and what has to be true for the answer to be trustworthy.

QuestionSystem that owns the answerPrerequisite
Did the message get delivered?MailchimpSPF, DKIM, DMARC configured
Did anyone click?MailchimpLink tracking on, click map reviewed
Which segment clicked?MailchimpTags and segments maintained, not ad hoc
Did clickers become leads?CRMUTM to CRM source mapping in place
Did leads become opportunities?CRMContact ID synced to the email record
Did opportunities become revenue?Billing or payment processorCustomer ID resolvable from CRM
Did that revenue stick past month three?BillingSubscription events retained, not just invoices
Is my list getting healthier or sicker?Mailchimp plus your own recency calculationHistorical engagement data preserved

Notice that no single tool owns more than two rows. That is the structural reason email reporting is painful: the answer to "did that campaign work" is assembled from three or four systems that were never designed to be joined.

Mailchimp analytics questions worth asking out loud

This is the specific problem Skopx is built for. It connects to nearly 1,000 business tools, including Mailchimp, CRMs, and payment systems, and lets you ask a question in plain language that spans them, with answers that cite where each number came from. Skopx catches what falls between your tools.

A concrete example. Instead of exporting three CSVs and building a spreadsheet, you type:

Compare our last six Mailchimp campaigns. For each one show delivered, unique clicks, unsubscribe rate, and complaint rate, then show how many unique clickers appear as new paying customers in Stripe within 30 days of the send. Flag any campaign where complaint rate was higher than the previous send.

What comes back is a table built from Mailchimp report data joined to payment records on resolved identities, with each figure traceable to its source, plus an explicit note about how many clickers could not be matched to a customer record. That last part matters more than the headline: an answer that hides its match rate is worse than no answer.

Other questions that work the same way:

Which acquisition sources produced the contacts who filed abuse complaints on the last three sends?

List contacts who clicked a pricing link in the last 21 days and have an open opportunity in the CRM with no activity logged in 10 days.

The second one is a working prospecting list, not a report. That pattern, an analytical question whose output is an action list, is where email data earns its keep. The same approach applied to pipeline questions is covered in HubSpot AI Analytics, and the record hygiene problems that break these joins are covered in Salesforce AI Assistant.

Automating the reporting loop instead of rebuilding it monthly

Answering a question once is useful. Answering it every week without touching it is what changes behavior.

In Skopx you build automations by describing them in chat, not by dragging boxes on a canvas. A campaign reporting loop looks like this: a schedule trigger runs the morning after each send window, an integration action pulls the campaign report, an AI step running on your own provider key writes a short read of what changed, a condition checks whether the complaint rate crossed your threshold, and a final action posts the result to the marketing channel and, when the threshold is breached, pages the person who owns deliverability.

Be aware of the real limits before you plan around them. Workflows are acyclic, capped at 20 steps, support manual, schedule, or webhook triggers with a 15 minute minimum interval, and have no human approval step and no custom code step. AI steps require your own API key. Runs are inspectable step by step, which matters when a report looks wrong and you need to see which call returned what. The full model is described on the workflows page.

Alongside that, the daily morning brief surfaces what changed and what is slipping across connected tools, so a complaint rate creeping up appears in your first read of the day rather than in a quarterly review. If your team lives in Slack, the reasoning in Slack Analytics applies here too: an alert that lands where people already are gets acted on, and one that lands in a dashboard nobody opens does not.

Where a dedicated BI tool is the right answer

Honesty is worth more than a sale here. If what you need is a persistent dashboard with cohort retention curves, a chart wall for a QBR, or modeled tables in a warehouse that many people query, use a business intelligence tool. Metabase, Looker Studio, and Power BI all do this job well, sitting on top of a warehouse fed by an ETL pipeline.

Skopx is not a BI tool. It does not build drag and drop dashboards or visualizations, it is not a warehouse, and it is not an ETL platform. What it does is answer questions across connected systems, produce documents and reports, raise alerts, and run automations. For a marketing team that needs a specific answer this afternoon and a recurring check every Monday, that is usually the faster path. For a company standardizing on a shared metrics layer, the warehouse and the BI tool are the right investment and the two approaches coexist fine.

A one week rebuild of your email reporting

Day one: confirm SPF, DKIM, and DMARC, and check one-click unsubscribe is present in headers.

Day two: calculate your recency distribution and write down a sunset window. Suppress what fails it.

Day three: standardize UTM naming and backfill the convention for the current quarter.

Day four: add CRM contact ID and billing customer ID fields to your contact records and start syncing them.

Day five: define one attribution model, document it in a page anyone can read, and publish the current match rate alongside it.

Day six and seven: replace your manual monthly export with a scheduled question that runs itself and posts where the team already works.

Nothing on that list is clever. All of it is the reason some email programs can defend their budget and others cannot.

Frequently asked questions

Is open rate still worth reporting at all?

Report it as a deliverability signal, segmented by mailbox provider, and label it as such. Because Apple Mail Privacy Protection preloads images for Apple Mail users, an unknown share of opens are machine events, so open rate cannot support claims about content quality. Use unique clicks over delivered as your engagement metric and retire click-to-open entirely, since its denominator is contaminated.

How do I attribute revenue if I do not sell through a connected storefront?

Stop trying to make Mailchimp compute it. Keep Mailchimp as the source of truth for sends, clicks, and list health, and compute revenue in the system that holds the money, joining on a stable customer identifier rather than on email address. Then decide on one attribution window, most commonly a 30 day influenced window for longer cycles, and apply it to every campaign without exception.

What complaint and unsubscribe rates should I be worried about?

For complaints there is a published line: Google and Yahoo's bulk sender requirements call for staying below a 0.3 percent spam complaint rate, and Google advises aiming well below 0.1 percent. Unsubscribe rates vary too much by industry and list type for any universal benchmark to be honest, so use your own trailing sends as the baseline and treat a sustained rise, especially concentrated in one acquisition source, as the alarm.

Can Skopx replace my email reporting dashboard?

Not if what you want is a dashboard. Skopx answers questions across your connected tools with cited sources, generates reports and documents, sends alerts, and runs scheduled automations, and it acts only with your approval. It does not build visualizations or charts you pin to a wall. Many teams end up using both: a BI tool for the standing chart set, and chat for the specific questions that come up between reviews.

How do I handle one person with several email addresses?

Pick a canonical identifier that is not an email address, usually your CRM contact ID, and store it on both the email record and the billing record. Normalize casing, decide a single rule for plus addressing, and route role addresses such as billing@ into an account bucket rather than a person bucket. Then publish your match rate with every revenue figure so readers know how much of the picture is resolved.

What does Skopx cost?

Skopx is a paid product with no free tier: Solo is $5 per month, Team is $16 per seat per month with no seat cap, and Enterprise and White Label are $5,000 per month. Every plan bills from day one. You bring your own AI provider key from Anthropic, OpenAI, Google, or others, and Skopx never marks up what your provider charges you. Full details are on the pricing page.

Share this article

Skopx Team

The Skopx engineering and product team

Related Articles

Stay Updated

Get the latest insights on AI-powered code intelligence delivered to your inbox.