A Mailchimp to Klaviyo migration takes eight steps, in this order: audit both accounts, authenticate a sending domain, choose how to import, stop the import from triggering your welcome series, import with every unsubscribe and bounce still suppressed, rebuild your forms, rebuild your flows, and cut over on one fixed date. The order matters. Most migration disasters come from doing step 5 before step 4.

This guide follows a real move. In September 2026 we migrated Elume Medspa, a med spa in Fairfax, Virginia, from Mailchimp to Klaviyo. Every profile came across, every unsubscribe stayed unsubscribed, and about 1,304 imported subscribers did not get a surprise welcome email. Here is what we did, the numbers we measured, and the traps we found before they reached a customer.

Key takeaways
  • Authenticate a branded sending domain before your first Klaviyo send. Put it on a subdomain so your root SPF record stays untouched.
  • Importing to a list fires any flow triggered by that list. Turn those flows off or give them an entry filter that excludes imported profiles.
  • Import unsubscribed and cleaned contacts too, and suppress them. Skipping them means you lose the record that they opted out.
  • Expect your open rate to jump after the move, and don't believe it. Compare clicks and bookings instead.
  • Pick one cutover date and stop sending from Mailchimp that day.

What we were migrating

Before touching anything, we measured both accounts. That snapshot shaped every later decision.

From our work: On September 5, 2026, Elume's Mailchimp audience had 1,755 contacts: 1,334 subscribed, 269 unsubscribed and 151 cleaned. It was email only, with 11 names and 4 phone numbers in the whole list. Klaviyo already existed as an untouched 2024 Shopify-default install: 217 profiles (about 25 of them bot signups), no sending domain, zero campaigns ever sent, and three default flows still sending from an old store address. Our plan's verdict was to treat it as a clean build, not a cleanup.

If your Klaviyo account is also an old default install, check it for the same things: stray flows that are already live, bot profiles, and an old "from" address. We suppressed 18 bot profiles (after the owner approved) and deleted the 2024 templates before importing anything.

Step 1: audit both accounts before you move anything

Write down, for each platform:

  • Contact counts by status: subscribed, unsubscribed, cleaned (bounced) and non-subscribed.
  • Every live automation and what triggers it.
  • Every signup form, popup and integration feeding the list (Shopify, booking tools, website forms).
  • Any other contact sources you plan to merge. We combined Mailchimp, Klaviyo, a phone contact file and 1,897 booking-form entries into 3,282 distinct contacts, of which 1,408 were consented and clean.

That last number is the one that matters. A big contact file is not a big email list. Only people who agreed to marketing email belong in your subscribed segment.

Step 2: authenticate your sending domain (DKIM, SPF and DMARC)

Do this first, because a new sending domain needs time to build a reputation. Klaviyo's branded sending domain guide has you pick an unused subdomain (such as send), generate DNS records in Klaviyo, add them at your DNS host, then verify and apply the domain.

What we did for Elume on September 6, 2026:

  1. Set up send.elumemedspa.com as the sending subdomain, so the root domain's SPF record (used by the office's regular mail) stayed untouched.
  2. Added Klaviyo's four records at GoDaddy: a return-path, two DKIM records and a verification record.
  3. Added a DMARC record. There had never been one.
  4. Verified the domain in Google Postmaster Tools so we could watch Gmail reputation.

The first live send showed dkim=pass, spf=pass and dmarc=pass in the message headers and landed in the inbox. It was also the first email stream the domain had ever DKIM-signed. Neither Mailchimp nor the office's Microsoft 365 mail had been.

Why alignment matters: Google's email sender guidelines require every sender to use SPF or DKIM, and require senders of 5,000 or more messages a day to Gmail to have SPF, DKIM and DMARC, with the From domain aligned to SPF or DKIM. A small business may sit under that threshold, but aligned authentication is cheap and Gmail rewards it either way.

Tip: Start DMARC at p=none so you can see reports without blocking anything. Our plan is to tighten Elume's policy to p=quarantine after warm-up, once the reports show every legitimate sender passing.

Step 3: choose the integration or an API import

Klaviyo offers a built-in Mailchimp integration. According to Klaviyo's Mailchimp migration guide, it syncs subscribers (including unsubscribed and cleaned contacts, which it suppresses), audiences as lists, email receives, opens and clicks, and Mailchimp star ratings. It does not sync tags.

