Summarize this documentation using AI
Overview
Most retention programs live or die on whether Customer.io is receiving the right event payloads, tied to the right person, at the right time—so your cart recovery, replenishment, and winback flows actually fire. If you’re trying to tighten up your tracking plan (or you’re inheriting a messy one), the Method Reference is the fastest way to confirm what Customer.io expects for each “method” (identify, track, page/screen, etc.) and how your data will land inside the platform—if you want a second set of eyes, book a strategy call.
Practically, teams use this reference to stop silent failures: events arriving without an identifier, attributes overwriting each other, or segments drifting because one source calls it checkout_started and another calls it begin_checkout.
How It Works
Think of “methods” as the entry points for data into Customer.io. Each method has a required shape (identifiers, naming rules, and payload fields) and a specific outcome inside Customer.io—either it updates a person profile, records an event, or both. When your implementation matches the method requirements, segmentation stays stable and your event-triggered campaigns don’t miss customers.
- Identity resolution happens first. Customer.io needs a stable identifier (commonly
idoremail, depending on your setup). If you send events without a resolvable identifier, they’ll land as anonymous activity or fail to attach to the right profile—either way, your “Entered Checkout” trigger won’t hit the person you think it will. - Methods map to storage locations.
- Identify / Create-or-update person → updates person attributes (e.g.,
first_name,sms_consent,lifetime_value). - Track (event) → creates an event record with properties (e.g.,
product_id,cart_value,coupon). - Page/Screen (if you use them) → creates behavioral events that are great for discovery and browse-based retargeting, but only if you standardize naming.
- Identify / Create-or-update person → updates person attributes (e.g.,
- Data types and timestamps matter. In most retention programs, the “it worked in QA” moment breaks later because timestamps come through as strings, currencies arrive as text, or time zones drift—then your “within the last 2 hours” cart segment becomes unreliable.
- Consistency drives trigger reliability. Customer.io automation logic is literal. If your cart flow triggers on
checkout_startedbut your app sendsCheckout Started(different case/spacing) 30% of the time, you’ll get phantom underperformance and you’ll blame creative when it’s really data hygiene.
Step-by-Step Setup
The goal here isn’t “send more data.” It’s to make sure the data that enters Customer.io is (1) correctly identified, (2) consistently named, and (3) mapped to attributes vs. events in a way that keeps segments and triggers stable.
- Pick your canonical identifier and stick to it.
Decide what Customer.io should treat as the primary key (oftenidfrom your ecommerce system, sometimesemail). Then enforce that every method call includes it in the expected field. - Audit your current methods against the Method Reference.
List every inbound call type you’re using (identify, track, page/screen). Confirm required fields, supported payload structure, and any naming constraints so you’re not sending “valid JSON” that Customer.io ignores or stores incorrectly. - Define an event taxonomy for retention.
For D2C, you typically need a tight set of events:product_viewed,added_to_cart,checkout_started,order_completed, plus optional ones likesubscription_createdorrefund_issued. Lock names, casing, and required properties. - Separate “state” into attributes and “actions” into events.
Store durable facts as attributes (e.g.,total_orders,last_order_at,vip_tier). Store actions as events (e.g.,added_to_cartwithsku,quantity,price). - Standardize money and IDs.
Ensurecart_value,order_total, etc. are numbers (not strings), and use consistent identifiers (skuvsproduct_id) so segment filters don’t fracture. - Validate in Customer.io with a real customer journey.
Run a test: browse → add to cart → start checkout → purchase. Confirm (a) the person profile updates, (b) events attach to the same profile, and (c) your segment membership updates within expected latency.
When Should You Use This Feature
You reach for the Method Reference whenever retention performance looks “mysteriously” soft or when you’re expanding triggers beyond basic purchase events. It’s the difference between a cart flow that catches 85% of abandoners and one that quietly misses half of mobile shoppers.
- Cart abandonment that under-fires. If your abandon flow is triggered by
checkout_startedbut iOS sendsbegin_checkout, you’ll miss a chunk of high-intent customers. The Method Reference helps you normalize the method calls and payloads so the trigger is deterministic. - Repeat purchase and replenishment timing. If you’re building “reorder window” segments (e.g., 21–35 days since last purchase), you need
order_completedevents with consistent timestamps and a reliablelast_order_atattribute update. - Reactivation based on real inactivity. Winback segments like “no sessions in 45 days” only work if page/screen methods are consistently attached to identified users, not stuck as anonymous activity.
- Multi-source data (Shopify + subscription tool + support platform). In practice, this tends to break when each tool sends different identifiers. The reference is your guardrail for aligning identity fields before you orchestrate cross-channel retention.
Operational Considerations
Once data is flowing, the operational work is keeping it clean as the business evolves—new landing pages, new checkout, new subscription SKU, new app version. Retention teams get burned when segmentation logic is built on “whatever the engineers shipped” instead of a controlled tracking contract.
- Segmentation drift is usually naming drift. Keep a single source of truth for event names and required properties. If you allow “helpful” variants, you’ll end up maintaining duplicate segments and duplicate triggers.
- Latency impacts orchestration. If your source sends events in batches or with delays, your “send within 30 minutes” cart SMS may miss the window. Build holds/delays assuming worst-case ingestion time—or prioritize real-time sources for high-intent moments.
- Attribute overwrites are silent and deadly. If multiple systems write to the same attribute (e.g.,
phoneorsms_consent) without precedence rules, you’ll accidentally suppress good subscribers or message the wrong number. - Anonymous-to-known merging needs a plan. If shoppers browse anonymously then identify at checkout, confirm your implementation merges anonymous activity into the identified profile; otherwise browse/cart triggers will undercount and personalization will look broken.
Implementation Checklist
Before you scale any retention automation, run this checklist so you’re not optimizing copy against faulty inputs.
- Canonical identifier selected and enforced across all inbound methods
- Event taxonomy documented (names, casing, required properties)
- Money fields sent as numbers; timestamps sent in a consistent format/time zone
- Clear separation of person attributes vs event properties
- No duplicate event names for the same action across platforms (web/app)
- Anonymous activity merge behavior confirmed (and tested end-to-end)
- Segments validated against raw event streams (spot-check 20–50 users)
- Trigger QA: cart → checkout → purchase path tested on web + mobile
Expert Implementation Tips
The difference between “data is coming in” and “retention is dependable” is usually a handful of operator habits that keep your tracking plan from degrading over time.
- Create a retention-critical event contract. Treat 6–10 events as sacred (cart, checkout, purchase, refund, subscription). Any change requires a quick review because it directly impacts revenue flows.
- Always include a stable order/cart identifier. For cart recovery, include
cart_idorcheckout_idon events. Without it, deduping is hard and you’ll spam people who restarted checkout multiple times. - Send “order_completed” once, enrich later if needed. Fire the purchase event immediately with core fields, then update attributes (like
total_orders,lifetime_value) after your system finalizes. This keeps post-purchase flows timely without sacrificing accuracy. - Design segments around properties you can guarantee. If
variant_idis missing 20% of the time, don’t build a VIP cross-sell segment that depends on it. Fix the payload first or use a more reliable property likeproduct_id.
Common Mistakes to Avoid
These are the issues that cause “Customer.io isn’t working” escalations when the platform is fine—the inputs aren’t.
- Triggering flows on pageview/screen events without identity. If most traffic is anonymous, your browse abandonment program will look tiny and inconsistent.
- Using email as an identifier in one source and internal user_id in another. This creates duplicate profiles and splits event history—segments won’t match and frequency control won’t protect customers.
- Changing event names during a site redesign. Teams ship
checkout_started_v2and forget to update triggers. Revenue drops, and nobody notices for a week. - Overwriting consent attributes. One tool sets
sms_consent=falseby default, and suddenly your SMS list collapses. Guard consent fields with strict rules. - Sending arrays/objects without a clear plan. JSON can be powerful, but if you store cart line items inconsistently, you’ll struggle to segment and personalize reliably.
Summary
If you want retention automations you can trust, start with the Method Reference and treat it like your spec for how data enters Customer.io. Clean identity + consistent event naming is what makes segments accurate and triggers predictable. When performance is off, check the payloads before you touch creative.
Implement Method Reference with Propel
When we help teams operationalize data-in for Customer.io, we usually start by mapping your retention-critical methods (identify + track) to a tight event/attribute contract, then validating identity resolution across every source that can touch a customer profile. If you want us to pressure-test your current implementation and flag where segments/triggers are likely to break, book a strategy call and bring a few real examples (cart, checkout, purchase) from your logs.