Today, we're launching Personalized Content in Klaviyo Personalization, giving ecommerce marketers SMS flows that adapt each text to the shopper reading it, stay in the brand's voice, and test themselves against the original message.
Until now, a flow sent the same text to everyone who triggered it. The shopper back for a third look at the same boots this week got "You left something behind," and so did someone who glanced at them once, even though their browsing, cart activity, and order history sat on the same profile.
Writing for each kind of shopper meant building conditional splits by hand, drafting copy for each branch, and guessing which version earned the click.
Now, Personalized Content generates personalized text for each shopper, starting from the message you wrote and keeping your link, offer, and variable tags intact.
A text that fits where each shopper is
Two shoppers can trigger the same flow for very different reasons.
- Take that shopper on their third look at the boots: Personalized Content might send them, "Still thinking about the Ridgeline boots? They're in your cart and ready when you are."
- A first-time browser might get something gentler: "Saw you checking out our new arrivals. Take another look whenever you like."
To pick the framing, Personalized Content reads what's already on each shopper's profile. Recent browsing and cart activity show how close they are to buying, and their recency, frequency, and monetary value (RFM) group shows how they've shopped with you over time. The words change to fit. Your link, offer, and variable tags stay put.
An LLM can draft a text in seconds. Most of our engineering went into what happens around that draft: reading each shopper's activity closely enough to know what they need to hear, keeping each message safe for your brand, and proving it beats what you wrote.
Built to learn at any list size
Our first version of this wrote a brand-new message for each shopper at the moment the flow sent it. It worked, and it was close to what most people picture when they hear "one-to-one personalization."
As we planned what came next, three problems surfaced.
- The first was learning: When each message is different, you can tell whether personalization helped overall, but not which version made the difference, so there's nothing specific to repeat or improve.
- The second was scale: A flow sends one text at a time, but a campaign can reach a million people within minutes, and writing a million unique messages in that window isn't realistic.
- The third was that each message was a one-off: This meant that the spend never built into anything reusable. It also cut against what brands kept telling us: they want help acting on what they know about their shoppers, and that help depends on messages you can learn from.
So, Personalized Content now writes for groups and chooses a specific angle for each person. Currently, it sorts consumers into four groups based on shopping intent level (high, medium, low, and unknown).
In the future, Personalized Content will sort shoppers into 8 groups based on RFM and write 5 angles for each, which gives a flow 40 messages to work with, whether you have 50,000 profiles or 5 million. The writing scales with the number of groups instead of the size of your list, so we can add detail where it matters, and each angle builds a track record you, and Composer, our AI marketing agent, can learn from.
On brand before it sends
Brands need to trust what goes out under their name, so each version passes four automatic checks before it sends:
- It stays within the length of your original, so it doesn't cost more to send.
- It keeps all your original links and adds none.
- It passes the same compliance checks as any other message.
- It follows your brand voice settings.
If a version fails any check, the shopper gets your original message, the same one your control group receives.
My team also talked to customers and heard that they want a say in how their messages are personalized. So you set the brand voice, preview sample messages before anything sends, and check the results afterward.
Proven against your own original
Personalization should have to earn its place in your flows. So each personalized message runs as a test against your original, with a control group, and each shopper stays in the same group for the whole test so the comparison holds up.
Conversion is the result that matters most. Click rate is the early signal, since orders take time to come in. We also watch unsubscribes, deliverability, and content quality, so a gain in one place doesn't hide harm somewhere else.
A reliable answer takes volume, which is why results stay grayed out in the product until they're statistically meaningful. It's also why we hold our next model to the same standard.
What comes next for Personalized Content
Next, we're building a second model, called the grader, to decide which version each shopper receives. It's a machine learning model trained on historical SMS content and the engagement that content produced, built to predict the version each shopper is most likely to engage with.
If someone hears from you often, it can rotate to its second or third choice so your texts don't start to sound repetitive.
Splitting the work this way reflects how we think about AI in personalization, in general. LLMs write well, but choosing what to send is a different problem. A model trained on engagement data handles that choice better and costs less, which keeps Personalized Content affordable.
We also don't grade our own work alone. We check the quality of our generated content against outside models and use what we learn to improve it, while the grader still decides what each shopper receives.
The grader isn't part of what's available today. We're introducing it gradually, starting in shadow mode, where it scores messages in the background without changing what anyone receives. We'll call it a success once it beats the alternative against a holdout.
Further out, we're working toward models that coordinate. Today, each one handles a single decision: Audience Optimization chooses who receives a campaign, Personalized Send Time chooses when, and Personalized Content chooses what the text says.
Coordinating them means Klaviyo can match each shopper with the right message at the right time and keep improving as results come in, without you tuning each feature separately. That takes a fuller picture of each shopper, built from their messages, your website, and your app.
Get started with Personalized Content
Personalized Content is included with Klaviyo Personalization. It works on English SMS and the text in RCS messages in 6 flows: Added to Cart, Viewed Product, Started Checkout, Back in Stock, Price Drop, and Win Back.
If you already use Personalization, open an SMS message in one of those flows and turn on "Personalize this message." Set your brand voice first so the copy sounds like you, preview the sample messages, and give the built-in test a couple of months before you judge the results.
If you're not on Klaviyo yet, your flow texts are probably still saying the same thing to the shopper who's ready to buy and the one who's just looking. Start a free trial and see how Personalized Content, Personalized Send Time, and Audience Optimization perform against your own messages.