MethodGood forWatch for
Klaviyo's Mailchimp integrationMost small lists. Fast, no code.Tags don't come over. A profile already active in Klaviyo that was cleaned in Mailchimp won't be suppressed.
CSV export and importSimple lists, one audience.You map consent status by hand. Easy to drop unsubscribed or cleaned files by accident.
API importMerging several sources, keeping tags and history.Needs a developer. Consent jobs apply slowly (see the traps below).

We used the API. We pulled members, 34 sent campaigns and per-member activity, so every profile kept its Mailchimp star rating, opt-in time, tags and unsubscribe reason. Because Klaviyo already had 217 profiles, the integration's "already active" caveat would also have bitten us.

Step 4: stop the import from triggering your welcome series

This is the step that embarrasses businesses. Klaviyo's import guide says to turn off any flow triggered by the list you're uploading, unless you want it to send to every imported contact, and to wait a few hours after the import finishes before turning it back on.

There are two ways to protect your welcome series:

  1. Turn the flow off during the import. Simple. But if a real new subscriber signs up in that window, they miss their welcome email.
  2. Add an entry filter that excludes imported profiles. For example, set a custom property on every imported row and exclude anyone who has it. The flow stays live for real signups.

We built Elume's welcome series with an import-safe entry filter so it could stay on. It was tested under load: about 1,304 consented imports landed on the list, and zero entered the welcome series.

Watch out: Prove a filter works before you trust a zero. Run a small test import, then check the flow's recipient activity, not just its status. A filter that is silently wrong looks exactly like a filter that is working.

Step 5: import a test batch, then everything, with suppressions

We imported 10 profiles first and checked each one: consent, properties, tags and list membership. Then the full import ran on September 14, 2026, in 38 jobs: 1,775 of 1,775 profiles completed, 0 failed. Another 321 profiles were enriched with names, phones and treatments from booking-form data.

Consent and suppression were handled separately:

  • About 1,321 people with historical email consent were subscribed.
  • 437 unsubscribed or cleaned contacts were imported and suppressed, 437 of 437.

Import the opt-outs. If you leave them behind, a later booking or purchase can recreate that person as a fresh profile, and you've lost the record that they asked you to stop.

We then added older contacts from the website's booking form in four cohorts (109, 235, 202 and 232 people), each one run through syntax, typo-domain, role-address and mail-server checks first. When one wave hard-bounced 4.6%, over our gate of under 2%, we held the oldest cohort (2018 to 2020) back. Old addresses damage a new domain's reputation fast.

Every place that fed Mailchimp needs a Klaviyo replacement before cutover. For Elume that meant a shop popup (10% off), an exit-intent form and a footer embed, with Klaviyo's script loaded on the WordPress site. On September 21 we rebuilt them as two steps: email first, then phone plus an SMS disclosure. Declining the text step still gets the coupon, so nobody is pressured into SMS.

Booking data needed its own path. We built a small WordPress plugin that receives signed Calendly webhooks and writes booked and canceled appointments, the visit date and the treatment to the Klaviyo profile. It subscribes a booker to email only if they tick "Studio news and offers by email?" on the booking form. A booking is not consent.

Step 7: rebuild your flows

Don't copy Mailchimp automations one for one. Rebuild around what Klaviyo knows: orders, browsing and, with a bridge like ours, appointments. These Elume flows are live:

FlowTrigger and timing
Welcome seriesSpa branch: 3 emails on day 0, 3 and 7 at 10:00 Eastern. Shop branch: 1 email with a 10% code.
Abandoned checkoutEmails at 1 hour and 23 hours, skipped if the person orders.
Browse abandonmentOne email at 2 hours.
Post-visit review requestAbout 7 PM Eastern on the evening of the visit. One button to the Google review form.

Several more (post-purchase replenishment, a treatment-due reminder, win-back and an appointment prep email) are built as drafts and not yet switched on. Launch your core flows first and add the rest once the base is sending cleanly. The review flow has its own write-up in our guide to getting more Google reviews for a med spa.

Step 8: pick a cutover date and sunset Mailchimp

Run both platforms in parallel for as short a time as possible. Two live systems means two unsubscribe lists that drift apart. Elume's cutover was September 14, 2026, pulled forward from the original plan. Mailchimp sent nothing after that day.

We kept the Mailchimp account for a few weeks as a reference, then ran a pre-deletion audit and found nothing unique left in it. The account was deleted on October 3, 2026. Before you delete yours, export everything, including campaign reports. Mailchimp's own help docs note that audience exports stay available in your account for 30 days.

