Guide - Klaviyo profile/list import - 16 minute read

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.

Step 1

Choose a profile-list job, not an event or review import

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.

Step 2

Produce one comma CSV of 50 MB or less

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.

Step 3

Put Email or Phone Number first and identify every row

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.

Step 4

Give every phone number country evidence

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.

Step 5

Map every profile property to its real data type

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.

Step 6

Use accepted dates and preserve timezone meaning

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.

Step 8

Preflight everything, then import at most 100 profiles

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.

Step 9

Repair the smallest understood import error

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.

Common questions
  • *

    Can I validate a Klaviyo profile CSV before importing it?

    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.

  • *

    Does the validator upload or save profile data?

    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.

  • *

    Can I upload Excel directly to a Klaviyo list?

    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.

  • *

    What identifier does every Klaviyo profile need?

    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.

  • *

    What consent values does Klaviyo accept in a CSV?

    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.

  • *

    How should Klaviyo list, Boolean, and date properties be formatted?

    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.

  • *

    What is the Klaviyo CSV file-size limit?

    Klaviyo's current list-import guidance requires a CSV file of 50 MB or less. Split larger sources into controlled files before import.

  • *

    Does a clean preflight prove consent or SMS readiness?

    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.

Keep going