Klaviyo Users Guide to AI Personalization Without Rebuilding Your Flows
It is day 14 of a seven-step post-purchase flow, and your team is deciding whether to send a product education email, a replenishment reminder, or a customer story next. The flow already has timing rules, event triggers, conditional splits, and carefully tested templates. Rebuilding it to add more relevant message choices is not a realistic project for a small lifecycle team.
This is the practical appeal of adding a decision layer to Klaviyo. You keep the flow architecture that already works, create a small set of message variants, and let a per-person decision determine which branch a customer receives at send time.
I have worked with Klaviyo flows in DTC and SaaS retention programs, and the distinction matters. Personalization is not useful if the implementation creates a second automation system that your team has to maintain. The goal is to make the existing system more selective, not to replace it.
What a decision layer changes in Klaviyo
A standard Klaviyo flow determines when a customer enters an automation and what happens next. The trigger might be a purchase, signup, subscription event, or change in profile status. Flow filters, time delays, conditional splits, and message blocks then shape the customer journey.
A decision layer adds one step before the flow reaches the relevant message. Zalera evaluates behavioral signals for an individual customer and attaches a decision property to that Klaviyo profile. The flow then uses a conditional split to read that property and select the appropriate variant.
For example, a profile property might contain one of three values:
- education: send content that explains how to get more value from the product.
- social-proof: send a customer story, review, or use case.
- offer: send a promotional or replenishment message.
The exact property name and values are yours to define. What matters is that the value exists on the profile before the flow reaches the decision point. Klaviyo continues to handle the trigger, timing, suppression rules, delivery, and reporting for the flow. The additional logic determines which message path is most appropriate for that person.
This is not a replacement for Klaviyo, and it is not a rewrite of your flows from scratch. It is one extra conditional branch inside an automation you already understand.
A practical Klaviyo flow setup
Consider a fictional DTC skincare brand with a seven-step post-purchase flow. The flow starts after a first order and includes an order confirmation, product-use guidance, a review request, replenishment education, and a cross-sell message. The team has noticed that customers behave differently after purchase:
- Some open education emails but do not click offers.
- Some browse complementary products several times before the replenishment window.
- Some customers respond to reviews and customer stories more than product claims.
The team does not need three separate post-purchase flows. It can add variants to the message at step five, after the product-use emails and before the replenishment reminder.
- Create the three message variants in Klaviyo and keep their content focused on the same stage of the customer relationship.
- Define a profile property, such as post_purchase_variant, with values for education, social proof, and offer.
- Have Zalera attach the selected value to each relevant Klaviyo profile before the flow reaches step five.
- Add a conditional split that checks the value of post_purchase_variant.
- Place the matching email in each branch and set a sensible default branch for profiles without a valid value.
The rest of the flow stays in place. The original trigger does not change. Existing delays, flow filters, unsubscribe handling, and subsequent messages do not need to be duplicated. If the decision is only needed for one message, the split can be placed immediately before that message and the branches can rejoin afterward, depending on the flow design.
That last point is important operationally. A branch should represent a meaningful content choice, not an entirely separate customer journey unless you have a clear reason to create one. The smaller the change, the easier it is to test, monitor, and explain to the rest of the team.
How to choose the right variants
Adding a decision layer does not make weak creative stronger. You need at least two or three message variants that are already distinct enough to justify a choice. Swapping a headline while keeping the same offer, argument, and call to action usually does not give the system much to decide between.
Start with a decision that your team can explain without technical language. For a SaaS onboarding flow, the variants might be a setup checklist, a short case study, and a prompt to invite a teammate. For a DTC replenishment flow, they might be usage guidance, a reminder based on the expected product cycle, and a complementary-product recommendation.
Keep the variants aligned to the same customer moment. Do not ask one branch to educate a new customer and another to make an aggressive offer to an established customer unless the flow has been designed for that difference. The content should differ in emphasis while still belonging in the same step of the journey.
I also recommend naming variants for operators, not marketers trying to make a campaign sound exciting. “Replenishment education” and “cross-sell recommendation” are easier to troubleshoot than internal names that do not describe the actual message.
The profile data you need first
A decision layer is worth doing when your Klaviyo data can support a decision. Before adding the split, review the profile properties and events used by the relevant flow. Look for consistent values, reasonable event volume, and a clear connection between the behavior and the message choice.
Useful inputs may include purchase history, product category, subscription status, engagement with previous messages, browsing or click behavior, and the time since a relevant event. The exact inputs depend on the flow. A post-purchase decision should not depend on data that only exists for a small fraction of customers or arrives after the message is sent.
Clean profile properties matter just as much. Check whether values use consistent capitalization and spelling. “Active,” “active,” and “yes” may look close to a person reviewing a profile, but they can create different outcomes in a conditional split. Decide what happens when a property is missing, stale, or outside the expected list of values.
Set a default branch before launch. It might contain your current control message, which gives the team a safe destination when a profile has no decision property. A default also makes the flow easier to inspect because every profile has a defined path.
Testing without losing control of the flow
Test the decision layer like a flow change, not like a black box. First, use test profiles with each expected property value. Confirm that the correct conditional split branch is selected and that the message contains the intended content, links, and personalization tags.
Next, test profiles with no property, an unexpected value, and a recently updated value. This is where many implementations become difficult to operate. If the property is attached too late, the customer may reach the split before Klaviyo can read the intended value. If the value is not valid, the profile should reach the default path rather than stop at an unclear branch.
Use Klaviyo’s flow review tools and profile activity to verify the sequence. Check the timing between the decision property update and the flow step. Review suppression rules and existing flow filters as well. A correct branch does not help if the message is later skipped because of a global suppression setting or another flow filter.
For the initial rollout, keep a control variant. You want to answer two separate questions: whether the decision layer sends people to the intended content, and whether the selected content performs better than the existing message. Those are different operational and performance questions.
Do not judge the result after a handful of sends. Segment the outcome by variant, flow step, customer type, and relevant purchase or engagement behavior. The useful measure may be a click, second purchase, subscription continuation, activation event, or another action that matches the purpose of the flow. Opens alone are rarely enough to decide whether the content path is useful.
Where this approach fits for a small team
For a growing DTC or SaaS team, the main benefit is not adding more automation for its own sake. It is reducing the number of separate flow copies you have to maintain. One existing flow can hold a controlled set of variants while the decision property determines the path for each customer.
Zalera adds this per-person decision layer on top of Klaviyo. Its pricing includes a Free plan with 50,000 decisions per month, a Growth plan at $199 per month, and a Scale plan at $699 per month. The appropriate starting point depends on your profile volume, decision frequency, and how many flows you plan to cover.
This approach is not worth prioritizing if your profile data is inconsistent, your event history is too thin, or you have only one message that could reasonably be sent. Fixing tracking and creating useful variants comes first. It is also not a substitute for basic Klaviyo hygiene. You still need clear flow ownership, naming conventions, suppression rules, QA checks, and a reporting plan.
The concrete takeaway is simple: keep the Klaviyo flow, add a profile decision property before the relevant step, and use one conditional split to route customers to the variant that fits them best.