Lifecycle email system
Customers bought once and weren't contacted again at the right time.
- Client
- US subscription supplement store
- Market
- United States
- Service
- Growth engineering
- Status
- Live
01 / Build
What I built
Lifecycle flows timed to the buying cycle (cart reminders, reorders, win-back, review requests), with holdout testing and batched sending.
- FluentCRM
- Brevo
- WooCommerce
- GTM
02 / Decisions
Key decisions
- Time every flow to the buying cycle, not to fixed delays, so a reorder reminder arrives close to when the customer would reorder, not on the same day for everyone.
- Keep a holdout group out of each flow. Without one, every order a flow touches gets credited to it; the holdout shows what would have happened anyway.
- Batch large sends instead of releasing them at once, so a campaign never competes with checkout for the store's server and sending reputation builds steadily.
03 / Notes
Architecture and hindsight
Architecture
WooCommerce order events feed FluentCRM, which holds the segments and the flow logic next to the order data. Brevo handles delivery. Links carry tracking parameters through Google Tag Manager, so an order that begins with an email click is attributed to the flow that sent it, and the holdout group gives the baseline to compare against.
What I'd do differently
Build the reporting view before the first flow goes live: one place that compares each flow with its holdout, month by month. Assembling it afterwards works, but the first weeks of data are harder to read.
04 / Outcome
Outcome
Live in production; every flow runs against a holdout group, so its effect can be measured.
Have a problem like this one?