How do I migrate my email list to VeloCMS members?
Export subscribers from Mailchimp or ConvertKit as CSV, import into VeloCMS Members, handle double opt-in compliance, and preserve segment tags.
Your email list is the most valuable thing you own as a creator. Moving it needs to be handled carefully — GDPR, CAN-SPAM, and most ESPs require explicit subscriber consent, and importing a list into a new system without respecting those permissions can get your sending domain blacklisted fast. Here's how to do it right.
Step 1 — Export from Mailchimp
In Mailchimp, go to Audience → All contacts → Export audience. Choose 'Export as CSV'. Mailchimp exports a file with columns: Email Address, First Name, Last Name, MEMBER_RATING, OPTIN_TIME, OPTIN_IP, CONFIRM_TIME, CONFIRM_IP, LATITUDE, LONGITUDE, GMTOFF, DSTOFF, TIMEZONE, CC, REGION, LAST_CHANGED, LEID, EUID, NOTES, and any custom merge fields you defined. The ones you need for VeloCMS: Email Address, First Name, Last Name, CONFIRM_TIME (maps to subscribed_at), and any custom tags (exported as separate columns).
# Minimal Mailchimp CSV for VeloCMS import (save as subscribers.csv):
Email Address,First Name,Last Name,CONFIRM_TIME,Tag1,Tag2
[email protected],Jane,Smith,2025-03-15,premium,newsletter
[email protected],John,Doe,2025-04-01,newsletter,Step 2 — Export from ConvertKit
In ConvertKit, go to Subscribers → Export. You can export all subscribers or filter by tag, sequence, or form. ConvertKit exports a CSV with: First Name, Email Address, State (active/unsubscribed/bounced/complained), Created At, Tags (comma-separated in a single column). Filter for State = active before exporting — importing unsubscribed or complained addresses into VeloCMS will immediately damage your sender reputation.
Never import unsubscribed, bounced, or complained addresses into VeloCMS. Filter your CSV to active subscribers only before importing. Sending email to someone who previously unsubscribed is a GDPR violation and will trigger spam complaints that hurt your sending domain.
Step 3 — Prepare your CSV for VeloCMS import
VeloCMS's member CSV importer expects these column names: email (required), name (optional — First Name + Last Name joined), subscribed_at (optional — ISO date), and tags (optional — comma-separated). Rename your export columns to match. For Mailchimp, join First Name and Last Name into a single name column. For ConvertKit, the Tags column is already in the right format.
# VeloCMS member import format:
email,name,subscribed_at,tags
[email protected],Jane Smith,2025-03-15,premium newsletter
[email protected],John Doe,2025-04-01,newsletterStep 4 — Import the CSV into VeloCMS
In VeloCMS admin, go to Admin → Members → Import CSV. Upload your prepared file. VeloCMS shows a preview of the first 10 rows for confirmation. After import, members appear in the Members list with status 'subscribed'. Tags carry over as member tags which you can use for targeted newsletter sends — e.g. send an email only to members tagged 'premium'.
Step 5 — Double opt-in compliance
Whether you need a new opt-in from migrated subscribers depends on your original signup process and where your subscribers are located. If your original signup form had explicit consent language ('I agree to receive emails from [Your Blog]'), you can import without re-permission. If your original list was built with vague consent ('Sign up for updates'), sending a re-permission email is the safest move, especially for EU/UK subscribers where GDPR has the strictest consent requirements.
VeloCMS sends a welcome email to newly imported members if you enable the 'Send welcome email on import' option. Keep this disabled if you're sending a separate migration announcement email — you don't want subscribers to receive both.
Step 6 — Preserve segment tags
Mailchimp groups and segments and ConvertKit tags all map to VeloCMS member tags. After import, go to Admin → Members → Tags to see all imported tags and rename any that use platform-specific naming. For example, a ConvertKit tag called 'ck-premium' might be better renamed to just 'premium' in VeloCMS for clarity. VeloCMS's newsletter composer lets you filter recipients by tag, so your segmentation structure carries over cleanly.
Step 7 — Send a migration announcement
Send an announcement email within 24 hours of import, using VeloCMS's newsletter tool. Tell your subscribers they're now on your new platform, confirm nothing changes for them, and include an unsubscribe link. This re-engagement email also surfaces any stale addresses — bounces and unsubscribes that come back immediately tell you which addresses to remove from your list. Check Admin → Members → Import Report 48 hours after the announcement for bounce data.
Frequently asked questions
- Can I import both free and paid members at once? Yes — add a 'paid' column to your CSV. Members with paid: true import with paid member status (requires BYOK Stripe connected).
- What's the maximum CSV import size? 10,000 rows per import. For larger lists, split into multiple CSVs.
- Will VeloCMS validate email addresses on import? Yes — malformed email addresses are skipped and flagged in the import report.
- Can I import members with a custom opted-in date? Yes — include a subscribed_at column with ISO date format (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ).
- What happens to duplicate emails? If an email already exists as a VeloCMS member, the importer skips it and adds it to the 'duplicate' count in the report.