Library / DTC brands / Klaviyo flows

beauty brandsUnited States

Klaviyo flowsCampaigns do the work flows should do

Beauty retention is a cadence problem more than a creative problem.

00

The short version

Intern through CEO

Read it once, then stop negotiating with it. Klaviyo flows for beauty brands is a wiring job: name them → exclusions → rpr → campaigns on top. Objects, then edges, then one test conversion. You do not need a new tool to start. You need the first writer to land on one contact this week.

  1. 01

    Beauty brands do not have a Klaviyo flows problem because they lack Shopify + Klaviyo. They have it because campaigns do the work flows should do.

  2. 02

    Wire these objects first: Named core flows, profile, metric (Placed Order, etc.), exclusion groups, flow vs campaign job split, revenue-per-recipient, Shopify events.

  3. 03

    Then these edges, in order: Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec · Metric Added to Cart → cart flow; browse flow excluded from the same people · Exclusion group → customers / in-other-flow / unsubscribed layered, not one messy filter · Campaign calendar → does not duplicate a live flow's job the same week

  4. 04

    Done looks like a test you can repeat: Place a $1 test order. Confirm the right flow messages and that welcome/coupon flows did not also fire. Check RPR on the core flows. Toggle an exclusion and confirm a customer is out of acquire. Name the core flows on one page; unnamed 'flow 12' fails.

  5. 05

    Start here: Score welcome, cart, post-purchase, win-back. Kill the campaign doing a flow's job.

In even plainer words

Beauty brands already have Shopify + Klaviyo. The leak is not a missing feature. Campaigns do the work flows should do. Software did not cause it. A missing write-in did: the person exists in one tool and not in the pipeline.

Here is how you actually wire it. Name the objects: Named core flows, profile, metric (Placed Order, etc.), exclusion groups, flow vs campaign job split, revenue-per-recipient, Shopify events. Then connect these edges, in order: Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec · Metric Added to Cart → cart flow; browse flow excluded from the same people · Exclusion group → customers / in-other-flow / unsubscribed layered, not one messy filter · Campaign calendar → does not duplicate a live flow's job the same week. If you skip an edge, the next one is decoration. If you add a Shopify + Klaviyo feature first, you usually skip an edge without noticing.

Prove it with a test, not a screenshot. Place a $1 test order. Confirm the right flow messages and that welcome/coupon flows did not also fire. Check RPR on the core flows. Toggle an exclusion and confirm a customer is out of acquire. Name the core flows on one page; unnamed 'flow 12' fails. How you know it worked on the board: Flow RPR is weekly (the number that tells you if a flow earns). If that number is a vibe, do not add traffic.

What to do this week, and only this week: Score welcome, cart, post-purchase, win-back. Kill the campaign doing a flow's job. An intern can run the objects page and one test conversion. A CEO should protect that from a second priority.

Who

Same system. Three jobs.

Read your row

Intern

What you actually do

Day one: name the core flows (welcome, cart, browse, post-purchase, win-back). Write flow vs campaign jobs. Do not build a new campaign. Open exclusions. If campaigns are doing flow work, write that down as the leak.

Operator

What you protect

You already feel campaigns do the work flows should do. Beauty retention is a cadence problem more than a creative problem. Protect one sequence for 90 days. The four moves are name them → exclusions → rpr → campaigns on top. The edges are Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec then Metric Added to Cart → cart flow; browse flow excluded from the same people. Revenue per recipient on flows is the number. Open rate is a meeting, not a system.

CEO

What you refuse to fund

This is a money leak, not a preference about tools. Campaigns do the work flows should do. Until flow rpr is a number you will defend, buying more traffic or more seats makes the leak more expensive. Refuse a second database: Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec.

Example

A Tuesday that looks familiar

Before / after

Before

Tuesday. Someone among beauty brands. Beauty retention is a cadence problem more than a creative problem. Shopify + Klaviyo is open. A colleague asks where a person sits. The answer is a screenshot, a Slack thread, or “I think they’re interested.” The writer (form, calendar, shop, or phone) and the pipeline are two databases.

After

Same Tuesday, after write-in exists. Revenue per recipient on flows is the number. Open rate is a meeting, not a system. Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec The next move is written. That is the difference between a login and a system.

Worked example

Keep it this plain. A person in beauty brands already paid for Shopify + Klaviyo. Beauty retention is a cadence problem more than a creative problem. They add a page, a form, a calendar. None of it writes into a spec. By Friday the calendar has ghosts and the pipeline still looks like the snapshot.

