Timestamp Conditions in Customer.io

Customer.io partner logo

Table of Contents

Summarize this documentation using AI

This banner was added using fs-inject

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Overview

Timestamp conditions in Customer.io are what separate a generic list from a revenue-ready segment that knows who is truly “recent,” “lapsed,” or “due” for a nudge. In D2C, that timing layer is the difference between sending a cart recovery reminder while intent is hot versus chasing someone who already bought, or missing the reactivation window by a week.

If you are building segments that power abandoned cart, post-purchase replenishment, and winback flows, timestamp conditions help you express rules like “added to cart in the last 2 hours” or “last order was more than 60 days ago.” Propel helps teams translate those rules into clean event and attribute design inside Customer.io and then operationalize them across email and SMS, book a strategy call.

How It Works

Timestamp conditions in Customer.io work by comparing a timestamp field (either an event time or a person attribute that stores a date-time) against “now” using relative windows like within the past X days, before X days ago, or between two dates. The key is that Customer.io evaluates the condition based on the timestamp value and the timezone handling of that value, not on your intent.

In practice, you will use timestamp conditions most often in two places: segment membership (who qualifies right now) and journey logic (who should enter or branch). In Customer.io, the most common gotcha is assuming “within the past X days” means “calendar days” or “since midnight.” It is a rolling window from the current moment, which can shift who qualifies hour by hour.

Real D2C scenario: you want a segment for “Cart abandoners in the last 4 hours.” If you store cart activity as an event timestamp, the segment will continuously update as time passes. Someone who added to cart 4 hours and 5 minutes ago drops out, even if it is still the same day. That is usually correct for cart recovery, but it can surprise teams when they use the same pattern for daily batch sends.

Step-by-Step Setup

Timestamp conditions in Customer.io are easiest to implement when you standardize your time fields first, then build segments that match your send cadence.

  1. Pick the timestamp source: decide whether your logic should reference an event time (like Checkout Started) or a person attribute (like last_order_at). Use events for behavior, use attributes for “latest known state.”
  2. Normalize timestamps: send timestamps in a consistent format (typically ISO 8601) and store them in UTC where possible. Confirm the field is recognized as a timestamp, not a string.
  3. Create a segment for the timing window: build a segment with a timestamp condition like “last_order_at is more than 60 days ago” or “event Added to Cart occurred within the past 4 hours.”
  4. Add guardrails to avoid false positives: layer in purchase exclusion logic such as “has not purchased since cart started” or “no Order Completed event after Added to Cart.”
  5. Validate with real profiles: spot check 10 to 20 customers across edge cases (just purchased, purchased long ago, multiple carts) and confirm segment membership matches your expectation.
  6. Align segment refresh to orchestration: if you run a daily broadcast, avoid ultra-short rolling windows that churn membership unpredictably. If you run journeys, rolling windows are usually fine.

When Should You Use This Feature

Timestamp conditions in Customer.io are the right tool when revenue depends on sending the right message at the right moment, not just to the right person.

  • Abandoned cart recovery: target “Added to Cart within 1 to 4 hours” and exclude anyone with an order after that cart event. This keeps SMS spend tight and lifts conversion rate.
  • Browse abandonment and product discovery: segment “Viewed Product within 24 hours” for dynamic recommendations, then suppress if they added to cart or purchased.
  • Post-purchase cross-sell: trigger “Order Completed within 7 days” to introduce complementary products, then cut off after the window to avoid stale offers.
  • Replenishment and repeat purchase: use “last_order_at is between 25 and 35 days ago” for consumables, then tailor by product type if you store last purchased SKU category.
  • Reactivation: build lapsed buyer segments like “last_order_at more than 90 days ago” and stage messaging intensity by recency bands (90 to 120, 120 to 180, 180+).

Operational Considerations

