Summarize this documentation using AI
Overview
If you’re serious about app retention, you need reliable screen-level intent signals—not just purchases and add-to-carts. Customer.io screen tracking (via the mobile/web SDKs) gives you a clean stream of screen views you can segment on and trigger from, and if you want a second set of eyes on the tracking plan before you ship it, you can book a strategy call.
In most retention programs, screen events become the difference between “generic winback” and messaging that feels like it’s responding to what the customer just did—like viewing the cart, bouncing on shipping, or looping product detail pages without buying.
How It Works
Screen tracking is just event tracking with a consistent schema. The SDK sends a “screen view” style event every time a user lands on a screen (e.g., ProductDetail, Cart, CheckoutShipping). Customer.io stores those events on the person profile (or an anonymous profile), and you then use them to build segments and trigger campaigns.
- Event creation: Your app fires a screen event when a view is presented (mobile) or when a route changes (web SPA). Name the event consistently (e.g.,
screen_view) and pass the screen name as a property (e.g.,nameorscreen_name). - Identity stitching: If someone browses anonymously and later logs in (or you capture email/phone), you call
identify. That’s what ties pre-login screen history to the known customer profile so your cart recovery/reactivation logic doesn’t lose context. - Segmentation + orchestration: You build segments like “Viewed Cart in last 2 hours AND no Order Placed” or “Viewed ProductDetail 3+ times in 7 days AND never purchased,” then trigger push/email/in-app from those audiences.
Step-by-Step Setup
The setup is straightforward, but the operational win comes from being disciplined about naming and identity. Treat screen tracking like instrumentation—not analytics garnish—because you’ll base real revenue flows on it.
- Install the correct Customer.io SDK for your app.
Use the native SDK (iOS/Android) or your wrapper (React Native/Flutter/Expo) so screen events originate client-side and include device context. - Initialize the SDK as early as possible in app launch.
Do it before you render your first screen so you don’t miss the first meaningful view (often Home, PDP, or Cart). - Decide your screen event schema.
Pick one event name and stick to it (common pattern:screen_view). Standardize properties:screen_name(required)category(optional:browse,checkout,account)product_id,variant_id(only on PDP)cart_value,items_count(only on Cart)
- Implement screen tracking in your navigation layer.
Fire the event on:- iOS: when a view controller appears
- Android: on activity/fragment resume
- React Native / Flutter: on route change (central observer)
- Web SPA: on router transitions
- Implement
identifyat the moment you truly know the user.
Callidentifyafter login, account creation, or when you collect email/phone at checkout. Pass stable identifiers (email, customer_id) and key attributes (first_order_date, loyalty_tier, etc.). This is where anonymous browsing becomes usable retention context. - Validate in Customer.io Activity Logs.
Confirm:- Events arrive with the expected
screen_name - Anonymous events merge into the identified profile after
identify - No duplicate spam (common when tracking fires on both render + focus)
- Events arrive with the expected
- Build one retention segment and one trigger to prove the pipe.
Example: “Viewed Cart in last 60 minutes AND no Purchase event in last 60 minutes” → trigger a push reminder.
When Should You Use This Feature
Screen tracking matters when user intent shows up in navigation patterns before it shows up in conversion events. If you’re only tracking “add_to_cart” and “purchase,” you’re blind to the moments where people hesitate—and that’s where retention revenue lives.
- Cart recovery in-app behavior: Trigger when someone hits
CartorCheckoutShippingand drops. This tends to outperform generic abandon flows because it’s tied to the exact step they stalled on. - Product discovery → repeat purchase: If a customer repeatedly views a replenishable SKU’s PDP (e.g., supplements, skincare) but doesn’t buy, that’s a strong “almost ready” signal for a replenishment nudge.
- Reactivation based on category interest: “Viewed Running category screens 3+ times in 14 days AND no purchase in 60 days” → send a targeted comeback offer or new arrivals push.
- On-site/app personalization support: Use last viewed screen/category to tailor in-app messages or follow-up email content blocks.
Operational Considerations
In practice, screen tracking breaks less from code and more from messy data and unclear ownership. You want screen events that are stable enough to segment on, and you want identity rules that keep profiles from fragmenting.
- Segmentation hygiene: Treat screen names like a contract. If your team renames
ProductDetailtoPDPmid-sprint, your segments silently stop matching. - Data flow latency: Mobile events can arrive late when devices are offline. For “within 15 minutes” recovery triggers, build in a buffer and don’t assume real-time perfection.
- Orchestration with other signals: Screen views are intent; purchases are truth. Always pair “viewed checkout” with “no purchase” and often with “has push enabled” / “email subscribed” to avoid dead-end sends.
- Identity stitching realities: If you don’t call
identifyconsistently (login, checkout, email capture), you’ll end up messaging the wrong profile or missing the person entirely. Decide where identity is set and enforce it. - Event volume + cost: Screen events can be high volume. Track only meaningful screens (PDP, Cart, Checkout steps, Category, Search) rather than every modal and settings page.
Implementation Checklist
Before you call screen tracking “done,” you want confidence that it’s usable for segmentation and not going to drift as the app evolves.
- SDK installed and initialized early in app lifecycle
- One standardized event name for screen views (e.g.,
screen_view) - Canonical
screen_namelist documented and shared with product/engineering identifycalled reliably on login/signup/checkout identity capture- Anonymous-to-known merge verified in Activity Logs
- Duplicate firing prevented (no double events per screen impression)
- At least one segment and one campaign trigger running off screen events
- QA plan for future releases (new screens, renamed routes)
Expert Implementation Tips
Most teams get better results when they treat screens as “funnels” rather than “pages.” The goal isn’t to collect more events—it’s to detect hesitation and intent early enough to intervene.
- Track checkout steps separately. Split
CheckoutShipping,CheckoutPayment,CheckoutReview. Then your recovery message can address the real blocker (shipping surprise vs payment failure vs decision anxiety). - Add lightweight context properties. For Cart:
cart_value,items_count. For PDP:product_id,price,category. These make segments sharper without needing a full catalog sync. - Use frequency as intent. “Viewed PDP 3+ times in 72 hours” is often a better trigger than “Viewed PDP once.” Single views are noisy; repeats are intent.
- Put identity calls where users actually authenticate. If you only identify on account creation but most customers buy as guest, your screen history won’t connect to purchase behavior.
Common Mistakes to Avoid
These are the issues that quietly kill performance: segments don’t match, campaigns misfire, and nobody trusts the data enough to build on it.
- Tracking every screen including noise. Settings screens and tiny modals inflate volume and make segments harder to reason about.
- Inconsistent naming. Mixing
Cart,cart, andShoppingCartforces you into brittle “OR” conditions and breaks reporting. - Double-firing events. Common on React Native/Flutter when you track on both route change and screen focus. Your “3 views” segment becomes meaningless.
- Forgetting identity stitching. Without a solid
identifystrategy, anonymous browsing never becomes actionable for email/SMS, and your recovery programs underperform. - Triggering without suppression logic. If you trigger off
Cartviews but don’t exclude recent purchasers, you’ll annoy customers who already converted on another device.
Summary
If your app retention is mostly “purchase-based,” screen tracking is the fastest way to add intent signals you can actually operationalize. Implement it with a tight schema and reliable identity stitching, then build one cart/checkout recovery flow to prove lift before expanding.
Implement Screen Events with Propel
If you’re rolling out screen tracking across iOS/Android (or a cross-platform stack) and want the events to map cleanly into segments and journeys in Customer.io, it helps to pressure-test the schema and identity plan before it’s baked into the app. If that’s useful, book a strategy call—we’ll sanity-check the event contract, stitching points, and the first few revenue flows (cart recovery, repeat purchase nudges, and reactivation) so the data you ship is data you can monetize.