Deep Links (Mobile SDK) in Customer.io: Trackable Paths Back to Purchase

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 mobile-first retention, deep links are the difference between “they tapped” and “they actually landed on the right product and bought.” With Customer.io, deep links become more than navigation—they’re measurable entry points you can tie back to specific campaigns, and they’re one of the fastest ways to lift recovery and repeat purchase when your app experience is strong. If you want a second set of operator eyes on your tracking and routing, book a strategy call.

In most retention programs, we’ve seen deep links break in two places: identity (the tap comes in “anonymous”) and attribution (you can’t tell which message drove which session). The goal here is simple: every tap resolves to the right user, opens the right screen, and fires the right events so Customer.io can orchestrate the next best message.

How It Works

Deep links connect a message click to an in-app destination (PDP, cart, reorder, subscription portal), and your SDK instrumentation turns that click into usable retention data. The mechanics matter because Customer.io can only segment and trigger off what you reliably send from the app.

  • Message includes a deep link URL (custom scheme like myapp:// or universal/app link like https://app.yourbrand.com/...) pointing to a specific in-app route (product, cart, order status, etc.).
  • User taps the link and the OS routes them into the app (or to the store / web fallback if the app isn’t installed, depending on your deep link setup).
  • Your app parses the deep link and navigates to the correct screen. This is app-side work—Customer.io doesn’t “open the screen” for you.
  • Your app identifies the user in Customer.io as early as possible (ideally at login, and again after any auth refresh). This is what stitches the session back to the right profile so you can trigger recovery and suppress irrelevant messages.
  • Your app tracks deep-link-driven events (e.g., Deep Link Opened, Product Viewed, Checkout Started, Order Completed) with properties that let you attribute outcomes back to the message and the destination.

Practical D2C scenario: someone abandons a cart with a bundle. You send a push 2 hours later: “Your bundle is still reserved.” The deep link routes directly to /cart with the bundle pre-selected. When they open it, your app fires Deep Link Opened with source=push, campaign_id, and destination=cart. If they check out, you can attribute revenue and stop the rest of the recovery sequence immediately.

Step-by-Step Setup

Before you build journeys around deep links, get the plumbing right: link routing, early identity, and consistent event naming. That’s what keeps your cart recovery and reactivation flows from turning into “send more messages” instead of “drive more purchases.”

  1. Implement deep link routing in the app
    • Choose your approach: Universal Links (iOS) / App Links (Android) for best reliability, and optionally a custom scheme as a fallback.
    • Map link paths to screens: PDP, cart, collection, reorder, subscription management, order tracking.
    • Handle cold start vs warm start: make sure the deep link still routes correctly when the app launches from a killed state.
  2. Install and initialize the Customer.io Mobile SDK
    • Initialize the SDK at app start so you can track the deep link open immediately (especially important on cold start).
    • Confirm push is set up if you’re using push as the primary deep link channel (token registration and permission states tracked).
  3. Identify users as soon as you can
    • Call identify at login/registration with your stable customer identifier (not an email that can change, not a device ID).
    • If you support guest checkout or pre-login browsing, decide how you’ll merge: capture anonymous activity and stitch after login, or restrict retention triggers until identity is known.
    • Update key attributes alongside identity (e.g., email, phone, push_enabled, sms_opt_in, last_order_at).
  4. Track a “Deep Link Opened” event with attribution properties
    • Fire an event the moment you parse the link (before navigation is fine, as long as it’s consistent).
    • Recommended properties: destination (cart/pdp/reorder), url, channel (push/sms/email), message_id or campaign_id (if you pass it), utm_source, utm_campaign.
    • Also track the next-step commerce events (Product Viewed, Added to Cart, Checkout Started, Order Completed) so Customer.io can optimize sequencing and suppression.
  5. Standardize your deep link format across channels
    • Use one canonical URL structure so you don’t end up with three competing routes for the same destination.
    • Make the link resilient: include a product/variant ID, not just a slug that merchandising can change.
  6. Validate end-to-end in Customer.io
    • Send yourself a test message, tap it, and confirm: profile is identified, Deep Link Opened arrives, and downstream events arrive in the right order.
    • Check timing: if identify happens after events, you’ll see attribution gaps or anonymous events that never stitch.

When Should You Use This Feature

Deep links are worth the effort when the “right landing” materially changes conversion. If the user has to hunt for the product again, you’ve basically thrown away the click you paid for with attention and deliverability.

  • Cart recovery on mobile: route directly to cart with the exact items intact; suppress follow-ups immediately when checkout starts.
  • Back-in-stock and price-drop: route to the exact variant (size/color) instead of the generic PDP.
  • Reorder and replenishment: deep link to a pre-filled reorder flow or the last purchased SKU inside the app.
  • Subscription management retention: link to “skip,” “swap,” or “delay” inside the app to prevent churn without support tickets.
  • Winback with curated collections: route lapsed buyers to a personalized collection screen (e.g., “new arrivals in your routine”).

Operational Considerations

Deep links touch segmentation, identity stitching, and orchestration timing. The teams that win here treat deep link events like first-class behavioral signals, not “nice-to-have analytics.”

  • Segmentation depends on clean event properties: if destination is sometimes cart and sometimes /cart, your segments will quietly miss users and your recovery flow will underperform.
  • Identity stitching is the make-or-break: if a user taps from push and you don’t identify until later, Customer.io can’t reliably suppress the next reminder or attribute the conversion. In practice, this tends to break on cold start flows and expired auth tokens.
  • Orchestration timing matters: build delays and exit conditions around real app events (e.g., Checkout Started, Order Completed), not just “clicked message.” Clicks are intent; purchases are outcomes.
  • Cross-device reality: email clicks may happen on desktop while purchase happens in-app later. If you only rely on deep link opens, you’ll undercount influence—so keep both click and in-app events in your measurement model.
  • Fallback behavior: decide what happens if the app isn’t installed or the deep link can’t resolve. A broken link is worse than a generic landing page.

Implementation Checklist

If you want this to drive revenue (not just “more tracked events”), lock in the basics below before you scale sends.

  • Universal Links/App Links configured and tested (cold start + warm start)
  • Canonical deep link URL format documented (paths + required IDs)
  • Customer.io Mobile SDK initialized at app launch
  • identify called at login/registration with a stable customer ID
  • Plan for anonymous-to-known stitching (guest flows)
  • Deep Link Opened event implemented with consistent properties
  • Commerce events implemented: Product Viewed, Added to Cart, Checkout Started, Order Completed
  • Customer.io segments built off standardized properties (destination/channel/campaign)
  • Exit conditions in campaigns tied to purchase and checkout events
  • QA: test message → tap → route → events → suppression works

Expert Implementation Tips

These are the small operator moves that usually create the lift—because they prevent wasted touches and make attribution believable.

  • Pass a campaign/message identifier through the link: include utm_campaign and a stable cio_campaign_id-style parameter (whatever convention you choose) so your app can attach it to Deep Link Opened and downstream events.
  • Track “deep link failed” as an event: if routing fails or required IDs are missing, fire Deep Link Error with the raw URL. It’s the fastest way to catch broken templates before performance drops.
  • Use variant IDs, not slugs: merchandising changes names constantly. IDs don’t.
  • Suppress based on intent + outcome: for cart recovery, suppress on Checkout Started (intent) and fully exit on Order Completed (outcome). This reduces “stop spamming me” complaints while still protecting revenue.
  • Guard against double-firing events: deep links can trigger multiple lifecycle callbacks. Add idempotency (e.g., store the last processed deep link token for a short window).

Common Mistakes to Avoid

Most deep link programs don’t fail because the link doesn’t open—they fail because the data becomes unusable for orchestration.

  • Firing events before identity is set: you end up with anonymous opens that never stitch, so your suppression and attribution both break.
  • Inconsistent event naming across platforms: iOS sends deep_link_opened, Android sends Deep Link Open. Now your segments are wrong and nobody notices until revenue dips.
  • Relying on click tracking alone: clicks don’t guarantee the app opened or the screen loaded. For retention, you want in-app confirmation events.
  • Sending users to generic screens: “Open the app” links underperform because the user has to do extra work to find the item again.
  • No fallback path: if the app isn’t installed or the link can’t resolve, you lose the session entirely instead of routing to mobile web.

Summary

Deep links are a retention lever when they reliably land users on the exact next step and you can stitch that behavior back to a known profile in Customer.io. Get identity and event hygiene right, then use deep link opens plus commerce events to drive suppression, recovery, and repeat purchase. If you can’t measure it cleanly, you can’t orchestrate it profitably.

Implement Deep Links with Propel

If you’re rolling deep links into cart recovery, winback, or replenishment, the hard part usually isn’t the URL—it’s making sure the app-side identity and event stream are clean enough that Customer.io can actually orchestrate off it. When you want to pressure-test your tracking plan (and avoid the common stitching/suppression pitfalls), book a strategy call and we’ll walk through a practical implementation path based on your app flows.

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