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

They Ordered Yesterday. Why Did Your Scheduled Agent Just Say "We Miss You"?

They Ordered Yesterday. Why Did Your Scheduled Agent Just Say "We Miss You"? A customer places an order on Tuesday, logs in on Wednesday to check the delivery, and replies to a support message on Thursday. On Friday, your scheduled agent sends them a win-back email: "We miss you! Here is 20% off to come back." Nothing about that message is true. The customer never left. They were active all week. Yet the agent said it with total confidence, on schedule, and the log shows the run as a success.

They Ordered Yesterday. Why Did Your Scheduled Agent Just Say "We Miss You"?

A customer places an order on Tuesday, logs in on Wednesday to check the delivery, and replies to a support message on Thursday. On Friday, your scheduled agent sends them a win-back email: "We miss you! Here is 20% off to come back."

Nothing about that message is true. The customer never left. They were active all week. Yet the agent said it with total confidence, on schedule, and the log shows the run as a success.

That is what makes this failure so damaging. It does not look like a bug to the customer. It looks like the business does not know them. A customer who just paid, logged in, or asked for help now wonders whether their account, order, or payment went missing. Some write to support. Some quietly decide the business is sloppy. Some take the discount code and use it on an order they were going to place anyway, turning a loyalty message into a margin cut for no reason.

The problem is not the win-back campaign. Win-back messages work well for people who really have gone quiet. The problem is the agent's idea of "quiet": a single, stale signal, never checked again before sending.

The inactivity clock only counts one kind of activity

Most win-back agents define inactivity in the narrowest possible way: days since the last purchase. That definition ignores almost everything a customer actually does.

A customer who logs in every day to use a product, reads every update, replies to a support thread, or books a call has not gone quiet. But if none of that counts as activity in the agent's world, the clock keeps ticking from the last order date, straight past the threshold, and the win-back fires.

This is easy to miss because the definition feels reasonable when the workflow is built. At setup time, "no purchase in 60 days" sounds like a clean rule for "inactive." In real life, purchase is only one of many ways a customer stays engaged. A subscriber who pays monthly may not "purchase" anything new for months, a client on a long project may talk to the team daily between orders, and a user on an annual plan may be inside the product daily without a new transaction.

When the agent only watches purchases, every one of those customers looks dormant. The fix starts with a broader definition: any meaningful activity resets the clock. A login, an order, a payment, a reply, a support conversation, a booking, a completed task. If the customer did something that shows they are still here, they are still here, and no win-back message should go out. That definition has to live in one place: if purchases, logins, replies, and support chats live in different tools and the agent reads only one, it will always misjudge activity.

The list was right last week, and wrong by send time

The second cause is timing. Win-back lists are usually built ahead of time: a weekly export, a segment refresh on Sunday, a list frozen when the campaign is scheduled. The agent then works through that list all week, one run at a time, without re-checking anyone on it.

A lot changes in a week. A customer on Sunday's "inactive" list places an order on Monday, renews on Tuesday, or writes in on Wednesday. By Friday, when their turn in the queue arrives, the list is wrong about them. But the agent does not know that, because it checks the list, not the customer.

This is the same pattern behind many scheduled-agent mistakes: the agent acts on a snapshot instead of the current state. A snapshot is a claim about the past. A send decision needs a claim about right now. The gap between the two is where embarrassing messages live.

The repair is a check at send time, not at list-build time. Before any win-back message goes out, the agent should ask one question: has this customer done anything since the list was built that counts as activity? If yes, skip them, and record why, so the next run does not try them again. If no, send, and record that the message went out, so a retry or an overlapping run does not send it twice. That check also protects the discount: a code sent to an active customer can be shared or redeemed on a purchase that needed no incentive.

What a correct activity memory looks like

A win-back agent that gets this right keeps three things, updated on every run, for every customer:

First, a last-activity record with a date and a type: last order, last login, last reply, last support conversation, last payment. Not just one date, but the most recent activity of any kind, with the kind named, so a human can see why the customer counts as active.

Second, a suppression rule that runs at send time: if the most recent activity falls inside the win-back window, the customer is excluded, no matter what the original list said. The list proposes; the current record decides.

Third, a send history: which win-back message went to whom, on which date, with which offer. That history stops duplicates, stops a second win-back a week after the first, and gives support a straight answer when a customer asks why they got the message.

How Vilix AI fits

This is the kind of problem Vilix AI is built for. Vilix AI is a cloud-hosted memory layer, so there is nothing to install or maintain, and the same memory follows the customer across every tool through MCP: the store, the inbox, the support tool, and the scheduled agent all read and write the same record. Instead of fragments, the agent gets full conversation history, not just isolated facts: an order, then a delivery question, then an answer, in order, with dates attached. That history turns "last purchase 62 days ago" into "active three days ago, in a support conversation about delivery." The distinction is the whole win-back decision.

Vilix AI is free forever on the free plan, with a 7-day Pro trial that needs no credit card, and data stays portable: export everything or delete it anytime. The point is not to add another dashboard. It is to give every scheduled agent the same current picture of the customer, so a win-back message only goes to someone who actually went quiet.

A quick test before the next run

Before the next win-back run, pick five customers active in the last week: one who ordered, one who logged in, one who replied, one who renewed, and one who opened a support conversation. Check whether the agent's list would exclude all five. If any would still get a "we miss you" message, the inactivity definition is too narrow or the list is too stale, and the fix is the send-time check above, not a better subject line.

Customers forgive a late reply. They remember being told they left when they never did. A win-back campaign should find the people who actually went quiet.

Get started for free with Vilix AI at https://vilix.ai/?utm_source=vilix-blog&utm_medium=article&utm_campaign=scheduled-agent-we-miss-you-active-customers-memory

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