List Management

Importing Contacts: CSV Best Practices and Field Mapping

October 07, 2025 4 min read 3,485 views 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.

A

AcelleMail Team