Importing Contacts: CSV Best Practices and Field Mapping
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
- Go to Lists → Your List → Import
- Upload your CSV file
- 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:
- Search for a few known contacts to confirm fields mapped correctly
- Send a test campaign to yourself after import to confirm merge tags resolve
- 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.