Back to Blog
Tutorial

How to Migrate Your Existing Email List to Resletter: A Complete Guide

Resletter TeamPlatform Development
2025-01-12
8 min read
Resletter Team

"Migrating to Resletter is straightforward—import your subscribers via CSV or API in minutes while maintaining compliance and engagement."

Resletter Team, Platform Development

Switching newsletter platforms can feel daunting, especially when you have thousands of subscribers to migrate. But with Resletter's flexible import options, you can transfer your entire email list quickly and compliantly. This guide will walk you through everything you need to know about importing users as subscribers to your Resletter account.

Before You Begin: Understanding Import Consent

Before importing any subscribers, it's crucial to understand email marketing compliance. Resletter takes subscriber consent seriously to help you maintain a good sender reputation and comply with regulations like GDPR, CAN-SPAM, and CASL.

Two Import Modes

1. Standard Import (Double Opt-In)

  • Subscribers receive a confirmation email
  • They must click to confirm their subscription
  • Status: PENDINGSUBSCRIBED after confirmation
  • Best for: New subscribers or when consent history is unclear

2. Direct Import (Bypass Double Opt-In)

  • Subscribers are immediately marked as SUBSCRIBED
  • Requires explicit consent acknowledgment
  • You must confirm that subscribers previously opted in
  • Best for: Migrating from another platform where users already opted in

Method 1: Import via CSV (No Code Required)

The easiest way to import subscribers is through the Resletter dashboard using a CSV file.

Step 1: Prepare Your CSV File

Create a CSV file with your subscriber data. The minimum required format:

email,name
[email protected],John Doe
[email protected],Jane Smith
[email protected],Alex Johnson

Important Requirements:

  • Maximum 10,000 subscribers per import
  • Email addresses must be valid
  • Names are optional but recommended for personalization
  • UTF-8 encoding is recommended for special characters

Step 2: Navigate to the Import Page

  1. Log in to your Resletter account
  2. Select your project/newsletter
  3. Go to SubscribersImport
  4. Upload your CSV file

Step 3: Configure Import Settings

When importing, you'll see several options:

Skip Duplicates

  • Enabled by default
  • Prevents importing emails that already exist in your project
  • Recommended to keep this enabled

Bypass Double Opt-In

  • Use this if you're migrating from another platform
  • Requires you to acknowledge:
    • ✓ I confirm that consent was previously collected from these subscribers
    • ✓ I will not use this list for spam

Assign to Groups

  • Optionally add imported subscribers to specific subscriber groups
  • Useful for segmentation (e.g., "Migrated Users" or "Legacy Newsletter")
  • Requires Starter plan or higher

Step 4: Review and Import

After uploading and configuring:

  1. Review the preview of subscribers to be imported
  2. Click Import Subscribers
  3. Wait for the import to complete
  4. Review the import summary (imported, skipped, failed)

Method 2: Import via API (Programmatic)

For developers or advanced users, Resletter provides a powerful API for importing subscribers programmatically.

Prerequisites

  1. Generate an API Key

    • Go to your project settings
    • Navigate to API Keys
    • Create a new key with subscribers:write scope
    • Save your API key (starts with rsl_)
    • Requires Starter plan or higher
  2. Install an SDK (optional but recommended)

    • Node.js: npm install @resletter/node-sdk
    • Python: pip install resletter

Example 1: Import with Node.js SDK

import { Resletter } from '@resletter/node-sdk';
import fs from 'fs';
import Papa from 'papaparse'; // CSV parser

const client = new Resletter('rsl_your_api_key');
const projectId = 'your-project-id';

// Read and parse CSV file
const csvData = fs.readFileSync('subscribers.csv', 'utf-8');
const parsed = Papa.parse(csvData, { header: true });

// Prepare subscribers array
const subscribers = parsed.data.map(row => ({
  email: row.email,
  name: row.name || undefined
}));

// Import subscribers
async function importSubscribers() {
  try {
    const result = await client.subscribers.import({
      projectId: projectId,
      subscribers: subscribers,
      skipDuplicates: true,
      bypassDoubleOptIn: true, // If migrating with consent
    });
    
    console.log(`✓ Imported: ${result.results.imported}`);
    console.log(`⊘ Skipped: ${result.results.skipped}`);
    console.log(`✗ Failed: ${result.results.failed}`);
  } catch (error) {
    console.error('Import failed:', error);
  }
}

importSubscribers();

Example 2: Import with Python SDK

from resletter import Resletter
import csv

client = Resletter("rsl_your_api_key")
project_id = "your-project-id"

# Read CSV file
subscribers = []
with open('subscribers.csv', 'r') as file:
    reader = csv.DictReader(file)
    for row in reader:
        subscribers.append({
            'email': row['email'],
            'name': row.get('name', None)
        })

# Import subscribers
try:
    result = client.subscribers.import_subscribers(
        project_id=project_id,
        subscribers=subscribers,
        skip_duplicates=True,
        bypass_double_opt_in=True,  # If migrating with consent
    )
    
    print(f"✓ Imported: {result['results']['imported']}")
    print(f"⊘ Skipped: {result['results']['skipped']}")
    print(f"✗ Failed: {result['results']['failed']}")
except Exception as error:
    print(f"Import failed: {error}")

Example 3: Direct REST API Call

If you prefer to use the REST API directly:

