Date-property flow vs metric-triggered flow: calendar anniversary vs live behavior event
Date-property vs metric-triggered flows: calendar anchors, repeat modes, renewals vs cart, FAQ.

Reza Ahmadi
SEO and content strategy for organic traffic and brand visibility in search results.
September 24, 2026 · 5 min read
Also available in فارسی

A date-property flow queues people from a profile date—birthday, renewal, appointment—on/before that day with monthly/yearly/once repeat; a metric-triggered flow starts the moment a behavior event fires.
What is the difference between a date-property flow and a metric-triggered flow?
Birthday and renewal automation are not the same design as abandoned cart. One rides a profile calendar field; the other rides a live behavior stream.
How each works
Date-property flow
Trigger source: a date field on the person (birthday, renewal_at, appointment_at). Common anchors: on the day, X days before, sometimes after. Repeat: yearly, monthly, or once. The engine scans profiles on a schedule and enqueues matches.
Metric / event-triggered flow
Trigger source: a behavior event (placed_order, viewed_product, cart_abandoned). Entry is at fire time (plus any intentional wait). Repeat is usually every time or cooldown-gated—not a calendar anniversary.
| Dimension | Date-property flow | Metric-triggered flow |
|---|---|---|
| Source | Profile date field | Event stream |
| Entry timing | Calendar scan (on/before/after) | Event fire |
| Typical repeat | yearly / monthly / once | every time / cooldown |
| Examples | Birthday, policy renewal, visit | Cart, purchase, install |
| Main risk | Bad date formats / timezones | Noisy or duplicate events |
| Changing the anchor | Often clone the flow | Adjust event filters |
See also What is a replenishment flow? Reorder before the product runs out and Marketing automation vs scheduling: react to events vs pick a clock time.
Examples
Monthly video subscription
renewal_at with 3 days before email, on-day SMS, +2 days soft winback if not renewed. Keep payment_failed as a separate event flow.
Ecommerce birthday vs cart
Cart must be metric-triggered. Birthday must be date-property. Faking birthday from “last order anniversary” drops people who have a birthday field but did not buy this year.
Clinic appointment
appointment_at 24h-before SMS. Pair with appointment_cancelled event exit so reminders do not send after cancel.
When to choose which
- Recurring calendar occasions → date-property.
- React to user actions → metric/event.
- You can run both for one person—manage overlap with exits/filters.
- Validate date formats and timezones on real rows before go-live.
- Clone flows when changing the anchor field.
Leadara mapping
- Events: behavior branch with stable names.
- Segments: “has renewal_at”, suppressors like recent buyers.
- Journeys: separate canvases for date vs event when possible.
- Email / SMS: renewals often SMS; birthday stories often email + code.
If entry must be pushed instantly from an external system, also read Lifecycle journey vs real-time event campaign: when to use each.
Common mistakes
- Building “birthday” from last-purchase events
- Ignoring Asia/Tehran vs UTC
- One flow for monthly renewal and payment failure
- Mixed date formats in CRM
- Expecting millisecond firing from a daily date scan
One-line takeaway
Date-property = scheduler.scan(date_prop); metric = subscribe(event_stream).
Next step
Open a real date field. Read ten rows for format/timezone. Only then build the date flow.
FAQ
Both before and on-day in one flow?
Often multiple messages in one date flow—or cloned flows. Check vendor limits.
Empty date field?
No entry. Build a coverage segment first.
Yearly repeat for monthly renewals?
Wrong—use monthly or billing events.
Versus a one-off scheduled campaign?
Campaign blasts a list at a clock time; date flows scan anchors daily and only enqueue matches.
First-purchase anniversary?
Needs a stored first_order_at property (or a cohort report), not a raw historical event alone.
Birthday SMS at midnight?
Combine the date anchor with a quiet send hour.
Mid-cycle changes to renewal_at?
Test whether the current period re-queues.
Step-by-step
- Lock the anchor field in the data dictionary.
- Write before/on rules and repeat mode.
- Pick channels per message.
- Build parallel event flows (e.g. payment_failed).
- Move a test profile’s date and watch entry.
- Compare daily entries to expected calendar matches.
Metrics
- Date-field coverage
- Daily entries vs expected matches
- Renewal conversion after before-message
- Opt-outs from mistimed sends
Ticket line
anchor=renewal_at; when=3d_before+on_day; repeat=monthly; channels=email,sms; separate payment_failed event flow
Guards
- One date anchor per flow
- Clone to change fields
- Active-subscription segment filters
- Exit on successful renewal so post-renewal nudges stop
Sales vs ops language
Sales asks to “resend last year’s birthday campaign.” You ship a yearly date flow on a live segment. Fixed lists rot; date fields do not—if you keep them clean.
Programmer model
daily:
for profile in scan(date_prop, rule=before/on, tz=Asia/Tehran):
enroll(flow_date)
on event_stream:
if event.name in triggers and filters_pass(event):
enroll(flow_metric)
Guards: validate formats; one anchor per flow; clone to change fields; set Tehran timezone explicitly.
Quick chooser
| Business need | Pick | Why |
|---|---|---|
| Yearly birthday code | Date yearly | Stable field anchor |
| Monthly renewal nudge | Date monthly or billing event | Events win if billing emits them |
| Abandoned cart | Metric | Live signal |
| Payment failed | Metric | Same moment |
| First-order anniversary | Date if first_order_at exists | Else create the property first |
Insurance vignette
Multiple policies per person mean one profile date is not enough. Use per-object dates or backend-emitted policy_renewal_upcoming events. Data model limits beat clever flow hacks.
Acceptance
- Ten profiles with edge dates.
- Manually move a test date; watch enrollment within a scan day.
- Prove post-renewal messages stop.
- Compare day-1 entries to CRM match counts.
Reporting pitfall
Low day-1 entry is often empty/wrong dates—not a broken flow.
## Related reading
- What is a replenishment flow? Reorder before the product runs out
- Marketing automation vs scheduling: react to events vs pick a clock time
- Lifecycle journey vs real-time event campaign: when to use each




