List Management

Importing Contacts: CSV Best Practices and Field Mapping

December 13, 2025 4 min read Tutorial

Before You Import: Consent and Legal Considerations

The most important rule in email marketing: only import contacts who have given explicit permission to receive email from you.

Importing a purchased list, scraped contacts, or people who gave their email for a different purpose (a raffle, a one-time download) without ongoing marketing consent violates:

  • GDPR (EU/UK) — requires specific, informed, documented consent
  • CAN-SPAM (US) — requires a clear opt-out mechanism and honest headers
  • CASL (Canada) — requires express or implied consent

Before importing, confirm each contact either:

  • Subscribed via your signup form
  • Is an existing customer with a prior business relationship
  • Gave documented consent to receive marketing emails from your brand

Preparing Your CSV File

AcelleMail accepts standard CSV (comma-separated values) files with UTF-8 encoding.

Minimum required columns:

email,first_name,last_name
john@example.com,John,Smith
jane@example.com,Jane,Doe

Full-featured import with custom fields:

email,first_name,last_name,company,phone,plan_type,subscribed_date
john@example.com,John,Smith,Acme Corp,+1-555-0100,pro,2025-01-15
jane@example.com,Jane,Doe,Widget Inc,+1-555-0200,free,2025-03-20

CSV formatting rules:

  • First row must be the header row
  • Use UTF-8 encoding — not UTF-16 or Windows-1252
  • Wrap values containing commas in double quotes: "Smith, Jr."
  • Dates should use ISO format: YYYY-MM-DD
  • Phone numbers: include country code for international lists
  • Remove any trailing spaces from email addresses

Pre-Import Cleaning

Clean your CSV before importing to avoid polluting your list:

// Simple PHP cleaning script
$rows = array_map('str_getcsv', file('subscribers.csv'));
$headers = array_shift($rows);
$cleaned = [];
$seen = [];

foreach ($rows as $row) {
    $data = array_combine($headers, $row);
    $email = strtolower(trim($data['email']));

    // Skip invalid emails
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) continue;

    // Skip duplicates
    if (isset($seen[$email])) continue;
    $seen[$email] = true;

    // Skip role addresses
    $prefix = explode('@', $email)[0];
    if (in_array($prefix, ['info', 'admin', 'support', 'noreply', 'webmaster'])) continue;

    $data['email'] = $email;
    $cleaned[] = $data;
}

// Write cleaned CSV
$output = fopen('subscribers_cleaned.csv', 'w');
fputcsv($output, $headers);
foreach ($cleaned as $row) fputcsv($output, $row);
fclose($output);

echo "Cleaned: " . count($cleaned) . " records (removed " . (count($rows) - count($cleaned)) . " invalid/duplicate)";

Importing in AcelleMail

  1. Go to Lists → Your List → Import
  2. Upload your CSV file
  3. AcelleMail displays a field mapping interface

Field Mapping

Map your CSV columns to AcelleMail fields:

CSV Column AcelleMail Field
email Email (required)
first_name First Name
last_name Last Name
company Custom field: COMPANY
plan_type Custom field: PLAN_TYPE
subscribed_date — (log externally, not directly importable)

Any CSV column without a mapping is ignored — you won't lose data, it just won't be stored.

Duplicate Handling

AcelleMail offers three options for duplicate emails:

Option Behavior
Skip Existing subscribers are unchanged
Update Existing subscriber fields are overwritten with CSV data
Unsubscribe then re-subscribe Use with caution — removes existing data

Recommendation: Use Update when re-importing from your CRM to refresh field values. Use Skip for a first-time import where you don't want to overwrite existing data.

Post-Import Verification

After import completes, AcelleMail generates an import report:

  • Total records in file
  • Successfully imported
  • Updated (if update mode was selected)
  • Invalid (failed email validation)
  • Duplicate skipped

Download the error report to see which emails failed and why. Common errors:

  • Invalid email format (missing @, extra spaces)
  • Missing required fields
  • Encoding issues (special characters corrupted)

Verification steps:

  1. Search for a few known contacts to confirm fields mapped correctly
  2. Send a test campaign to yourself after import to confirm merge tags resolve
  3. Check subscriber count before and after — a large discrepancy suggests a mapping issue

After Import: What Not to Do

  • Do not immediately blast the full imported list with a promotional campaign
  • Warm up slowly: start with your most engaged segment, then expand
  • If importing a cold or aged list (contacts from more than 12 months ago), run email verification first
  • Monitor bounce rate carefully on the first send — above 2% hard bounce rate signals a list quality problem

A careful import process protects your sender reputation and ensures your new subscribers have a great first experience with your emails.

AcelleMail Team

Verified author
Email marketing experts · AcelleMail.com

Engineers and marketers behind AcelleMail — the self-hosted email platform powering thousands of senders. We share what we learn shipping deliverability infrastructure, automation, and analytics so you can own every step of your email program.

Related Articles

More in List Management

View all →

Ready to start sending?

AcelleMail is the self-hosted email marketing platform you control end-to-end.

View Pricing