Summarize this documentation using AI
Overview
If you’re running push through Customer.io, the difference between “push that prints money” and “push that gets ignored” usually comes down to SDK tracking quality: clean device capture, reliable identity stitching, and events that map to real buying intent. If you want a second set of eyes on your tracking plan before you scale sends, book a strategy call—most issues show up in the first 15 minutes.
Push is a retention channel first. In practice, it’s your fastest lever for cart recovery, back-in-stock recovery, replenishment nudges, and reactivation—assuming Customer.io consistently knows (1) who the user is and (2) which device token belongs to them right now.
How It Works
Customer.io push starts on the app side. Your SDK collects a push token (APNs for iOS, FCM for Android), ties it to a person, and streams behavioral events into Customer.io so campaigns can trigger at the right moment.
- Device registration: the SDK captures the device token and registers it to a profile. If the token rotates (it happens), the SDK needs to update it or you’ll quietly lose reach.
- Identity stitching: anonymous browsing and logged-in behavior need to converge. The critical moment is identify—when you link the device (and any pre-login events) to the known customer profile.
- Event-driven orchestration: your app emits events like
Product Viewed,Added to Cart,Checkout Started,Order Placed. Customer.io uses those events to enter people into campaigns, branch logic, and suppress messages after conversion. - Delivery + targeting: Customer.io sends push to the registered token(s). Segmentation typically happens on a mix of attributes (e.g., last purchase date, VIP tier) and event recency (e.g., added to cart in last 2 hours).
Real D2C scenario: a shopper adds a $68 skincare bundle to cart on mobile, gets distracted, and closes the app. If your SDK fires Added to Cart and the device is registered + identified, Customer.io can send a push 45 minutes later with the exact bundle name, then suppress the rest of the sequence as soon as Order Placed lands.
Step-by-Step Setup
Before you build campaigns, get the plumbing right. Push campaigns don’t fail because the copy is bad—they fail because tokens aren’t attached to the right profile, events arrive late, or anonymous users never get merged.
- Install the Customer.io SDK for your platform
Add the iOS/Android (or React Native/Flutter/Expo) SDK to your app and confirm it initializes on app launch. Treat initialization failures as revenue-impacting—if the SDK doesn’t boot, nothing downstream works. - Enable push permissions and register tokens
Implement OS-level permission prompts and ensure the SDK receives and forwards the APNs/FCM token. Plan your permission prompt timing (post-value moment beats first-launch prompts in most D2C apps). - Call
identifyimmediately after login (and after account creation)
When a user logs in, call the SDK identify method with your stable customer identifier (e.g.,customer_idor hashed email). This is where identity stitching happens—miss this and you’ll end up messaging “ghost profiles” that never convert. - Track the events that map to retention outcomes
Implement app-side events with consistent naming and properties. Minimum viable set for D2C retention:Product Viewed(properties:product_id,category,price)Added to Cart(properties:cart_id,items,value)Checkout Started(properties:value,shipping_method)Order Placed(properties:order_id,value,items)
- Verify data in Customer.io before building journeys
Confirm (a) devices appear on profiles, (b) events arrive within seconds, and (c) identified users show the same profile accumulating events over time. - Create your first push campaign with hard suppression rules
Start with a cart recovery flow: trigger onAdded to Cart, delay, then send push. Add exit conditions onOrder Placedand frequency controls so you don’t spam high-intent shoppers.
When Should You Use This Feature
Push is worth implementing when you have a mobile experience where speed matters—either you’re driving repeat behavior (replenishment, drops) or you’re recovering revenue from interrupted purchase intent. If you don’t have reliable identity + events, fix that first or you’ll scale noise.
- Cart recovery (high-intent): trigger from
Added to CartorCheckout Started, suppress onOrder Placed, and branch messaging by cart value or category. - Browse-to-buy conversion: trigger after multiple
Product Viewedevents in a session, especially for replenishable categories (supplements, skincare, pet). - Reactivation: target customers who haven’t opened the app in 30–60 days and haven’t purchased in 60–120 days, then personalize by last purchased category.
- Post-purchase repeat: use
Order Placed+ time delays to hit replenishment windows, cross-sell accessories, or nudge subscription enrollment.
Operational Considerations
Once push is “working,” the real work is keeping it accurate as your app, login flows, and analytics evolve. In most retention programs, we’ve seen push performance degrade slowly because identity and event schemas drift without anyone noticing.
- Segmentation depends on identity hygiene: if users can check out as guest, decide how you’ll stitch later (email capture, account creation) and how you’ll handle duplicate profiles.
- Event timing matters: cart recovery flows break when
Order Placedarrives late (or from a separate system) and the user gets an “unfinished cart” push after they bought. - Token churn is real: app reinstalls, OS updates, and notification setting changes can invalidate tokens. Make sure your SDK updates tokens and that you’re not holding stale devices forever.
- Orchestration across channels: if you’re also sending email/SMS, set channel priorities. For example: push first for app users, SMS only for high AOV carts, email as a fallback.
- Frequency + fatigue: push is easy to overuse. Use global frequency limits and campaign-level suppression (e.g., “no more than 1 cart push per 24 hours”).
Implementation Checklist
If you want push to drive incremental revenue (not just “more touches”), you need a tight checklist that covers identity, events, and suppression. This is the stuff that prevents embarrassing sends and protects deliverability at the OS level.
- SDK installed and initializing reliably on app start
- Push permission prompt implemented with intentional timing
- APNs/FCM token captured and visible on the Customer.io person profile
identifycalled on login and signup with a stable customer identifier- Core commerce events tracked with consistent names and required properties
Order Placedevent arrives fast enough to suppress recovery pushes- Segments built for: active app users, recent cart creators, lapsed purchasers, VIPs
- Campaign exit conditions and frequency limits set before launch
- QA plan: test devices, test users, and test edge cases (login/logout, reinstall)
Expert Implementation Tips
Most teams ship push and then wonder why targeting feels “off.” The fix is usually not a new message—it’s better stitching and better event design.
- Track a cart object snapshot in the event payload: for cart recovery, include item names, top category, and total value in
Added to Cart. That gives you immediate personalization without waiting on a backend fetch. - Use a single canonical user ID everywhere: if your app uses
user_idbut your ecommerce backend usescustomer_id, pick one as the source of truth and map the other—otherwise you’ll split profiles and undercount conversions. - Design for logged-out behavior: if shoppers browse without logging in, capture anonymous events and make sure your identify call merges that history when they authenticate.
- Build “conversion truth” once: choose the event that definitively means purchase (typically
Order Placed) and standardize it across app + backend so every recovery flow can trust it. - Stagger pushes with intent: for cart recovery, a common pattern is 30–60 minutes (helpful reminder) then 20–24 hours (social proof / urgency). Don’t add a third touch unless you can segment for high likelihood to buy.
Common Mistakes to Avoid
These are the mistakes that quietly kill push ROI. They’re also the ones that create the “we tried push, it didn’t work” story inside the team.
- Not calling identify consistently: if identify only happens on some login paths (SSO vs email login, checkout login vs account page), your device-to-person mapping will be incomplete.
- Relying on email as the primary identifier for app users: emails change and are often missing pre-checkout. A stable internal ID is safer for stitching.
- Missing suppression on purchase: if you don’t exit on
Order Placed, you will send post-purchase cart recovery pushes. It’s not “if,” it’s “when.” - Event names drifting over time: “AddToCart” vs “Added to Cart” becomes two triggers and two segments. Lock a schema and enforce it.
- Prompting for push permissions too early: first-launch prompts tend to underperform. Wait until after a value moment (e.g., after they favorite an item or start a cart).
- No device hygiene: continuing to target stale tokens inflates audience sizes and hides deliverability problems.
Summary
Push in Customer.io is only as strong as your SDK implementation: device token capture, consistent identify calls, and clean commerce events. Get those right, and cart recovery + reactivation become predictable levers instead of guesswork. If your data is messy, fix stitching and suppression before you scale sends.
Implement Push with Propel
If you’re implementing push in Customer.io, the fastest wins usually come from tightening identity stitching and event design, then building 2–3 revenue-first journeys (cart recovery, replenishment, reactivation) with aggressive suppression. If you want help pressure-testing your SDK tracking plan and campaign logic, book a strategy call—we’ll focus on what will actually move repeat rate and recovered revenue.