The fix is not a better template. Core flows are live and named. Prove write-in: Place a $1 test order. Confirm the right flow messages and that welcome/coupon flows did not also fire. Check RPR on the core flows. Toggle an exclusion and confirm a customer is out of acquire. Name the core flows on one page; unnamed 'flow 12' fails. This week is one move: Score welcome, cart, post-purchase, win-back. Kill the campaign doing a flow's job. If that feels too small, that is the point. Operators fail by starting at move four.

01

Leak versus system

Shopify + Klaviyo

The leak

Campaigns do the work flows should do. Welcome is a coupon. Cart is three panics. Post-purchase begs for a review on day zero. Win-back never stops. The list looks large. Revenue per recipient on flows is a number nobody opens.

The system

Core flows are live and named. Each has a job. Exclusions do not fight each other. Campaigns pulse on top. Revenue per recipient is the weekly score — not open rate.

How it actually works

A working Klaviyo account usually needs a small set more than a clever campaign: welcome, browse, cart, post-purchase, replenishment or second purchase, win-back with a stop, sunset. If Thursday's send is doing three of those jobs, you do not have lifecycle. You have a calendar.

Exclusions are the craft. A buyer should not get cart. A subscriber should not get acquire coupons. Browse should not clone cart. If Placed Order is dirty, every flow metric is theatre — fix the event before the subject line.

Revenue per recipient on flows is the number. Open rate is a meeting, not a system.

Campaigns do the work flows should do when flows are unfinished or unnamed. Core flows are live and named. Revenue per recipient is watched so a pretty flow that does not earn can be killed. Exclusions must not fight each other — a profile in two opposite flows is a bug. Flow vs campaign jobs are split on paper: state vs time. If you blast a restock that the back-in-stock flow already owns, you taught the list to wait for the blast and the flow looks weak.

Wire Shopify metrics you actually need: Placed Order, Ordered Product, Refunded, Added to Cart, Viewed Product. If a metric does not fire, the flow is a costume. Profiles should not be duplicated junk — identity is email. Test each core flow with one profile action. Filters (has purchased X, is subscriber) belong in the flow, documented.

Two databases: Shopify customers and Klaviyo profiles that do not match, plus a separate GHL for 'brand' email. For DTC, Klaviyo is the email record. The intern runs $1 orders and cart tests. They do not redesign creative first. If RPR is unknown, measurement is the first wire, not a new flow.

Wire

How to connect it

Objects, then edges, then a test

Named core flows, profile, metric (Placed Order, etc.), exclusion groups, flow vs campaign job split, revenue-per-recipient, Shopify events.

  1. 01

    Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec

  2. 02

    Metric Added to Cart → cart flow; browse flow excluded from the same people

  3. 03

    Exclusion group → customers / in-other-flow / unsubscribed layered, not one messy filter

  4. 04

    Campaign calendar → does not duplicate a live flow's job the same week

Prove write-in

Place a $1 test order. Confirm the right flow messages and that welcome/coupon flows did not also fire. Check RPR on the core flows. Toggle an exclusion and confirm a customer is out of acquire. Name the core flows on one page; unnamed 'flow 12' fails.

Day one: name the core flows (welcome, cart, browse, post-purchase, win-back). Write flow vs campaign jobs. Do not build a new campaign. Open exclusions. If campaigns are doing flow work, write that down as the leak.

02

The spine

Scan first
01

Name them

Welcome, browse, cart, post-purchase, win-back, sunset. Jobs written.

02

Exclusions

Bought, in-conversation, recently mailed, complained — layered.

03

RPR

Revenue per recipient on each flow. Kill or rewrite what does not earn.

04

Campaigns on top

Pulses. Not a substitute for unfinished flows.

Steps

Do this in order

