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

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

2. Click "Import" in the list toolbar
The wizard entrypoint is on the list detail page:

3. Upload your CSV
Drop the CSV file from the previous platform into the upload area:

AcelleMail parses the file and confirms detection:

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:

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:

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 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 |
| `* | LNAME |
| `* | |
| `* | UNSUB |
| `* | ARCHIVE |
Advanced: API-driven migration for large lists or scripted workflows
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:
# 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:
# 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.
Related articles
- Importing contacts CSV — best practices and field mapping
- Building a welcome email series in AcelleMail
- Email list hygiene — clean your list for better deliverability
- Migration from Brevo (Sendinblue) to AcelleMail
5 bình luận