Identify people in Customer.io (and keep your retention triggers reliable)

Customer.io partner logo

Table of Contents

Summarize this documentation using AI

This banner was added using fs-inject

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Overview

If you want Customer.io to send the right message to the right shopper at the right time, the foundation is identity. That’s what Customer.io Identify is for—getting person records created/updated consistently so your segments and event triggers don’t drift. If you’re cleaning up an existing implementation (or migrating from another ESP), it’s usually faster to align the identity model first and then build automations; if you want a second set of eyes, book a strategy call.

In retention programs, most “why didn’t this cart recovery fire?” issues trace back to Identify being inconsistent: events are coming in under one ID, profiles exist under another, and attributes are missing or stale.

How It Works

Identify is the moment your data becomes usable inside Customer.io. You’re telling Customer.io: “this identifier represents a real person, and here are the attributes you should store on their profile.” Once that’s stable, event tracking can reliably attach to the right profile and your segments stop leaking.

  • Person creation/update: An Identify call creates a person if they don’t exist, or updates their attributes if they do. Think of it as the canonical profile write.
  • Identity resolution (the part that breaks in practice): Your events and messages hinge on a single, consistent primary identifier (often a customer ID). If your site sometimes sends email as the ID and sometimes sends an internal ID, you’ll end up with duplicates—and triggers will fire on the “wrong” profile (or not at all).
  • Attribute mapping: Identify writes attributes onto the person record—email, phone, timezone, first_order_date, marketing_opt_in, VIP_tier, etc. Segments and campaign filters read from these fields, so attribute naming and data types matter.
  • Event attachment: Events (Track calls) should reference the same person identifier used in Identify. When the IDs line up, Customer.io can attach events to the correct person and your event-triggered campaigns become dependable.

D2C scenario: A shopper adds items to cart on mobile (anonymous), then later logs in on desktop and completes checkout. If your implementation identifies them consistently at login/checkout (and merges anonymous activity appropriately), your cart abandonment and post-purchase flows won’t split across two profiles. If you don’t, you’ll see “ghost” abandoners who actually purchased—and you’ll burn margin sending unnecessary incentives.

Step-by-Step Setup

Before you touch campaigns, lock down your identity rules. The goal is simple: every profile has one primary ID, and every event references it. That’s what makes segmentation accurate and triggers predictable.

  1. Choose your primary identifier (don’t skip this): Use a stable internal customer ID if you have one (Shopify customer ID, platform user ID, etc.). Avoid using email as the primary ID if it can change.
  2. Decide when you will call Identify:
    • At account creation
    • At login
    • At checkout completion (especially for guest checkout—more on this below)
    • Any time a key attribute changes (email updated, SMS opt-in status, loyalty tier)
  3. Send Identify with required routing fields:
    • Always include the primary ID.
    • Include email and/or phone if you plan to message those channels.
    • Include consent flags (e.g., email_marketing_opt_in, sms_marketing_opt_in) as explicit booleans so you can filter safely.
  4. Standardize attribute names and types: Pick one naming convention (snake_case is common) and stick to it. Make timestamps actual timestamps (not “March 3rd”). Make numbers numbers (not strings).
  5. Confirm events reference the same person ID: Your Track calls for Added to Cart, Checkout Started, Order Completed, etc. should all use the same identifier that Identify uses. If they don’t, you’ll segment one profile and trigger on another.
  6. Validate inside Customer.io:
    • Pick a test customer and confirm their profile attributes are populated as expected.
    • Check that recent events appear on that same profile.
    • Build a quick segment using one of the new attributes to confirm it evaluates correctly.

When Should You Use This Feature

Identify matters any time you need Customer.io to “know” who someone is—and to keep knowing them across sessions, devices, and channels. If you’re doing retention seriously, you’re using Identify constantly, even if you don’t think about it.

  • Cart recovery that doesn’t misfire: If you want to suppress abandoners who purchased, you need clean identity so the purchase event lands on the same person who abandoned.
  • Repeat purchase & replenishment: Reorder reminders rely on accurate last_order_date, product_sku, or category preferences stored on the profile (or derived from events). Identify keeps the customer record current so timing and segmentation don’t drift.
  • Reactivation that targets the right people: “No purchase in 90 days” only works if purchase events attach correctly and customer IDs don’t fragment into duplicates.
  • Multi-channel orchestration (email + SMS): If phone numbers get added later, Identify is how you attach SMS eligibility to an existing profile rather than creating a second person.

Operational Considerations

