Summarize this documentation using AI
Overview
If you’re running retention out of Customer.io, screen tracking is one of the fastest ways to make your mobile (or web app) behavior usable in real campaigns—especially when purchases are infrequent and you need stronger intent signals than “opened app.” If you want a second set of eyes on your event plan before you ship it, book a strategy call and we’ll pressure-test naming, identity stitching, and the segments you’ll actually run.
In most D2C apps, the highest-leverage screens are the ones closest to revenue: product detail, cart, checkout, subscription management, and order status. When those screen views land cleanly in Customer.io, you can trigger cart recovery, browse abandonment, replenishment nudges, and winbacks without waiting for backend events to catch up.
How It Works
Screen tracking is just event tracking with a consistent schema: every time a user views a screen, your SDK sends an event to Customer.io with the screen name (and any useful context like product SKU or collection). The retention unlock comes from doing it in a way that’s identity-safe: you capture anonymous browsing, then stitch it to the known customer as soon as they log in or submit email/phone.
- App fires a screen event on navigation. Example:
Screen Viewedwithscreen_name=Productandsku=ABC123. - Customer.io stores events on the person profile. These events become segment conditions, campaign triggers, and journey branching logic.
- Identity stitching is the make-or-break. You start with an anonymous profile/device, then call
identify()when you know who the person is (login, signup, email capture). If you don’t do this consistently, “browse intent” and “purchase” end up on different profiles and your recovery flows underperform. - Screen events complement (not replace) server events. Use screens for intent and funnel progress; use backend events for source-of-truth purchase, refund, fulfillment, and subscription state.
Step-by-Step Setup
The goal is to get three things right before you scale campaigns: the SDK is installed correctly, identity is stitched reliably, and screen events have stable naming + the minimum properties needed for segmentation and personalization.
- Install the correct Customer.io SDK for your app.
Use the native iOS/Android SDK or your framework SDK (React Native/Flutter/Expo). Confirm you’re sending data to the right workspace and environment (prod vs staging). - Implement
identify()as soon as you have a stable customer identifier.
Common triggers: login, account creation, email/phone capture at checkout, or “continue with email.”
Operator note: don’t wait for first purchase. If you do, you’ll lose the most valuable screen history (PDP → cart → checkout drop-off). - Decide your screen event naming convention and stick to it.
Pick one: either a single event likeScreen Viewedwithscreen_name, or distinct events likeViewed Product Screen,Viewed Cart Screen. The “single event + screen_name” pattern scales better and keeps segments cleaner. - Track screen views on every meaningful screen.
At minimum for D2C retention: Home, Search Results, Collection, Product Detail, Cart, Checkout, Order Confirmation, Account, Subscription/Manage, Order Status. - Attach the properties you’ll actually use.
For example:- Product screen:
sku,product_name,price,variant,category - Collection screen:
collection_id,collection_name - Cart screen:
cart_value,item_count,skus(array)
- Product screen:
- Validate in Customer.io Activity Logs.
Open a test device, navigate through key screens, confirm events arrive in order, and confirm the same person profile shows both anonymous browsing and post-identify behavior. - Only then build the retention triggers.
If you build campaigns before identity and schema are stable, you’ll end up “fixing data” forever and your reporting will be noisy.
When Should You Use This Feature
Screen tracking is worth the effort when you need intent signals inside the app—especially when backend events are delayed, incomplete, or don’t capture browsing behavior. It’s also the cleanest way to power push and in-app messaging based on what someone is doing right now.
- Browse abandonment (app). If someone views 2–3 product screens but never reaches checkout, you can trigger a push with the last category viewed or a best-seller from that collection.
- Cart recovery with better timing. Cart events are great, but “Viewed Cart Screen” + “Exited app” is often the earliest reliable signal to start a recovery sequence.
- Reactivation based on renewed intent. A lapsed customer opening the app and hitting “Search” or “Collection” is a different moment than a generic winback email. Screen events let you branch messaging based on what they looked at.
- Subscription deflection. If a subscriber hits “Manage Subscription” or “Cancel” screens, you can trigger an in-app offer or a support-assisted flow before they churn.
Real D2C scenario: A skincare brand sees a lot of app traffic but low conversion. They track Screen Viewed with screen_name=Product and sku. When a known customer views the same product screen twice in 24 hours and doesn’t purchase, Customer.io triggers a push: “Still thinking about Vitamin C? Here’s what it pairs best with.” That single screen signal typically outperforms generic “come back” nudges because it’s tied to live intent.
Operational Considerations
Once screen events are flowing, the real work is keeping the data usable for segmentation and orchestration. Most retention programs don’t fail because the SDK can’t send events—they fail because the event taxonomy drifts and identity gets messy across devices.
- Segmentation depends on stable names. If “ProductDetail” becomes “PDP” in a new release, your segments silently shrink. Lock a naming contract between marketing and engineering.
- Identity stitching across devices matters. If a customer browses on iPad and buys on iPhone, you want one person profile. Make sure
identify()uses your canonical customer ID (or email) consistently everywhere. - Anonymous-to-known merge is where recovery is won. Capture screens before login, then merge when the user authenticates. Otherwise, your best browse intent sits on anonymous profiles you can’t message.
- Event volume and noise control. Don’t track every micro-screen (e.g., modal opens) unless you have a retention use for it. Too many events makes segments brittle and QA painful.
- Orchestration with server events. Use screen events to trigger, but use purchase/fulfillment events to exit. Example: start a cart recovery when they hit Cart, but exit the journey the moment the backend sends
Order Completed.
Implementation Checklist
Before you rely on screen tracking for revenue workflows, you want a short checklist that prevents the classic “events are coming in, but campaigns don’t work” situation.
- SDK installed in the correct app targets/environments (staging vs prod)
identify()implemented at login/signup/email capture (not delayed until purchase)- One screen event pattern chosen (recommended:
Screen Viewed+screen_name) - Key screens tracked: Product, Collection, Cart, Checkout, Subscription/Manage
- Properties defined and typed consistently (no mixed strings/numbers)
- Anonymous browsing verified and merged into known profiles after identify
- Customer.io Activity Logs show correct ordering and payloads
- Journeys use backend purchase events as exit conditions
Expert Implementation Tips
These are the small operator moves that usually separate “we have screen tracking” from “screen tracking drives incremental revenue.”
- Track “screen duration” only if you’ll use it. Time-on-screen can be powerful for intent (e.g., PDP dwell > 20s), but it adds complexity and edge cases. Start with view counts and recency.
- Normalize screen names at the source. Create a single enum/constant list in the app so engineers can’t invent new spellings per feature.
- Store the last viewed SKU as a person attribute (optional). Events are great for segments, but a “last_viewed_sku” attribute makes personalization easier in push/in-app without complex lookbacks.
- Use screen events to throttle, not just trigger. If someone is actively browsing (multiple screens in a session), hold off on push. Trigger when they stop (e.g., no screen events for 30–60 minutes) to avoid being annoying.
- QA with real devices and real flows. Emulators won’t catch all lifecycle quirks (backgrounding, deep links, interrupted checkout) that affect event order and campaign timing.
Common Mistakes to Avoid
Most mistakes here aren’t technical—they’re operational. The data “works,” but it doesn’t stay reliable long enough to build compounding retention wins.
- Delaying
identify()until after purchase. You lose the pre-purchase screen trail that powers browse/cart recovery. - Changing screen names without versioning. Segments and triggers quietly degrade after app releases.
- Sending too many properties. Huge payloads slow QA and increase schema drift; keep only what you’ll segment/personalize on.
- Using screen events as purchase confirmation. “Order Confirmation Screen Viewed” is not a reliable purchase event. Always use backend order events to confirm and to exit recovery flows.
- Not handling logged-out states. If users can browse logged out, you need a plan to merge anonymous activity once they authenticate—or you’ll undercount intent and over-message.
Summary
If your app is a meaningful revenue channel, screen tracking is the cleanest way to turn navigation into retention triggers inside Customer.io. Get identity stitching and naming right first, then use screen events for intent-based journeys and backend events for exits and reporting.
Implement Screen Events with Propel
If you’re already on Customer.io, the fastest path is usually: lock an event contract (names + properties), implement identify() at the right moments, and QA anonymous-to-known merges before building journeys. If you want help mapping screens to revenue-driving segments (and avoiding the “we tracked everything but can’t use it” trap), book a strategy call and we’ll walk through your app flows and the exact events your retention program needs.