Skip to content

MailerLite → AcelleMail Migration — Visual Walkthrough

Export subscribers from MailerLite, import into AcelleMail in 6 clicks. Visual walkthrough on both sides with API-driven option for large lists.

Before you start

You'll need:

  • A MailerLite account with subscriber-export permission
  • An AcelleMail installation up and running
  • ~30 minutes for <100k subscribers

Export from MailerLite

In MailerLite's left sidebar, click Subscribers → choose the group/list to export → Export in the toolbar.

MailerLite asks for format (CSV) and which fields to include — select all custom fields you've defined. The file prepares in the background; check Subscribers → Imports / Exports for the download link (usually <2 minutes).

Exported CSV includes: email, name, all custom fields, signup date, opt-in source, segments memberships.

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

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

List overview

2. Click "Import" in the list toolbar

The wizard entrypoint is on the list detail page:

Import entry point

3. Upload your CSV

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

Upload empty state

AcelleMail parses the file and confirms detection:

Upload success

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

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

You'll see PendingRunningComplete 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 MailerLite automations

MailerLite's automation workflows map to AcelleMail's Automations. Equivalent triggers:

MailerLite trigger AcelleMail trigger
Joins group Subscribed to list
Updates field Field value change
Anniversary of date Date relative
Completes a form Subscribed to list (form's target list)
Clicks a specific link Link clicked

Merge-tag syntax differences

MailerLite AcelleMail
{$name} {{ subscriber.first_name }}
{$last_name} {{ subscriber.last_name }}
{$email} {{ subscriber.email }}
{$url_unsubscribe} {{ unsubscribe_url }}
{$url_webversion} {{ web_view_url }}
Advanced: API-driven migration with MailerLite's subscribers endpoint

For large MailerLite accounts or scheduled sync:

Export from MailerLite via API:

# MailerLite v2 API token from Integrations → API
curl -X GET "https://connect.mailerlite.com/api/subscribers?limit=100&page=1" \
  -H "Authorization: Bearer <MAILERLITE_API_TOKEN>" \
  -H "Accept: application/json" \
  -o mailerlite-subscribers.json

Paginate via page; MailerLite returns max 100/page.

Import into AcelleMail:

ACELLE_TOKEN="..."
ACELLE_LIST_UID="..."

jq -c '.data[] | {email: .email, first_name: .fields.name, last_name: .fields.last_name}' mailerlite-subscribers.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

Related articles

24 comments

16 comments

  1. Aditi
    we migrated 90k subscribers last march. the parallel period suggestion (10-25-50-75) saved us — the acellemail side hit a deliverability dip on day 3 we wouldnt have caught at 100% cutover.
    1. Admin
      Day 3 is exactly where those dips show up. The first two days ride on whatever reputation the sending domain already had, then the volume registers at the receivers and you see it. Catching that at 25% instead of 100% is the whole reason the ramp is in there. One thing worth adding for anyone reading this later: at 90k the dip is usually concentrated in one mailbox provider rather than across the board, so check the per-domain breakdown before you assume the whole ramp is bad. Gmail and Outlook tend to react on different schedules. I'll put the day-3 detail into the parallel period section, right now the article just says "watch the numbers" without saying when to expect trouble. If you still have the shape of what you saw on day 3 and how long it took to recover, I'd use it.
  2. Emma
    Id push back on the 'random recipient split' for the parallel period. If your campaigns are time-sensitive (flash sales etc), random splitting causes weird timing fragmentation. We split by audience segment instead — simpler ops.
  3. David
    Bookmarked. We're evaluating a move next quarter and this is the most operationally-realistic guide I've found.
  4. Ravi
    How do you handle the Mailchimp-style merge tags in old templates? We have ~50 templates with *|FNAME|* and dont want to manually rewrite each.
    1. Admin
      There's no built-in converter for `*|FNAME|*` today, so nothing in the import step will rewrite them for you. It's on the list, but I won't pretend it's close. For 50 templates the practical route is a find/replace pass before you import. The Mailchimp/MailerLite tag set is small and regular, so a mapping table gets you most of the way: `*|FNAME|*` and `*|LNAME|*` map to your list's custom fields, `*|EMAIL|*` to the subscriber email tag. Export the HTML, run the substitutions, import back. If your templates all came out of the same builder the shapes will be identical and it's one script, not 50 edits. Two things that bite people here. Merge tag names in Acelle come from the custom fields on the target list, so create those fields first or the replacements resolve to empty. And Mailchimp's conditional blocks (`*|IF:FNAME|*`) don't have a straight equivalent, those need a look by hand rather than regex. If you write the mapping script and it's generic enough, send it over and I'll fold it into the article as a section. That question comes up often enough to earn one.
  5. Yuki
    Did this last year. Confirming: the cron + worker setup is 80% of the install pain. Once those are running, the rest is documentation-following
  6. Marcus
    Tip for anyone planning this: do a dry-run of the import with a small test list first. We caught a CSV encoding issue (Excel saved BOM-prefixed UTF-8) that would've affected all 60k rows.
  7. Nadia
    If your Mailchimp account has automations triggered by tags, document them carefully BEFORE export — the audit log goes away when you cancel the account and youll need that reference during the rebuild
    1. Admin
      This bites on the MailerLite side too. The export gives you subscribers, fields and groups, but the automation workflows themselves aren't in it, so once the account lapses you're rebuilding trigger logic from memory. Screenshot each workflow's trigger and branch conditions before you cancel, and keep the group-to-tag mapping somewhere, since that's what the rebuild actually hangs on. I'll add a "before you cancel" step near the top of the walkthrough covering this.
  8. Vera
    The 8-week timeline is reasonable for marketing-only migrations. If you have transactional email integrated (order confirmations, password resets), add 4-6 more weeks for the API rewiring. That part is underestimated everywhere
  9. Ahmed
    Does this guide assume self-hosted Acelle or does it work with the hosted offering too?
    1. Admin
      Both. Only the sending server differs: self-hosted you set it up before the first import, on hosted it's already wired.
  10. Lucas
    what about subscribers who unsubscribed via mailchimp's preference center? does the suppression-list import capture those, or just outright unsubscribes?
    1. Admin
      Worth separating two things, because the preference center does both. If someone used it to fully opt out, they land in the unsubscribed segment of the export and the suppression import picks them up like any other unsubscribe. If they only turned off some groups or topics and stayed subscribed otherwise, that isn't an unsubscribe at all on the source side, it's group membership. The export won't flag them, and nothing on our end can infer it. You'd need to pull those group/interest columns separately and rebuild them as list segments or tags after import, then respect them in your own targeting. Note this article covers the MailerLite export, where the equivalent is groups rather than Mailchimp's interest groups. The shape is the same but the column names differ. If you're actually coming from Mailchimp, tell me and I'll point you at the right doc, and I'll add a line about partial opt-outs to both since it clearly isn't obvious from what's written now.
  11. Isabella
    Completed this migration in Q1. The list-cleanup step is even more important than this guide makes it. We had 40k subscribers, exported, found that 6k were already on Mailchimp's suppression list. Importing those would've torched our new sender reputation.
  12. Minh
    The cost-comparison table is the only honest one I've seen. Most 'AcelleMail vs X' content underestimates the ops cost of self-hosting.
  13. Sofia
    For the IP warmup — is dedicated IP worth it at 25k subscribers? Or stick with shared SES?
    1. Admin
      Stay on shared SES. A dedicated IP wants 100k+ sends a month on a steady cadence to hold reputation, otherwise it goes cold between your sends.
  14. Carlos
    question on DNS migration step — when you say 'add new include alongside old', does that work with strict DMARC alignment or does mixing two SPF includes break the alignment check?
    1. Admin
      Mixing two includes doesn't touch alignment at all. SPF alignment is judged on the Return-Path (envelope sender) domain versus your From: domain, not on how many includes sit in the record. So `v=spf1 include:mailerlite.com include:_spf.acellesend.com ~all` still aligns strictly as long as the bounce domain we send from is the same registrable domain as your From:, and under strict it has to be the exact same domain, not a subdomain. The real thing that bites during a dual-include window is the 10 DNS lookup limit. MailerLite's include costs a few, ours costs a couple, and if you had anything else in there already you can tip over into permerror, which fails SPF outright for both senders. Check with `dig +short TXT yourdomain.com` and count, or run it through an SPF flattener check before you cut over. Keep the old include until your last MailerLite send has fully bounced through, then drop it. I'll add the lookup-limit warning to the DNS step in the walkthrough, it's not called out there and it should be.
  15. Olufemi
    year 1 cost ended up matching this guide's estimate almost exactly. Year 2 was even better because the VPS upgrade we needed was a one-time $20/mo bump.
    1. Admin
      Year 2 is where the math usually turns, and that's the part the guide undersells. MailerLite bills you again for the same list every month, so a growing list is a growing bill. A VPS bump is a step, not a slope. You pay the $20 once and then it's flat until you outgrow it again. If you don't mind saying, roughly what list size and monthly volume pushed you into the upgrade? I'd like to put a real data point in the sizing section instead of the estimate we have now.
  16. Brian
    Reading this 2 weeks into our Mailchimp migration. The 8-week timeline is conservative but accurate — we tried to compress to 4 weeks and got bitten by exactly the DNS warmup mistake you describe.

More in Migration & Comparison