How to stop Klaviyo flows overlapping when cart and browse fire together
Cart and browse abandonment keep double emailing the same shopping session, and each flow reports healthy on its own. One list filter referees them.
A customer adds a hoodie to the cart, clicks through two more product pages, then closes the tab because dinner's ready. Twenty minutes later the cart email lands. Then the browse email pushes one of those pages as if the cart never happened. Klaviyo won't referee this. You have to.

Two healthy-looking flows, ganging up on one inbox
Open the flow report and nothing looks wrong. The cart flow shows steady opens and steady revenue. The browse flow shows the same, and both dashboards are telling the truth. Neither one records that a single customer just got both messages inside half an hour.
That's why the overlap survives for years. Each flow reports healthy on its own, so the only person who ever sees the problem is the customer, and the customer doesn't file a report. They just decide your emails are a bit much and quietly stop opening either one.
We find this in most of the accounts we take over, and not as some rare misconfiguration. It's close to the default state, because nothing in Klaviyo stops it for you. You have to build the check yourself. Most accounts never have.
Klaviyo treats every flow as its own closed system
Cart and browse abandonment run on different trigger metrics. The abandoned cart email fires off Started Checkout or Added to Cart, the browse abandonment email fires off Viewed Product, and each one is a sealed machine that knows nothing about the other. Qualify, clear the delay, send.
So a customer adds something to the basket and the cart flow starts its clock. They view anything else in the same session, which nearly everybody does, and the browse flow starts a second clock. Two timers, one inbox.
None of this is a bug. It's what happens when two flows get built in isolation, months apart, and nobody goes back to wire them together. In the accounts we inherit, that's the rule and not the exception.
A list membership filter fixes what a longer delay postpones
The instinct is to push the browse flow's delay out and hope the gap does the work. That just moves the collision to a different hour. What holds is a priority decision, enforced by a flow filter checking list membership.
- Create a plain list called something like Recent Cart Activity, with nothing else attached to it
- At the very top of the cart flow, before any time delay, add an action that adds the profile to that list
- In the browse flow, add a flow filter directly before the send step: has not been added to Recent Cart Activity
- Give the browse flow a short wait before that filter runs, so a cart add moments later is still caught
- Let profiles that fail the filter exit the flow instead of receiving the email, which is the whole point
The wrong version is the one we see constantly. Browse fires off Viewed Product and sends, blind to everything else happening on the profile. The right version reaches the send step, checks the list, and steps aside because the cart email already owns the conversation.
Decide which flow should win before you touch a filter
The filter only works if you've decided, on purpose, which flow wins. Cart should almost always take it. Adding to a basket is a stronger signal than viewing a page, and somebody mid purchase needs a nudge to finish, not an introduction to a different product.
That decision dictates the wiring. The add to list action lives at the top of the cart flow, the instant it triggers. Put it after a wait step and the browse filter can run before the profile is on the list, at which point your block does nothing at all.
There's a reversed case worth planning for too. Somebody views a product first, the browse email queues, and only then do they add something to the cart. The short wait at the start of the browse flow is what gives the cart flow time to mark its territory before the filter looks.
Run a test profile through both flows before you trust it
- Trigger Viewed Product on a live product page with a test profile
- Trigger Added to Cart on a different product straight afterwards
- Watch both flows in the flow view and confirm the browse profile exits at the filter, not at the send
- Open the list itself and confirm the profile arrived before the filter check ran
- Repeat with the order reversed, cart first and browse a few minutes later
Do that once properly and you won't need to keep checking it. Re-run it whenever either flow's structure changes, because moving a single action can quietly shift where the filter sits against the list add. An edit that looks cosmetic can undo the sequencing, and no error appears anywhere.

Any two flows sharing an audience can collide the same way
Back in stock and browse. Winback and post purchase. A replenishment nudge landing on top of a campaign. Any pair of flows with a shared audience and a similar send window can double up exactly as cart and browse do, and once the list and filter pattern exists in the account, copying it across those pairs is mostly an afternoon's work.
One honest caveat before you rebuild anything. If your traffic is low enough that cart and browse rarely fire on the same profile in the same hour, the collision may barely exist for you. Check your own send data for real overlap first, then fix the pairs that actually collide.

Alex Gregoriades
Operations director at Engage Commerce, where he runs the accounts the writing comes out of.
FAQs

Does Klaviyo Smart Sending stop flows overlapping?
It caps how often one profile can be emailed, which blunts the worst collisions, but it skips messages blindly. The skipped email can easily be the higher intent cart message instead of the browse one. A list membership filter lets you choose which message survives, and that's the whole point of setting priority.
Which flow should take priority, cart abandonment or browse abandonment?
Cart abandonment, almost always. Adding an item to the basket is a far stronger signal of intent than viewing a page, so the reminder to finish checkout should win the inbox. Browse abandonment earns its keep on the sessions that never touched the cart at all.
Why not just turn the browse abandonment flow off?
Because it does real work on sessions where nothing was added to the basket, and that's most sessions. The problem isn't the flow existing. It's the flow firing on a session the cart email already owns. Sequencing fixes that without giving up the revenue.
Will a longer delay on the browse flow fix the overlap?
No, it only changes when the two emails collide. A delay doesn't know whether the cart flow has fired, so the same person still gets both messages, just further apart. The filter is what makes one flow aware of the other.
The overlap is a decision nobody made
Flows built in isolation collide by default, and every dashboard involved will call the result healthy. One list, one filter and one deliberate choice about which message wins turns a pile of separate automations into something closer to a system. The brands that feel calm in the inbox are the ones that made that choice on purpose.
Klaviyo mechanics
The settings that quietly decide what your flows do, from someone who has rebuilt a flow stack.

Your Klaviyo VIP segment is a badge while your best customers get first-timer emails
The spend report knows who your best customers are. The flow logic treats them like strangers. Closing that gap is the whole job.
Read it
Klaviyo Smart Send Time is guessing: here's how to find your list's real send window
The model behind Smart Send Time learned its habits from opens Apple fired for you. Clicks and revenue know when your list really reads.
Read it
Your Klaviyo predicted next order date already knows when they'll buy again
Klaviyo already calculates when each customer is due to buy again. Build winback and reminder triggers on that, not on an engagement window.
Read itWould you rather this was just handled?
Bring your Klaviyo account and the thing annoying you most. We will tell you what we would fix first, on the call, before you spend anything.


Book a call with our founder.
We're all about relationships built on trust, mutual respect and a shared vision for success. If that sounds like your vibe, let's make some waves together 🌊



