# Mailchimp → AcelleMail Migration — A Visual Walkthrough

> 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.

- Canonical URL: https://acellesend.com/kb/articles/migrating-from-mailchimp-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-01-09 · Last updated: 2026-08-15
- Reading time: 5 min
- Publisher: AcelleMail Knowledge Base, https://acellesend.com/kb

---

## Before you start

You'll need:

- A Mailchimp account with audience access (Member, Manager, or Owner role)
- An AcelleMail installation up and running (any version 4.0+)
- ~30 minutes for a list of <50k subscribers; longer for larger or for rebuilding automations

This guide walks the visual flow on both ends. No CLI required for the standard path.

## Export from Mailchimp

In Mailchimp's left sidebar, click **Audience** → **All contacts**. On the contacts page, click **Export Audience** in the top-right toolbar.

Mailchimp prepares a CSV in the background — refresh after ~30 seconds, the **Download** button activates. The file includes: email, every merge field (`FNAME`, `LNAME`, custom), tags (comma-separated), opt-in timestamps, source.

For campaign reports (open/click data), open any campaign → **View Report** → **Export**. This is optional for the migration itself; useful only if you want to import engagement history.
## 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.

## Re-creating automations

Mailchimp's "customer journeys" map roughly to AcelleMail's **Automation** workflows (sidebar → *Automations*). The trigger types align:

| Mailchimp journey trigger | AcelleMail automation trigger |
|---|---|
| Joins audience | Subscribed to list |
| Tag added | Tag added |
| Campaign sent | Campaign sent |
| Date in field | Date relative |
| API event | Custom event |

Re-build each journey by clicking **Automations → New automation** → pick the equivalent trigger → add the same delays and email steps. Visual builder, no code.

## Merge-tag syntax differences

Mailchimp uses `*|FNAME|*` for merge tags; AcelleMail uses `{{ subscriber.first_name }}`. The AcelleMail email builder has a merge-tag picker (right-side panel in the builder) — click to insert, no syntax to remember.

For raw HTML imports, find/replace patterns:

| Mailchimp | AcelleMail |
|---|---|
| `*|FNAME|*` | `{{ subscriber.first_name }}` |
| `*|LNAME|*` | `{{ subscriber.last_name }}` |
| `*|EMAIL|*` | `{{ subscriber.email }}` |
| `*|UNSUB|*` | `{{ unsubscribe_url }}` |
| `*|ARCHIVE|*` | `{{ web_view_url }}` |

<details>
<summary><strong>Advanced: API-driven migration for large lists or scripted workflows</strong></summary>

For lists >500k or for automation-heavy installs where you want to script the full migration, AcelleMail's REST API supports bulk subscriber creation + tagging.

**Export from Mailchimp via Marketing API:**

```bash
# Mailchimp dc = your datacenter (e.g. us21). API key from Audience → Settings.
curl -X GET "https://us21.api.mailchimp.com/3.0/lists/<list_id>/members?count=10000&offset=0" \
  -u "anystring:<MAILCHIMP_API_KEY>" \
  -o mailchimp-members.json
```

Paginate via `offset` until response `members` is empty.

**Import into AcelleMail via REST API:**

```bash
# AcelleMail API token from /account/api-tokens
ACELLE_TOKEN="..."
ACELLE_LIST_UID="..."

# One-at-a-time create (slow but reliable):
jq -c '.members[] | {email: .email_address, first_name: .merge_fields.FNAME, last_name: .merge_fields.LNAME, tags: [.tags[].name] | join(",")}' mailchimp-members.json \
  | while read subscriber; do
      curl -X POST "https://acellemail.com/api/v1/subscribers" \
        -H "Authorization: Bearer $ACELLE_TOKEN" \
        -H "Content-Type: application/json" \
        -d "{\"list_uid\":\"$ACELLE_LIST_UID\",\"subscriber\":$subscriber}"
    done
```

For >100k rows, the CSV import path through the UI is still faster (AcelleMail batches the inserts internally) — the API path is for when you need scripted reproducibility (e.g. CI-driven nightly sync from a CRM-of-record).

**Programmatic automation rebuild** is less common — every automation platform has subtly different step semantics, so manual rebuild via the visual builder is usually more reliable than scripting. The AcelleMail automation export/import API exists but mirrors AcelleMail's internal flow JSON, not Mailchimp's journey format.

</details>

## Related articles

- [Importing contacts CSV — best practices and field mapping](https://acellesend.com/kb/articles/importing-contacts-csv-best-practices-and-field-mapping)
- [Building a welcome email series in AcelleMail](https://acellesend.com/kb/articles/building-a-welcome-email-series-in-acellemail)
- [Email list hygiene — clean your list for better deliverability](https://acellesend.com/kb/articles/email-list-hygiene-clean-your-list-for-better-deliverability)
- [Migration from Brevo (Sendinblue) to AcelleMail](https://acellesend.com/kb/articles/migrating-from-brevo-sendinblue-to-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.
- [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.
- [ActiveCampaign → AcelleMail Migration — Visual Walkthrough](https://acellesend.com/kb/articles/migrating-from-activecampaign-to-acellemail): Export contacts from ActiveCampaign, import into AcelleMail in 6 clicks. UI walkthrough plus optional API migration for large accounts.
