Klaviyo List Cleaning: Validate Your List Before You Suppress or Re-Import

Klaviyo List Cleaning: Validate Your List Before You Suppress or Re-Import

Klaviyo list cleaning usually means suppressing contacts who stopped engaging. That leaves out a different problem: Klaviyo doesn't check whether an address is real before you send to it. It only reacts after a bounce or a complaint.

Good list cleaning in Klaviyo covers both. You verify the addresses in a CSV first, then let Klaviyo's own suppression and bounce handling take care of the rest. By the end of this guide you'll have an exported list, a CampaignKit verification pass and a suppression file ready to import. You need a Klaviyo account with the Owner, Admin or Analyst role and a free CampaignKit account.

Short answer

How to clean a Klaviyo list:

  1. Export the list or segment from Klaviyo as a CSV.
  2. Verify the CSV in CampaignKit. Every address gets a score from 0 to 10 and a result code.
  3. Keep only the addresses to suppress, in a file with one column headered Email.
  4. Import that file as suppressed profiles in Klaviyo.
  5. Let Klaviyo handle new bounces from here on.

Illustration of the three-step flow: export the list, verify it, suppress the flagged addresses

This is a manual round trip: export, verify, import. CampaignKit has no Klaviyo integration, so nothing syncs between the two on its own.

Why Klaviyo doesn't catch bad addresses before you send

Klaviyo has no pre-send email verification. It doesn't run a syntax or mailbox check on addresses you import, and there's no native email-verification integration. It finds out an address is bad when the email bounces.

That's why validating first matters. Typos, disposable addresses, dead mailboxes and domains without mail servers can sit in a list until your first send, and Klaviyo only learns about them when they bounce. For why bounces happen and what a healthy rate looks like, see how to reduce your bounce rate.

Klaviyo's own cleaning guide takes a different approach: build a segment of profiles that received at least five emails but never opened or clicked in about 90 days, exclude it from sends, run a sunset flow, then suppress (Klaviyo, checked 2026-09-28). Keep doing that. Verification catches addresses that were never deliverable. It can't tell you who has stopped reading, because CampaignKit doesn't see your open or click data.

What "suppressed", "hard bounce" and "soft bounce" mean in Klaviyo

A suppressed profile is one Klaviyo won't email. The Klaviyo suppression list collects several kinds:

Type How a profile gets it
Hard bounce Automatically, after one permanent bounce. Klaviyo removes the address from all lists.
Soft bounce Automatically, after more than 7 consecutive soft bounces. Only soft bounces in the past 2 years count.
Spam complaint Automatically, when the recipient marks your email as spam.
User suppressed Manually, by a CSV import or by suppressing a profile directly. Your suppression file lands here.

Suppression is separate from consent. An unsubscribe or spam complaint also sets the profile's consent status to "unsubscribed."

To see your Klaviyo bounce rate and bounce details, go to Analytics → Deliverability → Bounce details. You can also open Profiles → View suppressed profiles and filter by email bounce.

Sources: Klaviyo's bounce handling and suppressed profiles articles, checked 2026-09-28.

Export your list or segment from Klaviyo

To export a list or segment from Klaviyo (Klaviyo, checked 2026-09-28):

  1. Go to Audience → Lists & segments.
  2. Open the list or segment you want to clean.
  3. Open the Manage list (or Manage segment) dropdown.
  4. Click Export list to CSV (or Export segment to CSV).
  5. Choose all properties or specific ones. The email address is the only one you need.
  6. Wait for the export. Large lists can take several minutes.
  7. Download the file from Settings → Other → Downloads.

Only the Owner, Admin and Analyst roles can export. Exports are capped at 700 columns, so pick specific properties if your profiles carry many.

Verify the exported list with CampaignKit

This is the step that actually cleans the Klaviyo list. In the CampaignKit app, create a new bulk validation and upload the CSV. XLS and XLSX files work too, up to 20MB each. For a short list you can paste the addresses in instead.

Every address starts at a score of 10. Some checks end validation on the spot: a syntax error, a domain with no MX record or a mailbox that doesn't exist drops the score straight to 0. Other findings subtract points, so the final score lands somewhere between 0 and 10.

Each result also records why, as one or more result codes:

