← All playbooks
Newsletter migration

ActiveCampaign → Klaviyo

Move ActiveCampaign contacts into Klaviyo with a subscriber CSV and a separate suppression file. Klaviyo's built-in list sync does not include ActiveCampaign, and flows do not transfer.

Typical timeline5 to 12 days10 to 20 hours active work
Statusneeds review
Source profileActiveCampaign contact and list export help reviewed 2026-11-04
Destination profileKlaviyo subscriber migration help updated 2026-03-30, reviewed 2026-11-04
Documentation date
Review window
Evidence3 sources
This route needs review.Use it as a planning baseline, then verify the dated sources and test with representative data before production.
Before you migrate

Should you make this move?

Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.

Current platform

ActiveCampaign

Reasons to stay
  • Deep lifecycle automation combines email, CRM signals, scoring, and segmentation
  • Audience, campaigns, automations, and reporting live in one publishing system
Reasons to leave
  • Complex automations and contact-based pricing create migration and governance overhead
  • Automation logic, analytics history, and deliverability settings are not very portable
New platform

Klaviyo

What gets better
  • Commerce-native segmentation, behavioral automation, and revenue attribution are exceptionally strong
  • Audience, campaigns, automations, and reporting live in one publishing system
What gets worse
  • Data-model complexity and profile-based pricing can become expensive and difficult to unwind
  • Automation logic, analytics history, and deliverability settings are not very portable
Best of the move

Klaviyo: Commerce-native segmentation, behavioral automation, and revenue attribution are exceptionally strong. This removes a major source-side concern: Complex automations and contact-based pricing create migration and governance overhead.

Worst of the move

What you lose: Deep lifecycle automation combines email, CRM signals, scoring, and segmentation. What you inherit: Data-model complexity and profile-based pricing can become expensive and difficult to unwind.

Jump to a section
01At a glance

Know the shape of the move.

Transfer outcome10 features audited
Transfer outcome distributionClean transfer: 0, Partial transfer: 3, Manual rebuild: 5, Not transferred: 2.
Clean0
Partial3
Manual5
Lost2
Mapping route8 of 9 fields have a destination path

This timeline assumes

  • You can export from ActiveCampaign and import lists in Klaviyo. Klaviyo's built-in list sync is for Mailchimp, Campaign Monitor, and Salesforce Marketing Cloud, so this path is the CSV.
  • Everyone in the subscriber file has explicitly consented to email. Unsubscribed and bounced addresses go in a one-column suppression file first.
  • Automations will be rebuilt. A Klaviyo staff reply on the community forum said flows and templates do not transfer automatically.
  • The site already documents Mailchimp → Klaviyo for the built-in sync, and Klaviyo → ActiveCampaign if you are moving the other way.
02What transfers

What survives the move.

“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.

