Mailchimp to CiviCRM: preserve the email status

June 2, 2026

When moving your email management from Mailchimp to CiviCRM, don’t just import the names and email addresses of the active subscribers and call it good. Preserve the email status (subscribers, unsubscribes and bounces) so you bring in like for like as a historical record. Your level of detail depends on budget and usefulness of granularity.

Mailchimp may have audiences/lists, segments, groups, and tags. A basic mapping looks like this:

MailchimpCiviCRM
Audience / ListImport to mailing group
SegmentSmart Group or saved SearchKit search
GroupCiviCRM Group
TagCiviCRM Tag or Group

In this case, the client only had one main Mailchimp audience, and the scope of work was on the smaller side, so it was down to the three typical Mailchimp export files:

  • Subscribed: people currently opted in to receive emails.
  • Unsubscribed: people who opted out.
  • Cleaned: addresses Mailchimp stopped sending to because of bounces or deliverability problems.

I created three CiviCRM groups purely for migration history:

  • MC Subscribed – Added to a “General Interest” group (use “Subscribers” or whatever name you prefer)
  • MC Unsubscribed – Imported with additional column “Is opt out = 1”
  • MC Cleaned – see below

However, marking the cleaned list requires you to set those emails as “On Hold”, and that’s not all that obvious on how to do that. The issue is CiviCRM Advanced Search has an action for: Email – Unhold addresses and you could search “MC Cleaned” to update them. But it does not have the reverse action to easily put addresses On Hold, because various mailing extensions do this automatically for you.

Here’s how:

In the past, I may have used the API CSV Import GUI extension to import those emails directly as On Hold in CiviCRM. That still can work, but for this case the SearchKit approach makes it quicker.

So after importing the cleaned contacts into MC Cleaned group, I went to SearchKit, used Emails as the base entity, filtered to contacts in that group, and ran Update Emails. Then I set: On Hold = Yes

This is a basic start, and you could go further if a more granular history would be useful to your efforts and you get the full export:

  • MC Cleaned: Set the hold date on the email
  • MC Subscribed/Unsubscribed: Set the date for each group they joined or unsubscribed from in Mailchimp. In this example, it would just be for the “General Interest” group.

Best regards,

Andy

Share This Post

I can’t even try to list all the ways you helped make the Day of Education a success. You are someone I can always count on and that means a great deal to me.

– Cara Schulz