Summarize this documentation using AI
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
Cartis viewed, branch if they later hitOrderConfirmation, 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.
- 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).
- 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.
- Pick a stable naming scheme like
- 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).
- Implement
identifyearly to stitch anonymous to known behavior- Call
identifyimmediately 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).
- Call
- 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.
- 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
ProductDetail3+ times in 7 days”) to separate casual browsing from intent.
- Start with 3–5 screens tied to revenue:
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
CartorCheckoutPaymentbut never reachesOrderConfirmationwithin X hours. - Product discovery → repeat purchase: if an existing customer repeatedly views
ProductDetailfor 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
CollectionorSearchResultsbut didn’t reachCart. - On-app merchandising and upsell: detect visits to
Account→Subscriptionsscreens 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
identifyas 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.
- Call
- Orchestration between channels
- Use screen events as suppression signals across push/email/SMS (e.g., if they hit
Cartagain, 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.
- Use screen events as suppression signals across push/email/SMS (e.g., if they hit
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)
identifyimplemented immediately post-authentication- Anonymous → identified merge QA’d end-to-end
- Key screens include properties:
product_id,variant_id,price,currency,collection_idwhere 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
ProductDetailview is weak. “ViewedProductDetail2+ times AND viewedReviewsscreen” is a real buyer signal. - Use properties to avoid journey sprawl: one journey triggered by
ProductDetailwithproduct_idbranching beats 50 separate journeys. - Normalize screen names across platforms: iOS calling it
PDPand Android calling itProductDetailwill quietly break segments. - Separate “navigation” from “commerce” events: keep screens for location, and use dedicated events for actions like
Added to CartorStarted Checkout. Screens tell you where; action events tell you what. - Build suppressions from downstream screens: the cleanest way to stop cart recovery is
OrderConfirmationscreen (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
identifyat 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
productIdsometimes andproduct_idother 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.