Implement Identify (SDK) in Customer.io for clean identity stitching

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 retention flows to behave (cart recovery, replenishment, winback), your identity layer has to be boringly reliable. That’s what Customer.io Identify gives you: a consistent way to tell Customer.io “this device/session belongs to this person,” so events and attributes land on the right profile. If you’re tightening up tracking before scaling automations, it’s worth a quick book a strategy call to sanity-check your identity plan against your current app/web architecture.

In most retention programs, we’ve seen Identify become the difference between “Journeys that print money” and “Journeys that randomly miss 30% of customers” because anonymous sessions never stitch to a known user.

How It Works

On the SDK side, the core mechanic is simple: the SDK starts with an anonymous identifier (device/app instance) and then you promote that same session to a known person when you have a durable user ID (login, account creation, or a verified email/phone). Customer.io uses that Identify call to associate future events—and often prior anonymous activity—with the right person profile.

  • Before Identify: events fire against an anonymous profile/device. This is common for product browsing, add-to-cart, and checkout start in an app.
  • Identify call: you pass a stable person identifier (ideally your internal user_id) plus the key attributes you want available for segmentation and personalization (email, phone, timezone, etc.).
  • After Identify: events and attribute updates should resolve to the known person. This is what lets cart recovery, browse abandon, and post-purchase upsells trigger correctly and suppress correctly.
  • Identity stitching: the practical goal is to connect “anonymous behavior” (browse/cart events) to “known channels” (email/SMS/push). If Identify happens too late (or inconsistently), you’ll see orphaned carts and under-triggering recovery messages.

Real D2C scenario: a shopper browses in your mobile app, adds a cleanser + moisturizer bundle to cart, then creates an account at checkout. If you Identify at account creation (not after purchase), you can immediately run: (1) push reminder within 30–60 minutes, (2) email fallback if push is disabled, and (3) suppress everything the moment the Purchase event fires—because all those events live on the same person.

Step-by-Step Setup

The win here is consistency: same identifiers, same timing, same attribute contract across iOS/Android/web. Set this up once, then your retention automations stop fighting your tracking.

  1. Pick your canonical person ID.
    Use an internal user_id that never changes. Avoid using email as the primary ID if users can change it.
  2. Install the Customer.io SDK(s) on app and web.
    Do this early in the app lifecycle so you capture pre-login behavior (browse, add_to_cart, checkout_start) under an anonymous profile.
  3. Initialize the SDK on app launch/page load.
    Confirm you’re generating/maintaining the anonymous identifier consistently across sessions (per SDK defaults) so events don’t fragment.
  4. Call Identify immediately when you have a durable identity.
    Trigger Identify on: account creation, login success, or magic-link verification. Don’t wait for purchase confirmation.
  5. Send the minimum viable attribute set with Identify.
    Include what retention needs to segment and route messages:
    • email (if you send email)
    • phone (if you send SMS/WhatsApp)
    • first_name (optional, but helps personalization)
    • timezone / locale (for send-time accuracy)
    • marketing_opt_in flags (so you don’t message people incorrectly)
  6. Start event tracking only after the SDK is stable.
    Track your core retention events (e.g., Product Viewed, Added to Cart, Checkout Started, Purchase) and validate they attach to the same person after Identify.
  7. Handle logout explicitly.
    When a user logs out, reset/clear the identified user in the SDK so the next person on a shared device doesn’t inherit the wrong profile.
  8. QA identity stitching in Customer.io.
    Use a test device and run the full flow: browse → add_to_cart → login → purchase. Confirm the person profile shows a single user with the full event timeline.

When Should You Use This Feature

Identify matters any time you need Customer.io to understand “who did what,” across sessions and channels. If you’re only sending one-off broadcasts, you can limp along without it—but retention programs break fast without clean identity.

  • Cart recovery in app: you need anonymous cart events to stitch to a known email/phone after login so the recovery flow actually reaches them.
  • Browse abandon → product discovery follow-ups: if product views happen pre-login, Identify is what turns that into a personalized email/push later.
  • Repeat purchase / replenishment: if users shop across devices (mobile + desktop), a stable ID prevents double-counting and mis-timed replenishment reminders.
  • Reactivation: winback segments depend on accurate “last seen” and “last purchase” across all touchpoints—identity fragmentation kills this.

Operational Considerations