ItemOutcomeImpactWhat happensMitigation
Flows and templatesmanualcriticalKlaviyo's migration article sends Mailchimp, Campaign Monitor, and Salesforce Marketing Cloud through integrations. ActiveCampaign is not in that list. On 26 July 2021, Klaviyo alum Dov told a customer that flows and templates cannot be transferred automatically. HTML files can be imported and then used in flow emails. ActiveCampaign's export articles do not describe an HTML export of a saved template.Rebuild each live automation in Klaviyo. Treat HTML import as optional, and only after you have a file ActiveCampaign will actually give you.
Contact noteslostmediumActiveCampaign says contact notes cannot be exported, on both the all-contacts export and the list export.Copy any note the team still needs before you rely on the CSV.
Unsubscribed and bounced addressesmanualcriticalKlaviyo says to keep unsubscribed and bounced addresses out of the subscriber CSV. Import them first from Audience, Profiles, View suppressed profiles, Import. If that page has More actions, choose Import suppressions. The file is one email per row.Export ActiveCampaign's Unsubscribed status and Bounced status as their own lists. Load those files before any send.
List statuspartialhighA list export defaults to Active. You can also choose Unconfirmed, Unsubscribed, Bounced, or Any. The file includes a Status column, Date Subscribed, and Date Unsubscribed. An all-contacts export does not list that Status column in ActiveCampaign's default fields.Export each status from the list screen. Do not guess status from the all-contacts file.
Consent on importmanualcriticalKlaviyo says to apply bulk consent only when everyone in the file explicitly consented. Otherwise choose Only import the consent in my file. The API path sets historical_import true and consented_at at least five minutes in the past. That skips double opt-in and list-triggered flows. Without historical_import, the list's opt-in setting applies, or the account default if you omit the list.Use bulk consent only on the Active file. Use the API flag when a subscribe call would otherwise fire a flow.
Tags, scores, and custom fieldspartialmediumActiveCampaign puts tags in one column, and the CSV can include custom fields, lead scores, and deal scores. Klaviyo maps columns to profile properties. The Email column should be named Email or Email Address so it matches.Map Email first. Map the other columns only when someone will use them in Klaviyo.
Export file namemanuallowActiveCampaign says a special character in the export name, such as !, #, or $, makes the download a text file instead of a CSV. The download link lasts 7 days.Use a plain name. Download the file before the link expires.
Unconfirmed contactsmanualhighActive can be exported without Unconfirmed. Klaviyo's bulk consent step is for people who explicitly consented. An unconfirmed address has not finished opt-in.Leave Unconfirmed out of the subscriber file unless you have another record of consent.
Deals and site trackinglostmediumThe contact export includes deal scores and the latest IP and user agent. It is not a deal export, and Klaviyo's CSV import creates profile properties, not ActiveCampaign automations or CRM deals.Export deals separately if another system needs them. Do not expect the score column to rebuild a pipeline.
One primary listpartialmediumKlaviyo recommends one main list, then segments. ActiveCampaign lists stay separate until you choose otherwise. A sign-up source can be stored as a profile property instead of a new list.Import Active subscribers into one Klaviyo list and keep the old list name as a property.
03Field and feature mapping

Where each thing goes.

SourceDestinationMethodNotes
List status ActiveKlaviyo listtransformExport Active from Contacts, Lists. Import at Audience, Lists & segments, Manage list, Import contacts.
EmailEmailautomaticName the column Email or Email Address.
First name and last nameFirst Name and Last NameautomaticMap them on the import screen.
TagsProfile propertytransformActiveCampaign stores tags in one column.
Custom fieldsCustom propertiestransformMap only columns you will use.
Status UnsubscribedSuppression importmanualOne email column. Import before you send.
Status BouncedSuppression importmanualSame one-column file, or a second suppression import.
Date Subscribedconsented_at on the APImanualRequired with historical_import, and it must be at least five minutes in the past.
AutomationsNo destinationunsupportedRebuild flows. HTML import is not an ActiveCampaign export button.
04Before you begin

Make the move recoverable.

Backup procedure

Create the source-of-truth backup

Keep an Active export, an Unsubscribed export, and a Bounced export outside ActiveCampaign.

  1. Export the list three times, once for Active, once for Unsubscribed, and once for Bounced.
  2. Use a plain export name so the file stays a CSV.
  3. Download each file from Contacts, Exports, before the 7 days end.
  4. Store the files, then import suppressions into Klaviyo before subscribers.

Proof to capture: Three CSVs, with Status values that match the filter you chose, are saved locally and the Klaviyo suppression import has finished.

Transformation · Klaviyo suppression CSV

Suppressions first

Stop Klaviyo from mailing people ActiveCampaign already suppressed.

  1. Build a CSV with one column of Unsubscribed and Bounced emails.
  2. Open Audience, Profiles, View suppressed profiles.
  3. Import the file, or use More actions, Import suppressions.
  4. Wait for the confirmation that the suppression list updated.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

Transformation · Klaviyo list import or bulk subscribe API

Active subscribers

Load consented contacts without firing list flows.

  1. Import the Active CSV into one list.
  2. Map Email. Apply bulk consent only if every row consented.
  3. If you use the API, set historical_import true and consented_at at least five minutes ago.
  4. Leave Unconfirmed rows out.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

05Handle with care

The things most likely to hurt.

These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.

Pilot

Suppressions are in the subscriber file

criticalpossible likelihood

The list export was Any, or the all-contacts file was used without a status filter.

Consequence
Klaviyo can treat opted-out people as subscribers.
Mitigation
Import Unsubscribed and Bounced first. Import Active only.