Most teams get Identify “working” and still struggle operationally because the data model isn’t enforced. The result is flaky segments, duplicated profiles, and triggers that behave differently depending on where the customer came from.

  • Segmentation depends on attribute hygiene: If vip_tier is sometimes VIP, sometimes vip, and sometimes null, your VIP segment will be wrong—and your holdouts and tests won’t be trustworthy.
  • Data flow timing affects trigger reliability: If Order Completed events arrive before the Identify update that sets email_marketing_opt_in, your post-purchase series can drop customers unexpectedly. In practice, you want Identify and Track sequencing to be deterministic (or design journeys that tolerate delays).
  • Guest checkout is a classic duplication trap: If you Identify guests by email sometimes and by generated IDs other times, you’ll split purchase history. Pick a rule: either always create a guest profile keyed to a stable ID you control, or always key to email and handle email changes carefully.
  • Orchestration realities: If you run multiple systems (Shopify + loyalty + subscriptions), decide which system is the source of truth for each attribute and only write it from there. Otherwise you’ll overwrite good data with stale data and segments will “flip” day to day.

Implementation Checklist

If you want Identify to hold up under real retention load (cart, post-purchase, winback, SMS), you need a few non-negotiables in place. This checklist is what we use to keep identity clean as the program scales.

  • Primary person ID chosen and documented (and not dependent on mutable fields like email).
  • Identify call fires at login/account creation and at checkout completion.
  • All Track events reference the same person identifier used in Identify.
  • Attribute naming convention standardized (no duplicates like vipTier vs vip_tier).
  • Consent attributes stored as explicit booleans and used in campaign filters.
  • Key timestamps stored in consistent formats (UTC recommended) and validated in segments.
  • Duplicate-profile monitoring process in place (spot-check weekly, especially after site changes).

Expert Implementation Tips

Once Identify is technically “done,” the leverage comes from making it resilient to edge cases—because retention programs live in the edge cases (guest checkout, discount hunters, returning customers on new devices).

  • Design for ID transitions: If a customer starts anonymous and later logs in, make sure you have a plan to merge or associate prior activity. Otherwise your “viewed product” and “added to cart” triggers won’t connect to the eventual buyer.
  • Keep channel fields separate from identity: Treat email and phone as routable attributes that can change, not as the thing that defines the person.
  • Write only what you’ll operationalize: If you send favorite_color but never segment or personalize on it, it becomes noise. Focus Identify payloads on fields that drive suppression, timing, and targeting.
  • Build a “data QA” segment: Maintain internal segments like “Missing email but opted in” or “Has SMS opt-in but missing phone” so you catch mapping issues before revenue dips.

Common Mistakes to Avoid

These are the mistakes that quietly erode performance: they don’t throw errors, but they make your automations less profitable over time.

  • Using multiple identifiers interchangeably: Email in one place, customer_id in another. This is the fastest path to duplicates and broken suppression logic.
  • Overwriting good attributes with nulls: If one source sends phone: null, you can accidentally wipe SMS eligibility. Be intentional about when you update fields.
  • Inconsistent event-to-person linkage: Events arriving on “anonymous” or mismatched profiles means your segments and triggers won’t reflect real behavior.
  • Assuming “sent Identify once” is enough: Retention depends on ongoing updates—consent changes, address/timezone shifts, loyalty tier upgrades, subscription state changes.
  • Not validating with a real customer journey: Test the full loop: browse → add to cart → start checkout → purchase → return purchase. Most identity bugs only show up across steps.

Summary

Identify is what makes Customer.io trustworthy for retention: it anchors events to the right person and keeps attributes clean for segmentation.

If your cart recovery, post-purchase, or winback flows feel inconsistent, fix identity first—then optimize messaging.

Implement Identify with Propel

If you’re tightening up identity because triggers are misfiring or profiles are duplicating, treat it like a retention infrastructure project—not a quick tracking task. We’ll typically map your sources of truth, define the primary ID rules, and QA event-to-profile attachment so your Customer.io segments and journeys behave predictably. If you want help pressure-testing your Identify plan against real D2C edge cases (guest checkout, multi-device, SMS opt-ins), book a strategy call.

Contact us

Get in touch

Our friendly team is always here to chat.

Here’s what we’ll dig into:

Where your lifecycle flows are underperforming and the revenue you’re missing

How AI-driven personalisation can move the needle on retention and LTV

Quick wins your team can action this quarter

Whether Propel AI is the right fit for your brand, stage, and stack