Implementation is the easy part; operations is where teams get burned. Your segmentation, data flow, and orchestration only work if identity rules are consistent across platforms and environments.

  • Segmentation depends on attribute hygiene.
    Decide which attributes are source-of-truth from the app vs your backend. In practice, this tends to break when the app writes email and the backend later overwrites it with an old value.
  • Event timing affects journey entry.
    If Checkout Started fires before Identify and your journey requires a known email, people won’t qualify. Either Identify earlier or build a two-step approach: capture event anonymously, then enter the journey once the person becomes known.
  • Cross-device reality.
    SDK Identify solves “this device belongs to this person,” but cross-device stitching still requires the same canonical ID on every platform. If web uses email-as-ID and app uses numeric user_id, you’ll create duplicates and your suppression logic will fail.
  • Orchestration with push vs email/SMS.
    Push tokens live on devices; email/SMS live on the person. Identify is the bridge that lets you start with push-first recovery and fall back to email/SMS without messaging the wrong profile.
  • Environments and QA.
    Keep dev/staging/prod workspaces separated. Mixing environments is how you end up “testing” on real customer profiles and polluting segments.

Implementation Checklist

If you want this to hold up under scale, treat Identify like a contract between your app, backend, and Customer.io. This checklist is the fastest way to avoid the usual identity fragmentation.

  • Canonical person ID chosen (stable, non-changing)
  • SDK installed on all relevant platforms (iOS/Android/web)
  • Identify called on login/account creation (not delayed until purchase)
  • Minimum attribute set defined and consistent across platforms
  • Logout/reset behavior implemented to prevent shared-device contamination
  • Core retention events implemented with consistent naming and properties
  • QA flow validated: anonymous events stitch to known profile after Identify
  • Duplicate profile risks reviewed (web vs app ID mismatch)
  • Consent/opt-in attributes wired to suppression logic

Expert Implementation Tips

The difference between “works in testing” and “works in the wild” is usually edge cases: late login, shared devices, and inconsistent IDs. These are the patterns that keep retention automation trustworthy.

  • Identify as early as you can justify.
    If your app supports “continue with email” or magic links, Identify at verification—not after the first order—so you can recover the first cart.
  • Send fewer attributes more reliably.
    A small, accurate attribute set beats a giant payload that’s wrong 20% of the time. Add attributes only when a segment or message truly needs them.
  • Standardize event names across app and web.
    If app sends Added to Cart and web sends add_to_cart, your recovery logic becomes channel-specific and brittle.
  • Use a “known customer” flag for orchestration.
    A simple boolean like is_registered or has_account helps you route journeys: anonymous push nudges vs known email/SMS sequences.
  • Validate stitching with suppression tests.
    Run a cart abandonment journey with an “exit on Purchase” rule and confirm it exits immediately after purchase on the same profile. If it doesn’t, identity is fragmented.

Common Mistakes to Avoid

Most Identify problems don’t show up as “errors.” They show up as missed revenue: people not entering journeys, duplicate sends, or recovery messages arriving after purchase.

  • Using email as the primary identifier when users can change it.
    This creates duplicates and breaks lifetime history.
  • Calling Identify too late.
    If you only Identify after purchase, you’ve already lost the ability to recover first-session carts and browse abandoners.
  • Not resetting identity on logout.
    Shared devices (tablets, family phones) will contaminate profiles and trigger the wrong messages.
  • Inconsistent IDs across platforms.
    Web uses email, app uses user_id → two profiles → broken suppression and inflated counts.
  • Overwriting good attributes with stale ones.
    If the app sends an old phone value on every launch, you’ll silently degrade SMS deliverability and compliance.

Summary

Identify is the foundation for retention accuracy in Customer.io: it stitches anonymous behavior to a known person so journeys trigger and suppress correctly. Implement it early (login/account creation), keep IDs consistent across platforms, and QA stitching with real cart-to-purchase flows. If you’re scaling recovery and winback, this is non-negotiable.

Implement Identify with Propel

If you’re tightening up Identify because cart recovery or winback is underperforming, the fastest path is usually an identity audit: where Identify fires, what IDs you’re using, and where profiles split. We’ll map your app/web tracking to Customer.io, pressure-test stitching and suppression, and turn it into a tracking contract your team can maintain. If that’s useful, book a strategy call and we’ll review your current implementation and the highest-impact fixes.

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