Import contacts to Klaviyo with CSV, safely.
A profile file is an identity, property, and channel-consent mutation plan. Validate all three before expanding beyond a controlled list test.
A profile file is an identity, property, and channel-consent mutation plan. Validate all three before expanding beyond a controlled list test.
Klaviyo's official subscriber-import guide covers profiles added to a list. Keep event CSVs, review imports, custom objects, SFTP feeds, API payloads, and connected migrations out of this workflow because their identity and schema rules differ.
Decide whether the file adds subscribers and channel consent or only updates profile properties. For property-only work, Klaviyo's profile-property guide says to choose No, import without updating subscription status, preserving current subscribers and suppressions.
Confirm the destination is a list rather than a segment, your role can import, and any list-triggered flow is paused or intentionally active. Uploads do not trigger double opt-in, so CSV import must not substitute for permission.
Klaviyo's list importer accepts CSV, requires a first header row, and currently limits each file to 50 MB. Excel workbooks are useful authoring sources but are not the upload format; export the intended worksheet as one UTF-8 comma CSV.
Regional spreadsheet settings can produce semicolon-separated files. Klaviyo's troubleshooting guide explains that these can appear as one field. Re-export with commas rather than blindly replacing semicolons inside profile values.
Keep the original source, normalized copy, aggregate report, and a fresh account export together. Split large files into controlled batches that can be traced and reviewed independently.
The first column should be Email, Email Address, or Phone Number. Every later row needs at least one email address or phone number. When both exist, preserve both so Klaviyo has the strongest chance of associating the intended profile.
Remove duplicate nonblank emails and phone numbers before import. Klaviyo processes the first repeated identifier and skips later duplicate-identifier records, so file order should not decide which profile properties survive.
Validate supplied identifiers even when the other identifier is valid. Klaviyo's SMS guidance warns that an invalid phone can skip a row despite a valid email in another column. The private Klaviyo profile CSV validator reports identity state without displaying the values.
Klaviyo's accepted phone-format guide permits E.164, RFC3966, and common E.123 national or international forms in list imports. A country is still required, either through the phone's international country code or a Country column.
Prefer an international number plus a Country value when migrating SMS consent. Spreadsheet software may strip a leading plus sign, so inspect the exported CSV in a text editor rather than trusting the formatted spreadsheet cell.
Phone syntax is only source evidence. Confirm SMS is configured, the country is supported, the account has the required sending number, and the profile's marketing or transactional consent applies to that channel.
Klaviyo's data-type guide defines Text/String, Numeric, Boolean, Date, and List. Use Text for open-ended values and identifiers, Numeric for plain integers or decimals without symbols, and exactly True or False for Boolean CSV cells.
A List cell is a JSON array such as ["news","vip"]. Every item uses straight double quotes, and even one item remains an array. CSV quoting then doubles the inner quotes when needed.
A new column can create a custom property. A CSV value for an existing property can overwrite the previous value. Confirm every destination mapping and do not infer a custom type from a few sample profiles.
Klaviyo's date reference accepts ISO-like dates/timestamps, US slash dates with optional time, timezone offsets, microseconds, and Unix timestamps. Prefer an unambiguous timestamp such as 2026-09-01 13:34:08+00:00.
When a Date property contains only a calendar date, Klaviyo applies midnight UTC. That can move a date-triggered flow a day earlier or later in the account timezone. Map a date-only value as Text when its calendar spelling matters more than date arithmetic.
Consent timestamps carry legal and operational meaning. Preserve their original timezone evidence and never manufacture a timestamp merely to make a row pass.
Consent columns are channel-specific: Email Marketing Consent, SMS Marketing Consent, and SMS Transactional Consent. Their values are Subscribe, Never Subscribed, or Unsubscribed. A blank consent cell defaults to Never subscribed.
Pair subscribed rows with the applicable timestamp when evidence exists. Email uses Email Marketing Consent Timestamp; SMS uses SMS Marketing Timestamp or SMS Transactional Timestamp. If timestamps are absent, Klaviyo presents an in-product confirmation that the profiles currently gave consent.
A checkbox in a local preflight records review only. It cannot prove consent, legal basis, scope, recency, suppression state, or resubscribe eligibility. Never backdate consent to override a newer opt-out; Klaviyo may skip an older consent timestamp.
Run the complete source through the validator and resolve every blocker. Read warnings and portal reviews rather than treating Ready as a guarantee. The normalized file changes approved headers, CSV quoting, UTF-8 serialization, and LF endings only; it preserves row order, blanks, and every profile cell string.
Download the first-100-row test file and reduce it further when flows or consent are consequential. In Klaviyo, recheck the list, purpose, column mappings, data types, consent columns, timestamp columns, and final import summary before starting.
Wait for completion, then compare expected and imported counts and inspect representative profiles across identifier, property, and consent cases. Keep list-triggered flows paused until the result is understood.
Use Klaviyo's skipped-record download and import status to isolate duplicate identifiers, missing identifiers, invalid property formats, phone-country gaps, or row-width problems. Fix one understood rule and rebuild a smaller test.
Do not solve a type error by coercing an entire business field into a misleading type. If a custom value is legitimately text, map it as Text; if it is a List, repair every row to the same JSON-array contract.
A successful job still needs account verification. Check suppression and consent state, property values, profile association, list membership, country interpretation, SMS readiness, and any flow entry before expanding the batch.
Yes. This local preflight checks CSV shape, identifiers, duplicates, explicit property types, consent states and timestamps, phone-country evidence, and safe test output. It cannot query a Klaviyo account or guarantee acceptance.
No. Parsing, mapping, findings, masked evidence, acknowledgments, normalization, and downloads remain in the current browser tab. Profile values are not sent to Klaviyo or csvtodashboard.
No. Klaviyo's list uploader requires CSV. This workspace can read one selected XLS or XLSX worksheet locally, but its handoff is a normalized CSV.
Every row needs an email address or phone number. The first column should be Email, Email Address, or Phone Number, and duplicate nonblank email or phone identifiers should be resolved before import.
Consent columns use Subscribe, Never Subscribed, or Unsubscribed. A blank consent cell defaults to Never subscribed. A local format check cannot prove permission or resubscribe eligibility.
List values use JSON arrays with quoted items, Boolean CSV values use True or False, Numeric values omit symbols, and dates use a Klaviyo-supported date or timestamp format.
Klaviyo's current list-import guidance requires a CSV file of 50 MB or less. Split larger sources into controlled files before import.
No. Permission, suppressions, account role, list flows, SMS setup, sending numbers, supported countries, property mappings, and existing profiles are account state that must be reviewed in Klaviyo.