Mailchimp to Klaviyo Migration: The Engagement Cliff
The integration finishes overnight, the profile count is close enough to what Mailchimp said, and somebody opens the segment builder to make the first engaged segment Klaviyo's warming guide asks for. Thirty days: a healthy number. Sixty: bigger. Ninety: bigger again.
A hundred and twenty: the same number as ninety.
A hundred and eighty: still the same number.
Nothing has failed. Klaviyo published exactly what it was going to give you, on the migration page, in a sentence about sync frequency that reads like housekeeping.
The warming plan asks for five segments and the sync fills three
Klaviyo's domain warming guide is specific about the ladder. Create segments based on engagement over 30, 60, 90, 120 and 180 days. Start with the 30-day one, aiming above 30% opens on the first send, on a segment of anyone who has clicked in the last 30 days or subscribed in the last 15. Hold above 20% opens for two weeks and you may widen to 60 days, sending up to three times a week. Then 90 days, up to twice a week. Then 120 for weekly sends, 180 for monthly. Fall below 20% and the general instruction is to hold where you are and pause the ramp to the next segment; at the 60-day rung the guide says to return to the 30-day segment, and at 180 to tighten to 120 or lower.
That plan assumes you have engagement data going back six months. The Mailchimp migration page says what you actually get: "When you first integrate Klaviyo and Mailchimp, we will sync all your contacts and the last 90 days of campaign data. This is called a historical sync, and only occurs once."
So on the day the sync runs, the oldest Opened Email or Clicked Email event in your account is ninety days old. A 120-day window and a 180-day window are looking at a period where no events exist. They return the 90-day population, because that is the whole population.
Three details narrow it further, and all three sit on the same page. Klaviyo only syncs campaigns with the "Sent" status, so anything still Sending is skipped. Campaigns that were part of an A/B test are excluded from the Clicked Email, Opened Email and Received Email metrics. And open and click data only arrives if you ticked Collect open and click data for Mailchimp campaigns in the advanced options during setup, which is a checkbox on a screen most people click through in eight seconds while holding an API key in the clipboard.
If you were sending fortnightly, ninety days is about six campaigns. That is the entire evidentiary basis for every engaged segment you will build for the next three months.
Ninety days from when, exactly
From the install. Not from your last Mailchimp send, not from cutover, not from your first Klaviyo campaign. The historical sync happens once, when you connect the account, and it reaches back ninety days from that moment.
Klaviyo's own migration checklist has four steps in this order: integrate your ecommerce platform,
integrate Mailchimp, migrate your email templates, sunset your Mailchimp account. Template migration
sits after the sync. Anyone who has hand-edited raw HTML to swap *|UNSUB|* for
{% unsubscribe %} and *|FNAME|* for {{ first_name }} across a dozen templates knows that step
is not measured in days.
Which produces a quiet arithmetic problem. Install on the first of the month, spend five weeks rebuilding templates, and by your first send the newest synced engagement event is thirty-five days old. Your 30-day engaged segment, the one Klaviyo says to send to first and the one the whole warming plan is anchored to, contains nobody from Mailchimp at all. It contains whoever has engaged with Klaviyo since, which on a brand new account is a handful of form submissions.
The fix is not clever. Decide your first send date, then work backwards to the install date, and treat the connection as a late step rather than an early one. The contact sync and the engagement sync are the same event, so there is no way to take the addresses early and the behaviour later.
Mailchimp's own contact rating is the one engagement signal that survives independently of that window, and it comes with conditions attached. Klaviyo syncs Mailchimp ratings only if you checked Create Klaviyo lists from Mailchimp audiences, and states that if you sync only specific audiences, the ratings will not come across even for the contacts that did sync.
What the integration carries, in Klaviyo's own words
| Mailchimp side | What Klaviyo's page says happens |
|---|---|
| Contacts | Synced. "Only names, email addresses, Mailchimp ratings, and locations of contacts will sync" |
| Subscribed / unsubscribed status | Synced as consent status; an unsubscribe is not a suppression reason |
| Cleaned and bounced contacts | Added to the Klaviyo suppression list, with one exception (below) |
| Audiences | Become Klaviyo lists, if Create Klaviyo lists from Mailchimp audiences is ticked |
| Mailchimp ratings | Synced, but only with that same box ticked, and not at all if you limit the sync to specific audiences |
| Opens, clicks, receives | Last 90 days, "Sent" campaigns only, A/B tests excluded, opt-in checkbox required |
| Tags | "Klaviyo's built-in Mailchimp integration does not sync any of your tags" |
| Merge fields and everything else | Not named in the sync list |
The tags row is the one that catches people who have spent years organising an audience by tag. Klaviyo's instruction is to go to Manage contacts > Tags in Mailchimp, export each one as CSV, and re-import them as custom properties. That is a manual job proportional to how disciplined you were, which is a strange kind of punishment.
Note what the sync list does not name: merge fields, signup source, notes on a contact profile, OPTIN_TIME. Some of that is not in the audience export either. The list of things Mailchimp itself will not put in an export is worth reading in full before you treat the CSV as a fallback: email signup source, engagement metrics, purchase history, language, predicted demographics, favourite email client, social profile data.
The bounce that arrives active because your store got there first
Here is the sentence to read twice, from the same Klaviyo page. "If a profile already exists in Klaviyo as an active profile before you add the Mailchimp integration, and it has been cleaned/bounced in Mailchimp, it won't be suppressed in Klaviyo."
Now put it beside step one of Klaviyo's own checklist, which is to integrate your ecommerce platform first. By the time the Mailchimp sync runs, every customer who has ever placed an order exists in Klaviyo as an active profile. Any of those addresses that hard bounced in Mailchimp, the typo in a checkout field or the work address at a company that folded, is now sitting in your account with nothing marking it.
Mailchimp calls these cleaned contacts: addresses that "have hard bounced or repeatedly soft bounced, and are considered invalid," that "can't receive future emails you send to your audience," and that you can view or export but "can't edit." They are the exact population you least want in a first send from an unwarmed domain.
Klaviyo names the remedy on the same page, in one sentence: "To suppress these contacts, you can export them from Mailchimp as a CSV and upload them to your suppression list in Klaviyo." Your Mailchimp export already splits cleaned contacts into their own CSV, so this is a file you have rather than a segment you have to build. Upload it whether or not you believe the integration handled it. There is no penalty for suppressing an address twice.
The consent side has a similar hinge. Klaviyo subscribes contacts based on their Mailchimp status "unless the profile already exists in Klaviyo. If the profile already exists, we use the more recent consent status based on its timestamp." Which record wins is decided by a timestamp neither you nor Mailchimp set deliberately, and the losing record is often the one you would have wanted to see.
A suppression file is one column wide
The manual route is deliberately narrow. Klaviyo's bulk suppression instructions say to export your list, then "Remove all columns in the spreadsheet except for the column with the header Email," and upload that. One column. Whatever else the file was carrying is discarded at the door.
So no unsubscribe date travels, and no reason travels. Before you treat the Mailchimp export as your archive of when people opted out, open the unsubscribed CSV and look for a date column rather than assuming one is in there. That file is the only place such a record could survive the move, and there is nowhere in the suppression uploader to put it even if it exists.
What does get recorded is less than you would expect, and it does not record the route. Klaviyo's suppression reasons list "Manually suppressed" and "The person was suppressed in a previous email service provider" as two separate entries, then collapse them into one label: uploading a file of people to suppress puts them on the list "with the reason User suppressed," and a suppression synced from a third-party provider "such as Mailchimp" is "listed as User suppressed" too. Six months on, the reason column will not tell you whether the integration brought that address or you did.
Two more lines on that page are worth keeping. Manually suppressing a profile "does not change their consent status," so a suppressed profile can still read as subscribed underneath. And where a profile is suppressed for more than one reason, only the highest-priority reason is displayed, with deliverability ranked above manual. If somebody asks a year from now when a particular address opted out, Klaviyo is not where the answer is.
There is a consequence here worth testing rather than assuming. Klaviyo says that when a profile resubscribes "all non-deliverability suppressions will be lifted," while deliverability suppressions "are not removed by subscribe actions in order to protect your sender reputation." A cleaned Mailchimp address you uploaded by hand is sitting there as User suppressed, which is a manual suppression and not a bounce. On the wording alone a signup form could lift it. Run one known-bad address through your own form on a throwaway list and watch what its status does, because guessing at this costs you a bounce against a domain you are still warming.
If you are bringing subscribers in by CSV rather than by integration, two rules from the import guide decide more than they appear to. A blank cell in a consent column is read as Never subscribed, not as unknown. And "if you are importing a list to resubscribe profiles, do not include backdated consent timestamps in your CSV as they may be skipped during import," which means the opt-in date you were carefully preserving may not land. Keep the Mailchimp CSVs as your system of record, in the format they arrived in; the reasons a spreadsheet makes a poor archive are in what a CSV keeps and drops.
Per-audience becomes account-wide
Mailchimp genuinely has a per-audience notion of a contact. Its export documents two identifiers: LEID, "the unique identifier for a contact, specific to an audience," and EUID, "the unique identifier for a contact on the account level, across all audiences." If you ran a wholesale audience and a retail audience, someone could be out of one and in the other.
Klaviyo's default flattens that. Its suppression documentation describes a global unsubscribe feature that is "enabled on accounts by default," under which "profiles will become globally suppressed for email in your account after unsubscribing from any email." It is a per-list setting you can switch off, by unchecking When someone unsubscribes from [LIST NAME], unsubscribe that person from all future emails in that list's settings. Nobody opens list settings during a migration, which is how a per-audience opt-out becomes an account-wide one.
The audience filter has a sharper edge than the suppression rule does. If you use Only sync contacts from specific audiences, Klaviyo tells you to "designate all the Audience IDs to which campaigns were previously sent," and warns that "even if a different synced audience contains the same contact, if a campaign was not originally sent to that audience, you won't see complete engagement data for that campaign." The same person can arrive with their history missing, not because the ninety days ran out but because you filtered on the audience they live in rather than the one you sent to.
Take the subscribed count per Mailchimp audience before you install, and compare it with the Klaviyo list sizes afterwards. A gap that size is much easier to explain on day one than in week six.
An order that spends the ninety days instead of wasting them
- Export all four Mailchimp contact types before anything else. The export arrives as a ZIP with separate CSVs for subscribed, unsubscribed, non-subscribed and cleaned. Mailchimp keeps exports available for 30 days, so get them off the platform and into storage you control.
- Cut the cleaned CSV down to a single column headed Email, which is the only shape the Klaviyo suppression uploader accepts.
- Export your tags, one CSV per tag, from Manage contacts > Tags. Nothing else will do this for you.
- Write down the subscribed count per audience, the unsubscribed count and the cleaned count. Four numbers on paper.
- If Mailchimp is connected to your Shopify store, disconnect that before you connect Mailchimp to Klaviyo. Klaviyo warns that failing to could send double opt-in emails to your existing list.
- Pick the install date by counting backwards from your intended first send, not forwards from today.
- At setup, read the three advanced options deliberately: open and click data, list creation from audiences, audience filtering. The middle one is what decides whether ratings arrive at all.
- Upload the cleaned CSV to the suppression list afterwards regardless of what the sync appeared to do, then reconcile your four numbers against the Klaviyo equivalents before the first campaign goes out.
Steps one to four are the same shape as the general pre-cancel capture list, and the question underneath step six, how long you keep paying Mailchimp while Klaviyo runs beside it, is the parallel running problem set out in the 30-day switch runbook.
The other ninety, which has nothing to do with engagement
There is a second 90 in this migration and it catches people at exactly the wrong moment.
Klaviyo's bulk suppression documentation states that once a profile is manually suppressed, if that profile becomes unsuppressed it cannot be manually suppressed again within 90 days, and that "this rule is inactive for the first 30 days after a new account is created."
Read that as a grace period with a hard edge. During your first month, a wrongly suppressed segment is a mistake you can undo and redo the same afternoon. On day forty, unsuppressing a group you suppressed by accident locks you out of re-suppressing them for a quarter, which is longer than the entire warming ladder takes to climb.
One more line sits in that same documentation and it is not a deliverability fact at all: suppressed profiles do not contribute to your account's plan limits. The list you are cleaning for sender reputation is also the list you are billed on, which means the tidy-up you were treating as a deliverability chore has a number attached to it on the invoice.
Verified against Mailchimp and Klaviyo documentation on 23 August 2026, at the pages linked above. The Klaviyo migration, warming, import and suppression articles carry their own "Updated" dates: the migration, import and suppression-reason articles were all revised on 30 March 2026 and the warming guide on 6 August 2025, so they move at different speeds. Everything quoted here is a vendor describing its own product, which makes it authoritative about intent and silent about edge cases. Three things on this page are deliberately left open rather than asserted, because the documentation does not settle them: whether a resubscribe lifts a hand-uploaded suppression, whether the Mailchimp unsubscribed CSV carries a date column, and how the pre-existing-active-profile exception behaves on your own account. Each is worth proving on one address of your own. Nothing above ranks either product or recommends a destination. If a claim here no longer matches its source, the contact form is the fastest way to say so, and the about page explains why every page carries a date.
Frequently asked questions
Does Klaviyo import my Mailchimp unsubscribes automatically?
Partly, and the distinction matters. Klaviyo's migration guide says subscription status syncs and that contacts marked cleaned or bounced in Mailchimp are added to your Klaviyo suppression list. An unsubscribe is not the same object: Klaviyo's suppression documentation says that when someone unsubscribes they are unreachable but this is not displayed as a suppression reason, and the profile instead carries an unsubscribed consent status. One documented exception matters more than it looks: if a profile already exists in Klaviyo as an active profile before you add the Mailchimp integration, and it has been cleaned or bounced in Mailchimp, Klaviyo says it will not be suppressed. Anyone who bought from your store after your ecommerce platform was connected falls into that gap.
How much engagement history comes across from Mailchimp?
Klaviyo describes a one-time historical sync of all your contacts plus the last 90 days of campaign data. The events it creates are Received Email, Opened Email and Clicked Email, for campaigns that have finished sending, excluding anything that was part of an A/B test and anything still in Sending status. Open and click data only syncs if you tick Collect open and click data for Mailchimp campaigns during setup.
Why is my 180-day engaged segment the same size as my 90-day one?
Because there is nothing older than the sync window to put in it. Klaviyo's warming guide asks you to build segments at 30, 60, 90, 120 and 180 days and climb them as open rates hold, but the Mailchimp integration only carries 90 days of campaign activity. The two widest rungs return whoever the 90-day rung already returned. This is not a bug to report, it is the shape of the data you were given.
Can I migrate a Mailchimp list by CSV instead of using the integration?
You can, and you lose the engagement history entirely. Mailchimp's export help page lists email engagement metrics, like opens and clicks among the data not included in an audience export, so a CSV route gives you no basis for an engaged segment at all. The contact file itself is fine: separate CSVs per contact type inside a ZIP, and Klaviyo accepts uploads of 50 MB or less with email in the first column.