Timestamp conditions in Customer.io get operationally tricky when your data model mixes event times, order updates, and timezone assumptions across tools.

  • Event versus attribute drift: if you update last_order_at from Shopify but also track Order Completed events, mismatches can happen during refunds, partial fulfillments, or delayed syncs. Pick a single source of truth per use case.
  • Rolling windows versus calendar logic: “within past 1 day” means the last 24 hours, not “today.” If you need “yesterday” or “today,” you may need additional attributes (like order_date) or a scheduled process that stamps day-level fields.
  • Send-time sensitivity: if you schedule a campaign at 9am daily, a “within past 24 hours” segment will include behavior from 9am yesterday onward. That is fine, but it is not the same as “yesterday.”
  • Multi-cart customers: a single timestamp attribute like last_cart_at can overwrite earlier carts and break logic. For cart recovery, event-based logic is usually safer.
  • Suppression and prioritization: timestamp segments should be paired with frequency controls and channel prioritization (for example, do not send SMS if they received an email in the last 2 hours for the same cart).

Implementation Checklist

Timestamp conditions in Customer.io are easiest to scale when you treat them like infrastructure, not one-off segment hacks.

  • Confirm all key time fields are true timestamps (not strings) and consistently formatted
  • Document which use cases use events versus person attributes
  • Define standard windows for cart (1h, 4h, 24h), post-purchase (3d, 7d, 14d), and winback (60d, 90d, 120d)
  • Add purchase-after-behavior exclusions to cart and browse recovery segments
  • QA segment membership using real customer profiles at boundary times (59 minutes, 4 hours 1 minute, 89 days, 90 days)
  • Align segment timing with send cadence (journey real-time versus daily scheduled sends)
  • Set up monitoring for sync delays that can shift timestamps (Shopify, warehouse, subscription platform)

Expert Implementation Tips

Timestamp conditions in Customer.io become a revenue lever when you design them around intent windows and operational reality.

  • In retention programs we’ve implemented for D2C brands, cart recovery performance improves when you separate “high-intent abandon” (checkout started within 1 to 2 hours) from “soft abandon” (added to cart within 24 hours) and tailor incentives only to the latter.
  • Use event timestamps for behavior-driven flows (cart, browse), then use a single attribute like last_order_at for lifecycle state (active, at-risk, lapsed). Mixing both inside one segment often creates edge cases that are hard to debug.
  • If you need “days since purchase” logic to be stable for a daily send, consider stamping a derived attribute at ingestion time (like last_order_date in YYYY-MM-DD) so your segments do not shift based on the exact hour of purchase.
  • Build recency bands as separate segments and reuse them across journeys. Your creative and offer strategy gets easier when “90 to 120 days lapsed” is a shared definition across email and SMS.

Common Mistakes to Avoid

Timestamp conditions in Customer.io can quietly erode performance when the segment definition does not match the business question.

  • Expecting calendar-day behavior from rolling windows: “within the past 1 day” is not “today,” which can cause inconsistent daily results and confusing reporting.
  • Using a single overwriting attribute for cart logic: last_cart_at can break multi-cart scenarios and cause missed recoveries or repeated sends. Prefer events for cart actions.
  • Forgetting purchase suppression: cart and browse segments without a “purchased after” exclusion will message recent buyers and drive unsubscribes.
  • Ignoring sync latency: if order events arrive late, customers can temporarily qualify for winback or cart segments when they should not.
  • Over-segmenting with tiny windows: very narrow timestamp windows can make audiences too small for meaningful testing, especially for smaller brands.

Summary

Timestamp conditions are how you turn raw behavior into timely segments for cart recovery, repeat purchase, and winback. Use them when timing drives conversion, and keep your time sources consistent so segments stay trustworthy in Customer.io.

Implement with Propel

If your segments keep drifting or your cart and winback windows feel inconsistent, Propel can help you standardize timestamps, exclusions, and recency bands across Customer.io. book a strategy call.

Contact us

Get in touch

Our friendly team is always here to chat.

Here’s what we’ll dig into:

Where your lifecycle flows are underperforming and the revenue you’re missing

How AI-driven personalisation can move the needle on retention and LTV

Quick wins your team can action this quarter

Whether Propel AI is the right fit for your brand, stage, and stack