Summarize this documentation using AI
Overview
If you’re using Customer.io for retention, screen tracking is one of the fastest ways to tighten your triggers—because it tells you what customers actually looked at in your app, not just what they eventually purchased. If you want a second set of eyes on your event plan (and avoid the usual identity + naming pitfalls), book a strategy call and we’ll pressure-test it like we would for a live D2C program.
Operationally, “screen events” become your backbone for browse abandonment, cart recovery, and post-purchase cross-sell—especially when purchase volume is lumpy and you need more intent signals than just order_completed.
How It Works
Screen tracking is simple in concept: every time a user lands on a meaningful view in your app (Product Detail, Cart, Checkout, Order Tracking), your SDK sends an event to Customer.io. The part that matters in practice is identity: you want those screen events to attach to the right person profile, even if the user started anonymous and only logged in later.
- The SDK emits a “screen view” event (often named something like
screenorScreen Viewed) with properties likescreen_name,product_id,collection,cart_value, etc. - Before login, events are anonymous and typically keyed to an anonymous ID generated by the SDK/device.
- On login (or when you have a stable identifier), you call identify so Customer.io can stitch future activity to a known customer profile.
- If you support merge/stitch behavior (varies by SDK + how you implement), you can associate pre-login browsing with the newly identified user—this is where browse/cart recovery gets much stronger.
- Customer.io then uses those events for segmentation and orchestration: trigger a campaign when
screen_name = Cartand no purchase happens within X minutes/hours; suppress if they hitCheckout; branch messaging by category viewed.
Real D2C scenario: a customer opens your app, views 3 PDPs for “Vitamin C Serum,” hits Cart, then bounces. If you only track add_to_cart, you’ll miss the nuance. With screen tracking, you can (a) confirm they actually saw Cart, (b) know which SKU they lingered on, and (c) trigger a push/SMS/email sequence that references the exact product category—without waiting for another cart event.
Step-by-Step Setup
The goal here isn’t “track everything.” It’s to track a small set of screens that map cleanly to retention moments, and make sure identity stitching is reliable so those events land on the right profile.
- Install the correct Customer.io SDK for your app stack
Confirm you’re using the supported SDK (iOS/Android/React Native/Flutter/etc.) and that events are flowing from dev builds before you touch production. - Define your screen taxonomy (keep it opinionated)
Pick 8–15 screens max that matter for retention:Home,Search,Collection,Product Detail,Cart,Checkout,Order Confirmation,Order Tracking,Subscription,Account. - Implement screen tracking calls on screen render (not on tap)
Fire the event when the screen is actually displayed. If you fire on navigation intent, you’ll inflate counts and break “drop-off” logic. - Attach the properties you’ll actually segment on
For PDP and Collection screens, includeproduct_id,sku,category,price. For Cart/Checkout, includecart_value,item_count, and ideally an array ofitem_ids(or a summarized string if you need to keep payloads light). - Call identify as soon as you have a stable user ID
On login/account creation, callidentify(userId, attributes)(naming varies by SDK). Pass durable identifiers (your internal customer ID, email/phone if appropriate) and key attributes likefirst_order_date,vip_tier,subscription_status. - Handle anonymous-to-known stitching intentionally
In most retention programs, this is where performance quietly dies. Validate that pre-login screen events either (a) merge into the identified profile or (b) you accept they won’t—and then adjust your browse/cart logic accordingly. - QA in Customer.io Activity Logs
Use a test device, run through a real flow (PDP → Cart → background app), and confirm event names, properties, timestamps, and profile association look right. - Build one trigger first: Cart Screen Viewed → No Purchase
Don’t boil the ocean. Stand up a single campaign using the screen event as the entry condition, then expand once you trust the data.
When Should You Use This Feature
Screen tracking is worth the effort when you need more “intent resolution” than your commerce events provide—especially in apps where customers browse a lot but purchase less frequently.
- Cart recovery with higher confidence: trigger when someone actually sees the Cart screen (not just adds an item) and doesn’t reach Checkout within 30–90 minutes.
- Browse abandonment for product discovery: if a customer views 2–3 PDPs in a category (e.g., “hydration”), follow up with social proof, a quiz, or a bundle—not a generic “come back.”
- Post-purchase cross-sell: if a customer repeatedly visits
Order TrackingorAccountshortly after delivery, that’s often a window for replenishment education or accessory add-ons. - Reactivation based on app intent: “Viewed Home screen twice this week but no PDP views” is a very different problem than “Viewed PDPs but didn’t cart.” Screen events let you separate those.
Operational Considerations
Once screen events are live, the main work becomes keeping the data usable for segmentation and orchestration. Most teams don’t fail on sending events—they fail on consistency and identity.
- Segmentation depends on stable naming: if one platform sends
ProductDetailand another sendsPDP, your segments will undercount and your triggers will misfire. - Data flow latency matters for “hot” recovery: cart/checkout recovery sequences often need tight timing. Validate how quickly events appear in Customer.io and design delays accordingly.
- Identity stitching determines whether browse/cart recovery works for logged-out users: if most shoppers browse without logging in, you either need (a) a way to identify earlier (email capture, magic link, etc.) or (b) accept that some recovery will be limited to push (device-based) until they authenticate.
- Orchestration reality: screen events are noisy if you track every screen. Keep your “trigger screens” small, and use other screens mainly as filters/suppressions (e.g., suppress cart recovery if
Checkoutscreen was viewed).
Implementation Checklist
Before you build campaigns on top of screen tracking, lock the foundations. This checklist is what we use to avoid the classic “events exist but can’t be used” situation.
- SDK installed and sending events in a test environment
- Screen naming convention documented (single source of truth across iOS/Android)
- Key screens implemented: PDP, Cart, Checkout, Order Confirmation, Order Tracking
- Required properties defined per screen (IDs, category, cart_value, item_count)
identifyimplemented on login/signup with a stable customer ID- Anonymous-to-known merge behavior validated (or explicitly ruled out)
- QA completed in Customer.io Activity Logs for at least 3 end-to-end flows
- First campaign built using one screen trigger + one suppression screen
Expert Implementation Tips
Screen tracking is one of those things that looks “done” early and then quietly degrades as the app changes. A few operator moves keep it dependable.
- Track “screen viewed” on render + debounce repeats: if a screen re-renders often (common in React Native), add a debounce so you don’t send 10 views in 3 seconds.
- Use screen events as filters more than triggers: in practice, “Entered Cart Recovery” should be triggered by a high-intent event (Cart screen viewed), but your branching should use recent PDP/Collection screens to personalize.
- Prefer IDs over names in properties: send
product_id/skuand resolve names server-side or in your catalog system. Names change; IDs don’t. - Build a ‘last seen screen’ attribute only if you’ll maintain it: it’s tempting to store
last_screenon the profile, but it becomes misleading if you don’t update it consistently across platforms.
Common Mistakes to Avoid
The fastest way to waste screen tracking is to ship it without a plan for identity and consistency. These are the issues we see most when teams try to build recovery flows on top of messy app telemetry.
- Firing screen events before identify and never stitching: you end up with great intent data that can’t be used for email/SMS because it lives on anonymous profiles.
- Different event/screen names per platform: you’ll build segments that only catch iOS or only catch Android and wonder why volumes look wrong.
- No suppression logic: cart recovery that still sends after someone viewed Checkout (or purchased) is usually a timing + suppression failure, not a copy problem.
- Over-tracking low-value screens: settings, legal, help center—these inflate noise and make it harder to find the signals you actually want.
- Missing commerce context on screen events: “Cart screen viewed” without
cart_valueoritem_countforces you into one-size-fits-all messaging.
Summary
Screen tracking is the retention operator’s shortcut to intent: you see what customers considered, where they dropped, and what to suppress. Get naming and identity right first, then build one high-confidence recovery trigger and expand from there.
Implement Screen Events with Propel
If you’re rolling out screen events and want them to immediately translate into better cart recovery and repeat purchase flows inside Customer.io, treat the tracking plan like campaign infrastructure—not an engineering task you “set and forget.” If you want, book a strategy call and we’ll map your key screens to triggers/suppressions, sanity-check identity stitching, and make sure your event payloads support the segments you’ll actually run.