Sigmera.

Clean CSVs for Klaviyo imports

Klaviyo rejects rows one at a time and tells you afterwards. A phone number with no country attached, an address carrying a stray comma, the same person appearing twice across two exports — each one becomes a skipped record in a file you have to download and reconcile. Sigmera is not a Klaviyo integration and asks for no API key: you export the CSV, clean it in a browser tab, and upload it through Klaviyo's own import tool. The profiles never leave your device on the way through.

How it works

  1. 1
    Start from the export, or from the file you were sent
    Pull a CSV out of Klaviyo, out of the platform you are migrating from, or out of whatever landed in your inbox from the events team. Nothing needs to be connected first: Sigmera has no Klaviyo integration, no private API key, and no read access to your account, so there is no permission to grant and none to revoke afterwards.
  2. 2
    Clean it in a browser tab
    Drop the CSV into Sigmera. It is parsed by JavaScript running on your own machine, so a file of named subscribers, their phone numbers and their consent history is not transmitted anywhere. Deduplicate across stacked exports, normalise the phone column to E.164, split names into two properties, and repair the email column — previewing every change before you commit to it.
  3. 3
    Download a plain UTF-8 CSV
    Sigmera writes a comma-delimited UTF-8 CSV with the header row intact, which is the shape Klaviyo's importer expects. Accented names survive, the separator is a comma rather than a semicolon, and the file is already in the only format the import tool accepts.
  4. 4
    Upload through Klaviyo's own import tool
    In Klaviyo, open Audience, then Lists & Segments, select the list, and use Manage List, then Import contacts. Map each column to a profile property, set the consent type if the file does not carry a consent column, and start the import. Processing can take a couple of hours, so check the skipped-records file rather than the first few profiles.
  5. 5
    Read the skipped records, not the success count
    Klaviyo hands back a downloadable file of everything it could not process, grouped by reason — duplicate identifier, missing identifier, invalid format, data type mismatch. On a cleaned file that list is short enough to fix by hand. On an uncleaned one it is the real import, and you will run the whole thing again.

Common Klaviyo clean-ups

Collapse duplicate profiles before Klaviyo skips them

Klaviyo identifies a profile by email address or phone number, and a repeat of either inside one file is reported back as a Duplicate Unique ID — only the first occurrence is processed, and the rest arrive as a downloadable list of skipped records. That match is on the exact string, so the duplicates that actually cost you are the ones it cannot see: JANE@acme.com next to jane@acme.com, or a trailing space on one of them. Stack your exports, collapse the repeats yourself, and decide which copy survives instead of letting file order decide.

  1. Stack the exported CSVs and open them in the remove-duplicates tool
  2. Match on the email column with case and surrounding spaces ignored
  3. Review the flagged rows and keep the copy with the consent status you want
  4. Download the deduplicated CSV and import it
Attach a country to every phone number for an SMS import

An SMS import needs the country known for each number, either as a country code on the front of the number or as a separate column labelled Country. Numbers that cannot be resolved cause the whole row to be skipped, not the phone field alone — the profile does not import at all. Klaviyo's import tool tolerates hyphens, spaces and parentheses and corrects what it accepts to E.164, but its API accepts only E.164, so a column normalised to +15555550100 is the version that works everywhere.

  1. Load the CSV and select the phone column
  2. Set the default country for numbers that arrive with no code
  3. Rewrite the column to +country-code E.164 form
  4. Check the rows that could not be parsed, then download and import
Fix the email column Klaviyo validates on

Klaviyo rejects addresses containing spaces or any of the characters ( ) , : ; [ / ], and a row with no email address and no phone number has no unique identifier, so it fails outright. Leading whitespace is the quiet one: " jane@acme.com" is a different string from the address already on file, so an update lands as a brand-new profile instead. Trim and lowercase the column, drop the rows that carry nothing usable, and the skipped-records file comes back empty.

  1. Trim whitespace and lowercase the email column
  2. Flag malformed addresses and the characters Klaviyo rejects
  3. Remove rows that hold neither an email address nor a phone number
  4. Download the cleaned CSV and import it
