Summarize this documentation using AI
Overview
If you want cart recovery, post-purchase, and winback flows to fire consistently, identity is the foundation—and that starts with the Identify call in Customer.io. If you’re not confident your anonymous sessions and logged-in customers are stitching cleanly, it’s worth tightening this up before you scale spend (and if you want a second set of eyes, you can book a strategy call to pressure-test your data layer).
In retention programs, we’ve seen “good” messaging underperform simply because Customer.io thought a shopper was two different people. Identify is the spec that tells Customer.io who someone is, what their canonical ID is, and when to merge anonymous activity into the known profile.
How It Works
Identify is the moment your data stops being “a browser did something” and becomes “this customer did something.” In practice, this is what makes segments stable and prevents journeys from triggering on the wrong profile.
- You send an Identify payload from your site/app/server when you know who the person is (signup, login, checkout, email capture).
- Customer.io stores/updates a person profile keyed off your chosen identifier strategy (typically a stable
idplus optional identifiers likeemail). - Anonymous activity can be merged into the identified profile when you link the anonymous identifier to the known person. This is the difference between “abandoned cart happened” living on an anonymous profile vs. attaching to the real customer who can actually receive email/SMS.
- Downstream reliability improves: segments stop double-counting, frequency caps behave, and event-triggered campaigns attach to the right person.
Real D2C scenario: A shopper browses for 10 minutes, adds a bundle to cart, then enters email at checkout but bounces. If Identify runs at email capture (not just after payment), you can merge the anonymous cart events into the identified profile and trigger a cart recovery series with the right products—without waiting for an order to exist.
Step-by-Step Setup
Don’t start by wiring Identify everywhere. Start by deciding what “one person” means in your stack, then implement Identify at the moments where identity becomes trustworthy.
- Pick your canonical person key. Use a stable internal customer ID if you have it (Shopify customer ID, your auth user ID, etc.). Avoid using email as the only key if you expect email changes or multiple emails per customer.
- Define your identity rules. Decide when you’ll Identify:
- Email capture (newsletter modal, account creation, checkout email step)
- Login
- Order completion (server-side confirmation)
- Map the minimum attributes you need for segmentation. Keep this tight and operational:
email,phone(if SMS),country,timezone,marketing_opt_in,first_order_date,last_order_date,orders_count,lifetime_value. - Implement Identify in your data pipeline. Send Identify from:
- Client-side when the user submits email or logs in (fast merge for cart recovery).
- Server-side after confirmed events like order paid/refunded (authoritative updates for LTV, orders count).
- Stitch anonymous to known. Ensure the anonymous identifier used for pre-login events is linked/merged when Identify occurs, so browse/cart events follow the customer.
- Validate in Customer.io Activity Logs. Confirm:
- Events before Identify appear on the same person after Identify
- No duplicate profiles created for the same customer
- Attributes update as expected (no type issues like strings vs timestamps)
When Should You Use This Feature
Identify matters any time you’re triggering retention off behavior that often happens before a shopper is “officially” a customer. If you only Identify after purchase, you’ll miss or misfire a lot of high-intent moments.
- Cart recovery when email/phone is captured at checkout but purchase isn’t completed—Identify at capture so the cart events attach to a reachable profile.
- Browse abandonment for product discovery flows—Identify when someone logs in or enters email for back-in-stock/waitlist.
- Post-purchase cross-sell when orders come from multiple channels—Identify with a stable customer ID so repeat purchase journeys don’t split across profiles.
- Reactivation when customers return on a new device—Identify on login so “30/60/90 day winback” doesn’t treat them as net-new.
Operational Considerations
Most retention issues blamed on “creative” or “timing” are actually data consistency problems. Identify is where those problems either get solved—or quietly compounded.
- Segmentation accuracy depends on stable IDs. If you key by email and customers change emails, you’ll fragment purchase history and suppress the wrong profile. Stable internal IDs keep “VIP”, “1x buyer”, and “high-return-risk” segments clean.
- Trigger reliability depends on merge timing. If Identify happens after the cart event, your cart abandonment trigger might fire on an anonymous profile that can’t receive messages. Identify earlier (email step) so the trigger has a real recipient.
- Attribute source of truth matters. In practice, this tends to break when client-side Identify overwrites server-side truth (e.g.,
orders_countset to 0 from the browser). Decide which attributes are server-owned vs client-owned and enforce it. - Data types can silently kill segments. Timestamps sent as strings, booleans sent as “true/false” strings, or currency as text will cause segment conditions like “within last X days” to behave unpredictably.
- Orchestration across tools needs one identity map. If paid media audiences, CX tooling, and Customer.io all use different IDs, you’ll get mismatched suppression and inconsistent frequency control.
Implementation Checklist
If you want Identify to actually improve performance (not just “be implemented”), treat this like a data product with QA gates.
- Canonical person ID chosen and documented (and not email-only unless you have no alternative)
- Identify fired at: email capture, login, and order confirmation (as appropriate)
- Anonymous pre-login events reliably merge into the known profile
- Server-side is the source of truth for revenue/order attributes (LTV, orders_count, last_order_date)
- Opt-in status mapped cleanly for each channel (email/SMS) and not overwritten accidentally
- Activity Log QA: no duplicate people created for a single customer across common journeys
- Segment QA: VIP / 1x buyer / cart abandoners match expected counts vs Shopify/warehouse
Expert Implementation Tips
These are the small operator moves that keep identity clean as you scale campaigns and add channels.
- Identify earlier than you think. For D2C, the checkout email step is often the highest-leverage Identify moment because it unlocks cart recovery with real product context.
- Use “versioned” attribute updates for critical fields. If multiple systems update the same attribute, add a
last_updated_atconvention per domain (orders, subscriptions, loyalty) so you can detect regressions. - Separate “profile enrichment” from “trigger events.” Keep Identify focused on identity + durable attributes; send cart/order as events. This prevents bloated profiles and makes debugging easier.
- Build a duplicate-person monitor. Track counts of profiles sharing the same email/phone, and alert when it spikes—this catches broken Identify releases fast.
Common Mistakes to Avoid
Most teams don’t fail at Identify because they didn’t read the docs—they fail because implementation details drift over time.
- Only identifying after purchase. You’ll lose most cart recovery value and you’ll misattribute browse/cart behavior.
- Using email as the sole identifier. Shared emails, changed emails, and Apple private relay can all fragment identity.
- Letting client-side overwrite server-side truth. This is how VIPs become “0 orders” and fall into winback flows.
- Not validating merge behavior. Teams assume anonymous events merge, but never confirm in Activity Logs—then wonder why triggers don’t fire.
- Inconsistent naming across events/attributes. If your data layer calls it
customer_idin one place anduserIdin another, you’ll create duplicates and break segments.
Summary
If your retention automations feel inconsistent, fix identity before you touch messaging. Identify is what makes anonymous intent usable, keeps profiles unified, and keeps segments/triggers trustworthy.
Implement it early in the funnel, enforce a stable canonical ID, and QA merges like you would a checkout release.
Implement Identify Spec with Propel
If you’re tightening identity to improve cart recovery and repeat purchase performance, the work is usually less about “sending an Identify call” and more about deciding where identity becomes authoritative and preventing attribute conflicts across systems. That’s the kind of integration hardening we typically help teams do around Customer.io—and if you want to sanity-check your current stitching and trigger reliability, you can book a strategy call.