Code Meaning
syntax The address isn't correctly formatted.
domain The domain has no MX record.
mailbox The mailbox doesn't exist.
verifyRejected The mailbox couldn't be verified.
blacklist The local part or the domain is blocklisted.
disposable A disposable (temporary) address.
catchAll The domain accepts mail for any address.
role A role address, such as info@, support@ or sales@.
didYouMean The domain looks like a typo of a well-known provider.

In the results file these codes sit in the cpkit.details column, next to cpkit.score. One cell can hold more than one code, separated by commas, for example verifyRejected,role. That's why the next step reads the whole cell, not just the first value.

Verification has limits. Some mail servers won't confirm whether a mailbox exists, and catch-all domains accept mail for any address. Those get a lower score rather than a clear yes or no.

New accounts get 200 free validations with no credit card. After that, pricing is pay as you go from $6 for 2,500 emails, and credits never expire. For list-cleaning steps that don't depend on any platform, see how to clean your email list.

Turn the results into a suppression file

Download the results as a CSV. You get your original columns plus CampaignKit's columns, including cpkit.score and cpkit.details.

Decide what to suppress by the codes in cpkit.details, not by the score alone. The score is a range, and the same score can come from different causes. The code tells you the reason.

Code found in cpkit.details Bucket Typical score
syntax, domain or mailbox Suppress 0
disposable Suppress 1–2
blacklist Suppress 1–2 (blocklisted local part) or 1 (blocklisted domain)
verifyRejected Judgment call 6
catchAll Judgment call 9
role Judgment call 7–9
didYouMean Not a verdict, a typo hint Same as the failing code it comes with
(empty cell) Keep 10

Because a cell can list several codes, apply the rule to every code in it:

  1. If any code in the cell is in the Suppress bucket, suppress the address. A judgment-call code next to it doesn't change that. catchAll,disposable means suppress.
  2. If every code in the cell is a judgment call, it's your call. verifyRejected,role is still a judgment call, because neither code is in the Suppress bucket. Decide based on how much risk you'll accept on this list.
  3. If the cell is empty, every check passed. Keep the address.

didYouMean only shows up next to domain, blacklist or mailbox, on an address that already failed, when its domain looks like a typo of a well-known provider (such as gmai.com). The suggested correction is in the cpkit.didYouMean column. Either fix the typo and re-check that one address, or suppress the original along with the rest of the Suppress bucket.

Then build the Klaviyo suppression file. Klaviyo requires exactly one column, headered Email, with one address per row (Klaviyo, checked 2026-09-28). Delete every other column, including all the cpkit.* columns, rename the email column to Email and save as CSV.

Import the suppression file into Klaviyo

To suppress a list of addresses in Klaviyo:

  1. Open the Profiles tab.
  2. Click View suppressed profiles.
  3. Click Import and upload your suppression file.

The addresses show up as "User suppressed", and Klaviyo stops emailing them.

Keep new signups clean going forward (optional)

CampaignKit has no native Klaviyo integration, but you can connect the two with Zapier. Use Klaviyo's Profile Added to Segment or List trigger with CampaignKit's Validate Email Address action, and each new profile gets a 0–10 score as it's added.

This only covers new profiles. It's a polling trigger, so it won't clean the list you already have. And acting on a result, like suppressing an address that will bounce, is still a manual step today.

Check it works

  1. In Klaviyo, go to Profiles → View suppressed profiles and filter by "User suppressed."
  2. Compare the count with the number of rows in your suppression file (not counting the header).
  3. Spot-check two or three addresses from the file in the free email verifier. They should usually come back with the same failed check (syntax, domain or mailbox) or flag as in your results file. Mailbox checks run live, so a result can occasionally differ.

Troubleshooting

  • The export seems stuck. Large lists take several minutes. Check Settings → Other → Downloads before you export again.
  • The suppression import did nothing. The CSV must have exactly one column, headered Email, and nothing else.
  • You need to re-subscribe someone later. That's a separate Klaviyo process. Follow Klaviyo's suppressed profiles article.
  • Zapier can't find CampaignKit. Search for "CampaignKit" as one word in the Zapier app directory.

Next step

Sign up and bulk-verify your next Klaviyo export: the first 200 validations are free, then $6 per 2,500, and credits never expire. To check a handful of addresses first, use the free email verifier, no signup needed. If you also send from Mailchimp, the same validate-before-you-import approach works there: see how to clean your Mailchimp email list.

Join 1,000+ CompaniesImproving Email Deliverability

Start with 200 free validations. Upgrade only when you're ready.

No credit card required • Cancel anytime