Never ordered: browse nudge
Trigger: Viewed Product, with no Placed Order since.
Wait: one day, then one email showing what they looked at.
Goal: turn a browser into a first order.
Detailed case study · fictional brand
A CRM strategy story: how ASHGROVE's customers were sorted into five stages, which four journeys speak to them first and why each wait is what it is, and how it was built and tested safely in Klaviyo, with the decisions and the surprises left in.
01
ASHGROVE already had a brand, a website, a design system, newsletters and a demo shop. What it lacked was the part that makes a brand behave like a business: the right message reaching the right person at the right moment, without anyone doing it by hand.
The goal was to design and build that in Klaviyo for a fictional fashion brand, document every decision, and be able to show it without ever emailing a real customer. I am a non-coder, so the whole programme was built by describing outcomes to Claude, checking each result myself in the Klaviyo dashboard, and approving every change before it happened.
A lifecycle programme works out what a shopper has done and sends the one message that fits that moment. I started with four objectives: welcome new subscribers, recover abandoned carts, bring first-time buyers back for a second order, and win back lapsed customers. These four come first because each sits at a point where a customer is easiest to lose and a small, well-timed message is most likely to help. Everything else, such as a birthday email or a review request, can wait until these work.
| Objective | Flow | What a real programme would track | Why the wait is what it is |
|---|---|---|---|
| Welcome new subscribers | Welcome | First-order rate after the welcome series | Three emails over five days (days 0, 2 and 5), so the brand introduces itself and then shows one product without crowding the inbox. |
| Recover abandoned carts | Abandoned cart | Recovered-cart rate | One hour. The shopper is still thinking about the cart, and anyone who buys within that hour must not get a reminder, so the flow checks for an order first. |
| Bring buyers back for a second order | Post-purchase | Second-order rate within 90 days | Three days between the two emails, so the second ("something that goes with it") arrives once the parcel is likely to have landed. Ninety days before the same person can re-enter, so a repeat buyer gets the care guide again but a quick double order does not. |
| Win back lapsed customers | Win-back | Win-back rate | Five days between the two emails, so the second tells a different story instead of nagging. |
These are the numbers a real programme would measure. None are claimed here, because nothing was sent to a real customer and the shoppers are invented.
02
A marketing system that sends email is the one kind of project where a small mistake reaches a real person. So the safety rules were designed before anything else was built.
demo_send_allowed, must be true for a profile to get into a flow. Campaigns can't filter by property, so the campaign audience is a list containing only the four owned inboxes.03
A lifecycle programme needs customers with a history. I invented one, on purpose, and labelled it as invented everywhere.
82 shoppers with no email, 4 owned inboxes, 1 test profile.
Backdated Placed Order events across 58 profiles, USD 7,876 in total, all invented.
demo_send_allowed, lifecycle_stage, preferred_category, preferred_size, order_count, days_since_purchase.
Demo shoppers (never send), demo inboxes (4 allowed), newsletter (demo).
A lesson that shaped the design: backfilled history does not trigger flows. Klaviyo only starts a journey from events that happen after it is live, which is why the shop (chapter 02 of the main case study) sends real events of its own.










04
Segments sort shoppers by what they have done. Each is a live guest list: people move in and out as their behaviour changes.
| Stage | Rule | Day built | Recount |
|---|---|---|---|
| Never ordered | Zero Placed Order events, ever | 29 | 29 |
| First-time buyers | One order, within the last 30 days | 14 | 12 |
| Repeat buyers | Two or more orders, one in the last 60 days | 14 | 13 |
| Fading | No order in 60 days, at least one in the last 120 | 13 | 13 |
| Lapsed | No order in 120 days, bought at least once | 17 | 18 |