curl -X POST https://api.resletter.com/api/projects/{projectId}/subscribers/import \
  -H "Authorization: Bearer rsl_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "subscribers": [
      {
        "email": "[email protected]",
        "name": "User One"
      },
      {
        "email": "[email protected]",
        "name": "User Two"
      }
    ],
    "skipDuplicates": true,
    "bypassDoubleOptIn": true,
  }'

Batch Importing Large Lists

For lists larger than 10,000 subscribers, you'll need to batch your imports:

const BATCH_SIZE = 10000;

async function batchImport(allSubscribers) {
  for (let i = 0; i < allSubscribers.length; i += BATCH_SIZE) {
    const batch = allSubscribers.slice(i, i + BATCH_SIZE);
    
    console.log(`Importing batch ${i / BATCH_SIZE + 1}...`);
    
    const result = await client.subscribers.import({
      projectId: projectId,
      subscribers: batch,
      skipDuplicates: true,
      bypassDoubleOptIn: true,
    });
    
    console.log(`Batch ${i / BATCH_SIZE + 1} complete:`, result.results);
    
    // Rate limiting: wait between batches to respect API limits (10 requests/minute)
    // Adjust delay based on your plan's rate limits
    await new Promise(resolve => setTimeout(resolve, 6000)); // 6 seconds = 10 req/min
  }
}

Advanced: Import with Subscriber Groups

Subscriber groups help you segment your audience for targeted campaigns. This feature requires a Starter plan or higher.

Why Use Subscriber Groups?

  • Send targeted newsletters to specific segments
  • Better engagement through personalization
  • Organize subscribers by interest, behavior, or source

Creating Groups Before Import

// First, create a group for migrated users
const group = await client.groups.create({
  projectId: projectId,
  name: "Migrated from Legacy Platform",
  description: "Users migrated from our old newsletter system",
  color: "#3B82F6"
});

// Then import subscribers and add them to the group
const result = await client.subscribers.import({
  projectId: projectId,
  subscribers: subscribers,
  groupIds: [group.id], // Add all imported users to this group
  skipDuplicates: true,
  bypassDoubleOptIn: true,
});

Best Practices for Migration

1. Clean Your List First

Before importing:

  • Remove invalid email addresses
  • Remove hard bounces from your old platform
  • Remove unsubscribed users
  • Deduplicate entries

2. Maintain Engagement

  • Send a "We've Moved" email after migration
  • Explain the change and what subscribers can expect
  • Include an easy unsubscribe option
  • Consider offering a re-engagement incentive

3. Verify Your Domain

For better deliverability:

  • Set up a custom domain with Resletter
  • Configure DKIM, SPF, and DMARC records
  • Warm up your domain with smaller sends initially

4. Monitor Import Results

Always check the import summary:

  • Imported: Successfully added subscribers
  • Skipped: Duplicates (if skipDuplicates enabled)
  • Failed: Invalid email addresses or errors

5. Test Before Full Migration

  • Start with a small test import (50-100 subscribers)
  • Send a test newsletter to the imported group
  • Verify deliverability and tracking
  • Then proceed with full migration

Handling Import Errors

Common issues and solutions:

"Invalid email format"

  • Clean your CSV of malformed email addresses
  • Ensure proper email format: [email protected]

"Subscriber limit reached"

  • Check your plan limits in Billing
  • Upgrade your plan if needed
  • Free plan: 500 subscribers (check current limits in your billing page)
  • Starter plan: 5,000 subscribers

"Rate limit exceeded"

  • API rate limit: 10 requests/minute
  • Add delays between batch imports
  • Consider upgrading for higher limits

After Import: Next Steps

Once your subscribers are imported:

1. Configure Your Project Settings

  • Set your default From Name and From Email
  • Add your physical mailing address (required by law)
  • Configure your email provider or use Resletter's built-in service

2. Send a Welcome/Migration Email

Create a newsletter to:

  • Welcome subscribers to your new platform
  • Explain any changes in frequency or content
  • Let them update their preferences
  • Include the unsubscribe link (required)

3. Monitor Engagement

  • Track open rates in Analytics
  • Watch for bounces or complaints
  • Consider re-engagement campaigns for inactive subscribers

4. Set Up Automations

Take advantage of Resletter's automation features:

  • Welcome series for new confirmations
  • Re-engagement flows for inactive subscribers
  • Behavioral triggers based on clicks and opens

Compliance Checklist

Before and after importing, ensure you're compliant:

  • ☑ Subscribers previously opted in to your emails
  • ☑ Physical address configured in project settings
  • ☑ Unsubscribe link included in all emails ({{unsubscribe_url}})
  • ☑ Address placeholder in email footer ({{address}})
  • ☑ Clear identification of sender
  • ☑ Accurate subject lines

Conclusion

Migrating your email list to Resletter is straightforward with the right approach. Whether you use the simple CSV import through the dashboard or leverage the API for programmatic imports, you can have your entire subscriber base migrated in minutes.

Remember to prioritize compliance, maintain engagement, and take advantage of Resletter's powerful features like subscriber groups, automations, and analytics to grow your newsletter.

Ready to migrate? Sign up for Resletter and start importing your subscribers today with our generous free plan, or upgrade to access API features and larger subscriber limits.

Additional Resources

Need help with your migration? Our support team is ready to assist at [email protected].

Resletter Team

Resletter Team

Platform Development

Resletter Team is a platform development who shares insights about building products and growing businesses through effective email marketing.

* This story is a fictional example created to illustrate real platform features.

Start Your Newsletter Journey

Join hundreds of founders who are growing their newsletters with Resletter.

Get Started Free