What actually triggers a flow
Every flow starts from a metric: a native event (Placed Order, Started Checkout, Viewed Product), a list/segment membership change, or a custom event sent through the Events API. The flow's filters and split conditions then read properties off that event or off the profile. If the event doesn't fire, or fires without the property a split depends on, the flow either never runs or runs down the wrong branch silently.
Where the standard flows break
| Flow | Underlying event | Common data failure |
|---|---|---|
| Welcome series | Subscribed to List / Consented to receive SMS | Consent recorded inconsistently across signup sources (popup, checkout, SMS keyword) |
| Abandoned cart | Started Checkout | Custom cart/subscription logic not wired into the e-commerce integration, so line items or totals are missing |
| Browse abandon | Viewed Product | Client-side tracking dropped by ad blockers or slow page loads, undercounting real browsing |
| Post-purchase / cross-sell | Placed Order (with line-item properties) | Product category/collection properties missing, so the "customers who bought X" split can't evaluate |
| Win-back / churn | Placed Order recency, custom "Predicted next order" or subscription-status event | No reliable recency or subscription-status event feeding the timing window |
How we approach a flow data audit
- Map every live flow to the event and properties it actually depends on.
- Verify each event fires client-side and server-side where relevant, with the properties the flow's filters reference.
- Check profile properties used in splits (customer tier, predicted CLV, subscription status) for staleness or missing values.
- Flag flows silently running on incomplete data - the ones that never error, just underperform.
What we hand back is an event/property spec per flow, not a rewritten flow. Implementing the copy and structure changes stays with whoever owns your Klaviyo account day to day.