Split a full-name column into First Name and Last Name

Klaviyo stores names as separate profile properties, and the header row of your CSV is what maps a column onto one of them. Most exports from forms, checkout platforms and event tools hand you a single Full Name column instead. Import it as-is and the entire name lands in one property, so every greeting rendered from First Name reads back the full name — visible in the first campaign you send.

  1. Split the name column into first and last, with an optional middle name
  2. Scan the compound surnames and any inverted "Last, First" rows
  3. Label the new columns First Name and Last Name, then map them on import
Turn an Excel workbook into a CSV under the 50 MB limit

Klaviyo's import tool takes a CSV and nothing else — an .xlsx workbook is rejected before you reach column mapping — and the file has to be 50 MB or less, with anything larger split across several CSVs. There is a second trap in the conversion: a non-English copy of Excel writes semicolons rather than commas as the separator, and the resulting file imports as one unusable column. Export to a plain comma-delimited UTF-8 CSV and both problems go away at once.

  1. Convert the workbook to a single-sheet comma-delimited CSV
  2. Standardise inconsistent values with find and replace
  3. Check the file is 50 MB or less, splitting it if not
  4. Upload the CSV through Klaviyo's import tool

Sources

  1. 1.How to import subscribers to a list — Klaviyo Help Center
  2. 2.Accepted phone number formats for SMS in Klaviyo — Klaviyo Help Center
  3. 3.Troubleshooting list imports — Klaviyo Help Center
  4. 4.How to upload a list of SMS contacts — Klaviyo Help Center
  5. 5.How to import profile properties using a CSV upload — Klaviyo Help Center

Frequently asked questions

Does Sigmera connect to my Klaviyo account?
No. There is no integration, no private API key, and no OAuth grant. Sigmera cleans the exported CSV inside your browser, and you upload it yourself through Klaviyo's own import tool. Your account is not reachable from Sigmera, so there is no access to audit and nothing to disconnect when you are finished.
What phone number format does Klaviyo need for SMS?
The country has to be known for every number, either as a country code at the front of the number or as a separate column labelled Country. The list import tool accepts several shapes — E.164 like +12345678900, versions with hyphens, spaces or parentheses, and RFC3966 tel: notation — and corrects them to E.164. Klaviyo's API accepts E.164 only, so normalising the column to E.164 before import is the version that works in both places.
Why does my phone column break when I open the CSV in Excel?
Excel and Google Sheets both mangle a leading plus sign, which is why Klaviyo's guidance is to type an apostrophe before it — '+12345678900 — so the spreadsheet treats the value as text. It is a workaround for the spreadsheet, not for Klaviyo. Formatting the column in a browser-based tool and downloading the CSV without reopening it in Excel avoids the round trip that caused the damage.
Does Klaviyo remove duplicates from my import file?
Partly. Klaviyo treats email address or phone number as a profile's unique identifier, and when one repeats inside a file it processes the first occurrence and reports the rest as Duplicate Unique ID skipped records. The match is on the exact value, so differences in casing or a trailing space hide duplicates it will not catch — and you do not get to choose which copy is the one kept.
What file format and size does a Klaviyo import accept?
A CSV, 50 MB or less, with headers in the first row; larger files have to be split into several CSVs. Excel workbooks are not accepted. Watch the delimiter when you convert: a non-English copy of Excel may write semicolons instead of commas, which makes the whole file import as a single column.
Why are entire rows being skipped instead of individual fields?
Because the row has no usable unique identifier or fails validation outright. Every row needs an email address or a phone number; an email containing a space or one of the characters ( ) , : ; [ / ] is rejected, and a phone number whose country cannot be determined skips the row rather than blanking the field. Klaviyo returns the skipped rows in a downloadable file with a reason attached to each.
Is cleaning the file in a browser safe for GDPR?
There is no transfer to account for. The CSV is read and rewritten by code running in your own browser tab, so the subscriber names, email addresses, phone numbers and consent timestamps in it are never sent to Sigmera or to any other server. No copy exists to be retained, and there is no processor to name for this step in your records of processing.

More import guides