Phonelint
Integrations

How to clean a phone list before importing it to Klaviyo

Published 2026-09-08 · Phonelint

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

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