Why your open rate will lie after the switch

Elume's first 10 Klaviyo sends (September 7 to 17) delivered 3,006 of 3,092 emails at a 36.4% unique open rate. A Mailchimp Botox email to the same audience earlier had an 8.0% open rate. It looks like the move quadrupled engagement. It didn't.

On one send, 106 of 120 opens were machine or proxy fetches. Apple Mail Privacy Protection preloads images, including the tracking pixel, whether or not the person reads the email. Klaviyo's help center explains how to identify Apple privacy opens with an "Apple Privacy Open" property on each open event.

From our work: Human click rates on Klaviyo (1.3% to 2.0%) were in line with Mailchimp's 1.2%, and bookings per recipient were about 0.5% to 0.6% on both platforms. The lever is the click, not the open. Judge a migration by clicks and bookings, and build "engaged" segments on clicks.

Three more lessons from those first sends:

  • Frequency fatigue is real. Ten sends in 11 days pushed unsubscribes to 1.63%, about three times a healthy rate. It fell to 0.80% after a pause.
  • Fake store accounts wreck bounce rates. One shop campaign bounced 39.2% because of fake customer accounts in Shopify. The other nine sends averaged 1.83%. Exclude obvious junk before you mail a store's customer list.
  • Microsoft inboxes are slow to trust a new domain. On a three-day-old sending domain, Hotmail and Outlook addresses opened at about 9% against about 40% at Gmail, which suggests junk-folder placement. Warm up with your most engaged people first.

Traps we caught in build review

None of these throw an error. Each one returns a clean, plausible, wrong result.

  • Consent jobs are slow. A consent-subscribe request returns "accepted" and can take about 4 hours to apply. One session wrongly decided it had failed. The consent timestamp Klaviyo records is the apply time, so store the real opt-in date yourself.
  • Segments lag imports. A segment built 30 seconds after an import counted 43 of 232 people. About 90 seconds later it counted 232 of 232.
  • Conditions inside one group are OR, not AND. The API JSON reads like AND. Test a segment against people you know should and shouldn't qualify.
  • A phone field on a Klaviyo form defaults to SMS consent and quietly adds an autodialer disclosure. Check every form block.
  • Every Klaviyo form subscribes the person. Don't use one to collect data that should be transactional only, such as aftercare details.
  • Templates are copied, not linked. Attaching a template to a message binds a clone, so later edits to the master don't carry over.
  • A scheduled campaign is locked. To edit it, revert it to draft. Don't cancel it.
  • Date-triggered flows skip today. A flow set live today skips everyone whose date is today. Elume's review flow went live the morning of a six-person clinic day and sent nothing to them. Go live at least two days before the first date that matters.
  • "WCAG-safe" describes a color pair. The brand's link blue passed contrast on white (6.02:1) and failed on the form's background (3.66:1).
  • Gmail strips <style> blocks from some HTML. Inline every style in custom-coded emails.

Do you need an agency for this?

If you have one list, a few hundred subscribers and no Shopify or booking integration, probably not. Use Klaviyo's Mailchimp integration, turn off your list-triggered flows during the sync, set up your sending domain, and follow Klaviyo's docs.

It gets harder when you're merging several contact sources, carrying tags and history across, connecting a booking system, or collecting SMS consent at the same time. That is where a missed suppression or a mistimed welcome email turns into complaints. If that's your situation, our email and SMS team can run the move, and our SMS marketing rules guide covers the texting side.

Frequently asked questions

Does Klaviyo's Mailchimp integration bring over my tags?

No. Klaviyo's help docs say the Mailchimp integration does not sync tags, so you have to export them and import them as custom profile properties. That is one reason we imported through the API instead.

Do I have to re-confirm my Mailchimp subscribers in Klaviyo?

Not if they opted in on Mailchimp. Import them with their subscribed status and Klaviyo does not send them a confirmation email. Keep each person's original opt-in date in a property of your own, because Klaviyo records the date the consent was applied.

How long does a Mailchimp to Klaviyo migration take?

Ours took nine days from the first audit (September 5, 2026) to cutover (September 14), with the domain authenticated on day two. Flow building and older-contact backfills continued for a few weeks after.

Should I delete my Mailchimp account after moving?

Only after you have exported everything and confirmed nothing unique is left in it. We ran a pre-deletion audit and deleted the account on October 3, 2026, about three weeks after the last Mailchimp send.