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

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.
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 }} |
Advanced: API-driven migration with ActiveCampaign's contacts endpoint
For >250k contacts or scheduled sync:
Export from ActiveCampaign via API:
# 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:
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.
Related articles
- Importing contacts CSV — best practices and field mapping
- Migration from Mailchimp to AcelleMail
- Advanced automation triggers and conditions
- Building a welcome email series in AcelleMail
7 bình luận