Keep your Customer.io profiles clean, deliverable, and off your bill
Customer.io suppresses addresses that hard-bounce, unsubscribe, or mark spam automatically - but it can't judge a profile it has never sent to. And because Customer.io is a behavioral platform that bills by the profile, every never-messaged invalid is both a deliverability risk and a line on your invoice. Qualisend closes that gap: export your people, verify every address, and suppress or delete the dead ones so junk never fires on your next broadcast. Here's the workflow that works today, plus the API and no-code options.

Connect Customer.io and clean it in place
Connect Customer.io with an API key and Qualisend verifies the lists you already have - right inside Customer.io, no export. Dead and risky addresses are suppressed or archived for you, every new subscriber is checked in real time, and you can re-verify on a schedule so the list never drifts back to dirty.
Prefer to work by hand, or verify at signup through your own stack? The CSV export → verify → reimport loop below and the REST API are fully supported too.
Connect Customer.ioWhat Customer.io cleans for you
Customer.io's native hygiene centers on suppression: when an address returns a permanent failure, unsubscribes, or files a spam complaint, Customer.io adds the person to its suppression list and holds them out of every future send. For addresses Customer.io has actually messaged, that's reliable, automatic hygiene. The catch is that suppression stops mail, not billing - a suppressed person is excluded from sends, but the record stays in your workspace and, depending on how your plan counts profiles, can keep occupying a slot until you delete it.
What it can't catch
Every one of those mechanisms is reactive - it needs a send, then a bounce, unsubscribe, or complaint to fire. Customer.io makes the blind spot sharper because it creates a person the moment your app fires an identify or track call, so profiles from your app, an import from a previous tool, or a signup typo (jane@gmial.com) have never bounced because they've never been sent to. Disposable addresses, role addresses (info@, support@), and mailboxes that decay over time all look healthy until an event triggers the first message - which is exactly when a mailbox provider forms its first impression of you. Worse, because Customer.io is event-driven, those dead profiles don't sit quietly: they keep entering broadcasts and behavioral campaigns whenever an event matches, so a bad address gets mailed again and again. An imported audience is the sharpest case - it arrives with its bounce history stripped, so addresses that were already failing elsewhere look brand new.
Why a clean Customer.io list matters
Customer.io sizes plans by the number of profiles in your workspace, so hygiene is a cost decision as much as a deliverability one. Every dead address is a line item as well as a drag: suppression stops the send but doesn't necessarily free the slot - the record can keep counting toward your tier until you delete it - and a never-messaged invalid is a fully active, billable profile that will never convert while driving your bounce rate up and inflating your count. Cleaning before a send does two jobs at once. Retiring the undeliverable and disposable profiles can move you toward a lower profile tier, and it protects the engagement data your data-driven segments run on and the inbox placement Gmail and Yahoo's 2024 sender rules judge you by.
Prefer CSV or the API? Here's the manual path
The native connector is the fastest route, but the CSV loop works on any Customer.io plan: export from Customer.io, verify in Qualisend, and act on the results.
Export your people from Customer.io
In your workspace's People area, filter to the segment or audience you want to clean and export it to CSV, making sure the email attribute is included. For a first clean, export everyone; for maintenance cleans, narrow it with a data-driven segment such as "created before" or "never opened."
Verify the file in Qualisend
Upload the CSV to Qualisend bulk cleaning - up to 1,000,000 addresses, duplicates charged once - or paste addresses directly. The free plan's 100 one-time credits, which never expire, cover a first sample before you commit.
Read the results
Every address returns deliverable, risky, undeliverable, or unknown with a reason code and a 0-100 score, plus sub-flags (catch-all, disposable, role, full mailbox) and the MX provider and probe detail as evidence. Download the cleaned CSV.
Suppress or delete the undeliverables in Customer.io
Filter the results to undeliverable. The cleanest way to act on them is to write the verdict back: import it as a person attribute (for example email_status = undeliverable), build a data-driven segment on that attribute, and either exclude that segment from every broadcast and campaign or delete the people in it to reclaim the profile slots. Customer.io also lets you suppress a person directly - suppression stops the mail, deletion frees the profile. Deletion is permanent and takes event history with it, so reserve it for verified undeliverables.
Or automate it at signup
Prefer to keep junk out from the start? Because Customer.io creates a person the moment your app fires an identify or track call, the highest-leverage fix is to validate the address at the signup or lead form before that call runs - through the Qualisend REST API (scoped keys, rate limits, webhooks), or a no-code Zapier, Make, or n8n flow - so typos and disposable domains never become billable profiles or enter a behavioral campaign.
What Qualisend flags on every address
- Never-messaged invalid profiles from identify/track calls, imports, and signup typos that would hard-bounce on their first send
- Disposable / throwaway domains that clear the welcome flow, then quietly stop existing
- Role addresses (info@, support@) that skew the engagement data your segments and campaigns run on
- Catch-all domains, flagged so you can move them to a dedicated segment and throttle instead of blasting
- A 0-100 confidence score and machine-readable reason code for every address
The native Customer.io connector is live - connect it in Qualisend under Integrations and clean your list without a single CSV. New contacts are verified automatically, and you can re-verify on a schedule.
What to do with each result
Every address comes back with a verdict and sub-flags. Here's the action that keeps your Customer.io list clean without throwing away contacts you can still reach.
deliverableKeep messaging as normal.deliverable + role flagKeep for transactional and lifecycle messages; exclude from engagement-scored campaigns.risky + catch-all flagMove to a dedicated segment and throttle sends rather than blasting the whole group.risky + disposable flagSuppress or delete - the inbox was built to expire.unknownKeep active and re-verify next clean - one inconclusive probe is a rate-limit signal, not a verdict on the mailbox.undeliverableSuppress via a data-driven segment, or delete to free the profile. Don't wait for the bounce to prove it.Related reading
The full step-by-step: export from People, verify, and suppress or delete the dead profiles.
Cleaning is half of deliverability - authenticate your sending domain too.
Verify at the identify/track call so junk never becomes a billable profile.
How fast event-triggered sends to dead profiles compound into a deliverability problem.
What repeatedly mailing never-verified addresses does to your domain.
Cadence for a workspace fed by imports, product signups, and behavioral events.
Customer.io verification FAQ
Clean your Customer.io list in minutes
Start free with 100 credits that never expire - no card required. Connect, verify, and protect your next campaign.