ZapBounce and Customer.io

Customer.io creates a profile from an identify call and triggers campaigns from events. A profile with a bad address starts costing money and receiving campaigns in the same instant.

Because identify calls usually come from your application code rather than an import, the check belongs in that code path.

The identify call creates the profile and the billing

Customer.io prices by profile count. An identify call with a mistyped address creates a billable profile that will never receive anything.

Event-triggered campaigns fire immediately on the events that follow, so the bad profile receives a welcome series entirely into a void.

Because identify calls come from application code, an unvalidated signup form produces profiles continuously rather than in one import somebody reviews.

How the data moves

  1. Verify before the identify call

    In your application, between the signup handler and the Customer.io client.

  2. Send the verdict as a profile attribute

    Customer.io segments read attributes, so the verdict becomes a segment condition immediately.

  3. Build segments that require a valid verdict

    Campaign audiences filter on the segment rather than firing on every event.

  4. Suppress rather than delete

    Deleting a profile loses its event history. Suppression stops the sending and keeps the record.

Setting it up

  1. Add a verification call in your application before the Customer.io identify call.
  2. Pass the verdict and the check date as profile attributes.
  3. Create a segment requiring a valid verdict and point campaigns at it.
  4. Backfill existing profiles through the API in batches.
  5. Suppress profiles that come back invalid rather than deleting them.
  6. Review the billable profile count after the backfill.

Customer.io: common questions

Where should the check go?

Before the identify call, in your application. That is the moment the profile and the billing are created.

Should invalid profiles be deleted?

Suppress instead. The event history is worth keeping even when the address is not.

How do I stop campaigns firing on bad profiles?

Make the campaign audience a segment requiring a valid verdict, rather than relying on the trigger event alone.

One typo, five emails, one billable profile

Say your signup form takes 3,000 new accounts a month and about 2% arrive with a typo in the domain, like gmial.com. That's 60 profiles a month that can never receive anything. Each one triggers your five-message onboarding campaign, so you send 300 emails a month to addresses that don't exist, and after a year you're carrying 720 dead profiles.

Put the check between your signup handler and the identify call and most of that stops at the form. When the domain is one edit from a common provider, our response includes a did_you_mean suggestion. Show it to the person as a question (did you mean gmail.com?) and let them decide. Don't swap it in silently, because a few people really do own odd domains.

Set a client timeout and treat a timeout as a pass. A slow mail server shouldn't cost you a signup, so let the identify call go ahead with no verdict and pick that profile up in a nightly backfill.

"Suppress" is a stronger word in Customer.io than it sounds

Be careful with the term. In Customer.io, suppressing a profile is the privacy-grade action: their docs describe it as redacting the profile's activity and blocking any profile with the same identifiers from being added again. That's the right tool for an erasure request. For a mistyped address it's the wrong one, because the person may come back and fix it.

An invalid verdict calls for a lighter touch. Write the result as an attribute, and set the profile's unsubscribed attribute to true if you want a hard stop on marketing sends. Then build a data-driven segment on the verdict and use it in each campaign's filter. The profile, its events and its history all stay, and one attribute update reverses the whole thing.

Whether those parked profiles still count toward your plan is a billing question to put to Customer.io directly. Ask before the backfill, since the answer decides whether you keep dead profiles or delete them.

Check a Customer.io export today

100 free checks a month, no card. Unknown results and duplicates are never billed.