Your flow revenue is probably a lie.
Klaviyo isn't broken. It's just counting something different to what you think it's counting.
Someone abandons a cart. Gets the email. Buys. Klaviyo logs that as revenue the flow generated.
What it never asks is whether they'd have bought anyway.
Plenty would have. They got distracted, went for their tea, came back and finished the order off their own back. The email did nowt.
If you've had an agency on email for a while, that inflated number has been in every report you've been sent. Possibly for years. And if you're on your second or third agency, it was in the last lot's reports too, which is part of why it took you so long to work out something was off.
The real figure is obtainable. It takes an afternoon to set up, and hardly anyone bothers.
What Klaviyo is actually measuring
Klaviyo is answering a narrower question than the one you think you asked.
The question you think you asked: how much money did this flow make?
The question Klaviyo answered: how much did people spend after opening or clicking this email?
Those aren't the same question. They're not even close.
Klaviyo uses a last touch model with a default five day lookback on email. Open or click an email, buy anything within five days, that email takes the credit.
Worth sitting with for a second. Five days, and an open is enough to start the clock.
Five days is a long time in ecommerce. Somebody opens your Tuesday newsletter, doesn't take a single thing in, then buys on Saturday after seeing a mate wearing your jumper. Klaviyo books that to Tuesday's newsletter.
That is a design decision, and a defensible one. It also pushes the number in one direction every single time.
The opens problem sat underneath it
Now layer on Apple.
Apple's Mail Privacy Protection loads tracking pixels automatically, whether or not a human ever looked at the email. Klaviyo counts those as opens by default, and an open starts the attribution window.
So you've got a five day credit window being opened by people who never read the thing.
Klaviyo lets you strip this out. You can exclude Apple privacy opens from attribution, and you can change the setting so the window only starts on a click.
Go and look at what yours are set to. In most accounts they've sat untouched since the day it was built.
Fair warning before you change anything. Your reported email revenue will drop, possibly hard. Nothing has got worse. You've just stopped measuring it badly. But if your finance director sees that graph without the context first, you'll be having an awkward Monday.
Worth doing anyway. It still isn't the real problem.
The question nobody in your reporting chain is asking
So here is the question underneath all of it.
Say you've cleaned the settings up. Clicks only, no privacy opens, tight window. Someone clicks the abandoned cart email and buys.
Would they have bought anyway?
Think about what an abandoned cart actually is. Someone put eighty quid of your product in a basket. They picked the size. They got as far as checkout. Then the doorbell went, or the baby woke up, or they wanted to run it past their other half first.
A share of those people were always coming back. Your email turned up while they were already on their way.
Klaviyo has no way of knowing that. Neither does your agency. Neither do you.
The uncomfortable version: some portion of your abandoned cart revenue would have landed in your bank account if you'd never built the flow at all.
Nobody knows what portion. Nobody can know, unless they measure it on purpose.
So why has nobody ever put that measurement in front of you?
Why nobody's brought this up
Two reasons, and neither is a conspiracy.
The first is that plenty of people running email accounts don't know. There's been a wave of agencies built off the back of a YouTube playlist and a five hundred quid course, priced off what they've been told they're worth rather than what they can actually do. You can't interrogate a number you don't know exists.
The second is that measuring it properly used to be a real faff.
Klaviyo do now have a native tool for it, called global holdout groups. It does the job well. There's a catch: you need at least 400,000 profiles in the account to qualify, and they recommend running it for three months.
Most brands reading this have forty thousand profiles. Not four hundred thousand.
So the tool exists and most of the market is locked out of it. If you want the number, you build it yourself.
Building a holdout by hand
Pick one flow. Just one. Abandoned checkout is the right place to start, because that's where the gap between reported and real is likely widest.
Don't test three flows at once. You'll get a mess you can't read.
Step one. Build your normal eligibility segment. Everyone who'd ordinarily enter the flow.
Step two. Create a second segment with a random sample condition layered on top. That's your holdout. They get nothing from this flow for the duration.
Step three. Add a conditional split at the top of the flow that routes the holdout group straight out. Everyone else carries on as normal.
Step four. Leave it alone. Don't change the offer, don't add an email, don't pull it in week two because the early numbers looked ugly.
Step five. Compare revenue per profile between the two groups. Not total revenue, because the groups are different sizes. Revenue per profile.
The difference between those two figures, multiplied by the size of the exposed group, is roughly what the flow actually earned you.
Sizing it so the answer means something
Skip this and the whole exercise produces noise you'll misread as a finding.
A ten percent holdout over thirty days is fine if you're doing serious order volume. If you're doing forty orders a month, ten percent of your abandoned cart traffic will produce a handful of orders in each group and a difference you could explain away with one unusually large purchase.
Rough rule: you want enough orders in the holdout group that a single order landing either way doesn't swing the result. If you can't get there in thirty days, either widen the holdout to twenty percent or run it for ninety days. Small brands usually need to do both.
Two things that will ruin the test regardless of sizing. Letting holdout profiles get the same offer through a campaign, which contaminates the whole thing. And stopping early because you got twitchy about withholding revenue.
On that second point. Yes, you're giving up some revenue to run this. That's the price of knowing. A month of slightly softer flow revenue against permanently knowing which flows earn their keep isn't a difficult trade.
What you do with the answer
It comes back one of three ways.
Close to the reported number. Good. The flow does what it says on the tin, and you've now got a figure you can put in front of a finance director and defend.
Well below. More common, and more useful. A chunk of what you've been calling flow revenue turns out to be just revenue. Now you can stop pouring effort into a flow that's mostly taking credit for orders that were already happening.
Negative. It happens, particularly on aggressive winback and heavy post purchase sequences. The group you left alone outperformed the group you messaged. You've been paying good money to nag people out of buying, which is a mug's game.
All three of those put you somewhere better than where you're stood now.
The bit that actually matters
None of this is about catching Klaviyo out. The platform gives you the tools to measure it honestly and documents exactly how the model works. The information has been sat there the whole time.
It's about what happens when nobody in the chain has a reason to look.
You get a number that flatters everybody. The agency looks good. The channel looks good. The report gets signed off. And the actual question, what would have happened if we'd done nothing, never gets asked.
Ask it once. One holdout, one flow. Whatever comes back, you'll know something about your business that most of your competitors don't know about theirs.
Then go and do the next flow.