Here's a question that comes up in almost every Klaviyo audit I've ever done: why is this a campaign?
Or sometimes the reverse: why on earth is this a flow?
Most email marketers don't have a clear answer. They picked one, it worked okay, nobody questioned it, and now it's been running that way for 18 months. The choice was a vibe, not a decision.
That's fine when you have ten emails going out. It's expensive once you have fifty.
Why this matters more than it sounds
The flow-vs-campaign choice isn't just a technical detail. It changes how the email behaves, who gets it, when it sends, and what data you get back.
A flow runs forever. It triggers off behavior, sends to one person at a time, and quietly compounds revenue in the background. You build it once and it pays you for years if you maintain it.
A campaign runs once. It blasts to a segment at a specific moment, generates a spike, and then it's done. The data is clean because the send is contained. The revenue is concentrated because the audience is large.
When you put something in the wrong bucket, you get the wrong behavior. You get a "campaign" that quietly degrades because nobody refreshes it. Or a "flow" that fires at the wrong moment because the trigger logic was hacked together to fake a one-time send.
Both cost you money. Neither shows up in your dashboard as a problem.
The actual decision tree
Here's the framework I use. It's not fancy. But it's consistent, and once your team adopts it, the arguments about "should this be a flow" mostly disappear.
Question 1: Is the send tied to time, or tied to behavior?
If the send happens because of a date on the calendar (Black Friday, product launch, holiday weekend, monthly newsletter), it's a campaign.
If the send happens because someone did something (signed up, abandoned a cart, bought, came back to the site, ignored you for 60 days), it's a flow.
This is the single biggest filter. Time-based equals campaign. Behavior-based equals flow.
Most mistakes happen because people try to bend this rule. They want to send a "campaign" three days after someone buys, so they jam a delay into a flow. Or they want to "welcome" new subscribers via a weekly campaign blast instead of a real welcome flow. Both feel clever. Both leak revenue.
Question 2: Does the timing need to be personal or shared?
A welcome email should arrive when someone signs up, not at 10am Tuesday with everyone else. That's personal timing. Flow.
A sale announcement should hit the whole list at the same moment so the campaign feels alive and creates urgency. That's shared timing. Campaign.
If the value of the email comes from arriving at the right moment for that specific person, it's a flow. If the value comes from everyone seeing it together, it's a campaign.
Question 3: How often does the content need to change?
Flow content is mostly evergreen. You write a welcome series once, you tune it twice a year, it keeps working. The customer journey doesn't change much month to month.
Campaign content is mostly fresh. New products, new offers, new news, new copy. If you tried to "set and forget" a campaign, you'd be sending the same sale email every week and your unsubscribe rate would tell you all about it.
If the content has a shelf life of months or years, lean flow. If it has a shelf life of days or weeks, lean campaign.
Question 4: Are you optimizing for revenue per subscriber or revenue per send?
Flows are about revenue per subscriber over time. Each subscriber goes through the journey, hits the right emails at the right moments, and contributes more lifetime value than they would have without the program.
Campaigns are about revenue per send. You're trying to maximize the haul from one moment. The whole list, one shot, one chance.
These optimize differently. A flow that drives $0.30 per recipient over 90 days is a winner. A campaign that drives $0.30 per recipient in one send is also a winner, but for a totally different reason.
If you're thinking "how do I get more out of each customer", you're thinking about flows. If you're thinking "how do I get more out of this Tuesday", you're thinking about campaigns.
The edge cases that trip people up
A few situations look ambiguous but actually have clear answers once you apply the framework.
The product launch. Launch day is a campaign. The "you might also like" follow-up triggered by people who clicked but didn't buy? That's a flow. Don't try to do both in one place. Learn more about why the flow-to-campaign handoff breaks most brands.
The seasonal series. A four-email holiday gifting series isn't a flow. It's four campaigns. They're time-based, they're shared timing, the content is dated. Calling it a flow just because it has multiple emails is a category error.
The replenishment reminder. This is a flow, even though it feels campaign-shaped. The send is triggered by the customer's purchase date, not the calendar. Personal timing, behavior-based.
The win-back. Almost always a flow. Triggered by 60 or 90 days of no engagement, personal to each subscriber, content is evergreen. The only time it becomes a campaign is when you do a one-off "we miss you" blast to a dormant segment, and even then you should ask whether the flow would do it better.
The newsletter. Campaign. Always campaign. Even if you have a "newsletter signup flow" that welcomes new subscribers, the actual ongoing newsletter is a campaign on a schedule.
The manual way to enforce this
Most teams don't enforce it. They just make case-by-case decisions and live with the drift.
The teams that do enforce it usually do one of these:
A naming convention. Every flow starts with "F-". Every campaign starts with "C-". When someone proposes a new email, they have to declare the prefix first, which forces the decision.
A weekly review. Once a week, someone scans the new builds from the last seven days and asks "should this really be a flow?" Catches mistakes within a week instead of within a year.
A flow/campaign budget. Some teams cap the number of active flows at 15 or 20. Forces real conversations about whether something deserves to be a permanent fixture or just a one-time send dressed up as automation.
None of these are perfect. They all require someone to care enough to enforce them.
The Cadento angle
This is one of the reasons we built Cadento with separate planning views for flows and campaigns. They're different objects with different lifecycles, and treating them the same on a calendar makes both worse.
Your campaign calendar should show you what's going out and when, with content variety and send density in plain view. Your flow inventory should show you what's running, what was last edited, and what's performing, without time pressure.
Mixing them is how you end up with a campaign calendar that "looks busy" because half the items are actually flows that don't belong there, and a flow inventory that nobody's looked at in six months because it lives in a different tab.
You don't need our tool to think about this clearly. You just need to stop treating "an email going out" as one category, and start treating flows and campaigns as the genuinely different beasts they are.
The takeaway
Before you build the next email, run it through the four questions: Time or behavior? Personal or shared timing? Evergreen or fresh content? Per-subscriber or per-send optimization?
If three of the four point to flow, it's a flow. If three point to campaign, it's a campaign. If they're split, you probably have two emails pretending to be one.
The decision takes 30 seconds when you have a framework. It takes 30 minutes of debate when you don't. And it costs you months of bad performance when you skip it entirely.
Get the decision right at build time. Future you will thank you when something starts misbehaving and you actually know where to look.