Why, then done when
  1. 01

    Write the leak in one sentence

    On one line, for beauty brands: Campaigns do the work flows should do. Add who gets hurt (calendar, cash, inbox, or reputation). If two people write different sentences, you do not agree yet — stop and agree.

    Why: Teams skip this and jump into settings. Then every person is fixing a different problem with the same login.

    Done when: One sentence. Shared. No adjectives required.

  2. 02

    Name the objects

    Named core flows, profile, metric (Placed Order, etc.), exclusion groups, flow vs campaign job split, revenue-per-recipient, Shopify events.

    Why: If objects aren't named, software invents a second database.

    Done when: A stranger can list them.

  3. 03

    Name them

    Welcome, browse, cart, post-purchase, win-back, sunset. Jobs written. Then wire: Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec

    Why: Beauty brands cannot skip this edge. Campaigns do the work flows should do when flows are unfinished or unnamed. If it is not true, Shopify + Klaviyo is already a second database.

    Done when: Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec is true on a test.

  4. 04

    Exclusions

    Bought, in-conversation, recently mailed, complained — layered. Then wire: Metric Added to Cart → cart flow; browse flow excluded from the same people

    Why: Beauty brands skip this and the leak returns as a private language. Wire Shopify metrics you actually need: Placed Order, Ordered Product, Refunded, Added to Cart, Viewed Product. Spec tags, fields, and states have to be the same objects the next workflow will read.

    Done when: Metric Added to Cart → cart flow; browse flow excluded from the same people is true on a test.

  5. 05

    RPR

    Revenue per recipient on each flow. Kill or rewrite what does not earn. Then wire: Exclusion group → customers / in-other-flow / unsubscribed layered, not one messy filter

    Why: Beauty brands feel this as Campaigns do the work flows should do. Two databases: Shopify customers and Klaviyo profiles that do not match, plus a separate GHL for 'brand' email.

    Done when: Exclusion group → customers / in-other-flow / unsubscribed layered, not one messy filter is true on a test.

  6. 06

    Prove write-in

    Place a $1 test order. Confirm the right flow messages and that welcome/coupon flows did not also fire. Check RPR on the core flows. Toggle an exclusion and confirm a customer is out of acquire. Name the core flows on one page; unnamed 'flow 12' fails.

    Why: Calendar full + pipeline empty means two databases.

    Done when: One test conversion, one contact, right stage/state.

  7. 07

    Put a number on the wall

    Every Monday, look at Flow RPR (The number that tells you if a flow earns), then core flows (Named, not 'we'll finish later'). Write one action or write “hold.” A dashboard with no action is theatre.

    Why: What gets reviewed gets run. What only lives in a tool gets ignored the week someone is busy.

    Done when: Three numbers. One owner. Fifteen minutes. Actions attach.

  8. 08

    Finish one move this week

    Score welcome, cart, post-purchase, win-back. Kill the campaign doing a flow's job.

    Why: Operators fail by starting at move four. Interns fail by making a 40-item checklist. CEOs fail by adding a second priority. One proven write-in beats an elegant plan.

    Done when: The move is true, or you can name the blocker in one sentence.

Walkthrough

The four moves, expanded

Same spine. More words.
01

Name the objects

Named core flows, profile, metric (Placed Order, etc.), exclusion groups, flow vs campaign job split, revenue-per-recipient, Shopify events.

If objects aren't named, software invents a second database.

Beauty retention is a cadence problem more than a creative problem.

02

Name them

Welcome, browse, cart, post-purchase, win-back, sunset. Jobs written. Then wire: Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec

Beauty brands cannot skip this edge. Campaigns do the work flows should do when flows are unfinished or unnamed. If it is not true, Shopify + Klaviyo is already a second database.

On Shopify + Klaviyo, this means the data model matches how beauty brands actually work — not the snapshot demo. Edge: Metric Added to Cart → cart flow; browse flow excluded from the same people

03

Exclusions

Bought, in-conversation, recently mailed, complained — layered. Then wire: Metric Added to Cart → cart flow; browse flow excluded from the same people

Beauty brands skip this and the leak returns as a private language. Wire Shopify metrics you actually need: Placed Order, Ordered Product, Refunded, Added to Cart, Viewed Product. Spec tags, fields, and states have to be the same objects the next workflow will read.

Revenue per recipient on flows is the number. Open rate is a meeting, not a system.

04

RPR

Revenue per recipient on each flow. Kill or rewrite what does not earn. Then wire: Exclusion group → customers / in-other-flow / unsubscribed layered, not one messy filter

Beauty brands feel this as Campaigns do the work flows should do. Two databases: Shopify customers and Klaviyo profiles that do not match, plus a separate GHL for 'brand' email.

score welcome, cart, post-purchase, win-back. Kill the campaign doing a flow's job.

Why

Questions people actually ask

Pushback is normal

Why not just buy another Shopify + Klaviyo feature?

Because the login already exists. Campaigns do the work flows should do. Welcome is a coupon. A new feature on a missing spec is a second database. Finish this edge first: Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec.

Why start with objects instead of a workflow?

Day one: name the core flows (welcome, cart, browse, post-purchase, win-back). Write flow vs campaign jobs. Do not build a new campaign. Open exclusions. If campaigns are doing flow work, write that down as the leak. Workflows on unnamed objects fire on folklore. Name contact (or profile), stage or state, and the writer (form, calendar, metric) before any on-switch.

What does “wired” actually mean?

A test conversion creates or updates one person, on the right stage or state, with the fields the next sequence will read. Place a $1 test order. Confirm the right flow messages and that welcome/coupon flows did not also fire. Check RPR on the core flows. Toggle an exclusion and confirm a customer is out of acquire. Name the core flows on one page; unnamed 'flow 12' fails. If you merge after the test, identity is wrong — fix that, do not add a dedupe automation.

Why write it down if the team already knows?

If it is only in someone's head, a new hire needs a story, reporting cannot be defended, and automations fire on folklore. Writing is how two people mean the same object on Monday.

Why does this keep coming back after we 'set it up'?

Because setup was a project, not a review. Collisions (Browse vs cart vs buyer) is how you stop the leak returning dressed as a new feature. If Placed Order is dirty, every metric is theatre. If browse collides with cart, you trained people to ignore you. Discount-first abandon trains the wrong buyer — especially when consideration is long. Score the system. Then ship the two worst gaps. Not another brand story.

Why should beauty brands care about this versus more leads?

More leads into a leak is a more expensive leak. Revenue per recipient on flows is the number. Open rate is a meeting, not a system. Watch flow rpr before you buy traffic. If that number is folklore, acquisition is a vanity spend.

What if we do not have time?

Then you only have time for the objects page and one test conversion. Score welcome, cart, post-purchase, win-back. Kill the campaign doing a flow's job. That is the intern version of strategy. Protect it from a second priority for seven days.

03

Skip this / do this

Same four moves

Skip this

Leaving objects unnamed because Shopify + Klaviyo is “set up”.

Do this

Named core flows, profile, metric (Placed Order, etc.), exclusion groups, flow vs campaign job split, revenue-per-recipient, Shopify events.

Skip this

Building a workflow or flow before a writer lands on one contact.

Do this

Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec

Skip this

Calling it done because a screenshot looks busy.

Do this

Place a $1 test order. Confirm the right flow messages and that welcome/coupon flows did not also fire. Check RPR on the core flows. Toggle an exclusion and confirm a customer is out of acquire. Name the core flows on one page; unnamed 'flow 12' fails.

Skip this

Leaving “Campaigns on top” to chance.

Do this

Pulses. Not a substitute for unfinished flows.

Misses

How this usually goes wrong

Then the fix

The usual miss

Calling Shopify + Klaviyo “set up” because someone logged in and imported a snapshot.

Do this instead

Welcome, browse, cart, post-purchase, win-back, sunset. Jobs written. Then prove write-in: Place a $1 test order.

The usual miss

Building the workflow or flow before the writer (form, calendar, shop event) lands on one contact.

Do this instead

Connect Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec first. Automations on a missing writer invent a second database.

The usual miss

Adding a page, form, flow, or campaign every time last week hurt.

Do this instead

Name which edge is missing. Fix that edge. Hurt is usually a skipped write-in, not a missing asset.

The usual miss

Reporting that nobody will defend in a meeting — screenshots, vanity opens, 'interested' counts.

Do this instead

Flow RPR: Weekly. The number that tells you if a flow earns. If you cannot say it out loud, it is not a scoreboard.

The usual miss

Hiring or retaining an agency to invent the spec while also running the calendar.

Do this instead

Hands on a known sequence are useful. Hands inside a missing spec pick the louder job (the calendar) and the leak stays.

04

What to watch

A scoreboard

Flow RPR

Weekly

The number that tells you if a flow earns

Core flows

Live

Named, not 'we'll finish later'

Collisions

None

Browse vs cart vs buyer

This week

score welcome, cart, post-purchase, win-back. Kill the campaign doing a flow's job.

US operators · Monday reviews, US-friendly hours. The spine is the same — the clock is not.

01

Core flows are live and named

02

Revenue per recipient is watched

03

Exclusions do not fight each other

04

Flow vs campaign jobs are split

Want the longer lesson, not the page for this niche? Watch revenue per recipient

Working notes

DTC Retention Scorecard

Score your Klaviyo and lifecycle system the way an operator would. Request the file. It arrives by email — not a public dump, not a drip of slogans.

Request the notes ↗
Notes

Questions that come up

Shopify + Klaviyo

Explain this like I have five minutes.

Beauty brands do not have a Klaviyo flows problem because they lack Shopify + Klaviyo. They have it because campaigns do the work flows should do. Wire these objects first: Named core flows, profile, metric (Placed Order, etc.), exclusion groups, flow vs campaign job split, revenue-per-recipient, Shopify events. Then these edges, in order: Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec · Metric Added to Cart → cart flow; browse flow excluded from the same people · Exclusion group → customers / in-other-flow / unsubscribed layered, not one messy filter · Campaign calendar → does not duplicate a live flow's job the same week Done looks like a test you can repeat: Place a $1 test order. Confirm the right flow messages and that welcome/coupon flows did not also fire. Check RPR on the core flows. Toggle an exclusion and confirm a customer is out of acquire. Name the core flows on one page; unnamed 'flow 12' fails. Start here: Score welcome, cart, post-purchase, win-back. Kill the campaign doing a flow's job.

Why does this keep failing for beauty brands?

Campaigns do the work flows should do. Welcome is a coupon. Cart is three panics. Post-purchase begs for a review on day zero. Win-back never stops. The list looks large. Revenue per recipient on flows is a number nobody opens. Revenue per recipient on flows is the number. Open rate is a meeting, not a system.

What does a real week look like?

Before: Tuesday. Someone among beauty brands. Beauty retention is a cadence problem more than a creative problem. Shopify + Klaviyo is open. A colleague asks where a person sits. The answer is a screenshot, a Slack thread, or “I think they’re interested.” The writer (form, calendar, shop, or phone) and the pipeline are two databases. After: Same Tuesday, after write-in exists. Revenue per recipient on flows is the number. Open rate is a meeting, not a system. Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec The next move is written. That is the difference between a login and a system.

What should I stop doing?

Leaving objects unnamed because Shopify + Klaviyo is “set up”. Building a workflow or flow before a writer lands on one contact. Do the four moves instead: name them → exclusions → rpr → campaigns on top.

What number should beauty brands watch?

Flow RPR: Weekly — The number that tells you if a flow earns. Then core flows (Named, not 'we'll finish later'). If those are folklore, do not add another Shopify + Klaviyo workflow.

What is the first move?

score welcome, cart, post-purchase, win-back. Kill the campaign doing a flow's job.

Why not just buy another Shopify + Klaviyo feature?

Because the login already exists. Campaigns do the work flows should do. Welcome is a coupon. A new feature on a missing spec is a second database. Finish this edge first: Metric Placed Order → post-purchase flow; customers excluded from welcome-discount if that is the spec.

Why start with objects instead of a workflow?

Day one: name the core flows (welcome, cart, browse, post-purchase, win-back). Write flow vs campaign jobs. Do not build a new campaign. Open exclusions. If campaigns are doing flow work, write that down as the leak. Workflows on unnamed objects fire on folklore. Name contact (or profile), stage or state, and the writer (form, calendar, metric) before any on-switch.

What does “wired” actually mean?

A test conversion creates or updates one person, on the right stage or state, with the fields the next sequence will read. Place a $1 test order. Confirm the right flow messages and that welcome/coupon flows did not also fire. Check RPR on the core flows. Toggle an exclusion and confirm a customer is out of acquire. Name the core flows on one page; unnamed 'flow 12' fails. If you merge after the test, identity is wrong — fix that, do not add a dedupe automation.

Why write it down if the team already knows?

If it is only in someone's head, a new hire needs a story, reporting cannot be defended, and automations fire on folklore. Writing is how two people mean the same object on Monday.

Continue

Also worth reading

beauty brands
GA4 + GSC

Search Intelligence

GSC and GA4 sit in silos. Nobody sequences the work.

Read ↗
Growth systems

90-day growth sprint

Roadmaps are annual. Execution is weekly panic.

Read ↗
GA4 + GSC

GA4 and Search Console loop

You have access. You do not have a Monday ritual.

Read ↗
Email systems

Email deliverability

You write better emails into a worse inbox.

Read ↗
Klaviyo

Win-back system

Lapsed buyers get a coupon and a shrug.

Read ↗
Next

If the leak is expensive, talk.

Email and WhatsApp stay open. A call is for installing the system — not for a tour of tools.