Migrate from an earlier Customer.io SDK version

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 migrating an older Customer.io SDK, the real goal isn’t “getting the new SDK compiling”—it’s protecting identity stitching and event continuity so your retention automations don’t quietly stop working. If you want a second set of eyes on the migration plan (especially around anonymous-to-known user merging), you can book a strategy call and we’ll pressure-test your tracking against your highest-value flows.

In most retention programs, SDK upgrades are where cart recovery and repeat-purchase journeys break without anyone noticing: the app still sends some events, but they land under a different identifier, or key properties change shape, and segments stop matching.

How It Works

When you move from an earlier SDK version to a newer one, you’re usually changing three things at once: how the SDK initializes, how users are identified, and how events/properties are serialized. That’s why migrations feel “done” from an engineering standpoint but still degrade performance in Customer.io.

  • Initialization changes affect delivery timing. Some older implementations initialize late (after login) while newer patterns initialize at app start. That can change whether pre-login browsing and add-to-cart events are captured as anonymous activity.
  • Identify behavior is the retention linchpin. The key is keeping the same stable customer identifier (your internal user id) and calling identify at the right moment. If the identifier changes (email vs user id, or a new UUID), Customer.io will treat the same shopper as a new person—your “repeat purchase” logic and frequency caps won’t behave.
  • Anonymous-to-known stitching is where cart recovery wins or loses. A common D2C scenario: a shopper browses products, adds to cart, then logs in to check shipping. If your migration stops merging anonymous activity into the known profile, your cart abandonment journey won’t see the cart event on the identified profile—so no recovery message.
  • Event names/properties must remain consistent. Journeys and segments match on exact event names and property paths. Even a “small cleanup” like renaming productId to product_id can drop conversion rates because the flow never triggers.

Step-by-Step Setup

Treat the migration like a tracking refactor, not a library bump. The safest path is to run the new SDK in a controlled way, validate identity + events in Customer.io, then cut over once your core retention triggers match exactly.

  1. Inventory your current tracking contract.
    Pull a list of the current identify fields, event names, and the exact properties your Customer.io segments/journeys depend on (cart events, checkout events, purchase, product viewed, etc.).
  2. Decide on your canonical identifier (and don’t change it mid-migration).
    In practice, use a stable internal user id for identify. If you’ve historically used email, you can keep it—but don’t switch identifiers during the upgrade unless you also plan a controlled merge strategy.
  3. Implement the new SDK install + initialization.
    Initialize the SDK as early as possible in app startup so you capture anonymous browsing. Keep environment separation (dev/staging/prod) so you don’t pollute production profiles while testing.
  4. Re-implement identify at the moment of truth.
    Call identify immediately after a user is authenticated (or when you can confidently tie the device/session to a customer). Include key attributes you rely on for segmentation (email, phone, acquisition source, subscription status, etc.).
  5. Handle logout explicitly.
    If your app supports switching accounts, implement the SDK’s reset/clear pattern on logout. Otherwise you’ll leak events across users on shared devices—this breaks suppression logic and can trigger the wrong winback offers.
  6. Recreate event tracking with strict parity.
    Start by matching event names and property keys 1:1 with the old SDK. Only “improve naming” after you’ve confirmed all journeys fire correctly.
  7. Validate in Customer.io with real journeys, not just event logs.
    Trigger a test cart abandonment flow end-to-end: anonymous browse → add to cart → login → abandon → confirm the identified profile enters the journey and the message renders with the expected cart properties.
  8. Cut over with monitoring.
    For the first 48–72 hours, monitor: event volume deltas, % anonymous vs identified events, journey entry counts, and purchase attribution. You’re looking for silent drops.

When Should You Use This Feature

You don’t migrate SDK versions “because it’s time.” You do it when the current implementation is limiting tracking quality or when you’re seeing real retention leakage from identity or event gaps.

  • Your cart recovery flow underperforms on mobile. Often the issue is anonymous events not stitching after login, or add-to-cart events firing before the SDK initializes.
  • You’re missing key lifecycle signals. Example: subscription started, order refunded, product replenishment intent—these are easier to track reliably with a modern SDK pattern.
  • You need better device-level accuracy. If you’re sending push/in-app and seeing mismatched devices or duplicate profiles, an upgrade paired with clean device management usually fixes it.
  • You’re unifying web + app identity. If you’re trying to orchestrate “browse on web → buy in app” retention, you need consistent identifiers and clean event schemas across surfaces.

