Packages and Configuration Options (SDK) — how to set up Customer.io tracking you can actually trust

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 implementing Customer.io via SDKs (mobile or web), “packages” and “configuration options” aren’t a nice-to-have—they’re the difference between clean, attributable retention flows and a mess of duplicate users, missing events, and broken cart recovery. If you want a second set of eyes on your tracking plan before it hits production, book a strategy call and we’ll pressure-test identity stitching and event coverage like an operator would.

In most retention programs, the SDK setup fails in two places: (1) identity changes (anonymous → logged-in) and (2) event consistency across app/web. Packages and config are where you prevent those problems upfront.

How It Works

At a practical level, “packages” are the pieces of the Customer.io SDK you decide to ship in your app (core tracking, in-app messaging, push handling, etc.). Configuration options are the runtime rules—how the SDK identifies people, what it does when offline, how it queues events, and how it handles device identifiers.

Here’s what matters for retention execution:

  • SDK initialization sets your baseline data quality. If initialization happens late (after screens load) you’ll miss early discovery events like Product Viewed and your browse-abandon flows will underperform.
  • identify() is your identity stitching moment. The SDK will happily track anonymous events, but your retention automation needs those events merged onto the known customer when they log in or submit email/SMS.
  • Event tracking is only useful if it’s consistent. Same event name, same properties, same types—across iOS, Android, and web. Otherwise segmentation becomes “works on iOS only,” which is how journeys quietly die.
  • Packages should match your channel plan. If you plan to use in-app messages for cart recovery nudges, you need the in-app package installed and configured correctly; if you’re only doing email/SMS, keep the footprint lean.

Real D2C scenario: A shopper browses a skincare bundle in your iOS app, adds to cart, then bounces. Later they click an email on desktop, create an account, and purchase. If your SDK didn’t track Added to Cart reliably (or didn’t merge anonymous activity on login), your cart recovery flow either won’t send—or worse, it sends after purchase because the system never connected the dots.

Step-by-Step Setup

Before you touch code, align on a tracking spec (event names + required properties) and an identity plan (what counts as “known”). Then implement in this order so you don’t ship an SDK that tracks perfectly… for the wrong user.

  1. Pick the SDK packages you actually need.
    Keep it retention-driven: core tracking is non-negotiable; add in-app/push packages only if you’ll orchestrate those channels in Customer.io.
  2. Initialize the SDK as early as possible.
    Do it at app start (or earliest safe lifecycle hook) so your first-session discovery events aren’t lost.
  3. Implement anonymous tracking by default.
    Track events like Product Viewed, Collection Viewed, Added to Cart, and Checkout Started even when the user isn’t logged in.
  4. Call identify() immediately when you capture a stable identifier.
    This is typically after login, account creation, or when someone submits email/SMS in a capture modal. Pass a stable customer ID if you have one; otherwise use email/phone per your identity rules.
  5. Stitch profiles intentionally (don’t “hope” it merges).
    If your implementation requires merging anonymous activity into a known profile, confirm the SDK behavior and your Customer.io settings support that merge path. In practice, this tends to break when teams identify with email on web but with an internal ID on mobile.
  6. Standardize event payloads across platforms.
    Define required properties (e.g., product_id, variant_id, price, currency, quantity, cart_id) and enforce types (string vs number) so segments don’t silently exclude people.
  7. Validate in Customer.io Activity Log.
    Check a full path: anonymous browse → add to cart → identify → purchase. Make sure all events land on the same person profile.

When Should You Use This Feature

You lean on SDK packages/config options whenever retention performance depends on app-side truth—especially when server-side events alone don’t capture intent fast enough or identity changes mid-journey.

  • Cart recovery that starts in-app. If add-to-cart happens in mobile, SDK tracking is the source of truth for “did they abandon?”
  • Browse abandonment / product discovery nudges. SDK events like Product Viewed and Search Performed power timely follow-ups (email, push, in-app) without waiting for backend signals.
  • Reactivation based on app inactivity. Accurate last activity requires the SDK to record sessions/screens/events reliably, otherwise you’ll target active buyers as “lapsed.”
  • Cross-device lifecycle stitching. If customers research on mobile and buy on web (or vice versa), your identify/merge strategy is what makes journeys coherent.

