# ActiveCampaign → AcelleMail Migration — Visual Walkthrough

> Export contacts from ActiveCampaign, import into AcelleMail in 6 clicks. UI walkthrough plus optional API migration for large accounts.

- Canonical URL: https://acellesend.com/kb/articles/migrating-from-activecampaign-to-acellemail
- Author: Martin Keller, SaaS & Business Editor
- Category: Migration & Comparison — Switching from Mailchimp/Sendinblue, cost comparison, data migration
- Content type: tutorial · Difficulty: beginner
- Tags: Acellemail
- Published: 2026-07-04 · Last updated: 2026-08-15
- Reading time: 4 min
- Publisher: AcelleMail Knowledge Base, https://acellesend.com/kb

---

## Before you start

You'll need:

- An ActiveCampaign account with contact-export permission (Admin role)
- An AcelleMail installation up and running
- ~45 minutes for <100k contacts + custom fields + tags

## Export from ActiveCampaign

In ActiveCampaign's left sidebar, click **Contacts** → **Manage Contacts**. Top-right toolbar → **Export**.

The Export dialog asks for filters (all contacts vs. specific list/tag). Pick the scope you want. Format: **CSV**.

ActiveCampaign emails you the file when ready (usually <10 minutes for <100k contacts). The CSV includes: email, first name, last name, phone, all custom fields, tags (comma-separated), list memberships, account-level fields.
## Import into AcelleMail (the same 6 clicks for every source)

Once you have the CSV exported from your previous platform, the import flow in AcelleMail is identical regardless of where the data came from.

### 1. Open your destination list

In AcelleMail's sidebar, click **Audience** → choose the list that will receive the migrated subscribers (or create a new one — *New list* button top-right).

