Summarize this documentation using AI
Overview
If you’re implementing Customer.io for retention, the fastest way to waste time is to build flows before your identity and event data are stable. If you want a second set of eyes on the data plan (events, IDs, and what should be an attribute vs an event), book a strategy call—this is where most retention programs quietly break.
In practice, “getting started” isn’t about sending your first email. It’s about ensuring Customer.io receives the right people records and events, resolves identity cleanly across devices/channels, and maps data in a way that makes segments accurate and triggers reliable.
How It Works
Customer.io runs on two core data streams: people (profiles + attributes) and events (behavior + timestamps). Your retention workflows only work when both streams are consistent—especially the identity key you use to connect anonymous browsing to known customers.
- People profiles: each person needs a stable identifier (commonly
emailand/or an internalcustomer_id) plus attributes you’ll segment on (e.g.,first_name,signup_date,last_order_date,lifetime_value,sms_consent). - Events: time-based actions like
product_viewed,added_to_cart,checkout_started,order_completed. Events should carry the properties you’ll need in messaging and logic (SKU, cart value, categories, discount eligibility). - Identity resolution: the moment a shopper becomes “known” (email captured, account created, order placed), you need to link earlier anonymous activity to that person. If you don’t, your cart recovery triggers will miss the most valuable users—people who browsed first, then identified later.
- Segmentation + triggers: segments are only as good as your mapping. If
order_completedsometimes sendstotaland sometimesorder_total, you’ll end up with broken conditions, leaky audiences, and campaigns that look fine but underperform.
Real D2C scenario: A shopper views two products, adds one to cart, then bounces. Next day they enter their email for a “10% off” popup and finally purchase. If your implementation doesn’t merge anonymous events into the identified profile, Customer.io will treat those actions as separate people—your cart recovery flow won’t fire, and your post-purchase flow won’t know what they browsed (so you lose easy cross-sell and replenishment personalization).
Step-by-Step Setup
Think of setup as building a clean data contract first, then wiring it into Customer.io, then validating it with real journeys (browse → cart → purchase). That sequencing prevents weeks of debugging “why didn’t this person enter the campaign?” later.
- Create your workspace and confirm your primary identifier strategy.
Decide what uniquely identifies a person in Customer.io (commonlycustomer_idas the canonical ID, withemailas a channel attribute). Write it down—every integration should follow it. - Set up message channels only to support data validation.
Even if you won’t send SMS on day one, establish which channels you plan to use so you know which consent/status fields must exist (email status, SMS consent, push tokens). - Integrate your data source(s) into Customer.io.
Connect your site/app and backend so Customer.io receives (a) profile updates and (b) events. Keep the first pass minimal: identity + 5–8 key events that drive retention. - Define and send core person attributes.
At minimum, send:email,customer_id,created_at,last_seen(or equivalent),last_order_date,orders_count,lifetime_value, and consent flags. Use consistent types (timestamps as timestamps, numbers as numbers). - Define and send core retention events with properties.
Start with:product_viewed(sku/category),added_to_cart(sku/qty/price),checkout_started(cart_total/items),order_completed(order_id, total, items, discount_code, shipping_country). - Handle anonymous-to-known merging.
Ensure that when a user identifies (email capture, login, checkout), you link prior anonymous activity to the known profile. This is the difference between “cart recovery works for 30% of carts” and “cart recovery works for most carts.” - Validate in Customer.io with real test journeys.
Run a test: browse → add to cart → wait 15 minutes → purchase. Confirm the same person profile shows all events in the activity feed and that event properties are usable for segmentation and personalization. - Create one diagnostic segment per key trigger.
Examples: “Added to cart in last 2 hours AND no order_completed in last 2 hours” and “Order completed in last 1 day.” These segments act like smoke alarms for data drift.
When Should You Use This Feature
“Get started” work matters any time you’re depending on Customer.io to make real-time decisions from behavioral data. If your retention revenue depends on cart recovery, replenishment, or winback, this is not optional infrastructure.
- Cart recovery: when you need
added_to_cartandcheckout_startedevents to land reliably, with identity stitched so you can message the right person. - Repeat purchase and replenishment: when you need
order_completedwith item-level detail to drive “buy again” timing and cross-sell logic. - Reactivation: when you need accurate “inactive for X days” segmentation based on last purchase and/or last site activity.
- Post-purchase personalization: when you want to reference last purchased SKU/category, discount usage, or AOV bands without brittle workarounds.
Operational Considerations
Most retention teams don’t fail because they lack campaigns—they fail because the data contract slowly drifts as the site changes, apps update, or new tools get added. Plan for the realities of segmentation, data flow, and orchestration up front.
- Segmentation accuracy depends on naming and types. Pick one naming convention (
snake_caseis typical) and enforce it. Iforders_countbecomes a string in one integration, segments will silently misbehave. - Trigger reliability depends on event timing. Client-side events can be dropped by ad blockers; server-side order events can be delayed. In most retention programs, we’ve seen best results when critical revenue events (like
order_completed) are server-side and idempotent. - Identity orchestration is the hidden bottleneck. If email capture happens before account creation, you need a plan to merge those identities, or you’ll message “ghost profiles” that never purchase.
- Attributes vs events: keep state as attributes (LTV, last_order_date) and behavior as events (viewed, added, purchased). Don’t try to rebuild LTV from events inside Customer.io if your source of truth already has it.
- Cross-tool consistency: if Shopify/Klaviyo/GA4 use different SKU formats than your backend, normalize before sending to Customer.io or your product-level segments will be a mess.
Implementation Checklist
Before you build more than one or two workflows, lock these basics. This checklist is what keeps your triggers firing and your segments trustworthy as volume scales.
- Primary person identifier defined (and used consistently across sources)
- Consent/status fields mapped for each channel you plan to use
- Core person attributes sent with correct data types
- Core retention events implemented with required properties
- Anonymous-to-known merge behavior confirmed with a real test journey
- Order events are server-side (or otherwise reliable) and deduplicated
- At least 3 diagnostic segments created to monitor data health
- Internal event/attribute dictionary documented and shared with devs
Expert Implementation Tips
These are the small operator moves that prevent weeks of “why didn’t this fire?” debugging and keep retention performance stable as you iterate.
- Instrument for decisions, not for vanity. If you won’t segment or personalize on a property, don’t ship it yet. Ship the 20% that drives 80% of retention revenue.
- Always include an immutable order identifier. Put
order_idonorder_completedand treat it as your dedupe key. Duplicate purchase events wreck post-purchase timing and winback eligibility. - Send item arrays in a consistent schema. Your cart and order events should share the same item structure (sku, name, qty, price). That makes it easy to reuse templates and logic across flows.
- Build “proof” segments before building flows. If you can’t confidently produce “Cart starters, no purchase” as a segment, your cart recovery workflow will be guesswork.
- Track last meaningful activity separately. For reactivation, “last opened email” is not the same as “last shopped.” Keep a site/app activity signal so winback targets real inactivity.
Common Mistakes to Avoid
Most teams don’t make huge mistakes—they make small data mistakes that compound into leaky segments and unreliable automations.
- Building workflows before identity is solved. You’ll end up with abandoned cart flows that only hit logged-in users and miss high-intent guests.
- Inconsistent event/property names across platforms. If web sends
added_to_cartand mobile sendsadd_to_cart, you’ll create fragmented audiences and double the campaign logic. - Relying on client-side purchase tracking. Ad blockers and network issues will cause undercounted purchases, leading to customers receiving “you left something behind” after they already bought.
- Using attributes for things that should be events. If you overwrite a
last_cartattribute instead of sending anadded_to_cartevent, you lose timing, frequency, and multi-cart behavior. - No monitoring for drift. Without diagnostic segments and periodic audits, you won’t notice broken tracking until revenue drops.
Summary
If Customer.io is going to drive retention revenue, treat “Get Started” as a data-in implementation project: identity first, then events, then validation. Once your segments match reality and triggers fire consistently, cart recovery, repeat purchase, and reactivation become straightforward to scale.
Implement Connected Forms with Propel
When you’re ready to operationalize this—especially identity stitching and a clean event/attribute contract—tie it back to how your retention flows actually make money (cart recovery, replenishment, winback). Working alongside Customer.io, we usually start by auditing the live data stream, then tightening the minimum viable schema so your triggers stop leaking. If you want help pressure-testing your tracking plan before you build more automation, book a strategy call.