Summarize this documentation using AI
Overview
If you’re running retention in Customer.io, your campaigns are only as good as the events you feed it—especially for cart recovery, browse abandonment, and post-purchase flows. If you want a second set of eyes on your event plan (naming, identity, payloads, and how it impacts segmentation), you can book a strategy call and we’ll pressure-test it like an operator would.
Track events and page events are the backbone of “who did what, and when” in Customer.io. In practice, they’re what turns generic blasts into triggered programs that actually fire on time, exclude the right people, and attribute revenue cleanly.
How It Works
Customer.io ingests behavioral data primarily as events tied to a person profile. The two common flavors are (1) track events (actions like Added to Cart or Order Completed) and (2) page events (page views like /products/sku), which are especially useful for browse intent and product discovery triggers.
- Event ingestion: Your site/app/server sends an event into Customer.io via the JavaScript snippet, Mobile SDKs, or API. Each event includes a name, a timestamp, and an optional payload (properties like SKU, cart value, category, etc.).
- Identity resolution (the part that makes or breaks retention): Events need to attach to the right person. Anonymous browsing can be captured, but you only get retention value when you identify the user (email/ID) and merge their anonymous activity into their known profile. If you don’t, your cart recovery triggers will “work” but won’t have anyone to message.
- Data mapping into segmentation: Customer.io uses event names + event attributes to build segments and trigger campaigns. If your event payloads aren’t consistent (e.g.,
product_idsometimes a number, sometimes a string), segmentation becomes flaky and triggers misfire. - Trigger reliability: Campaign entry conditions typically depend on event timing (e.g., “Added to Cart in last 1 hour”) and exclusions (e.g., “has not purchased since”). Late events, duplicated events, or missing identifiers are the usual reasons cart and post-purchase programs underperform.
Real D2C scenario: A shopper lands on a product page from Instagram, views two SKUs, adds one to cart, then bounces. If you capture page events (product URL + category) and a Added to Cart track event (SKU + price + cart_total), you can (a) trigger a cart recovery series, and (b) run a browse abandonment fallback when the cart event never happens. But it only works if that activity merges to the same person once they enter email at checkout or via a popup.
Step-by-Step Setup
The goal here isn’t “send some events.” The goal is to get consistent, identifiable events that power segments and triggers without constant duct tape. Set this up once, then your retention team can build programs without engineering tickets every week.
- Pick your identifier strategy first (before you instrument anything).
Decide what field is your source of truth in Customer.io: typicallyid(internal customer ID) plusemail. Make sure you can reliably call identify when a user authenticates, submits email, or completes checkout. - Instrument identity early in the funnel.
Don’t wait until purchase. Add identify on:- Email capture (newsletter / quiz / back-in-stock)
- Account creation / login
- Checkout step where email is first collected
- Define a tight event taxonomy for retention.
Keep names human-readable and stable. A practical baseline for D2C:Product Viewed(track) or use page events with product metadataAdded to CartCheckout StartedOrder CompletedSubscription Created/Subscription Cancelled(if relevant)
AddedToCart_v2unless you like rebuilding segments later. - Standardize payloads (this is what makes segmentation accurate).
For each event, document required properties and types. Example forAdded to Cart:sku(string)product_id(string)variant_id(string)quantity(number)price(number)cart_total(number)currency(string)
- Implement page events with meaningful context.
Page views are most useful when you attach metadata like category, product identifiers, and referrer/UTM. Otherwise, you’ll end up with segments like “visited /products/*” that don’t personalize well. - Validate in Customer.io activity logs.
Before building campaigns, confirm:- Events appear on the right person profile
- Anonymous activity merges after identify
- Event properties are consistent across multiple sessions/devices
- Create a test segment and a test trigger.
Build a segment like “Added to Cart in last 30 minutes” and a one-step campaign that sends to your test address. If that works reliably, you’re ready to build real orchestration.
When Should You Use This Feature
Track and page events matter any time you need Customer.io to react to intent or lifecycle behavior in near real time. If your retention program depends on “who did X recently,” this is the plumbing you can’t skip.
- Cart recovery: Trigger on
Added to Cart, suppress ifOrder Completedoccurs, and personalize using SKU/variant data. - Browse abandonment / product discovery: Use page events (or
Product Viewed) to follow up when someone views 2–3 products but never carts. - Post-purchase cross-sell: Trigger on
Order Completedwith line-item attributes so you can recommend the right refill/companion product. - Reactivation: Segment on “no events of type
Product ViewedorAdded to Cartin 60 days” and re-engage based on last category viewed.
Operational Considerations
Once events are flowing, the day-to-day reality is less about “sending data” and more about keeping segments and triggers trustworthy as your site, catalog, and tracking evolve.
- Segmentation depends on consistency: If one engineer sends
productIdand another sendsproduct_id, your “viewed product” segment silently fractures. Pick a schema and enforce it. - Deduplication and event storms: Some storefronts fire multiple add-to-cart events per click (theme/app conflicts). That inflates intent signals and can spam customers. Where possible, include an event id or implement server-side dedupe logic.
- Latency changes outcomes: If purchase events arrive late, your cart flow will email people who already bought. For high-volume brands, even a 2–5 minute delay can create noticeable “why did I get this?” support tickets.
- Anonymous-to-known merging is non-negotiable: Browse and cart flows underperform when most events stay anonymous. Make identity capture earlier, then ensure merge behavior is working across devices and sessions.
- Orchestration across tools: If checkout/purchase events come from Shopify/Stripe while browse events come from client-side JS, you’ll see mismatched timestamps and missing join keys unless you standardize identifiers across sources.
Implementation Checklist
If you want your triggers to fire cleanly and your segments to stay stable, run through this checklist before you scale messaging volume.
- Person identifier strategy documented (internal ID vs email, and when identify occurs)
- Anonymous activity merge tested end-to-end (browse → email capture → merged profile shows prior events)
- Event taxonomy defined (names, required properties, property types)
- Page events include meaningful metadata (category/product identifiers, referrer/UTMs where relevant)
- Purchase event includes order id and line items (for suppression + personalization)
- Basic QA segments created to validate timing (e.g., “Added to Cart in last 15 minutes”)
- Suppression logic validated (cart flow stops after purchase)
- Monitoring plan: weekly spot-check of event volume, schema drift, and duplicates
Expert Implementation Tips
Most teams don’t fail because they lack events—they fail because the events aren’t usable for orchestration. These are the operator moves that keep programs stable.
- Design payloads for messaging, not analytics. If you want cart emails to show the exact variant, include
variant_title,image_url, andproduct_urlin the event. Otherwise you’ll end up doing brittle template logic or external lookups. - Use page events as your safety net. Cart events get blocked by ad blockers and theme scripts more often than teams admit. A “viewed product twice in 24h” flow can recover revenue you’d otherwise miss.
- Make event names stable across platforms. If mobile calls it
AddToCartand web calls itAdded to Cart, you’ll build duplicate campaigns or messy OR conditions in segments. - Prefer server-side for purchase truth. Client-side purchase events are easy to miss (redirects, blocked scripts). Server-side order events keep suppression accurate, which protects deliverability and CX.
Common Mistakes to Avoid
These are the issues that quietly wreck cart recovery and reactivation performance—and usually show up as “Customer.io is buggy” when it’s really data quality.
- Triggering on page views without identity capture. You’ll have lots of intent and nobody addressable.
- Inconsistent property types. A numeric
product_idin one event and a string in another breaks filters and liquid logic in weird ways. - No suppression event for purchase. Cart and browse flows need a reliable “stop” signal (
Order Completed) or you’ll message recent buyers incorrectly. - Duplicated add-to-cart events. This leads to customers entering flows multiple times, unless you add frequency rules or dedupe upstream.
- Over-collecting random properties. Huge payloads make debugging harder. Collect what you’ll actually use for segmentation, personalization, and suppression.
Summary
If you want retention automations to fire reliably, treat Track + Page events as production infrastructure—not a “nice to have.” Get identity merging right, standardize your schema, and validate triggers with real segments before you scale.
Implement Events with Propel
When we’re helping teams operationalize Customer.io, the work usually isn’t building the flow—it’s making sure the underlying events are identifiable, consistent, and actually usable for segmentation and suppression. If you want to sanity-check your event taxonomy, identity plan, and the minimum payloads needed for cart recovery and post-purchase programs, book a strategy call and we’ll map it to the retention outcomes you care about.