Operational Considerations

Most migration pain shows up downstream: segments stop matching, frequency rules misfire, and orchestration gets noisy. Plan for the operational reality, not just the SDK code change.

  • Segmentation dependencies: Audit any segment that relies on event properties (e.g., cart_total, category, sku). If property paths change, segment membership will crater.
  • Data flow timing: If the new SDK changes when events fire (client-side vs server-side confirmation), your “abandoned checkout” window might need adjustment to avoid false positives.
  • Identity stitching rules: Decide how you’ll treat pre-auth sessions. In most D2C apps, you want: anonymous browse/cart activity to merge into the identified profile on login—otherwise you lose the highest-intent signals.
  • Orchestration across channels: If email/SMS is triggered from app events, verify those events still arrive in time for your send windows. A 10–20 minute delay can materially reduce cart recovery conversion.
  • Version rollouts: Mobile releases are gradual. Expect mixed SDK versions in the wild for weeks—design your tracking so both versions produce compatible events during the transition.

Implementation Checklist

If you run through this list before and after release, you’ll catch the issues that typically show up as “our flows stopped working” two weeks later.

  • Canonical identifier chosen and documented (user id vs email), and used consistently in identify
  • Anonymous events captured pre-login (browse, product viewed, add to cart)
  • Anonymous-to-known merge validated with a real login scenario
  • Logout/reset behavior implemented and tested (shared device scenario)
  • Event names match prior implementation (parity first, refactor later)
  • Critical event properties preserved (sku, price, quantity, cart_id, order_id)
  • Dev/staging data isolated from production workspace
  • Customer.io segments/journeys validated by entry counts (not just event receipt)
  • Monitoring plan for event volume and journey entries during rollout

Expert Implementation Tips

These are the small operator moves that prevent weeks of “why is revenue down?” debugging after an SDK migration.

  • Ship a temporary “tracking parity” dashboard. Compare old vs new event counts (by name) and identified rate. If Add to Cart drops 30% on iOS after release, you’ll see it immediately.
  • Keep event schemas boring. Don’t nest deeply unless you already do. Customer.io segmentation gets fragile when teams change JSON shapes casually.
  • Use order_id as your purchase dedupe key. Mobile apps retry. If your purchase event can fire twice, you’ll inflate LTV segments and trigger awkward post-purchase messages.
  • Test the “guest checkout” edge case. Many D2C brands allow checkout without account creation. Decide whether you’ll identify by email at checkout completion, and ensure that doesn’t create duplicates.
  • Validate message personalization, not just triggers. A cart abandonment email that triggers but has an empty cart block is still a tracking failure—usually missing line-item properties.

Common Mistakes to Avoid

These are the migration mistakes that most often show up as retention performance decay rather than obvious errors.

  • Changing the identifier during the migration. Switching from email to user id (or vice versa) without a merge plan creates duplicate people and breaks frequency caps.
  • Calling identify too late. If you only identify on a later screen (like account page), you’ll strand high-intent events (add to cart, begin checkout) on an anonymous profile.
  • Renaming events “for cleanliness.” Your journeys are brittle by design—rename later with a controlled dual-send period, not during the upgrade.
  • Not resetting on logout. Shared iPads, family devices, and store devices will contaminate profiles and cause mis-targeted winbacks.
  • Validating in logs only. Seeing events arrive doesn’t mean segments match or journeys trigger. Always test against the actual automations that drive revenue.

Summary

Migrating from an earlier SDK version is mainly an identity and event-parity project. If you preserve identifiers, stitch anonymous activity correctly, and keep event schemas stable, your cart recovery and repeat-purchase flows keep performing through the upgrade. If you don’t, the breakage will look like “soft” revenue decline rather than a clear bug.

Implement Migrate Upgrade with Propel

If you’re upgrading an older SDK and want to protect retention performance, treat it like a tracked release: parity checks, stitching tests, and journey-level validation. We regularly help teams migrate tracking without losing cart recovery entry rates or duplicating profiles in Customer.io—and if you want to sanity-check your plan, you can book a strategy call and we’ll walk through your identify + event contract before you ship.

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