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.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
ActiveCampaign
- Deep lifecycle automation combines email, CRM signals, scoring, and segmentation
- Audience, campaigns, automations, and reporting live in one publishing system
- Complex automations and contact-based pricing create migration and governance overhead
- Automation logic, analytics history, and deliverability settings are not very portable
Klaviyo
- Commerce-native segmentation, behavioral automation, and revenue attribution are exceptionally strong
- Audience, campaigns, automations, and reporting live in one publishing system
- 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
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.
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
Know the shape of the move.
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.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| Flows and templates | manual | critical | Klaviyo'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 notes | lost | medium | ActiveCampaign 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 addresses | manual | critical | Klaviyo 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 status | partial | high | A 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 import | manual | critical | Klaviyo 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 fields | partial | medium | ActiveCampaign 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 name | manual | low | ActiveCampaign 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 contacts | manual | high | Active 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 tracking | lost | medium | The 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 list | partial | medium | Klaviyo 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. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| List status Active | Klaviyo list | transform | Export Active from Contacts, Lists. Import at Audience, Lists & segments, Manage list, Import contacts. |
| automatic | Name the column Email or Email Address. | ||
| First name and last name | First Name and Last Name | automatic | Map them on the import screen. |
| Tags | Profile property | transform | ActiveCampaign stores tags in one column. |
| Custom fields | Custom properties | transform | Map only columns you will use. |
| Status Unsubscribed | Suppression import | manual | One email column. Import before you send. |
| Status Bounced | Suppression import | manual | Same one-column file, or a second suppression import. |
| Date Subscribed | consented_at on the API | manual | Required with historical_import, and it must be at least five minutes in the past. |
| Automations | No destination | unsupported | Rebuild flows. HTML import is not an ActiveCampaign export button. |
Make the move recoverable.
Create the source-of-truth backup
Keep an Active export, an Unsubscribed export, and a Bounced export outside ActiveCampaign.
- Export the list three times, once for Active, once for Unsubscribed, and once for Bounced.
- Use a plain export name so the file stays a CSV.
- Download each file from Contacts, Exports, before the 7 days end.
- 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.
Suppressions first
Stop Klaviyo from mailing people ActiveCampaign already suppressed.
- Build a CSV with one column of Unsubscribed and Bounced emails.
- Open Audience, Profiles, View suppressed profiles.
- Import the file, or use More actions, Import suppressions.
- 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.
Active subscribers
Load consented contacts without firing list flows.
- Import the Active CSV into one list.
- Map Email. Apply bulk consent only if every row consented.
- If you use the API, set historical_import true and consented_at at least five minutes ago.
- Leave Unconfirmed rows out.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
Suppressions are in the subscriber file
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.
Bulk consent is broader than the file
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.
A subscribe call starts a flow
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.
Do the work in this order.
- 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 checkpointAre 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.
- 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 checkpointIs the archive local?
Go when: All three CSVs open as spreadsheets.
Stop when: A file arrived as plain text because of the name.
- 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 checkpointImport the rest?
Go when: Suppressed addresses are suppressed, and the slice shows the consent you chose.
Stop when: A bounced address is subscribed.
- 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 checkpointTurn a flow on?
Go when: Active count matches and suppressions are loaded.
Stop when: historical_import was skipped on an API load.
- 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 checkpointStop ActiveCampaign sends?
Go when: The test segment matches Active and excludes Unsubscribed.
Stop when: Complaints come from addresses that were Unsubscribed.
Cut over with a way back.
Cutover
Send from Klaviyo only after suppressions are loaded and Active contacts match.
- Confirm the suppression import finished.
- Confirm the Klaviyo list count matches the Active CSV.
- Leave list-triggered flows off for the import window.
- Send a small campaign to a segment you can check.
- 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.
Rollback
Keep sending from ActiveCampaign if Klaviyo's consent or counts are wrong.
- Do not delete the ActiveCampaign list.
- Stop the Klaviyo campaign if a suppressed address is included.
- Export the Klaviyo list and diff it against Active and Unsubscribed.
- 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.
- 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
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | Three statuses | Open each CSV and read the Status column. | One file is Active, one is Unsubscribed, and one is Bounced. | CSV headers. | |
V-02Blocking | Real CSV | Confirm the export name had no special characters and the file opens as a spreadsheet. | Columns are separated, not one text blob. | Local file. | |
V-03Blocking | Import finished | Read Klaviyo's confirmation after the one-column import. | Unsubscribed and bounced addresses are suppressed before any send. | Suppression confirmation. | |
V-04Blocking | Bulk consent scope | Read 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-05Blocking | historical_import | If 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-06Blocking | Active rows | Compare the Klaviyo list count with the Active CSV. | The counts match, minus rows you excluded on purpose. | Count sheet. | |
V-07Blocking | Nothing auto-copied | Open Klaviyo flows and compare with the ActiveCampaign inventory. | Each live flow was rebuilt, or it is still off. | Flow list. | |
V-08 | Notes you still need | Ask whether any required note was copied before export. | Required notes exist outside ActiveCampaign. The CSV is not the source. | Notes archive. |
Remove the scaffolding safely.
Safe after: Suppressions are loaded, the Active count matches, and one Klaviyo campaign excluded a known unsubscribed address.
- Turn off ActiveCampaign campaigns after that send.
- Keep the three CSVs with the migration notes.
- Rebuild the remaining flows before you turn them on.
- Do not import the all-contacts file later without a status split.
- Leave ActiveCampaign available until the rollback window ends.
- Schedule a review of Klaviyo list-triggered flows before the next import.
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.
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.
- 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.
- 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.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- Klaviyo: migrate subscribers and unsubscribesAccessed 2026-11-04
- ActiveCampaign: export all contactsAccessed 2026-11-04
- ActiveCampaign: export a listAccessed 2026-11-04