Mailement
About Pricing Help Sign in Start an account
Migration guide
  1. 1Before you start
  2. 2The CSV format
  3. 3From Mailchimp
  4. 4From Substack
  5. 5From ConvertKit / Kit
  6. 6From Beehiiv
  7. 7From Buttondown
  8. 8From Ghost
  9. 9From anywhere else
  10. 10Warm-up & deliverability
  11. 11If something breaks
Docs · Migrate to Mailement

Bring your list with you.

Last updated June 6, 2026 Covers Mailchimp · Substack · Kit · Beehiiv · Buttondown · Ghost
The short version: export your current subscribers as a CSV, sign up for Mailement, set up your brand, then upload at /admin/subscribers/import. Below is exactly which export to grab from each major newsletter tool and how its columns line up with ours. If you get stuck, write to hello@mail.mailement.com — David has personally migrated lists from most of these tools and will reply.

01Before you start

Three things to do first:

  • Create your Mailement workspace at /signup and add a brand for the newsletter you're migrating. Each brand is independent — you don't have to migrate everything at once.
  • Verify your sending domain on /admin/branding. Pick a subdomain of your real domain (avoid mail. — it conflicts with Google Workspace), paste the DKIM/SPF/return-path records into your DNS, and wait for the status to flip to verified. Migrating subscribers before this is fine; you just can't send to them yet.
  • Decide on opt-in mode. By default new brands use double opt-in. For an imported list of existing confirmed subscribers, you'll typically want imports marked as already-confirmed (the importer does this) and leave the brand on double opt-in for new signups going forward.

02The CSV format

Mailement's importer at /admin/subscribers/import accepts any CSV — you map columns to fields in step 2, so column order and naming don't have to match. These are the fields it recognizes:

  • email (required) — must be a valid address; duplicates within the file are merged.
  • first_name, last_name, city — optional standard fields.
  • Any custom field you've defined for the brand under /admin/fields — map by field key.
  • Topics — assign every imported row to one or more topics during step 2. If your source export has tags/segments, you can either pre-create matching topics in Mailement and map them, or import everyone into one bucket and segment later.
  • Status — defaults to confirmed for imports (an admin attests to consent). Unsubscribed and bounced rows from the source are skipped or imported as unsubscribed/bounced respectively so you don't accidentally email them.

Keep your CSV in UTF-8 with a header row. Excel sometimes saves as Windows-1252 and breaks accented characters — re-save as CSV UTF-8 (.csv) if you see João appear as João.

03From Mailchimp

Export: In Mailchimp, open the audience you want to migrate. Go to Manage Audience → Export Audience. Mailchimp prepares a ZIP containing one CSV per status (subscribed, unsubscribed, cleaned). Download and unzip.

Use the subscribed_members.csv for the main import. Its columns include Email Address, First Name, Last Name, plus any merge tags you'd set up (mapped to Mailement custom fields), and TAGS (a pipe-separated list that maps to Mailement topics).