Stop if: The subscriber file has a Status other than Active.

Cutover

Bulk consent is broader than the file

criticalpossible likelihood

Apply bulk consent is selected for a mixed file.

Consequence
Klaviyo records email consent for people who did not give it.
Mitigation
Use bulk consent only for the Active export. Otherwise import the consent already in the file.

Stop if: You cannot point at the opt-in for every row.

Pilot

A subscribe call starts a flow

highpossible likelihood

The API import omits historical_import or uses a recent consented_at.

Consequence
Double opt-in or a list-triggered flow can send during the import.
Mitigation
Set both flags the help article describes, or import through the CSV flow before flows are live.

Stop if: A welcome flow is on and the import is not marked historical.

06Precise timeline

Do the work in this order.

Estimate forOne ActiveCampaign list, split by status, imported to one Klaviyo list, with flows rebuilt after the people are in
Total elapsed5 to 12 days
Active work10 to 20 hours
BufferRebuilding flows is the long part. The CSV itself is the short part.
01
Days 1 to 2Split the list by status1 to 2 days
02
Day 2Download before day 71 day
03
Days 3 to 5Suppress, then import a slice1 to 2 days
04
Days 5 to 8Full list, flows still off1 to 3 days
05
Days 8 to 14One campaign, then automations3 to 6 days
  1. Days 1 to 2 · inventory

    Split the list by status

    2 to 4 hours active1 to 2 days elapsedThree exports waiting
    • Export Active, Unsubscribed, and Bounced.
    • Count each file.
    • List live automations to rebuild.

    Depends on: ActiveCampaign list access

    Stop / go checkpoint

    Are the files separated?

    Go when: Each CSV has one status and a plain file name.

    Stop when: Notes you need were never copied, and the export cannot include them.

  2. Day 2 · backup

    Download before day 7

    1 to 2 hours active1 day elapsedExport jobs waiting
    • Download from Contacts, Exports.
    • Save a copy outside ActiveCampaign.

    Depends on: Finished exports

    Stop / go checkpoint

    Is the archive local?

    Go when: All three CSVs open as spreadsheets.

    Stop when: A file arrived as plain text because of the name.

  3. Days 3 to 5 · pilot

    Suppress, then import a slice

    3 to 5 hours active1 to 2 days elapsedSuppression confirmation waiting
    • Import the suppression file.
    • Import a small Active slice.
    • Read consent on those profiles.

    Depends on: Local CSVs

    Stop / go checkpoint

    Import the rest?

    Go when: Suppressed addresses are suppressed, and the slice shows the consent you chose.

    Stop when: A bounced address is subscribed.

  4. Days 5 to 8 · cutover

    Full list, flows still off

    3 to 6 hours active1 to 3 days elapsedImport job waiting
    • Import the rest of Active.
    • Keep list-triggered flows off until counts match.
    • Start rebuilding the first flow.

    Depends on: Passed pilot

    Stop / go checkpoint

    Turn a flow on?

    Go when: Active count matches and suppressions are loaded.

    Stop when: historical_import was skipped on an API load.

  5. Days 8 to 14 · observe

    One campaign, then automations

    3 to 6 hours active3 to 6 days elapsedA small send waiting
    • Send one campaign to a segment.
    • Watch bounces.
    • Finish the flows you still need.

    Depends on: Full import

    Stop / go checkpoint

    Stop ActiveCampaign sends?

    Go when: The test segment matches Active and excludes Unsubscribed.

    Stop when: Complaints come from addresses that were Unsubscribed.

07The point of change

Cut over with a way back.

Go live

Cutover

Send from Klaviyo only after suppressions are loaded and Active contacts match.

Recommended window: After the suppression confirmation, before any welcome flow is enabled.

  1. Confirm the suppression import finished.
  2. Confirm the Klaviyo list count matches the Active CSV.
  3. Leave list-triggered flows off for the import window.
  4. Send a small campaign to a segment you can check.
  5. Turn ActiveCampaign campaigns off after that send looks right.

Proof to capture: A known unsubscribed address is suppressed, and the list count matches the Active file.

Return to safety

Rollback

Keep sending from ActiveCampaign if Klaviyo's consent or counts are wrong.

