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

Does Customer.io Remember Between Runs?

Does Customer.io Remember Between Runs? No. A Customer.io workflow holds no memory of its own between runs. When a person enters a workflow, the workflow reads that person exactly as the record stands at that moment: the attributes currently stored on the profile, the events the person has recorded, and the segments the person currently matches. Anything an earlier run worked out survives only if that run wrote it back first, as an attribute update, a new event, or a position inside a journey t

Does Customer.io Remember Between Runs?

No. A Customer.io workflow holds no memory of its own between runs. When a person enters a workflow, the workflow reads that person exactly as the record stands at that moment: the attributes currently stored on the profile, the events the person has recorded, and the segments the person currently matches. Anything an earlier run worked out survives only if that run wrote it back first, as an attribute update, a new event, or a position inside a journey that a later step can check.

That distinction is easy to miss because Customer.io feels continuous. People, events, and workflows are all still there tomorrow, and a person halfway through a long journey resumes at the right step. The continuity lives in stored profiles and workflow definitions, not in a memory that one run hands to the next.

What does a Customer.io person actually hold?

Customer.io stores two different kinds of data about a person, and the split matters. Attributes are current state: the values the workspace currently believes about someone, such as a name, a plan, a signup date, or a usage total. An identify call or a workflow step sets attributes, and a later write replaces the earlier value. The profile shows the latest value, not the history of values.

Events are the opposite shape. An event records that something happened: signed up, created a project, invited a teammate, hit a usage limit. Events arrive through track calls with their own properties attached, they keep their timestamps, and they accumulate. Segments and workflow conditions can ask whether an event happened, how often, and how recently. Objects add a third record type beside the person: a company, a course, a cart, or another entity the person relates to, holding its own attributes and its own relationships to people.

All of that is stored data a step can check. A later workflow reads attribute values, event counts, and segment membership. It does not recover why a person was given an exception, which onboarding angle was already tried last month, or what was promised in a support thread last week, unless someone stored that thread as an attribute or an event first.

How do Customer.io workflows actually run?

A workflow, also called a journey, is built from a trigger, message and data blocks, delays, and branches. Triggers include an event arriving, a person matching segment conditions, a date on a profile or an object arriving, a webhook, or a change to an object or a relationship. Inside the flow, delays wait for a fixed time, until a day and time, or until a condition turns true. True/false branches, multi-split branches, and random cohort branches divide people by attributes, events, and relationships. Data blocks update the person, send a new event, call a webhook and receive data back, or query objects related to the person. Every workflow also carries a goal and exit conditions, so a person leaves when the point of the journey is reached or stops applying.

Two scoping rules define what a run can see. The first is the triggering event. When an event starts a workflow, that event and its properties are available inside the journey it started, for personalisation and conditions. A different workflow, started later by a different event, does not inherit that payload. It can check that the earlier event exists on the profile. It cannot reopen what the earlier journey did with it. The second rule is the journey itself. Journey attributes can hold temporary values while a person moves through one journey, and position inside a journey persists, so a three-week onboarding flow resumes in week two. Both end at the journey boundary. A person can be inside an onboarding journey, a trial-expiry journey, and a re-engagement journey at the same time, and each tracks its own position and ignores the others.

Workflow steps can read object and relationship data, and conditions can branch on it. Updating that data from inside a workflow takes an API call through a data block. Nothing in the flow automatically turns what a run learned into a note the next run reads.

What about profile history and the activity feed?

A person profile shows a rich record: current attributes, the events recorded, the segments matched, the objects related, and the messages sent. That record answers what the workspace currently believes about a person and what that person has done.

That record is not working memory the next run consults before acting. A workflow does not open last month's journey notes to learn why a branch underperformed, and an AI step drafting the next message does not recover the earlier draft, the rejected subject line, or the reasoning behind a split from the profile. The history is there for a person to review, and for conditions to count. The next automated run starts from the profile in front of it.

The gap shows up in routine work. A scheduled agent that reviews journey performance weekly, drafts the next test, and checks it against what people were already promised has to be handed the numbers, the angle already used, and the promise already made, every week. The context arrives by hand, or not at all.

Where this leaves agents working from Customer.io

Customer.io is often one part of a wider setup. A product sends events in, an n8n, Make, or Zapier scenario updates attributes, and planning happens in a chat tool somewhere else. Each part can read the same current attributes, events, and segments. None of them inherits the conversation behind those values. So the work turns into re-briefing: background gets pasted into a prompt again, and a question answered in another tool gets asked again.

One memory that every run can read

The fix is a memory layer that lives outside any single person or journey, so every run and every tool works from the same past. Vilix AI is built for exactly that job, for scheduled agents and automations that start blank.

Vilix AI is cloud-hosted, with zero infrastructure to run or maintain. Connect it once over MCP and the same memory is available everywhere the work happens: alongside Customer.io workflows, in n8n, Make, and Zapier scenarios, and in the AI chat tools used to plan and review the work. What gets stored is full conversation history, not just facts extracted from it, so a later run can recover the exact agreement, the reason a decision was made, and the wording that was already used, not only an attribute value or an event name on a profile.

The loop is simple. Before acting, a run retrieves the relevant history for the work it will touch. It acts with that history in hand. Then it saves what it did and what it learned back to the same memory. Customer.io stays the system of record for people, events, and sends. Vilix AI becomes the system of record for the thread behind them, and the re-briefing cycle ends.

Get Started for Free

Free forever, no credit card. The free plan is free forever, the 7-day Pro trial needs no credit card, and your memory stays under your control: export everything or delete it anytime.

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 Iterable Remember Between Runs?

Does Iterable Remember Between Runs? No. An Iterable journey holds no memory of its own between runs. When a user enters a journey, the journey reads that user exactly as the profile stands at that moment: the profile fields currently stored, the events currently on the record, and the lists the user currently belongs to. Anything an earlier run worked out survives only if that run wrote it back first, as a profile field update, an event, or a list change a later step can check. That distincti

Does Omnisend Remember Between Runs?

Does Omnisend Remember Between Runs? No. An Omnisend workflow holds no memory of its own between runs. When a contact enters a workflow, that workflow reads the contact exactly as the record stands at that moment: the custom properties currently stored on the profile, the tags currently applied, and the segment the contact currently matches. Anything an earlier run worked out survives only if that run wrote it back first, as a custom property update, a tag, or an event a later step can check.

Does GetResponse Remember Between Runs?

Does GetResponse Remember Between Runs? No. A GetResponse workflow holds no memory of its own between runs. When a contact enters a workflow, that workflow reads the contact exactly as the record stands at that moment: the tags currently assigned, the custom fields currently stored, and the score currently on the contact. Anything an earlier run worked out survives only if that run wrote it back first, as a tag, a custom field update, or a score a later condition can check. That distinction is