ConvertKit (Kit) → AcelleMail Migration — Visual Walkthrough

Export subscribers from ConvertKit (now Kit), import into AcelleMail in 6 clicks. Visual walkthrough on both sides with API-driven option.

Before you start

You'll need:

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

ConvertKit was rebranded to Kit in 2024. The UI shifted but the export flow remains the same — this guide uses the current Kit screen names.

Export from Kit (ConvertKit)

In Kit's top nav, click Subscribers. Filter by tag, segment, form, or "all subscribers" — whichever scope you want to migrate. Then click Export in the toolbar.

Kit asks for format (CSV) and field selection — pick all the custom fields you've defined. The file prepares in the background; Account → Imports & Exports shows the download link when ready (usually <5 minutes).

Exported CSV includes: email, first name, all custom fields, tags (comma-separated), confirmed-at timestamp, source.

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 Kit (ConvertKit) automations

Kit's automations (formerly called "sequences" + "rules") map to AcelleMail's Automations. Equivalent triggers:

Kit trigger AcelleMail trigger
Subscribes via form Subscribed to list
Tag added Tag added
Clicks link in email Link clicked
Purchases (via integration) Custom event (API)
Date condition Date relative
Form submission Subscribed to list (form's target list)

Kit's "Visual Automations" (drag-and-drop sequence builder) closely mirror AcelleMail's automation canvas — the rebuild is largely 1:1 with the same node primitives.

Merge-tag syntax differences

Kit (ConvertKit) AcelleMail
{{ subscriber.first_name }} {{ subscriber.first_name }} (no change!)
{{ subscriber.email_address }} {{ subscriber.email }}
{{ subscription.unsubscribe_url }} {{ unsubscribe_url }}

Kit uses Liquid templating, very close to AcelleMail's own syntax. Most templates copy-paste with only the email_addressemail rename and unsubscribe-URL rename.

Advanced: API-driven migration with Kit's subscribers endpoint

Export from Kit via API:

# Kit (v4) API key from Account → API & Apps
curl -X GET "https://api.kit.com/v4/subscribers?per_page=1000" \
  -H "Authorization: Bearer <KIT_API_KEY>" \
  -o kit-subscribers.json

Paginate via after cursor; loop until response pagination.has_next_page is false.

Import into AcelleMail:

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

jq -c '.subscribers[] | {email: .email_address, first_name: .first_name}' kit-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

For Kit's "Commerce" features (paid subscriptions, products), AcelleMail doesn't have direct equivalents — those workflows typically stay on Kit or move to a dedicated subscription tool.

Related articles

10 commenti

7 commenti

  1. phuong.mai.hn
    for the ip warmup — is dedicated ip worth it at 25k subscribers? or stick with shared ses?
    1. admin
      Good question. The campaign:rerun audit writes to laravel.log only when the audit decides to force-resume — pure noop runs are silent. We'll add an info-level heartbeat in a future Acelle release to make it easier to monitor.
  2. bos.devops
    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
  3. cw.dev.sh
    Adding: don't forget to migrate your webhook integrations too. We forgot ours and Shopify-cart-recovery silently stopped working for 3 weeks before anyone noticed
    1. admin
      solid case study material here. if you're open to it, we'd love to write this up as a blog post — happy to credit you anonymously or otherwise.
  4. lequan.saigon
    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 wouldn't have caught at 100% cutover.
    1. admin (modificato)
      Thanks for sharing. The pattern you describe is exactly the use case we built that feature for — glad it landed for you
  5. y.yamamoto
    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.
  6. m.schmidt78
    Bookmarked. Were evaluating a move next quarter and this is the most operationally-realistic guide I've found.
  7. lucas.bernard.…
    Did this last year. Confirming: the cron + worker setup is 80% of the install pain. Once those are running, the rest is documentation-following.

More in Migration & Comparison