Deadline: Before the 7-day ActiveCampaign download links expire, unless the CSVs are already local.

  1. Do not delete the ActiveCampaign list.
  2. Stop the Klaviyo campaign if a suppressed address is included.
  3. Export the Klaviyo list and diff it against Active and Unsubscribed.
  4. Send the next campaign from ActiveCampaign while you fix the files.

Proof to capture: ActiveCampaign still has the list, and the bad Klaviyo send is stopped.

Rollback immediately when
  • The subscriber file contains a status other than Active
  • Bulk consent was applied to a mixed file
  • An API import omitted historical_import
  • A bounced address is not suppressed
  • The list count does not match the Active CSV
08Verification report

Prove the migration worked.

Every blocking check must pass. Capture the evidence before cleanup begins.

0%
Interactive report preview0 / 8 checks passed
PassIDCheckMethodExpected resultEvidence
V-01BlockingThree statusesOpen each CSV and read the Status column.One file is Active, one is Unsubscribed, and one is Bounced.CSV headers.
V-02BlockingReal CSVConfirm the export name had no special characters and the file opens as a spreadsheet.Columns are separated, not one text blob.Local file.
V-03BlockingImport finishedRead Klaviyo's confirmation after the one-column import.Unsubscribed and bounced addresses are suppressed before any send.Suppression confirmation.
V-04BlockingBulk consent scopeRead the consent choice on the import.Bulk consent is used only when every row consented. Otherwise the file's own consent is used.Import screen.
V-05Blockinghistorical_importIf you used the API, read the payload.historical_import is true and consented_at is at least five minutes in the past.Request log.
V-06BlockingActive rowsCompare the Klaviyo list count with the Active CSV.The counts match, minus rows you excluded on purpose.Count sheet.
V-07BlockingNothing auto-copiedOpen Klaviyo flows and compare with the ActiveCampaign inventory.Each live flow was rebuilt, or it is still off.Flow list.
V-08Notes you still needAsk whether any required note was copied before export.Required notes exist outside ActiveCampaign. The CSV is not the source.Notes archive.
09Post-migration cleanup

Remove the scaffolding safely.

Safe after: Suppressions are loaded, the Active count matches, and one Klaviyo campaign excluded a known unsubscribed address.

  1. Turn off ActiveCampaign campaigns after that send.
  2. Keep the three CSVs with the migration notes.
  3. Rebuild the remaining flows before you turn them on.
  4. Do not import the all-contacts file later without a status split.
  5. Leave ActiveCampaign available until the rollback window ends.
  6. Schedule a review of Klaviyo list-triggered flows before the next import.
10Experiences from the field

When the plan met reality.

First-hand accounts are preferred. Vendor case studies are labeled, and every note below is an editorial paraphrase—follow the link for the full context.

First-person accountLmoio · Klaviyo Community

ActiveCampaign flows do not transfer into Klaviyo2021

Lmoio asked the Klaviyo community on 26 July 2021 whether ActiveCampaign automations could move over, or whether the emails had to be copied by hand. The same day, Klaviyo alum Dov answered that flows and templates cannot be transferred automatically. HTML files can be imported and then used in Klaviyo flow emails. Contacts were a CSV import through List, Manage List, Import Contacts, plus the subscriber and unsubscribe article. In September 2023, mkemail replied that they could not find a way to export HTML from an ActiveCampaign saved template. David To told them to ask ActiveCampaign. The thread is a question and a staff constraint, not a finished cutover with counts.

What they recommend
  • Plan to rebuild ActiveCampaign flows in Klaviyo. Do not block the contact import on an HTML export you have not found.
  • Import contacts from a CSV, and keep the unsubscribe file separate, as the staff reply pointed at Klaviyo's migration article.
Worth noticing
  • Klaviyo's own reply says flows and templates do not come across automatically from ActiveCampaign.
  • A later reply could not find an ActiveCampaign control that exports a saved template as HTML.
Sources and evidence

Verify against the primary material.

Platform behavior changes. Check these sources and the review dates above before executing a production migration.

  1. Klaviyo: migrate subscribers and unsubscribesAccessed 2026-11-04
  2. ActiveCampaign: export all contactsAccessed 2026-11-04
  3. ActiveCampaign: export a listAccessed 2026-11-04