Summarize this documentation using AI
Overview
If you’re running push through Customer.io, the real work isn’t the message—it’s getting app-side identity and event tracking clean enough that your push audiences are trustworthy. If you want a second set of eyes on your data layer and orchestration (especially around carts, browse, and post-purchase), you can book a strategy call and we’ll pressure-test the implementation like an operator would.
In most D2C retention programs, push becomes your fastest lever for cart recovery and replenishment—but only when device tokens, permission state, and user identity are stitched correctly across anonymous browsing and logged-in sessions.
How It Works
Push in Customer.io depends on two things working together: a device that’s reachable (token + permission) and a person profile that’s correctly identified (so the right user gets the right message at the right time). When either side is sloppy, you’ll see classic symptoms—cart abandon pushes going to the wrong person, duplicate sends after reinstall, or “ghost” audiences that look big but don’t deliver.
- SDK collects device context: Your mobile SDK registers for push, receives a device token from APNs/FCM, and Customer.io stores it as a device tied to a person (or temporarily to an anonymous profile).
- Identity stitching is the hinge: When a shopper logs in or submits an email/phone, you
identifythem. That’s the moment Customer.io can merge prior anonymous activity (product views, add-to-cart) with the known customer profile—if you implement it intentionally. - Events drive audiences and timing: App-side events like
Product Viewed,Added to Cart,Checkout Started, andOrder Placedbecome triggers and segment rules for push campaigns. - Delivery is gated by permission + token validity: Even a perfect segment won’t send if the device is opted out, token is stale, or the user has uninstalled. Operationally, that means your “eligible audience” is always smaller than your “segment size.”
Real D2C scenario: A shopper browses your app anonymously, views two products, adds one to cart, then bounces. If you only call identify after purchase (instead of at email capture/login), your cart abandonment push can’t target them because the cart event is stuck on an anonymous profile with no durable ID. Fix the identify timing and your cart recovery push audience usually jumps immediately—without changing creative.
Step-by-Step Setup
Push setup goes smoother when you treat it like a tracking project first and a messaging project second. The goal is to ensure Customer.io can reliably: (1) recognize the person, (2) recognize the device, and (3) understand intent signals from app events.
- Install the appropriate Customer.io SDK for your app stack
- iOS/Android/native or React Native/Flutter/Expo—pick the SDK that matches your codebase.
- Confirm the SDK is initialized on app start and uses the correct Customer.io site/workspace credentials.
- Implement push permission + token registration
- Request push permission at a moment that matches user intent (post-add-to-cart, post-account creation, post-delivery tracking opt-in), not on first open.
- Ensure APNs (iOS) or FCM (Android) token registration is wired and that token refresh events update Customer.io.
- Track permission state as an attribute (e.g.,
push_permission:granted/denied) so you can segment accurately.
- Get identity stitching right with
identify- Call
identifyas soon as you have a durable identifier (customer ID, email, or phone)—typically at login, account creation, or email capture. - Pass stable identifiers consistently. Don’t alternate between email one day and internal ID the next unless you’ve defined a single source of truth.
- If your app supports logout, explicitly handle it so future anonymous activity doesn’t pollute the prior customer profile.
- Call
- Track retention-grade events (not vanity events)
- Minimum viable D2C events:
Product Viewed,Collection Viewed,Added to Cart,Checkout Started,Order Placed,Order Delivered(if available). - Include properties that make segmentation usable: SKU, category, price, cart value, currency, quantity, and inventory/availability where relevant.
- Send timestamps from the app consistently; don’t mix server and client time without a plan.
- Minimum viable D2C events:
- Validate in Customer.io before building campaigns
- Confirm the person profile shows: device present, push enabled (permission granted), and recent events with expected properties.
- Test the anonymous → identified merge path: browse anonymously, add to cart, then log in—verify the events appear on the identified profile.
When Should You Use This Feature
Push is worth the SDK effort when you need speed and precision—especially on mobile-first brands where email isn’t the primary daily touchpoint. The best push programs aren’t “more messages”; they’re tighter orchestration around intent and lifecycle moments.
- Cart recovery (high intent): Trigger on
Added to Cartwith noOrder Placedwithin X minutes/hours. Use product properties to personalize the push and suppress if the user returns to checkout. - Browse abandonment (mid intent): Trigger on repeated
Product ViewedorCollection Viewed, then nudge with social proof, back-in-stock, or “complete the set” logic. - Repeat purchase / replenishment: Trigger based on
Order Placed+ predicted reorder window (category-based). This is where accurate SKU/category mapping matters. - Reactivation: Target customers with no app open or no key events in 30–90 days, but only if they’re still opted in and have a valid device. Pair with a “reason to come back” offer or drop.
Operational Considerations
Most push programs break in operations, not strategy—segments drift, identities duplicate, and teams lose confidence in counts. Treat push as a data pipeline you monitor, not a set-and-forget channel.
- Segmentation reality: Build segments off events + device eligibility. A “Cart Abandoners” segment without “has push-enabled device” will look great and deliver poorly.
- Data flow consistency: Standardize event names and properties across iOS/Android. If Android sends
skuand iOS sendsSKU, your personalization and branching will silently fail. - Identity conflicts: In practice, this tends to break when apps identify users with email sometimes and internal ID other times, creating duplicates. Pick a primary identifier and enforce it in the app layer.
- Orchestration with other channels: Decide suppression rules early (e.g., don’t send push cart reminder if an SMS cart reminder already fired in the last 2 hours). Customer.io orchestration is only as good as the events you use to coordinate it.
- Attribution expectations: Push clicks are easy; view-through impact is messier. Track downstream events (session started, checkout started, order placed) and evaluate incrementality with holdouts where possible.
Implementation Checklist
Before you scale sends, you want a clean baseline: stable IDs, consistent events, and segments that reflect deliverable reality. This checklist is the minimum bar we use before we call a push program “ready.”
- SDK initialized correctly on app start (per environment: dev/stage/prod)
- Push permission prompt implemented with intentional timing
- APNs/FCM token registration and refresh handling confirmed
identifycalled at login/account creation/email capture (not “sometime later”)- Logout/anonymous handling defined to prevent profile contamination
- Core D2C events tracked with consistent naming and properties
- Segment includes eligibility filters (push permission granted + device present)
- Test path validated: anonymous browse → identify → cart abandon → push received
Expert Implementation Tips
Once the basics work, the wins come from tightening the edges—permission strategy, identity hygiene, and event semantics that make segments stable over time.
- Delay the permission prompt until value is obvious: For D2C apps, asking after “Track my order” or after an add-to-cart tends to outperform first-launch prompts. You get fewer opt-ins overall, but higher-quality opt-ins that actually convert.
- Use category-aware replenishment windows: Don’t treat all orders the same. Supplements, skincare, and coffee have very different reorder cycles—encode that into event properties (category, usage duration) so Customer.io can target precisely.
- Send “state” as attributes sparingly: Keep durable state (VIP tier, subscription status, push_permission) as attributes. Keep behavior as events. Teams often overuse attributes for behavior and then segmentation becomes brittle.
- Build a token health dashboard: Monitor active push-enabled devices vs. monthly active users. If it drops unexpectedly, you likely broke token refresh or permission tracking in a release.
Common Mistakes to Avoid
These are the mistakes that create phantom audiences, bad personalization, and internal distrust in push performance. They’re all fixable, but they’re painful if you discover them after scaling volume.
- Identifying too late: Waiting until purchase to call
identifymeans you can’t target high-intent pre-purchase behaviors (browse/cart) reliably. - Inconsistent identifiers: Switching between email and internal IDs creates duplicates and split histories. Pick one canonical ID strategy and stick to it.
- Event property drift: Renaming
product_idtoskuin one app version breaks segments and liquid personalization without obvious errors. - Segmenting on “cart exists” without expiry logic: If you don’t send cart-cleared/cart-expired events (or equivalent logic), people stay in cart segments forever and get irrelevant reminders.
- No channel suppression rules: Push + SMS + email firing on the same abandon event burns trust fast. Orchestrate with shared events and clear priority.
Summary
Push in Customer.io works best when your SDK implementation treats identity stitching and event accuracy as the product. Get identify timing right, standardize your events, and build segments that reflect real deliverability.
If your goal is cart recovery, repeat purchase, or reactivation, push becomes a reliable lever once the device + person graph is clean.
Implement Push with Propel
If you’re already on Customer.io, the fastest path is usually: validate SDK identity stitching, lock down a retention-grade event taxonomy, then ship 2–3 push flows with tight suppression and measurement. If you want help auditing the app-side tracking and turning it into dependable push audiences, book a strategy call—we’ll focus on what will actually move repeat rate and recovered revenue, not just “sending more push.”