What is a milestone trigger?
Still have a question, spotted an error, or have a better explanation or a source we should cite?
A milestone trigger fires an email when a subscriber hits a specific moment in their history with you. Not a behavior they just did. Not a campaign you decided to send. A threshold they crossed that your system noticed.
The four kinds you'll actually use:
Time-based. First-purchase anniversary, signup anniversary, subscription month 6, year 1, year 2. The trigger is a date math comparison: today = first_purchase_date + 365 days. Most ESPs (Klaviyo, Braze, Customer.io, HubSpot) let you build this as a flow filter on a date property.
Count-based. 5th order, 10th order, 100th support ticket resolved, 50th class booked. The trigger fires when a counter property updates and crosses a threshold. You need the counter incrementing somewhere - usually in your e-commerce platform or a custom event you push to the ESP.
Spend-based. Lifetime value crosses $500, $1,000, $5,000. Same pattern as count-based but on a money field. Shopify, BigCommerce, and Stripe expose this natively; you map it into your ESP as a customer property.
Program-based. Loyalty tier upgrade (Silver to Gold), points threshold crossed, certification completed, referral count hit. Driven by your loyalty platform (Smile.io, Yotpo, LoyaltyLion) pushing an event into the ESP when the tier flips.
These sit inside the wider family covered in what triggers can be used for automation?, and they're a specific case of the broader pattern in event-based vs behavior-based automation - milestones are event-based, fired by a state change, not by a behavior in the last 7 days.
The setup nobody tells you about
Milestone flows break in three predictable ways:
- Backfill problem. You build a "1-year anniversary" flow today. Every customer who passed the 1-year mark before you turned it on either gets nothing, or - worse - gets the email immediately because your filter says
first_purchase_date < today - 365 days. Always add a guard:first_purchase_date >= flow_start_date - X days. Klaviyo's date-property flow docs walk through this explicitly.
- Counter drift. If your order count lives in Shopify but the trigger fires from a Klaviyo metric, refunds, cancellations, and test orders all desync the two. A customer hits "10th order" twice because order 8 was refunded and re-counted. Decide one source of truth and pull from it.
- Timezone arithmetic. Anniversary emails sent at the ESP's account timezone vs the subscriber's local timezone produce "happy anniversary!" emails arriving on the wrong day. Most ESPs let you set send time per recipient timezone - turn it on.
What to actually put in the email
Keep it short. The milestone is the news; don't bury it under a coupon. A working pattern:
- One line stating the milestone ("This week is your second year with us").
- One specific data point you can pull from their account ("You've placed 14 orders since then" or "You've read 47 issues").
- One offer or next action, if you have one. If you don't, skip it - a milestone email without an offer still works.
Skip the rewards math if the reward is trivial. A "thanks for being a customer, here's 5% off" is worse than no email at all - the size of the gesture has to match the size of the milestone you're celebrating.
When milestones aren't worth it
If your repeat-purchase rate is under 20% and your average customer lifecycle is shorter than 6 months, milestone flows will fire for almost nobody. Build the welcome series and post-purchase follow-up first - they hit 100% of new subscribers. Milestones are a layer on top, not a starting point.
For subscription businesses, renewal-adjacent milestones ("30 days until renewal", "you've been with us a year") earn their keep because they double as soft retention touches. For one-time-purchase businesses, milestones are mostly a brand gesture - measure them on reply rate and unsubscribe rate, not revenue per send.
Contributors
Who worked on this answer
Every name links to their profile. Every company links to their site. Real people, real accountability.