Column mapping in step 2 of the importer:

  • Email Address → email
  • First Name → first_name
  • Last Name → last_name
  • ADDRESS city portion → city (Mailchimp stores ADDRESS as a compound field; you'll usually want a spreadsheet pass to split it)
  • Any merge tag → matching custom field
  • TAGS → split by | and assign to Mailement topics (create the topics first at /admin/topics)

Optionally also import unsubscribed_members.csv as status unsubscribed so re-uploads don't accidentally re-add people who chose to leave.

04From Substack

Export: In Substack, go to Settings → Exports → New export. After a few minutes you'll get an email with a ZIP. Unzip — the file you want is email_list.csv (sometimes named subscribers.csv).

Substack's export columns are simple: email, active_subscription (true/false), expiry, created_at. Free subscribers and paid subscribers are both in the same file; the active_subscription column tells you which.

Column mapping:

  • email → email
  • Optionally create a Paid supporters topic at /admin/topics and bulk-assign rows where active_subscription = true by filtering the CSV first, then doing two imports — one per topic.

Substack doesn't export first/last names — you'll start blank on those unless you've collected them via a separate form. Personalization tokens like {{first_name}} will use a graceful "friend" fallback for those rows.

05From ConvertKit / Kit

Export: In Kit (the rebrand of ConvertKit), go to Subscribers, click the Export button. Pick either "All subscribers" or filter by tag/segment first. Kit emails you a CSV download link.

Kit's export is friendly. Typical columns: Email Address, First Name, Last Name, State, Created At, Source, plus any tags you've applied.

Column mapping:

  • Email Address → email
  • First Name → first_name
  • Last Name → last_name
  • Any custom field → matching custom field
  • Tags & segments: the cleanest pattern is to export per-tag CSVs, then import each CSV into a matching Mailement topic. That's slower but it gives you a 1:1 mapping of Kit tags to Mailement topics.

If you're using Kit's automations, plan to rebuild the equivalent welcome flows as Mailement drip series — see the drips section of the help center. Trigger types map cleanly: Kit's "Subscribes to form" → Mailement's subscriber_confirmed with form filter; "Adds tag" at signup → topic_added; manual enroll → manual.

06From Beehiiv

Export: In Beehiiv, go to Audience → Subscribers, click Export, choose a segment (or "All subscribers"), confirm. Beehiiv emails the CSV.

Beehiiv's export columns include email, status (active / unsubscribed / etc.), created, tier, utm_source, utm_medium, utm_campaign, plus any custom fields and segments.

Column mapping:

  • email → email
  • tier → consider importing as a custom field (tier) so you can target premium subscribers later
  • utm_source, utm_medium, utm_campaign → optional custom fields if you want to preserve provenance
  • Segments → matching Mailement topics, one import per segment

Beehiiv's referral program data (referrers, reward tiers) doesn't have a direct equivalent in Mailement v1. Preserve it as custom fields if you want to retain visibility; we don't have a referral rewards engine yet.

07From Buttondown

Export: In Buttondown, go to Subscribers → Export. You get a single CSV right in the browser.

Columns: email, notes, tags (comma-separated), secondary_id, creation_date, metadata (JSON blob of any custom fields), type (regular, premium, unactivated, unsubscribed).

Column mapping:

  • email → email
  • tags → split by comma, map to Mailement topics (create them first)
  • notes → custom field if you want to retain them
  • metadata → if you have JSON custom data, unpack it into a spreadsheet column per key first, then map each to a Mailement custom field
  • Filter out rows where type = unsubscribed or import them as unsubscribed so they don't get re-emailed

08From Ghost

Export: In Ghost Admin, go to Members → Export. Pick "All members" or a filter, click Export CSV.

Columns: id, email, name, note, subscribed_to_emails, complimentary_plan, stripe_customer_id, created_at, deleted_at, labels (comma-separated), tiers (semicolon-separated).

Ghost stores name as a single column. The cleanest move is to split it in a spreadsheet:

  • email → email
  • name → split on first space, map left side to first_name and right side to last_name (single-word names just go to first_name)
  • labels → split by comma, map to Mailement topics
  • tiers → custom field if you want to preserve paid-tier membership; Mailement doesn't run paywalls in v1
  • Rows where subscribed_to_emails = false → import as unsubscribed

09From anywhere else

If your current tool isn't on this list — MailerLite, Brevo (formerly Sendinblue), Campaign Monitor, ActiveCampaign, your own database — the playbook is the same. Find the CSV export, make sure it has at minimum an email column, and upload at /admin/subscribers/import. The mapping step in the importer will let you assign each column to an email, name, city, custom field, or "ignore."

Edge case: if your source only exports unsubscribers as a separate file, import those second as status unsubscribed so you don't accidentally re-mail people who already opted out.

10Warm-up & deliverability

If you're moving from a different sending domain to your new Mailement sending subdomain, ramp up gradually. Your old domain has built reputation with Gmail and Outlook; your new subdomain hasn't. Send your first issue to your most-engaged 10–20% of subscribers, the next to the next tier, and the full list within a week or two.

Three deliverability tips that help every migration:

  • Don't import dormant addresses. If a subscriber hasn't opened anything in 12+ months, leaving them out of the migration protects your reputation. You can always send them a re-engagement campaign later from the old tool first.
  • Set up DMARC on the parent domain. With DKIM and SPF on the sending subdomain (which Mailement handles), DMARC at the root is the third leg of authentication. Even a weak p=none policy gives you visibility into who's spoofing your domain.
  • Send your first Mailement issue with strong content, not a "we've moved!" announcement. Move-announcements get marked as spam more often than usual; subscribers don't always remember they signed up.

11If something breaks

The most common import problems and what to do:

  • "Invalid email" on rows that look valid. Usually trailing whitespace or hidden characters. Run the CSV through a quick spreadsheet TRIM pass before re-uploading.
  • Accented characters look mangled. Your CSV is Windows-1252, not UTF-8. Re-save in Excel as CSV UTF-8 (.csv) or in Numbers/Sheets export as UTF-8 CSV.
  • Topic mapping shows the wrong columns. Add the topics first at /admin/topics, then restart the import — the mapper only shows existing topics in the dropdown.
  • Custom fields don't appear. Same: define them at /admin/fields first, then re-open the importer.

Anything else, write to hello@mail.mailement.com with the CSV attached (or a sanitized sample) and a description of what you're seeing. We respond within one business day.

→
Migration done?
Next stops: compose your first issue, set up a welcome drip, or wire up the API to pull in subscribers from a form on your own site.
Mailement · © 2026 · Sent with care.
About · Help · FAQ · Migrate · API · Terms · Privacy