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.

DimensionDate-property flowMetric-triggered flow
SourceProfile date fieldEvent stream
Entry timingCalendar scan (on/before/after)Event fire
Typical repeatyearly / monthly / onceevery time / cooldown
ExamplesBirthday, policy renewal, visitCart, purchase, install
Main riskBad date formats / timezonesNoisy or duplicate events
Changing the anchorOften clone the flowAdjust 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

  1. Recurring calendar occasions → date-property.
  2. React to user actions → metric/event.
  3. You can run both for one person—manage overlap with exits/filters.
  4. Validate date formats and timezones on real rows before go-live.
  5. 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

  1. Lock the anchor field in the data dictionary.
  2. Write before/on rules and repeat mode.
  3. Pick channels per message.
  4. Build parallel event flows (e.g. payment_failed).
  5. Move a test profile’s date and watch entry.
  6. 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 needPickWhy
Yearly birthday codeDate yearlyStable field anchor
Monthly renewal nudgeDate monthly or billing eventEvents win if billing emits them
Abandoned cartMetricLive signal
Payment failedMetricSame moment
First-order anniversaryDate if first_order_at existsElse 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

  1. Ten profiles with edge dates.
  2. Manually move a test date; watch enrollment within a scan day.
  3. Prove post-renewal messages stop.
  4. Compare day-1 entries to CRM match counts.

Reporting pitfall

Low day-1 entry is often empty/wrong dates—not a broken flow.

Keep reading