Summarize this documentation using AI
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
identifywith 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, andOrder Completedbecome 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.
- 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.
- Decide your canonical identifier (don’t improvise later)
- Use a stable internal
customer_idoruser_idas the primary identifier. - Treat
emailandphoneas attributes for messaging—not the primary ID—unless your entire stack is built around email as the unique key.
- Use a stable internal
- 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 likesms_opt_inoremail_opt_in.
- 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).
- 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.
- 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 Cartevent 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 Completedlands 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
identifycalled 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, andcurrency. 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.