Knox Retention Knox Retention

Abandoned Cart Intent Framework

Most cart flows I open send the same sequence to everyone. This is how I turn that sequence into a decision system, using signals your ESP is already collecting.

For DTC brands on Klaviyo and Shopify. Seven signals, an intent score, three branches, the flow skeleton and a QA checklist.

Download the PDF 6 pages · 596 KB · no email required

The shift

Same trigger, completely different logic

Someone abandons a cart. A few hours later, an email. Twenty four hours later, another one. Then maybe an SMS with 10% off.

The trigger is fine. The assumption after it is the problem.

Someone who viewed a product once and added it to cart is nothing like someone who came back three times, read the reviews, added to cart and then left. The second person is handing you far more buying signal, and almost every flow I look at treats them identically.

None of what follows needs new tools or a data team. It is branching logic on data you already have.

CART ABANDONED Low intent EDUCATE. NO DISCOUNT. High intent REMOVE THE FRICTION. Existing customer NEVER DISCOUNT.
One trigger, three jobs. The split is the whole idea.

Step one

The signals you already have

Every one of these is already sitting in Klaviyo. You do not need custom events for any of it.

SignalWhere it livesWhat it actually tells you
Started Checkout Metric The strongest signal short of buying. They reached the last step and stopped, so something specific blocked them.
Added to Cart Metric, count 7d Once can be an accident. Twice in a week is deliberation.
Viewed Product Metric, count 30d Research depth. Repeat views of the same SKU mean real consideration, not browsing.
Placed Order Metric, ever Splits prospect from customer. This one changes the offer, not just the copy, so it branches before scoring.
Email engagement Profile, 30d Whether email is still a live channel for this person or you are talking into a void.
SMS consent Profile Whether you are allowed to escalate channel at all.
Cart value Event property Measured against your own AOV. Big carts usually need reassurance, not a discount.

Step two

Score the intent

Here is the scoring I start with. It is arithmetic, not a model, and you can build the whole thing with conditional splits.

+3 Started Checkout Rather than only adding to cart. Heaviest signal on the board.
+2 Viewed the same product 3 or more times in 30 days Consideration, not a passing click.
+2 Added to cart 2 or more times in 7 days They keep coming back to the same decision.
+1 Cart value above your AOV Bigger basket, bigger hesitation. Usually about risk, not price.
+1 Opened or clicked an email in the last 30 days Tells you the channel is alive before you lean on it.
+1 SMS consented Gives you somewhere to escalate to, if the branch earns it.
INTENT SCORE LOW INTENT HIGH INTENT 0 4 5 10 the only number you have to tune
Everything else is arithmetic. This threshold is the decision.

These weights are where I start, not a benchmark. I order them by how much signal each behaviour carries, then tune the numbers against placed order rate after a few weeks of data. If someone hands you universal point values, they have not seen your account.

Step three

Three branches, three different jobs

Check customer status first, because it overrides the score. Then split everyone else on the number.

Low intent

score 4 or below

They are not sold yet

The cart was a bookmark. Pushing for the sale today asks for a decision they have not reached.

  • Lead with the objection your reviews already answer
  • Social proof on that product, not the brand in general
  • How it works, sizing, materials, comparison
  • Aim for a second session, not a same day purchase

Never here: a discount. You would be paying to skip the education step, and teaching them to wait for a code next time.

High intent

score 5 or above

They already want it

They were at the last step. Something concrete stopped them, and in my experience it is rarely price.

  • Shipping cost and delivery date, stated plainly
  • Returns policy, the most common silent blocker
  • Payment options, including instalments if you offer them
  • Urgency only when it is true: real stock, a real deadline
  • SMS is allowed here, if they consented

Last resort: if you discount at all, it goes in the third message. Never the first.

Existing customer

has placed an order

They have already bought

This branch overrides the score. A returning customer with a full cart is the easiest revenue in the account.

  • Frame it as convenience, it is still in your cart
  • Reorder or subscribe, if the product is consumable
  • Show their points balance, if you run a programme
  • Reference what they bought last time

Never here: a first purchase discount. You would be discounting a sale you already had.

Step four

The flow skeleton

Times run from the trigger. The splits matter far more than the delays, so tune the delays to your own consideration window.

0:00

Trigger on Started Checkout

Use Started Checkout as the primary trigger. Add a parallel Added to Cart flow only if your add to cart to checkout rate is bad enough that you are losing people before they ever reach it.

0:45

Split one, customer or prospect

Have they placed an order, ever? Send them to the existing customer branch and stop scoring. This runs first because it changes the offer, not just the wording.

0:45

Split two, the score

Everyone else splits on intent. Five or above goes high intent, four or below goes low intent.

1:00

Message one

Branch specific. No discount in any branch at this point.

+22h

Message two

Branch specific, and a genuinely different angle. Not a resend with a new subject line.

+22h

Split three, did they engage?

Opened or clicked either message? They are still thinking, so stay on the branch. Silent? A third email will not fix a dead channel. Either stop, or use SMS if they are consented and high intent.

+24h

Message three, the only discount slot

If a discount shows up anywhere in this flow, it shows up here, and never in the existing customer branch.

exit

Exit conditions

Placed Order exits the flow, always. Add Started Checkout as a re entry trigger if you want the flow to restart rather than carry on with stale intent.

Before you ship it

Flow QA

This is the boring part, and it is where most of the money leaks. I run it before launch and again every quarter.

BOTH CHANNELS, ONE TIMELINE EMAIL SMS SAME MORNING NOTHING FOR WEEKS BROKEN LINK
Map both channels on one line. You cannot see a collision looking at either flow on its own.
No collisions. An email and an SMS from this flow cannot reach the same person in the same morning.
Delays reviewed. Every wait step chosen on purpose recently, not whatever got set the day the flow launched.
Links tested on mobile. Including the cart restore link, which breaks quietly after theme changes.
No dead gaps. Nothing longer than your consideration window, and no branch that just stops without an ending.
Exit works. Someone who buys stops getting the flow. Verify with a real order, not by reading the config.
Smart sending and frequency caps set, so this flow cannot stack on top of a campaign.
Routing verified. Put a test profile down all three paths and confirm it lands where you think it does.

Afterwards

What to measure

Flow wide numbers hide everything that matters here. Read each branch on its own.

Placed order rate, per branch

The entire point of splitting is that the branches should behave differently. If they do not, your score is not separating anything.

Revenue per recipient, per branch

More honest than conversion rate, because it accounts for the discount you gave away to get there.

Discount dependency

The share of recoveries that used a code. If it climbs over time, you have trained the list to wait for one.

Unsubscribes and complaints, per branch

An over eager high intent branch shows up here long before it shows up in revenue.

Hold out a slice. Keep a small percentage out of the flow completely. Without it you cannot separate recovered revenue from revenue that was always going to arrive, and cart is the flow where that gap is widest, because these people were already buying.