Free forever, no credit card.Get Started for Free →
← All posts
October 29, 2026 · 6 min read

They Already Bought It. Why Is Your Scheduled Agent Recommending It Again?

They Already Bought It. Why Is Your Scheduled Agent Recommending It Again? A customer buys a coffee machine on Monday. On Thursday, a scheduled agent emails them a recommendation for the same coffee machine. On Friday, it suggests the machine again, this time framed as a limited-time offer. The customer does not need a second machine. They needed the agent to know they already own one. This is not a recommendation quality problem. It is a memory problem. The agent never learned that the purcha

They Already Bought It. Why Is Your Scheduled Agent Recommending It Again?

A customer buys a coffee machine on Monday. On Thursday, a scheduled agent emails them a recommendation for the same coffee machine. On Friday, it suggests the machine again, this time framed as a limited-time offer. The customer does not need a second machine. They needed the agent to know they already own one.

This is not a recommendation quality problem. It is a memory problem. The agent never learned that the purchase happened, so every run works from the customer it knew before the sale.

Why the purchase never reaches the agent

A scheduled agent usually reads a list, not a life story. The workflow was built around a segment, a past-buyer list, or a product catalog, and each run works through that list in order. The purchase itself happens somewhere else: a checkout page, a store app, a support thread where an agent helped complete the order, a phone call. If that event never gets written back where the scheduled agent reads, the next run has no way to know.

The second problem is shape. A purchase is often stored as a transaction row, not as an ownership fact. The order system knows an order number, a total, and a date. The agent needs a different sentence: this customer owns this product, in this variant, since this date. A transaction row does not answer that question on its own, and an agent that only reads the segment list never asks it.

The third problem is timing. A run that pulls its list on Sunday and sends on Wednesday is already working from old information if the customer bought on Tuesday. A run that never re-checks ownership at all works from the original list forever. Either way, the recommendation goes out, and the customer reads it as proof that nobody is paying attention.

Returns make it worse. A customer who returned a product is not an owner, and a customer who exchanged a size owns the new size, not the old one. When returns live in a system the agent never reads, both cases get the wrong recommendation.

What a bad recommendation actually costs

The cost is not one wasted email. It is the message the email sends. A recommendation for something a customer already owns tells them the business does not know them, even after they spent money. That is the opposite of what a recommendation is supposed to do.

It also wastes the best moment a recommendation has. The run after a purchase is the ideal time to suggest the thing that goes with it: the filters for the machine, the case for the device, the refill for the consumable. An agent that recommends the same product again burns that moment on a duplicate, and by the time someone fixes the list, the moment has passed.

Then there is the support cost. Customers reply asking whether their order went through or they were charged twice. A confused customer creates a ticket, and the ticket costs far more than the email ever earned.

The fix: an ownership memory

The fix is to give the scheduled agent a memory of what each customer already owns, and to make the agent check it before it recommends anything. The record is simple, and it needs five fields:

  • Who owns it: the customer, linked across every channel they buy through.
  • What they own: the product and the exact variant, not just the product family.
  • When they bought it: the purchase date, so the agent can judge whether a repeat purchase makes sense.
  • Where it stands: delivered, returned, exchanged, or refunded.
  • What goes with it: the complements and consumables that are genuinely useful next.

With that record in place, the run-start rule becomes straightforward. Before the agent picks a recommendation, it reads the ownership record for each customer on the list. Anything the customer already owns is excluded. Anything that complements what they own moves up. Consumables the customer will run out of stay eligible, because a refill is a recommendation, not a duplicate.

Edge cases belong in the same record. A gift is owned by the recipient, not the buyer. A returned item stops being owned the day the return completes. A replacement changes the variant, not the fact of ownership. When those rules live in the memory every run reads, they hold for every run.

How to wire it into a scheduled run

Start with the list the agent already reads, and add one step at the top of the run: look up ownership for every customer on it. That lookup has to happen at run time, not when the list was built, because purchases happen between runs.

Next, change what the agent does with the answer. An owned product is not a failed recommendation to work around; it is the starting point for a better one. The agent should recommend the next logical item: the accessory that fits the exact variant, the consumable that runs out, the upgrade that is actually an upgrade over what they own.

Finally, let the agent learn from corrections. When a customer replies that they already own something, that reply is an ownership fact, and it should land in the same record the next run reads.

Where Vilix AI fits

This is the kind of memory that has to follow the customer across tools, not live inside one workflow. Vilix AI is cloud-hosted, so there is no infrastructure to manage, and it shares the same memory everywhere over MCP. A purchase noted in a support chat, a checkout note, or a follow-up conversation becomes part of the same memory the scheduled agent reads on its next run, instead of staying trapped in the tool where it happened.

Vilix AI stores full conversation history, not just extracted facts, so the context around a purchase survives too: who bought it, whether it was a gift, whether it was exchanged, what the customer said about it. The memory is there for every run, and it is portable: export everything or delete it anytime. The free plan is free forever, and the Pro trial runs seven days with no credit card.

A scheduled agent with that memory stops recommending what customers already own. It starts recommending what makes sense next. That is the difference between an agent that feels like spam and an agent that feels like it knows you.

A quick checklist before the next run

  • Does the agent read ownership at run time, or does it trust a list built days ago?
  • Does the ownership record carry variant, date, and return status, or just a product name?
  • Are gift purchases linked to the recipient, and returns reflected the day they complete?
  • Does a correction from a customer land in the same record the next run reads?

If any answer is no, the next recommendation for an already-owned product is already scheduled. Fix the memory, and the recommendations fix themselves.

Get Started for Free

Persistent memory across ChatGPT, Claude, and the AI tools you already use in Vilix AI.

Get Started for Free

Free forever, no credit card.

Keep reading
Does Base44 Remember Between Sessions? Two Different Memories, Two Different Answers

Does Base44 Remember Between Sessions? Two Different Memories, Two Different Answers Short answer: yes, in two separate places, and neither one is the memory most people mean when they ask the question. The AI chat that builds your app keeps its conversation, its plans, and the instructions you wrote for that app. The AI agents you build inside your app have their own memory, on by default, that carries preferences and facts across conversations with your app's users. Both are real. Both stop a

Does v0 Remember Between Sessions? Chat Context, Knowledge, and Where It Stops

Does v0 Remember Between Sessions? Chat Context, Knowledge, and Where It Stops Short answer: inside one chat, yes. Across chats, projects, and the rest of your tools, mostly no, unless you wrote the context down yourself in the places v0 calls Knowledge and custom instructions. That distinction matters because v0 feels continuous while you work in it. You return to a chat, the conversation is still there, the generated app is still there, and iteration picks up where it left off. It is easy to

Does Bolt Remember Between Sessions? Chat Threads, Knowledge, and Short-Term Memory, Explained

Does Bolt Remember Between Sessions? Chat Threads, Knowledge, and Short-Term Memory, Explained Short answer: the project remembers, because the project never goes away. Your code, your chat thread, your version history, and your backups are all still there when you come back tomorrow, so picking the work back up feels continuous. But Bolt does not build a learned memory of you or your decisions the way a memory product does. What carries between sessions is the work itself, plus whatever contex