Summarize this documentation using AI
Overview
If you’re piping video engagement into Customer.io, the win isn’t “having the data”—it’s having playback events that are consistent enough to drive segments and triggers you can trust. If you want a second set of eyes on your tracking plan before you ship it (or before you rebuild it for the third time), book a strategy call and we’ll pressure-test the event schema against your retention use cases.
Video playback data tends to get messy fast: anonymous viewers, multiple devices, partial watches, and players that fire duplicate events. The goal here is to get clean events into Customer.io so your cart recovery, repeat purchase, and reactivation automations don’t misfire.
How It Works
Customer.io doesn’t “understand video” out of the box—it understands people, attributes, and events. Your player/app sends playback events into Customer.io (Track API, mobile SDKs, or via your data pipeline), Customer.io attaches those events to a person profile, and then you use those events to build segments and trigger campaigns.
- Events are the source of truth for behavior. For video, that usually means events like
video_started,video_progress,video_completed, and sometimesvideo_pausedorvideo_seeked(careful—those get noisy). - Identity resolution determines whether the event is usable. If the viewer isn’t identified, the event lands on an anonymous profile. Once they identify (email capture, account creation, checkout), you need to merge anonymous activity so the watch history actually influences retention flows.
- Event properties are what make segmentation precise. “Completed a video” is rarely enough. You typically need
video_id,series/category,percent_watched,duration,position,source(PDP, post-purchase portal, blog), and ideallyproduct_skuwhen the content maps to a product. - Trigger reliability comes from deduping and consistent naming. In practice, this tends to break when different platforms (web vs iOS) send different event names/properties, or when the player fires multiple “complete” events on refresh.
Step-by-Step Setup
Before you write a line of tracking code, decide what decisions you want to make off video behavior. Then design the smallest event schema that supports those decisions without flooding Customer.io with noisy progress pings.
- Pick your retention use cases first. Examples: “watched 80% of the tutorial” → send replenishment education; “started but didn’t finish setup video” → nudge; “watched product demo for SKU X” → browse/cart follow-up.
- Define a tight event taxonomy. Start with:
video_startedvideo_progress(only at meaningful milestones like 25/50/75%)video_completed(single fire)
- Standardize required properties. At minimum, send:
video_id(stable ID, not a title string)video_title(for debugging and light personalization)percent_watched(integer 0–100)milestone(25/50/75/100 if you use progress events)content_category(e.g., “how-to”, “ugc”, “ingredients”)source(where the player was embedded: PDP, cart, post-purchase, blog)product_skuorproduct_idwhen relevant
- Implement identity correctly.
- If a user is logged in, send events with their
customer_id(or your chosen primary identifier) consistently across web and app. - If they’re anonymous, still send events using an anonymous identifier, then merge anonymous activity when they identify (email capture/checkout). This is the difference between “video data exists” and “video data drives revenue.”
- If a user is logged in, send events with their
- Choose your ingestion method.
- Web/app direct: Track API / mobile SDKs for near-real-time triggers.
- Pipeline/warehouse: Great for backfills and consistency, but watch latency if you need fast cart recovery.
- Validate in Customer.io Activity Logs. Confirm:
- Events land on the right person profile (not a duplicate).
- Properties are populated and typed consistently (numbers as numbers).
- You’re not firing duplicate completes or spamming progress events.
- Build one “golden path” segment and one trigger. Example segment: “Completed video in category = how-to in last 7 days.” Example trigger: start a post-purchase education flow when
video_completedfires withcontent_category=how-to.
When Should You Use This Feature
Video playback events are worth the effort when video behavior is a leading indicator of purchase intent, product success, or churn risk. If you can’t describe what you’ll do differently for someone who watched vs didn’t watch, don’t instrument it yet.
- Cart recovery with intent signals. A shopper watches 75% of your “How it fits” video on the PDP, adds to cart, then bounces. Trigger a cart recovery message that leans into sizing/fit reassurance, not a generic discount.
- Post-purchase adoption to reduce refunds and drive repeat purchase. For skincare, someone buys a routine bundle and watches the “AM routine” video but not the “PM routine” video. Use that gap to trigger a “here’s how to layer at night” follow-up before they churn.
- Reactivation based on content re-engagement. A lapsed customer returns and watches a new product demo. That’s a strong reactivation signal—especially if you capture
product_skuand can align the offer to what they watched. - Product discovery journeys. If you run a quiz or education hub, video completion can route people into the right cross-sell track without waiting for a browse event.
Operational Considerations
Most teams get the events flowing and then wonder why segments look wrong or triggers fire twice. The fix is almost always upstream: naming, identity, and property discipline.
- Segmentation accuracy depends on property consistency. If web sends
productSkuand iOS sendsproduct_sku, you’ll end up building brittle segments or missing people entirely. - Data flow latency changes what you can automate. Near-real-time ingestion supports cart recovery and on-site intent follow-ups. A daily warehouse sync is fine for weekly reactivation, but it will underperform for time-sensitive nudges.
- Orchestration realities: don’t let video events spam your journeys. Progress events can trigger multiple entries unless you guard with frequency controls, “only once” rules, or a dedupe key pattern.
- Anonymous-to-known merging is non-negotiable for D2C. A lot of “video didn’t work” complaints are actually “we never merged anonymous activity, so the watch history stayed orphaned.”
- Event volume matters. If you send a progress ping every second, you’ll drown reporting, slow debugging, and make it harder to reason about triggers. Milestones beat streams.
Implementation Checklist
Use this to sanity-check your tracking before you wire it into revenue-critical automations.
- Event names are standardized across platforms (
video_started,video_progress,video_completed). - Required properties are present and consistent (
video_id,percent_watched,source,content_category). percent_watchedis numeric and uses the same scale everywhere (0–100).- Anonymous viewers are tracked and later merged into the identified profile.
- Duplicates are controlled (single-fire completion, milestone-based progress).
- At least one segment and one trigger were tested against real profiles in Activity Logs.
- Latency is confirmed (how long from watch → event in Customer.io).
- Campaign entry rules prevent repeated re-entry from multiple progress events.
Expert Implementation Tips
These are the small choices that keep video data usable six months from now, when your catalog and creative have doubled.
- Use a stable
video_idand treat titles as display only. Titles change. IDs shouldn’t. Your segments will thank you. - Track “meaningful completion,” not just “player ended.” Gate
video_completedbehind a threshold (e.g., 90% watched) so skips don’t look like intent. - Send
sourceaggressively. PDP vs post-purchase portal vs blog often indicates where the customer is in the lifecycle—and it’s the difference between a conversion nudge and an education nudge. - Map content to commerce. If a video is about a product, include
product_sku. That one property unlocks tight cross-sell and replenishment logic. - Prefer milestone progress events over raw timestamps. You’ll get cleaner segments like “hit 75% but not 100%” without building complex math in your workflows.
Common Mistakes to Avoid
These are the failure modes that make teams abandon video-based retention because “the data is unreliable.” It’s usually fixable.
- Triggering campaigns off
video_startedwithout intent gating. Starts are cheap; completions or 75% milestones are the real signal. - Letting each platform invent its own schema. Different property names/types across web and app will silently break segments.
- Not merging anonymous activity. Your highest-intent viewers are often anonymous until checkout—if you don’t merge, your best signals never reach retention automations.
- Over-sending progress events. This creates duplicate journey entries, noisy reporting, and higher operational load when debugging.
- Forgetting dedupe on completion. Refreshes, reconnects, and embedded players can fire multiple completes unless you guard against it.
Summary
If video engagement is a real intent signal for your brand, getting playback events into Customer.io is worth it—but only with clean identity resolution and a disciplined event schema. Build for segmentation accuracy first, then wire into triggers once you trust the data. If you can’t reliably answer “who watched what, where, and how much,” your automations will wobble.
Implement Video with Propel
If you’re instrumenting playback events and want them to actually drive revenue outcomes (not just dashboards), we can help you design the schema, identity strategy, and trigger rules inside Customer.io. Book a strategy call and we’ll map your video signals to a retention plan that won’t fall apart once you scale channels and content volume.