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