Push Notifications in Customer.io (SDK Implementation for Retention)

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’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.

  1. 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.
  2. 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).
  3. Call identify immediately after login (and after account creation)
    When a user logs in, call the SDK identify method with your stable customer identifier (e.g., customer_id or hashed email). This is where identity stitching happens—miss this and you’ll end up messaging “ghost profiles” that never convert.
  4. 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)
  5. 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.
  6. Create your first push campaign with hard suppression rules
    Start with a cart recovery flow: trigger on Added to Cart, delay, then send push. Add exit conditions on Order Placed and 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 Cart or Checkout Started, suppress on Order Placed, and branch messaging by cart value or category.
  • Browse-to-buy conversion: trigger after multiple Product Viewed events 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 Placed arrives 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
  • identify called on login and signup with a stable customer identifier
  • Core commerce events tracked with consistent names and required properties
  • Order Placed event 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_id but your ecommerce backend uses customer_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.

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