![Lists index](https://acellesend.com/plugins/acelle/landing/images/help/kb/import-csv/01-lists-index.png)

You'll see a per-list overview card with subscriber counts:

![List overview](https://acellesend.com/plugins/acelle/landing/images/help/kb/import-csv/02-list-overview.png)

### 2. Click "Import" in the list toolbar

The wizard entrypoint is on the list detail page:

![Import entry point](https://acellesend.com/plugins/acelle/landing/images/help/kb/import-csv/03-import-entry.png)

### 3. Upload your CSV

Drop the CSV file from the previous platform into the upload area:

![Upload empty state](https://acellesend.com/plugins/acelle/landing/images/help/kb/import-csv/04-upload-empty.png)

AcelleMail parses the file and confirms detection:

![Upload success](https://acellesend.com/plugins/acelle/landing/images/help/kb/import-csv/05-upload-success.png)

### 4. Map the columns

The wizard auto-detects standard columns (`email`, `first_name`, `last_name`) and shows green *Mapped to EMAIL* chips. Adjust manually for any non-standard column from the source:

![Map columns](https://acellesend.com/plugins/acelle/landing/images/help/kb/import-csv/06-map-columns.png)

### 5. Pick duplicate handling

In the same screen, choose what AcelleMail does when a subscriber already exists in this list:

- **Skip** — keep the existing row, don't overwrite
- **Update** — overwrite name/tags/custom fields with values from the CSV
- **Unsubscribe** — mark existing rows as unsubscribed (rare; used when re-importing an opted-out list)

### 6. Run the import

Click **Start import**. The job runs in the background — close the popup, work elsewhere, return to **Audience → [list] → Import** to see progress:

![Import history](https://acellesend.com/plugins/acelle/landing/images/help/kb/import-csv/07-import-entry-revisit.png)

You'll see *Pending* → *Running* → *Complete* per import job, with rows-imported / rows-skipped / errors counts.

## After the import

- **Verify list count** matches your expected size (rows that failed validation appear in the *Errors* column with a downloadable error CSV).
- **Re-tag if needed** — for behavioural data that doesn't fit a CSV column (e.g. "opened campaign X"), you may need to re-create the tag via segmentation rules.
- **Pause for warm-up** — if the imported list is large (>10k) and your sending IP is new or recently rotated, run a short warm-up campaign to your most-engaged 10% before the full send. See [IP warm-up best practices](https://acellesend.com/kb/articles/ip-warmup-schedule-for-new-sending-servers) for the schedule.

## Rebuilding ActiveCampaign automations

ActiveCampaign's **automations** map to AcelleMail's **Automations**. Equivalent triggers:

| ActiveCampaign trigger | AcelleMail trigger |
|---|---|
| Subscribes to list | Subscribed to list |
| Tag added | Tag added |
| Custom field changes | Field value change |
| Opens/clicks email | Link clicked |
| Date-based field | Date relative |
| Site/event tracking | Custom event (API) |
| Goal achieved | (rebuild as workflow exit) |

ActiveCampaign's "conditional content" inside emails (different blocks per segment) maps to AcelleMail's tag-driven email variants — set up separate campaigns per tag, OR use Liquid-style conditionals in the email body referring to `{{ subscriber.tags }}`.

## Merge-tag syntax differences

| ActiveCampaign | AcelleMail |
|---|---|
| `%FIRSTNAME%` | `{{ subscriber.first_name }}` |
| `%LASTNAME%` | `{{ subscriber.last_name }}` |
| `%EMAIL%` | `{{ subscriber.email }}` |
| `%UNSUBSCRIBELINK%` | `{{ unsubscribe_url }}` |
| `%FORWARDLINK%` | `{{ web_view_url }}` |

<details>
<summary><strong>Advanced: API-driven migration with ActiveCampaign's contacts endpoint</strong></summary>

For >250k contacts or scheduled sync:

**Export from ActiveCampaign via API:**

```bash
# AC API URL + token from Settings → Developer
curl -X GET "https://<account>.api-us1.com/api/3/contacts?limit=100&offset=0" \
  -H "Api-Token: <AC_API_TOKEN>" \
  -o ac-contacts.json
```

Paginate via `offset`; AC returns max 100 per page.

**Import into AcelleMail:**

```bash
ACELLE_TOKEN="..."
ACELLE_LIST_UID="..."

jq -c '.contacts[] | {email: .email, first_name: .firstName, last_name: .lastName}' ac-contacts.json \
  | while read sub; do
      curl -X POST "https://acellemail.com/api/v1/subscribers" \
        -H "Authorization: Bearer $ACELLE_TOKEN" \
        -d "{\"list_uid\":\"$ACELLE_LIST_UID\",\"subscriber\":$sub}"
    done
```

ActiveCampaign's "deals" / "accounts" CRM features don't have direct AcelleMail equivalents — for CRM-adjacent workflows you'd typically keep ActiveCampaign for CRM + use AcelleMail for marketing email, syncing tags via Zapier or webhook bridges.

</details>

## Related articles

- [Importing contacts CSV — best practices and field mapping](https://acellesend.com/kb/articles/importing-contacts-csv-best-practices-and-field-mapping)
- [Migration from Mailchimp to AcelleMail](https://acellesend.com/kb/articles/migrating-from-mailchimp-to-acellemail)
- [Advanced automation triggers and conditions](https://acellesend.com/kb/articles/advanced-automation-triggers-and-conditions)
- [Building a welcome email series in AcelleMail](https://acellesend.com/kb/articles/building-a-welcome-email-series-in-acellemail)

---

## Related articles

- [MailerLite → AcelleMail Migration — Visual Walkthrough](https://acellesend.com/kb/articles/migrating-from-mailerlite-to-acellemail): Export subscribers from MailerLite, import into AcelleMail in 6 clicks. Visual walkthrough on both sides with API-driven option for large lists.
- [Mailchimp → AcelleMail Migration — A Visual Walkthrough](https://acellesend.com/kb/articles/migrating-from-mailchimp-to-acellemail): Export contacts from Mailchimp's Audience screen, import into AcelleMail in 6 clicks. This guide covers the UI on both sides; advanced API-driven migration in the collapsible section for power users.
- [Klaviyo → AcelleMail Migration — Visual Walkthrough](https://acellesend.com/kb/articles/migrating-from-klaviyo-to-acellemail): Export your Klaviyo profiles as CSV, import into AcelleMail via the 6-click wizard. Visual walkthrough plus power-user API path for large Klaviyo accounts.
- [ConvertKit (Kit) → AcelleMail Migration — Visual Walkthrough](https://acellesend.com/kb/articles/migrating-from-convertkit-kit-to-acellemail): Export subscribers from ConvertKit (now Kit), import into AcelleMail in 6 clicks. Visual walkthrough on both sides with API-driven option.
- [Brevo (Sendinblue) → AcelleMail Migration — Visual Walkthrough](https://acellesend.com/kb/articles/migrating-from-brevo-sendinblue-to-acellemail): Export contacts from Brevo, upload to AcelleMail in 6 clicks. UI walkthrough on both sides plus optional API-driven migration for large lists.
