How to clean a phone list before importing it to Klaviyo
Klaviyo's phone-number import is strict in one way and permissive in another, and the combination catches people out. It is strict about format — anything not in E.164 is rejected outright. It is permissive about whether the number can actually receive a text — a landline imports perfectly happily, then silently consumes SMS credits forever.
The same is broadly true of Attentive, Postscript, Braze and most ESPs with an SMS channel. The specifics below are Klaviyo's, but the shape of the problem is universal.
What Klaviyo requires
Phone numbers must be in E.164: a plus sign, then digits, no spaces or punctuation. Rows that fail are skipped, and the import summary tells you how many were skipped without telling you which ones or why. On a large file that is a genuinely painful debugging experience, which is the main argument for cleaning before you upload rather than after.
Prepare the file in this order
1. Fix the format
Strip punctuation, convert leading 00 to +, resolve
each row's country, and drop the trunk prefix where that country uses one. The
UK +44 (0) 20… pattern deserves specific attention — naive
punctuation stripping turns it into a number with an extra zero that is the right
length for nothing.
2. Deduplicate after normalising, not before
Klaviyo will happily create separate profiles for
(415) 555-2671 and +14155552671 if your source treats
them as different strings — and then message the same person twice. Normalise
first so they collapse.
3. Drop unallocated numbers before upload
These import cleanly — they are well-formed, so nothing rejects them — and then sit in your account as permanently unreachable profiles, dragging your deliverability metrics down and, on plans billed by active profile, costing you money for contacts that cannot be contacted.
4. Remove landlines
This is the one with an ongoing cost. Landline profiles receive every SMS you send to that segment, forever, and every one is billed. A few thousand landlines in a list you message weekly is a recurring charge for messages that were discarded on arrival.
5. Check your consent data separately
Klaviyo requires that SMS subscribers have consented, and this is a legal requirement, not just a platform rule. Cleaning a list makes it deliverable — it does not make it compliant. Consent has to come from your own records, and if you cannot show where a number consented, it should not be in the SMS segment regardless of how clean it is.
The CSV itself
- One column of numbers, already in E.164, one per row.
- Quote the phone column or format it as text — Excel will strip the leading plus and may convert long numbers to scientific notation. This destroys the file, and it is the most common reason a correctly prepared list fails at import.
- UTF-8 encoding. Non-breaking spaces from copy-paste look identical to normal spaces and fail the format check.
- Include your consent columns (timestamp, source, method) if you have them — importing them alongside is much less painful than backfilling later.
The Excel trap, concretely. Open a clean E.164 CSV in Excel
and save it, and +14155552671 can come back as
14155552671 or 1.41556E+10. If you must touch the file
in a spreadsheet, set the column type to Text before opening, or use Google
Sheets with a leading apostrophe, or do not open it at all.
Doing it once versus doing it monthly
For a one-off import of a few thousand rows, careful manual work in a spreadsheet gets you there.
For a list you re-export monthly, or one in the hundreds of thousands of rows, manual stops being viable — not because it is hard, but because it has to be repeated identically every time and it will not be. That is where a tool that does the whole sequence in one pass pays for itself: same rules, same output, every time, with the invalid rows accumulating into a suppression file so you are not re-cleaning the same junk each month.
Try it on a number right now
The free checker on the homepage runs the same engine the desktop app uses — validity, country, line type and carrier, one number at a time.
Check a number free