Buy an abandoned-cart plugin when your shoppers forget and a reminder or coupon brings them back. Build a custom AI recovery agent when your carts die because a question went unanswered at checkout: shipping to their country, whether the part fits their model, how returns work for sale items. The plugin sends a message. The agent sends an answer. Those are different products, and only one of them protects your margin.
Why most recovery flows underperform
The standard recovery stack is a timer and a template. Shopper abandons a checkout, a tool waits an hour, sends "You left something behind", waits a day, sends a 10% code. It is cheap, it is automatic, and for a share of carts it works.
The problem is the assumption baked into it: that every abandonment is a lapse of attention. Talk to your support inbox and you will find a different story. People leave because they could not find the delivery time to their city, because the size chart contradicted the reviews, because they wanted to know if the warranty covered them abroad, because the checkout showed a tax line they did not expect. None of those people are waiting for a coupon. They are waiting for an answer, and if they do not get it within the hour they buy elsewhere or forget.
A discount sent to a shopper with an unanswered question does two bad things. It fails to convert them, because the blocker is still there. And it trains your repeat buyers to abandon on purpose and wait for the code.
What an AI recovery agent actually does
Strip the hype and the agent is a small, well-scoped system:
- Trigger on the abandoned checkout event from your platform. Shopify, for example, records abandoned checkouts and lets you act on them from the admin or programmatically (Shopify docs).
- Read context: line items, shipping country, cart value, whether the shopper is a returning customer, and any on-site chat or search they did before leaving.
- Infer the likely blocker and open with a question or a direct answer rather than a generic nudge. "Still deciding between the 42 and the 43? Both are in stock, and exchanges are free within 30 days" beats "Complete your order".
- Answer follow-ups from your real catalog, shipping matrix, and policy documents, with retrieval grounded in your own data so it cannot invent a return window. If you have not seen how that grounding works, start with RAG explained for founders.
- Hand off to a human the moment the conversation touches money, complaints, or anything outside the knowledge base.
- Log everything so you can see which blockers actually cost you sales.
That last bullet is undersold. After a month, the agent's transcripts are the best voice-of-customer research you own. If 30 conversations in a row ask about delivery to the same region, the fix is a shipping-page change, not more messaging.
The CTA matters more than the model
Here is a lesson from our own tooling that transfers directly. We run a cold-outreach engine for ourselves, and for a long time every email ended with a calendar link. Replies were thin. When we swapped the booking link for a soft ask, essentially "reply yes if this is relevant and we will send details", reply rates rose and stayed up. Interested people were not refusing the call. They were refusing the work of scheduling one from a cold message.
Recovery messages have the same friction problem. "Click here to complete your checkout" asks the shopper to re-enter a flow they already left, often on a different device. "Reply with your city and I will confirm the delivery date" asks for five seconds and gives them a reason to keep talking. Design the first message as the start of a conversation, not a redirect. We covered the general pattern in AI sales agent CTA design, and it applies here verbatim.
When buying is the right call
Be honest about your abandonment profile before you commission anything. Buy the plugin if:
- Your catalog is simple. Few SKUs, no compatibility or sizing questions, standard shipping to one or two countries. There is nothing for an agent to answer.
- Discounts are already your lever. If your margin tolerates a code and your customers respond to one, the plugin is doing its job.
- You have no support history to learn from. Without a record of pre-purchase questions, you are guessing at the blockers. Run the cheap tool first and read the replies.
- Volume is low. Under a few hundred abandoned carts a month, a human replying from the support inbox with a good macro set will beat any automation on quality and cost.
Most plugins also now bolt on an "AI" layer that rewrites the subject line or personalises the product grid. That is not the same thing as answering a question, but it is cheap, and if it moves your numbers, take it.
When building is the right call
Build when the plugin's model of the problem is wrong for your store:
- Carts die from questions. Technical products, fit-sensitive apparel, cross-border shipping, regulated goods, anything with a long consideration cycle.
- Discounting hurts. Thin margins, premium positioning, or a brand promise around never going on sale.
- Your customers live on WhatsApp. In the Gulf and much of the Middle East and North Africa, a WhatsApp reply gets read in minutes while an email waits until Monday. Account for the platform's conversation-based pricing and template approval process (WhatsApp Business Platform pricing) and read our breakdown of what an AI WhatsApp sales agent costs before committing.
- You already run a headless or custom storefront. The webhook and data plumbing is yours anyway, and a generic Shopify app may not even install cleanly.
What it costs, honestly
Think in three buckets, and measure each against the flow you already run: the one-hour reminder and the 10% code.
Build. A first version that covers trigger, context reading, grounded answers on one channel, human handoff, and a transcript dashboard is a small custom feature project, measured in weeks rather than months. The expensive part is not the LLM call. It is making your shipping rules, return policy, and product attributes machine-readable and keeping them that way. For the agent to say "both the 42 and the 43 are in stock, and exchanges are free within 30 days", stock by variant, size equivalence, and the current return window all have to be readable from a system, not from a spreadsheet and three people's heads. If they are not, budget time to fix that first, because that is where most of the project's weeks go.
Run. Messaging fees dominate on WhatsApp, almost nothing on email, and on WhatsApp every opening message is a template that has to pass approval before it can send. LLM spend per conversation is small if you keep prompts tight and cache the catalog context. For predictable spend, cap conversations per shopper so one stuck cart cannot become an open-ended thread, and apply the techniques in LLM cost optimization. Compare the total to the margin you currently hand out in 10% codes, not to zero.
Maintain. Policies change, products change, and the agent will confidently repeat last season's return window unless a change to the policy page invalidates its knowledge base. Treat the agent as a product with an owner, not a one-time install. The minimum is a monthly read of handoffs and misses, and that same review is where you catch patterns like 30 shoppers in a row asking about delivery to one region, which is a shipping-page fix rather than an agent fix.
A sensible path
- Pull three months of pre-purchase support questions and abandoned checkouts. Tag the questions. If fewer than a fifth of abandonments plausibly map to a question, buy the plugin and stop reading.
- If questions dominate, ship the agent on email first, one channel, one language, hard handoff rules. Measure recovered revenue against the discount flow you are replacing, not against zero.
- Add WhatsApp once the answers are proven and the opt-in flow exists on the storefront.
- Feed the blocker log back into the site. The best recovery agent slowly makes itself less necessary.
If your carts are dying from unanswered questions and you want a grounded estimate for your catalog and channels, let's talk.
Originally published on the Pykero blog.
Top comments (0)