Summarize this documentation using AI
Overview
If you’re running retention in Customer.io, mobile app sources are where a lot of your “truth” should enter the platform—app events, device tokens, and identity signals that make push and in-app orchestration dependable. If you want a second set of eyes on your data model before you scale journeys, book a strategy call and we’ll pressure-test the tracking plan against the segments and triggers you actually need.
In practice, mobile is where programs tend to break: the event fires, but it’s tied to the wrong person; the device token exists, but it’s on a duplicate profile; the “Add to Cart” event is missing the SKU, so your cart recovery logic can’t personalize.
How It Works
Mobile app sources are the ingestion path that connects your app SDK data to Customer.io’s person profiles. The goal isn’t “get data in”—it’s to make sure the data lands on the right profile, with the right structure, so segments stay accurate and triggers fire exactly once per real customer action.
- Events enter Customer.io from the mobile SDK (iOS/Android/React Native/etc.) and show up as activity on a person profile. These events are what you’ll use to trigger cart recovery, browse follow-ups, replenishment, and winback journeys.
- Identity resolution happens through identify calls and profile identifiers. Before login, you’ll often have anonymous activity; after login, you need a clean handoff so pre-login events merge into the known customer profile. If this step is sloppy, you’ll see duplicate profiles and “ghost” users entering campaigns.
- Device data is mapped to the person (device token + platform + app info). This is what makes push deliverable. If device registration doesn’t attach to the same profile you message, Customer.io can’t reach them—even if the segment says they qualify.
- Attributes and event properties become segmentation inputs. Mobile sources typically send key attributes (e.g., app_version, push_opt_in, locale) and event properties (e.g., product_id, category, cart_value). Your segmentation accuracy depends on consistent naming and stable types.
- Trigger reliability depends on dedupe strategy. Mobile apps can fire the same event multiple times (background refresh, retries, double-taps). If you don’t include an idempotency key (like an event_id) or guardrails in your journey logic, you’ll over-message.
Real D2C scenario: A customer adds a product to cart in the app, gets distracted, and closes the app. You want a push 30 minutes later: “Your cart’s waiting—free shipping ends tonight.” That only works if (1) the cart_updated/add_to_cart event includes the items and value, (2) the event is tied to the logged-in customer (or merges cleanly after login), and (3) the device token is attached to that same person profile.
Step-by-Step Setup
Before you touch journeys, get the plumbing right. A clean mobile source setup is mostly about agreeing on a tracking contract (names, properties, IDs) and validating that Customer.io is resolving identity the way your retention logic assumes.
- Pick your identity strategy up front
- Decide what your canonical customer identifier is (typically your internal user_id/customer_id).
- Decide how you’ll handle pre-login activity (anonymous browsing/cart building) and when you’ll merge it into a known profile.
- Implement identify at the right moment
- Call identify immediately after authentication (login/signup) with your canonical identifier.
- Send key person attributes you’ll actually segment on (e.g.,
emailif you have it,push_opt_in,country,customer_tier).
- Register devices consistently
- Ensure device token registration is happening and is associated with the identified person.
- Track push permission state (opt-in/opt-out) as an attribute so you can segment and suppress correctly.
- Define your retention-critical event taxonomy
- Cart:
product_viewed,add_to_cart,cart_updated,checkout_started,purchase. - Repeat purchase:
purchasewith order_id, items, and timestamps; optionallysubscription_createdif relevant. - Reactivation:
app_opened(orsession_started) plus meaningful engagement events (search, view, add_to_cart).
- Cart:
- Standardize event properties for personalization and filters
- For product events:
product_id,sku,name,category,price. - For cart events:
cart_id,items[],cart_value,currency. - For purchase:
order_id,revenue,items[],discount,shipping.
- For product events:
- Validate in Customer.io before building campaigns
- Confirm events appear on the correct person profile (not a duplicate).
- Confirm device(s) show up under the same profile you’ll message.
- Spot-check property types (numbers as numbers, timestamps as timestamps) so segment conditions behave.
When Should You Use This Feature
Mobile app sources matter anytime your retention program depends on app behavior or push delivery. If your app is a primary shopping surface, treating mobile as a first-class data source is usually the difference between “nice journeys” and journeys that actually convert.
- App-first cart recovery: Trigger push/in-app when
checkout_startedhappens withoutpurchase, with cart contents for dynamic creative. - Browse-to-buy follow-ups: Use
product_viewed+ category affinities to drive product discovery and second-session conversion. - Repeat purchase timing: Use
purchaseevents and item-level properties to drive replenishment or cross-sell based on what they actually bought. - Reactivation based on true inactivity: Segment on last meaningful app event (not just “app installed”) so winback targets real lapsers.
- Channel eligibility control: Use push opt-in state + device presence to avoid sending “push-only” journeys to people who can’t receive them.
Operational Considerations
Once mobile data is flowing, the operational work is keeping segmentation stable and triggers trustworthy as the app evolves. Most retention issues show up as “why did this person enter twice?” or “why is this segment empty?”—both are usually data-shape problems upstream.
- Segmentation integrity
- Build segments on durable fields (e.g.,
customer_id,push_opt_in,last_purchase_at) rather than brittle app-version-specific properties. - Prefer “meaningful engagement” events for activity-based segments;
app_openedalone can be noisy due to background opens.
- Build segments on durable fields (e.g.,
- Identity resolution and duplicates
- Watch for duplicate profiles caused by inconsistent identifiers (email sometimes, user_id other times).
- Make sure anonymous-to-known merging is happening; otherwise cart recovery will target the anonymous profile with no device/email.
- Event volume and orchestration realities
- High-frequency events (scrolls, screen views) can drown signal and complicate debugging—keep your retention triggers tied to intent events.
- Mobile retry behavior can create duplicate events; protect journeys with event-level IDs or “has not received in last X hours” guardrails.
- Data mapping governance
- Lock naming conventions early. Changing
add_to_carttoadded_to_cartlater will silently break triggers and segments. - Version your tracking plan and treat it like an API contract between product/engineering and retention.
- Lock naming conventions early. Changing
Implementation Checklist
If you want mobile-driven retention to run without constant firefighting, treat this checklist as your “go/no-go” before launching push-heavy journeys.
- Canonical identifier chosen (e.g., internal
customer_id) and used consistently - Identify called immediately after login/signup; key attributes mapped and validated
- Anonymous activity merges into known profiles after authentication
- Device tokens register and attach to the same person profile you message
- Push permission state tracked and usable in segments
- Retention-critical events implemented with stable names
- Event properties include IDs and values needed for personalization (product/cart/order)
- Basic dedupe strategy in place (event_id or journey guardrails)
- Spot-check: a real user’s cart event appears on the correct profile with a deliverable device
Expert Implementation Tips
These are the operator moves that keep mobile data clean as you scale campaigns, add new app features, and iterate quickly without breaking journeys.
- Design events for decisions, not analytics: If a journey needs to know “cart has items and value,” send that explicitly. Don’t rely on reconstructing state from 12 micro-events.
- Use a single “cart_updated” event as the trigger and include the full cart payload. In most retention programs, this reduces edge cases where add/remove events arrive out of order.
- Keep item arrays consistent: Same keys, same types, always. A single malformed
items[]payload will break Liquid rendering and personalization at the worst time. - Segment on eligibility before intent: Filter first by “has push token + opted in,” then by “abandoned checkout.” You’ll get cleaner reporting and fewer false negatives.
- Create a QA segment for internal testers: Tag employees/test accounts and exclude them globally, or you’ll end up “proving” journeys work on non-real behavior.
Common Mistakes to Avoid
Most mobile source issues don’t look like “data is missing.” They look like performance problems—low conversion, weird counts, or customers complaining about spam. These are the usual culprits.
- Identifying with different IDs in different places (email in one call, user_id in another), causing duplicate profiles and split event history.
- Triggering on noisy events like screen_view instead of intent events, which floods journeys and ruins frequency control.
- Missing required properties (no product_id, no order_id, no cart_value), which prevents accurate segmentation and breaks personalization.
- No dedupe protection, leading to multiple cart pushes for a single cart action due to retries/background behavior.
- Assuming device token = push deliverability. If the token is attached to an anonymous profile and the purchase happens on the identified profile, your post-purchase logic will misfire.
- Renaming events without a migration plan, which silently kills triggers and makes historical segment logic inconsistent.
Summary
Mobile app sources are the foundation for app-first retention: clean events, clean identity, and clean device mapping.
If your triggers feel unreliable or segments don’t match what the business sees, it’s usually not a journey problem—it’s a data-in problem.
Implement Mobile with Propel
If you’re already building in Customer.io, the fastest win is usually tightening identity + event payloads so your highest-impact flows (cart recovery, post-purchase, winback) stop leaking. When you’re ready, book a strategy call and we’ll map your mobile tracking plan to the exact segments and triggers your retention program depends on.