Implement Identify in Customer.io (SDK) for Clean Identity + Better Retention

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 cart recovery, repeat purchase, and reactivation to work reliably, identity has to be boringly correct. Customer.io Identify is the moment you tell Customer.io, “this device/session is this person,” so their events, attributes, and message eligibility don’t fragment across anonymous profiles.

If your program is already live and you’re seeing duplicates, missing conversions, or “unknown user” event streams, it’s usually an Identify timing problem—not a copy problem. If you want a second set of eyes on your tracking and stitching plan, book a strategy call.

How It Works

In practice, Identify is the bridge between app-side behavior and retention-side orchestration. Your SDK collects events on a device (sometimes before login), then Identify binds that stream to a stable customer identifier so campaigns can target the right person and measure outcomes accurately.

  • Anonymous activity happens first (often): A shopper browses products, adds to cart, or starts checkout before logging in. Those events can exist under an anonymous profile/device context.
  • Identify stitches the timeline: When the shopper logs in, creates an account, or you otherwise know who they are, you call identify with a stable ID (and usually email/phone if you message on those channels). Customer.io can then associate future activity—and depending on your setup, merge prior anonymous activity—under one person.
  • Attributes become segmentation fuel: Alongside Identify, you typically send core attributes (email, phone, locale, acquisition source, first_order_date, etc.). These drive suppression, frequency rules, and “only send to high-intent” segments.
  • Events power triggers and conversion: Events like Product Viewed, Added to Cart, Checkout Started, and Order Completed become the triggers and goal signals in Customer.io Journeys/Campaigns. If Identify is late or inconsistent, those events land on the wrong profile and your automations miss.

Step-by-Step Setup

The goal here is simple: install the SDK, pick one canonical customer identifier, call Identify at the right moments, and make sure events before/after login land where you expect. Most retention programs we’ve seen get stuck because different teams use different IDs (email in one place, internal user_id in another), which creates duplicates and breaks suppression.

  1. Install the Customer.io SDK for your platform
    • Add the appropriate Customer.io SDK (iOS/Android/React Native/Flutter/Web) and initialize it with your site/app credentials.
    • Confirm the SDK is sending at least one test event from a dev build so you know networking and permissions are clean.
  2. Decide your canonical identifier (don’t improvise later)
    • Use a stable internal customer_id or user_id as the primary identifier.
    • Treat email and phone as attributes for messaging—not the primary ID—unless your entire stack is built around email as the unique key.
  3. Call Identify on the first moment you truly know the user
    • Trigger Identify on account creation, login success, or when you can confidently resolve identity (e.g., magic link verified).
    • Send core attributes with the Identify call: email, phone, first_name, country, timezone, and any retention-critical flags like sms_opt_in or email_opt_in.
  4. Track events consistently before and after Identify
    • Implement a clean event taxonomy: same event name, same properties, same types across platforms.
    • For commerce flows, prioritize: Product Viewed, Added to Cart, Checkout Started, Order Completed, Subscription Created (if applicable).
  5. Handle logout explicitly
    • When a user logs out, reset the SDK identity appropriately so you don’t accidentally attribute the next shopper’s browsing to the prior customer.
    • This is one of the most common sources of “why did this VIP get cart abandon messages for someone else’s cart?” issues on shared devices/tablets.
  6. Validate identity stitching in the Customer.io UI
    • Pick a test user, run a full flow: browse anonymously → add to cart → login → purchase.
    • Confirm all events and attributes appear on a single person profile and that campaign entry conditions would match.

When Should You Use This Feature

Identify matters any time behavior starts before you know who the shopper is—which is basically every D2C funnel. If you’re trying to increase repeat purchase or recover carts, you want the “same person” to stay the same person across devices, sessions, and channels.

  • Cart abandonment with login mid-flow: A shopper adds items, then logs in at checkout. Without Identify stitched correctly, the Added to Cart event can live on an anonymous profile while the email address lives on the logged-in profile—so your cart flow never fires.
  • Post-purchase replenishment: If Order Completed lands on a duplicate profile, your replenishment timer starts on the wrong record and the real customer never gets the reminder.
  • Reactivation based on inactivity: Inactivity segments depend on a clean event history. Fragmented identities make customers look “inactive” when they’re actually browsing on a different device profile.
  • Cross-channel suppression: If you suppress recent purchasers from promos, Identify ensures the purchase event suppresses the same person you’re about to message.