Operational Considerations

Once the SDK is live, the day-to-day retention work depends on how predictable your data is. Most “Customer.io isn’t working” complaints are really segmentation and orchestration problems caused by inconsistent tracking.

  • Segmentation reliability depends on property hygiene. If price is sometimes a string and sometimes a number, your “high intent cart” segment will randomly miss people.
  • Decide which system owns purchase truth. For most D2C stacks, the backend (Shopify/OMS) should own Order Completed. The SDK can track “payment success screen viewed,” but don’t let that become your only purchase event.
  • Handle offline + retries intentionally. Mobile users go offline. Make sure your SDK configuration queues events and flushes them later, otherwise you’ll undercount intent and over-send recovery messages.
  • Orchestration needs dedupe keys. If you run cart recovery from both app events and backend cart data, you need a shared identifier (like cart_id or checkout_id) to prevent double sends.
  • Identity strategy must be consistent across app and web. Pick a primary identifier (internal customer ID is ideal) and stick to it everywhere. Mixing identifiers is how you end up with “two VIPs” who are actually the same person.

Implementation Checklist

Use this as the “ship it” gate before you build journeys on top of SDK data. If any of these are missing, your retention automation will look fine in QA and fail in the wild.

  • SDK initializes early (before key browsing/cart screens fire events)
  • Anonymous events tracked for browse + cart intent
  • identify() called immediately on login/account creation/email capture
  • Identity stitching validated: anonymous activity appears on known profile after identify
  • Event names and required properties documented and consistent across iOS/Android/web
  • Key events validated in Customer.io Activity Log end-to-end
  • Purchase source of truth defined (backend vs SDK) and dedupe strategy in place
  • Offline queueing/retry behavior confirmed for mobile

Expert Implementation Tips

These are the operator moves that keep your segments clean and your recovery flows from embarrassing misfires.

  • Track “intent depth,” not just actions. Add properties like item_count, cart_value, and category on cart events so you can prioritize higher-value recoveries.
  • Use a single “Cart Updated” event pattern. Instead of many one-off events, keep one canonical cart event with a full cart payload and a stable cart_id. It makes segmentation and dedupe dramatically easier.
  • Identify earlier than you think. If you capture email for “send my cart” or “notify me,” identify right there—don’t wait for account creation. That’s often the highest-intent moment.
  • Protect against late purchase confirmations. Add a short delay + purchase check before sending aggressive cart recovery, especially on mobile where events can arrive late.

Common Mistakes to Avoid

Most teams don’t fail because they didn’t install the SDK—they fail because the data becomes impossible to trust once real customers start switching devices and logging in mid-session.

  • Calling identify() with different identifiers on different platforms. Email on web, internal ID on app = split profiles and broken frequency control.
  • Only tracking events after login. You’ll lose the highest-volume intent signals and your recovery programs will be underpowered.
  • Inconsistent event/property naming. Added To Cart vs add_to_cart becomes two segments and two automations—forever.
  • Using SDK “purchase” events as the only order truth. App screens don’t equal successful orders; backend confirmation should close the loop.
  • No dedupe between app and backend triggers. This is how customers get two cart emails and one push for the same cart.

Summary

If you want Customer.io retention flows to perform, get the SDK packages and configuration right first—especially initialization timing, identify(), and cross-platform event consistency.

Make identity stitching boring and predictable, then build cart recovery, repeat purchase, and reactivation on top of data you trust.

Implement Packages Options with Propel

If you’re rolling out SDK tracking across mobile + web, it’s worth treating packages/config as a retention foundation—not an engineering checkbox. In practice, a quick implementation review catches the issues that later show up as “why is cart recovery inconsistent?” or “why are VIPs getting winbacks?”

We can help you map the right SDK packages to your channel plan in Customer.io, validate identity stitching, and pressure-test event payloads before you build journeys. If that’s useful, book a strategy call.

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