Screen tracking (SDK) for retention: turning app screens into revenue signals

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 Customer.io for retention, screen tracking is one of the fastest ways to stop guessing what customers did in your app and start triggering campaigns from real intent. If you want a second set of eyes on your tracking plan before you ship it (or you’re cleaning up a messy implementation), book a strategy call and we’ll pressure-test the event map against your retention goals.

In practice, screen events become the “glue” between anonymous browsing and known customer behavior—especially for mobile apps where web-style pageviews don’t exist. When your screen tracking is clean, cart recovery gets more precise, product discovery flows feel smarter, and reactivation stops being a generic blast.

How It Works

Screen tracking is basically a standardized event stream that tells Customer.io which screen a user viewed and when. The retention value comes from consistency: the same screen name, the same properties, and the same identity rules every time—so segments and triggers don’t drift over time.

  • SDK emits a “screen” event whenever a user lands on a view (e.g., ProductDetail, Cart, Checkout).
  • Customer.io stores it as activity on the person profile (or on an anonymous profile if you haven’t identified yet).
  • Identity stitching happens at identify-time: once you call identify (email/customer_id), anonymous screen history can be merged into the known profile—so your “viewed cart” behavior doesn’t disappear just because they logged in later.
  • Journeys use screen events as triggers/conditions: enter a cart recovery flow when Cart is viewed, branch if they later hit OrderConfirmation, suppress if they already purchased.

The part that tends to break in most retention programs: teams track screens, but they don’t standardize names/properties or they identify too late. That creates duplicate profiles and unreliable segments (worst case: you spam purchasers because the purchase happened on a different profile).

Step-by-Step Setup

You’ll get the best results when you treat screen tracking like a product analytics implementation: define the taxonomy first, then wire the SDK, then QA the identity merge paths. Don’t start by “tracking everything”—start by tracking the screens that map to money.

  1. Install the Customer.io SDK in your app
    • Use the appropriate SDK for your stack (iOS/Android/React Native/Flutter/web).
    • Confirm the SDK is initialized on app start and is allowed to send events in your environments (dev/stage/prod).
  2. Decide your screen naming conventions (before writing code)
    • Pick a stable naming scheme like ProductDetail, Collection, Cart, CheckoutShipping, CheckoutPayment, OrderConfirmation.
    • Avoid dynamic names like ProductDetail_12345—keep IDs in properties instead.
  3. Implement screen tracking on navigation events
    • Fire a screen event when the screen becomes visible (not when it’s constructed in memory).
    • Send useful properties alongside the screen name (examples below).
  4. Implement identify early to stitch anonymous to known behavior
    • Call identify immediately after login/signup, and again after you refresh customer identity (e.g., email verified, account merged).
    • Include your durable identifier (typically customer_id) and key attributes you’ll segment on (e.g., first_order_date, vip_tier).
  5. QA the event stream in Customer.io
    • Use Activity Logs / person profile activity to confirm screen names, timestamps, and properties are arriving as expected.
    • Test anonymous → identified merge: open app anonymously, view a product + cart, then log in and confirm the screen history appears on the identified profile.
  6. Build segments and triggers off the screens that matter
    • Start with 3–5 screens tied to revenue: ProductDetail, Cart, Checkout, OrderConfirmation, Account.
    • Add frequency logic (e.g., “viewed ProductDetail 3+ times in 7 days”) to separate casual browsing from intent.

When Should You Use This Feature

Screen tracking is worth the effort when you need reliable, app-native intent signals—especially when web tracking doesn’t translate cleanly to mobile. It’s most impactful when you’re orchestrating multi-step journeys and need to know where a customer dropped off.

  • Cart recovery in an app: trigger when someone hits Cart or CheckoutPayment but never reaches OrderConfirmation within X hours.
  • Product discovery → repeat purchase: if an existing customer repeatedly views ProductDetail for a replenishable SKU but doesn’t add to cart, follow up with a push/email featuring that SKU and compatible add-ons.
  • Reactivation based on “almost intent”: target lapsed buyers who returned to Collection or SearchResults but didn’t reach Cart.
  • On-app merchandising and upsell: detect visits to AccountSubscriptions screens to trigger save offers or upgrade nudges.

Realistic D2C scenario: A skincare brand sees returning customers open the app, view ProductDetail for “Vitamin C Serum,” then bounce. With screen tracking, you can trigger a 2-step flow: (1) a push 30 minutes later with a quick benefit reminder and social proof, (2) an email the next morning bundling the serum with a moisturizer—suppressed if they hit Cart or purchase in the meantime.