Operational Considerations

Once Identify is live, the real work is keeping identity clean as your product, checkout, and analytics evolve. In most retention programs we’ve seen, things break when teams add a new login method, a new checkout, or a new app surface—and nobody revisits the Identify timing.

  • Segmentation depends on ID stability: If you ever change your primary identifier format, you’ll create a second “universe” of customers. Lock the ID strategy early and document it.
  • Data flow sequencing matters: If events fire before Identify on app launch (common), you need to be okay with anonymous events and ensure they merge correctly after login. Otherwise, delay certain high-value events until identity is known.
  • Orchestration realities: Cart recovery, winback, and post-purchase flows often run on tight timing windows. If Identify arrives minutes late (queued offline, background restrictions), you’ll see missed entries and weird attribution.
  • Multi-device stitching: Identify is what makes “browsed on mobile, purchased on desktop” measurable and targetable. If you only Identify on one platform, your suppression and frequency controls will feel random.
  • Consent and channel readiness: Don’t just pass email/phone—pass opt-in state as attributes so segments can enforce compliance and avoid deliverability damage.

Implementation Checklist

Before you call this “done,” you want a tight checklist that confirms identity, events, and suppression all behave the way your retention program assumes they do.

  • SDK installed and initialized in production builds (not just dev)
  • Single canonical person identifier chosen and used everywhere
  • identify called on login/account creation (and not before you truly know the user)
  • Core attributes sent with Identify (email/phone + opt-in flags + timezone/locale)
  • Commerce events implemented with consistent naming and properties
  • Logout/reset behavior implemented to prevent cross-user contamination
  • Test flow validated: anonymous browse → login → purchase shows one unified profile
  • Key segments validated: recent purchasers suppress promos; cart abandoners enter flows

Expert Implementation Tips

These are the small operator moves that keep Identify from becoming a silent revenue leak six months from now.

  • Identify early, but not prematurely: Call Identify immediately after authentication succeeds. Calling it on “login screen viewed” or “email entered” creates false merges and messy profiles.
  • Send a “session boundary” event after Identify: An event like Signed In (with method: apple/google/email) makes debugging journeys and attribution much faster.
  • Standardize event properties for recovery: For cart flows, always include cart_id, sku, quantity, price, and currency. Your messaging team will eventually want dynamic cart content; if the properties aren’t there, you’ll rebuild.
  • Protect VIPs with suppression that assumes duplicates exist: Even with good Identify, duplicates happen. Add belt-and-suspenders suppression like “purchased in last X hours” using events, not just attributes.
  • Monitor for drift: Set up an internal QA segment (employees/testers) and regularly run the same scripted flow after app releases to catch Identify regressions.

Common Mistakes to Avoid

Most Identify issues show up as “Campaigns are underperforming” when the real problem is people aren’t entering or being suppressed correctly.

  • Using email as the ID in one place and user_id in another: This creates parallel profiles and breaks conversion tracking.
  • Calling Identify too late: If the cart events fire pre-login and never merge, your cart recovery audience shrinks dramatically.
  • Not resetting identity on logout: Shared devices (family iPad, retail tablets) can contaminate profiles and trigger embarrassing messages.
  • Inconsistent event naming across platforms: “AddToCart” on iOS and “Added to Cart” on Android means segments miss half your users.
  • Forgetting opt-in attributes: You’ll either over-message (compliance risk) or under-message (revenue loss) because you can’t segment cleanly.

Summary

If Identify is implemented cleanly, your retention automations behave predictably: cart recovery catches the right people, post-purchase flows trigger on time, and suppression actually suppresses.

If it’s messy, everything downstream looks like a creative problem while revenue leaks through duplicates and missing event history.

Implement Identify with Propel

When we help teams implement Identify, we usually start by mapping the exact moments identity becomes known (anonymous browse, checkout, login, account creation) and then verifying that Customer.io receives a single stitched timeline that matches how your retention flows are built.

If you want us to pressure-test your SDK calls, event taxonomy, and stitching assumptions against your cart recovery and repeat purchase goals, 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