CSV imports break at commas—and most operators don't see it
Somewhere in California a newsletter operator just uploaded three thousand subscribers, watched the progress bar finish, and opened the welcome sequence dashboard to find two hundred contacts missing—first names truncated, surnames floating in custom fields, no error message explaining why.
CSV imports choke on commas in name fields and ESPs won’t tell you
Most newsletter platforms parse CSV files incorrectly when subscriber names contain commas, punctuation, or business titles.
You export a subscriber list from one platform, open the CSV in Excel to clean a few rows, save it, and upload to your new ESP. The import completes. No warnings. But when you inspect the list, twenty per cent of your contacts have mangled names—surnames in the company field, job titles split across three columns, or first names that end mid-word. The culprit is almost always comma handling, and every platform treats it differently.
Most ESPs expect CSV fields to be either unquoted or wrapped in double-quotes when they contain special characters. If your CSV has a name like Smith, John without quotes around the entire field, the parser sees the comma as a column delimiter and splits the name across two fields. Excel and Google Sheets both export CSVs with inconsistent quoting depending on the cell’s original content, so a file that looks clean in the spreadsheet editor arrives broken at the import endpoint. Beehiiv, Kit, and MailerLite all document the correct format, but none of them reject malformed rows—they import them silently with data in the wrong columns.
The fix is to open your export in a text editor, confirm that every field containing commas or quotes is wrapped in double-quotes, and escape any internal quotes by doubling them. If you’re migrating more than a few hundred subscribers, script it. The five minutes you spend checking delimiters will save you three hours of manual cleanup and a dozen confused replies from readers who received emails addressed to half their name.
WORTH READING
When Mailchimp exports drop the data you actually need
You’re leaving Mailchimp for Kit or Beehiiv, and the migration guide says “export your subscribers as CSV.” You do. The file arrives. First name and email are there, but your segment logic is gone, automation triggers vanished, and tag history flattened to a single column of comma-separated values that your new platform won’t parse. Mailchimp’s export format preserves the minimum viable contact record and silently discards the metadata that makes your list usable. If you’re planning a migration, you need to document tags, segments, and automation enrolment before you hit export—or accept that you’re rebuilding half your list architecture from memory.
TACTIC
Why password resets fail when you send them through your newsletter ESP
You built a membership site, set up transactional emails, and routed password resets through the same ESP you use for your weekly newsletter. For the first month, everything works. Then a reader reports they never received their reset link. You check the logs—it sent. The issue isn’t the email; it’s that marketing ESPs share IP reputation across promotional and transactional sends, and one spam complaint or engagement dip can delay or suppress time-sensitive messages. Transactional mail needs dedicated infrastructure with separate IP pools, strict SPF and DKIM, and no promotional content mixing. Kit, Beehiiv, and ConvertKit all allow transactional sends, but none of them isolate that traffic from your broadcast reputation.
FROM THE ARCHIVE
Database indexes break down silently past one hundred thousand rows
Your WordPress site loads in under two seconds for the first year. Then one morning the dashboard hangs, admin pages timeout, and your hosting provider sends a polite email about high query times. You check the database and find a custom table with 140,000 rows and no indexes on the columns your plugin queries most. Indexes make lookups fast, but they aren’t automatic—plugins and custom code often skip them, and WordPress core doesn’t validate their presence. Past 100k rows, a missing index turns a 50-millisecond query into a five-second table scan. The fix is to audit your schema, add indexes to foreign keys and WHERE clause columns, and test query performance under load before you hit six figures.
Know someone who would like this? Forward today’s email—every operator we reach is one closer to running an online business with a little less friction.