Summarize this documentation using AI
Overview
If you’re serious about retention on mobile, screen views are the backbone event that makes everything else (browse, cart, checkout, post-purchase) interpretable inside Customer.io. If you want a second set of eyes on your tracking plan before you ship it (so you don’t end up with “HomeScreen” vs “home_screen” chaos), book a strategy call and we’ll pressure-test it like an operator would.
In most D2C apps, the fastest path to better repeat purchase and recovery flows is simply having clean, consistent screen events tied to the right identity. Screen tracking is how you know someone viewed “Product Detail,” started “Checkout,” or hit “Order Confirmation”—without relying on brittle button click events.
How It Works
Screen tracking is an SDK-side pattern: your app sends a “screen” (or “screen view”) event every time a user sees a meaningful view. Customer.io stores those events on the person profile (or on an anonymous profile until you identify), and you use them to trigger campaigns, build segments, and measure drop-off between screens.
- App emits a screen event when a screen becomes visible (e.g.,
ProductDetail,Cart,CheckoutShipping). - Customer.io records the event with a timestamp and any properties you attach (SKU, collection, cart value, etc.).
- Identity stitching happens when you call identify. If the user browses anonymously and later logs in or enters email/SMS, you want those pre-identify screens to merge onto the known profile—otherwise your cart recovery triggers won’t see the earlier intent.
- Segments and triggers key off screen sequences (e.g., “Viewed Cart but didn’t reach Order Confirmation within 60 minutes”).
Practical D2C example: a shopper opens your app from an Instagram ad, views Collection: Spring Drops, taps into a SKU, hits Cart, then bounces on CheckoutPayment. With clean screen events, you can trigger a push within 30 minutes and an email later that night—without guessing which step they abandoned.
Step-by-Step Setup
The goal here is simple: ship screen events that are (1) consistently named, (2) fired at the right moment in the UI lifecycle, and (3) tied to the right person as soon as you have a stable identifier. The mechanics differ slightly by platform, but the operator workflow is the same.
- Install the Customer.io SDK for your platform
Add the iOS/Android/React Native/etc. SDK and confirm you can send a basic event from a dev build. Don’t start naming screens until the pipe is proven. - Define a screen naming convention before engineering starts
Pick one format and enforce it: e.g.,Home,Collection,ProductDetail,Cart,CheckoutShipping,CheckoutPayment,OrderConfirmation.
In practice, this tends to break when teams mix route paths (/products/123) with friendly names (PDP). Choose one and stick to it. - Implement screen tracking at the framework level (not per button)
Fire the screen event when the screen is actually visible (view did appear / activity resumed / navigation focus). Avoid firing on component render if it can re-render multiple times. - Attach the properties you’ll need for retention decisions
For D2C, the usual minimum set:product_id,variant_id,priceonProductDetailcollectionorcategoryonCollectioncart_value,item_countonCartand checkout screenscurrencyif you sell multi-region
- Call identify as soon as you have a stable identifier
As soon as the user logs in or submits email/phone (even if they haven’t purchased), callidentifyso anonymous screen history can merge into the known person. This is what makes “browse → abandon → recover” campaigns work reliably. - Validate event volume and duplicates in Customer.io activity logs
Open a test profile and run a clean path: Home → Collection → PDP → Cart → Checkout. Confirm you see exactly one event per screen visit (unless you intentionally track repeats). - Build one retention trigger as a proof of usefulness
Example: trigger whenCartis viewed butOrderConfirmationis not seen within 45 minutes. If you can’t build this cleanly, your tracking plan needs tightening.
When Should You Use This Feature
Screen tracking is worth the effort when you need reliable intent signals from the app—especially when click events are noisy or inconsistent. It’s also the easiest way to model funnel drop-off without building a full analytics stack first.
- Cart recovery in-app: trigger push/in-app when someone hits
CartorCheckoutPaymentand disappears. - Browse-to-buy follow-ups: if a user views
ProductDetailfor the same SKU multiple times across days, that’s a strong “nudge me” signal for email/SMS. - Repeat purchase timing: post-purchase journeys can branch based on whether someone returns to
CollectionorProductDetailwithin X days (they’re browsing again) vs never returns (they need a reactivation angle). - Reactivation based on “came back but didn’t engage”: users who open the app (Home) but don’t reach PDP within a session are different from users who never open at all.
Operational Considerations
Most retention issues with screen tracking aren’t “SDK bugs”—they’re orchestration problems: inconsistent names, poor identity stitching, and events that don’t map cleanly to segments and journeys.
- Segmentation depends on stable naming: if you rename
ProductDetailtoPDPlater, your historical segments and triggers will silently degrade. Plan versioning if you must change names. - Data flow and timing matter: if screen events fire before the SDK is initialized (cold start) or before consent is granted (where applicable), you’ll see gaps. Decide what “allowed to track” means and implement it consistently.
- Identity stitching is where retention wins or loses: if a user browses anonymously and you only identify them after purchase, you lose all pre-purchase intent for recovery and product discovery nudges.
- Orchestration reality: don’t trigger on every screen: use screen events as guardrails and state, not as a reason to spam. In most retention programs, we’ve seen better results when you trigger on high-intent screens (Cart/Checkout/PDP repeats) and use frequency controls aggressively.
- Cross-device expectations: screen events are device-side. If a customer browses on mobile and buys on desktop, you’ll only connect that story if identity is consistent (same email/phone/customer_id) across sources.
Implementation Checklist
Before you call screen tracking “done,” make sure it’s retention-ready—not just “events are coming in.” This checklist is what keeps your cart recovery and reactivation logic from getting flaky later.
- SDK installed and sending events in production builds
- Single naming convention agreed and documented
- Screen events fire on true screen visibility (not render)
- Key commerce properties included (SKU, cart value, item count)
identifycalled immediately after login or email/phone capture- Anonymous-to-known merging verified with a real test (browse anonymously → identify → confirm events appear on known profile)
- At least one journey/trigger built off screen sequences (Cart → no OrderConfirmation)
- Frequency controls set for screen-triggered messaging
Expert Implementation Tips
Once the basics are in, small choices in how you track screens make a big difference in how usable the data is for retention.
- Track “screen context,” not just screen name:
ProductDetailwithoutproduct_idis basically useless for personalized recovery or browse nudges. - Use “entered checkout” screens as your abandonment milestones: breaking checkout into
CheckoutShipping,CheckoutPayment,CheckoutReviewgives you sharper recovery angles (shipping friction vs payment friction). - Debounce noisy screens: some navigation stacks will fire focus events multiple times. Add simple guards so you don’t send 5 “Cart viewed” events in 10 seconds.
- Pair screen tracking with one or two high-signal custom events: e.g.,
AddToCartandPurchase. Screens show intent; custom events confirm action. - Build a “session start” rule using screens: if you don’t have explicit session events, treat the first screen in X minutes as a session start for segmentation like “opened app but didn’t browse.”
Common Mistakes to Avoid
These are the mistakes that quietly wreck retention performance because the journeys look right, but the underlying signals are unreliable.
- Tracking route paths as screen names (e.g.,
/product/123): you’ll explode your event cardinality and make segments painful. - Only identifying after purchase: you’ll miss the entire pre-purchase funnel for cart recovery and browse retargeting.
- Firing screen events on render: re-renders create duplicates, which inflate intent and cause over-triggering.
- Inconsistent casing/spacing:
Checkout,checkout,Check Outbecome three different behaviors in segmentation. - No properties on commerce screens: you’ll end up sending generic “Come back” messages instead of product- or cart-specific recovery.
- Triggering messages on low-intent screens: “Home viewed” is not a reason to message someone. Use it for segmentation, not interruption.
Summary
If your app retention program feels like it’s running on guesses, screen tracking is usually the fastest way to get clean intent signals into Customer.io.
Ship consistent screen names, stitch identity early, and then build one or two screen-sequence triggers (cart/checkout drop-off) to prove impact before you expand.
Implement Screen Events with Propel
When teams implement screen tracking, the hard part isn’t the SDK call—it’s deciding what to name, when to fire, and how to stitch anonymous browsing into known customers so your recovery flows don’t miss the moment. If you’re rolling this into Customer.io and want an operator-grade tracking plan (plus validation steps your engineers can actually follow), book a strategy call and we’ll map screens → events → segments → journeys in a way that holds up in production.