The same five stages, left to right, with the goal of each and the flow that speaks to it. The hatched columns are gaps: stages with no flow today. Counts are from the recount on QA day.
Goal: earn the first order.
Gap: no flow for this stage todayGoal: make the first order feel right and set up a second.
Post-purchase: after an orderGoal: keep the habit going.
Post-purchase: after each new orderGoal: re-engage them before they drift away.
Gap: no flow for this stage todayGoal: bring them back with a reason to return.
Win-back: on entering the stageNever ordered is the biggest stage (29 of 85 staged shoppers) and nobody speaks to it as a stage. Welcome and Abandoned cart catch some of these shoppers at a moment, but nothing is aimed at the stage itself. Fading has no flow at all.
Trigger: Viewed Product, with no Placed Order since.
Wait: one day, then one email showing what they looked at.
Goal: turn a browser into a first order.
Trigger: entering the Fading segment.
Wait: none, then one email built on the shopper's favourite category.
Goal: a next order before they lapse.
These two flows are a design only. Nothing above is built in Klaviyo and none of it has been tested. The four built flows are Welcome, Abandoned cart, Post-purchase and Win-back.
The top of the funnel is the concept social creative described in the Campaigns chapter: posts bring people to the shop, the shop's tracking tells Klaviyo what they did, and these flows take over.
05
Each flow has a trigger (what starts it), a bouncer (profile filter), a re-entry rule (can the same person go round again) and emails with waits between. Triggers come in kinds, which is worth knowing before building: added to a segment, added to a list, or a metric such as Placed Order.
| Flow | Trigger | Re-entry | Emails |
|---|---|---|---|
| Win-back | Added to segment: Lapsed | Never | Day 0 "It has been a while." · wait 5 days · Day 5 "One jacket, one story." |
| Post-purchase | Metric: Placed Order | After 90 days | Day 0 "How to make it last." · wait 3 days · Day 3 "Something that goes with it." (personalised) |
| Abandoned cart | Metric: Started Checkout | After 7 days | Wait 1 hour · split: already bought (stop) or everyone else · "You left something behind." |
| Welcome | Added to list: newsletter | Never | Day 0 "Welcome. We make fewer things." · wait 2 days · Day 2 "Start with one." (personalised) · wait 3 days · Day 5 "The whole collection, on one page." |











































06
The second Welcome and Post-purchase emails read the shopper's preferred_category and change the product, price, photograph and button. The important part is the fallback: a shopper with no name or no category still gets a complete email.
Hi {{ first_name|default:"there" }},
{% with affinity=person|lookup:'preferred_category'|default:'tees' %}
{% if affinity == 'knitwear' %} The Ribbed Crew, $128
{% elif affinity == 'outerwear' %} The Work Jacket, $218
{% elif affinity == 'accessories' %} The Belt, $68
{% else %} The Heavy Tee, $38
{% endif %}
{% endwith %}

"Hi Hugo,"

"Hi Sam,"

"Hi there,"
Two practical lessons: Klaviyo's template language uses elif, not elsif; and the template library and editor show the raw tags. Only the Preview window renders them, so a "broken-looking" template in the library is expected, not a bug.













07
Flows can only react to what they hear. The demo shop reports three events to Klaviyo (Viewed Product, Added to Cart, Started Checkout) and identifies the shopper by an email that already exists. Placed Order is not sent from the browser; it comes from my connector, since a real order would come from the store's back end.

Because the public shop records no anonymous visitors and has no sign-up form, I needed a safe way to be a customer. The picker lets me play Rajiv (new subscriber), Sam (cart abandoner), Leo (repeat buyer) or Hugo (lapsed) with one click, and everything I do lands on that person's profile.
The picker only shows with ?demo=1 in the address. Normal visitors see a clean store.
A finding on the way: some browser content blockers stop Klaviyo's tracking script. It worked in Safari and not in a blocker-heavy Chrome, so tracking can silently fail for real visitors too.
08
Nothing was trusted until it had been shown to work, in three layers.
The flow-level Preview names a profile and answers "Enters" or "Doesn't enter" without sending anything. Hugo, not on the newsletter list: doesn't enter. Rajiv, after being added: enters.
Preview with a full profile, then with a blank one. Three shoppers saw three different products; the blank profile saw "Hi there".
Eight test sends in total: six to my Zoho inbox (the first three never arrived, until the sending domain was activated), then one each to Gmail and Outlook. Then a look at the email headers.
| Inbox | Landed in |
|---|---|
| Zoho (Welcome 1) | Inbox |
| Gmail (Win-back 1) | Inbox, Promotions tab |
| Outlook (post-purchase care) | Junk |

09
Every journey has a filter and every audience is a list I control. A mistake could not reach a stranger.
Counts drift and edges leave gaps. Test the boundaries, then test them again a week later.
Passing the checks got me past the front door, not into every inbox.
Personalisation that works for complete data can fail for incomplete data. Both need a preview.
Backfilled history cannot start a journey, so a demo needs live events too.
243 numbered evidence rows exist because each screenshot was saved and described the moment it arrived.
10
The Klaviyo build, flows, templates, segments, authenticated sending domain, shop tracking, and test emails in three inboxes.
Shoppers, orders, prices and each profile's favourite category (a real store would work it out from purchases). The Instagram posts and the Reel are concept creative only: nothing was posted to a real Instagram account and no ads are running.
Back to the full ASHGROVE story: brand, store, campaigns and lifecycle.
Back to the case study