# Customer.io: profiles, imports and automation triggers

Count profiles and test historical users before moving lifecycle email to Customer.io.

Canonical page: https://quillwell.com/guides/software/customer-io/
Updated 2026-10-31
Publisher: Quillwell Guides (https://quillwell.com/guides/about/). Editorial standards: https://quillwell.com/guides/editorial/

## The short answer

- Consider Customer.io when its profile model and import controls suit your audience.
- [Customer.io Essentials](https://customer.io/pricing) starts at $100 per month billed monthly with 5,000 profiles, including people and objects.
- Preview a CSV import and test whether old users enter the intended automation.
- Consider Userlist if company relationship properties drive your targeting.

## Count people and objects

Build the estimate from all profiles you expect to keep, including objects. A sending audience alone may understate the records used in a price comparison.

[Customer.io Essentials](https://customer.io/pricing) starts at $100 per month billed monthly with 5,000 profiles. Customer.io defines profiles as people plus objects; Essentials also lists one million monthly emails and two object types.

For example, inventory a dormant person and the objects your team stores for that account. Include both kinds of profile in the estimate, then price the actual workload and channels with Customer.io.

Customer.io recommends removing unnecessary profiles and objects one to two days before the billing date to avoid inclusion in the next cycle, according to its [billing guidance](https://docs.customer.io/accounts/billing/reduce-billing-overages/). Retain the records your team needs for history and preference reconciliation.

## Preview the import before changing records

Choose how missing values should behave before an irreversible import. A blank cell can have a different effect from leaving an existing field untouched.

[Customer.io’s CSV import guide](https://docs.customer.io/messaging/people/uploading-people/) lets you ignore empty values or nullify existing attributes. Its mapped-data preview can be exported before the import starts.

Changing an existing email, phone or ID requires identifying the person by cio_id, according to the same Customer.io guide. Other identifiers cannot overwrite those existing values.

Use a synthetic record with an existing attribute and an empty value in the incoming file. Compare the preview against the intended result, then inspect the resulting record with sending paused.

## Keep old users out of onboarding

Define who should enter a sequence before backfilling data. A matching historical record can otherwise behave like a new arrival.

[Customer.io’s trigger guidance](https://docs.customer.io/messaging/send/automations/triggers/) says new attribute and segment triggers can admit matching backfilled users regardless of data age. It recommends explicit time-based conditions when old users should stay out.

Check whether the workspace uses the new or legacy behavior. Test a dormant customer and a new signup against the same relevant attributes, then compare their workflow entries with the rule your team intended.

Keep expected results and an owner for each mismatch before enabling live sends. Repeat the exercise when the audience or trigger conditions change.

## Plan the sending handoff

Give each application message a named owner and a tested route. A contact import does not by itself demonstrate that a transactional message can be sent.

PostHog’s [engineering handbook](https://posthog.com/handbook/engineering/developing-locally) describes its own use of the Customer.io HTTP API and SMTP fallback, plus Customer.io template mappings and SMTP backup templates for some email.

That is one implementation, not a prescribed architecture. Inventory your own messages and exercise a password reset and a confirmation independently. Record who maintains each template and what happens if the primary route fails.

## How to compare the alternatives

Consider [Loops](https://quillwell.com/guides/software/loops/) when published transactional templates and its subscription model fit your application. Consider [Userlist](https://quillwell.com/guides/software/userlist/) when relationship-level roles shape messaging across company accounts.

The [Customer.io alternatives comparison](https://quillwell.com/guides/compare/customer-io-alternatives/) puts those choices against the existing account. Use the [lifecycle email buying guide](https://quillwell.com/guides/lifecycle-email-software/) to run the same migration worksheet across candidates.

## Common questions

### What counts as a Customer.io profile?

[Customer.io pricing](https://customer.io/pricing) defines profiles as people plus objects.

### Can an old user enter a Customer.io automation?

[Customer.io trigger guidance](https://docs.customer.io/messaging/send/automations/triggers/) says new attribute and segment triggers can admit matching backfilled users regardless of data age.

### Can I preview a Customer.io CSV import?

[Customer.io’s import guide](https://docs.customer.io/messaging/people/uploading-people/) provides a mapped-data preview export before the irreversible import.

### Is Customer.io the best lifecycle email tool?

Consider Customer.io if its profile model and import controls fit your workload; test historical trigger entry before deciding.

## Sources and scope

We read the linked documentation on October 29, 2026.

We have not run the product or tested migration, delivery or support.

## Sources

5 vendor pages, checked October 29, 2026

[Customer.io: Customer.io pricing](https://customer.io/pricing)
Checked 2026-10-29. The billable audience includes objects as well as people, a meaningful distinction for account-based SaaS data models.

[Customer.io: Reducing billing overages](https://docs.customer.io/accounts/billing/reduce-billing-overages/)
Checked 2026-10-29. Profile hygiene and billing timing can affect lifecycle-tool cost.

[Customer.io: Import people or events via CSV](https://docs.customer.io/messaging/people/uploading-people/)
Checked 2026-10-29. Contact import requires identifier mapping and explicit handling of missing values; an export preview supports verification.

[Customer.io: Automation triggers, filters and frequencies](https://docs.customer.io/messaging/send/automations/triggers/)
Checked 2026-10-29. New trigger semantics can make historical imports start automations that legacy behavior excluded.

[Customer.io: Developing locally — email implementation](https://posthog.com/handbook/engineering/developing-locally)
Checked 2026-10-29. Customer's own engineering handbook documents coexistence of Customer.io HTTP delivery and SMTP templates.

[Suggest a correction or send a vendor fact update](https://quillwell.com/guides/request/?type=correction&page=/software/customer-io/)