Operational Considerations

Screen tracking is only useful if your data stays segmentable and your journeys don’t fight each other. The main operational work is keeping identity clean, properties consistent, and orchestration rules explicit.

  • Segmentation hygiene
    • Keep screen names stable and human-readable; treat renames as breaking changes that require updating segments and journeys.
    • Store IDs as properties (e.g., product_id, collection_id) so you can segment without exploding your screen taxonomy.
  • Data flow + timing
    • Mobile networks are messy—events can arrive late or out of order. Use time windows and “wait until” logic instead of assuming immediate delivery.
    • If you rely on “last visited” style fields, confirm whether you’re using Customer.io’s derived fields or your own event-based logic—mixing both tends to create contradictions.
  • Identity stitching realities
    • Call identify as soon as you have a durable identifier. Waiting until checkout is how you end up with anonymous cart abandoners you can’t message.
    • Have a plan for duplicate profiles (multiple emails, Apple private relay, etc.). Decide which identifier is source-of-truth.
  • Orchestration between channels
    • Use screen events as suppression signals across push/email/SMS (e.g., if they hit Cart again, pause the “browse abandon” email).
    • Set frequency caps around high-volume screens (home, collection) so you don’t trigger a journey every time someone opens the app.

Implementation Checklist

Before you call this “done,” you want confidence that the events are consistent, identities merge correctly, and journeys won’t misfire. This checklist is what we run through before scaling spend or traffic.

  • SDK installed and initialized in prod builds
  • Screen taxonomy documented (names + required properties)
  • Screen events fire on actual screen visibility (not pre-render)
  • identify implemented immediately post-authentication
  • Anonymous → identified merge QA’d end-to-end
  • Key screens include properties: product_id, variant_id, price, currency, collection_id where relevant
  • Segments built for 3–5 revenue screens and validated against real users
  • At least one journey uses screen events with suppression/exit rules
  • Frequency controls added to prevent “open app = enter journey” loops

Expert Implementation Tips

Most teams get screen tracking “working” and then wonder why performance is flat. The lift usually comes from tightening the semantics and using screens as intent qualifiers—not just triggers.

  • Track intent depth, not just presence: a single ProductDetail view is weak. “Viewed ProductDetail 2+ times AND viewed Reviews screen” is a real buyer signal.
  • Use properties to avoid journey sprawl: one journey triggered by ProductDetail with product_id branching beats 50 separate journeys.
  • Normalize screen names across platforms: iOS calling it PDP and Android calling it ProductDetail will quietly break segments.
  • Separate “navigation” from “commerce” events: keep screens for location, and use dedicated events for actions like Added to Cart or Started Checkout. Screens tell you where; action events tell you what.
  • Build suppressions from downstream screens: the cleanest way to stop cart recovery is OrderConfirmation screen (plus purchase event), not a brittle “placed_order=true” attribute that updates late.

Common Mistakes to Avoid

These are the mistakes that create noisy segments, duplicate users, and journeys that look fine in QA but fail at scale.

  • Identifying too late: if you only call identify at checkout, you lose the ability to message most abandoners and you fragment behavior across profiles.
  • Dynamic screen names: embedding IDs in the screen name makes segmentation painful and forces constant maintenance.
  • Tracking every minor view: firing screens for modals, tooltips, or components floods the event stream and makes “real” screens harder to use.
  • No suppression logic: triggering browse/cart flows without exits (purchase, return to cart, app open) leads to over-messaging and higher opt-outs.
  • Inconsistent properties: sending productId sometimes and product_id other times silently breaks personalization and filters.
  • Assuming event order: mobile batching can reorder events; design journeys with waits and lookback windows.

Summary

If your app is a major revenue channel, screen tracking is the foundation for reliable cart recovery, smarter browse follow-ups, and cleaner reactivation targeting. Get the naming and identity stitching right first, then build journeys that treat screens as intent signals—not noise.

Implement Screen Events with Propel

If you already run Customer.io, the fastest path is usually: define the screen taxonomy around revenue moments, implement identify early, then QA anonymous-to-known stitching before you scale campaigns. If you want help mapping your app screens to retention journeys (and avoiding the duplicate-profile trap), book a strategy call—we’ll walk through your current instrumentation and the exact segments/triggers it should power.

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