Marketing · Flows
Updating the contact
How a flow adds or removes tags and lists and changes a contact's subscription, and why those changes win over your data sources.
A flow doesn't only send messages: it can also write on the contact it is carrying. The steps in the Update the contact group of the step palette tag a contact, add them to a list or take them out of one, and record a change in their SMS subscription. That is how a flow marks everyone who received the welcome message, gathers the contacts who clicked an offer into a list you can target later, or records the "yes" of a customer who replied to accept promotions. What a flow writes stays on the contact after the run ends, and the rest of Instasent sees it like any other change: the contact's profile, segments, campaigns and other flows.
There are three steps:
| Step | What it does | Summary on the canvas card |
|---|---|---|
| Update tags | Adds or removes tags on the contact. | Add · welcome-sent |
| Update lists | Adds the contact to lists or removes them. | Remove · 3 lists |
| Manage subscription | Changes the contact's subscription on a channel. | SMS · Opt in |
The three behave the same way inside the flow. They act straight away and the contact moves on to the next step; they have a single exit, with no branches; and they never stop the run — whatever happens, the contact continues. A write that changes nothing, such as adding a tag the contact already carries, leaves the contact as it was.
Update tags and lists
Update tags and Update lists work identically: one writes on the contact's tags, the other on their lists. Each step has two settings:
Actiondefault: AddAdd puts the values on the contact; Remove takes them off. A step does one or the other: to add some values and remove others, use two steps.
Tags / ListsrequiredOne or more values. Pick them from the ones your project already has, or type a new one (the field says "Pick tags or type a new one"): a value doesn't need to exist before a flow writes it. With no value, the step shows "Pick at least one tag." (or "Pick at least one list.") and the flow can't be published until you add one (see Building a flow).
Typical uses:
- Mark who received something. After a message, Update tags with Add
welcome-sent. You can then exclude those contacts from a campaign, or build a segment of everyone who was welcomed. - Build a follow-up audience. In a Wait for activity, the branch of contacts who
tapped the offer link goes to Update lists with Add
spring-interested; a later campaign targets that list. - Keep a decision on record. The No consent branch of a Check consent step
adds the tag
no-marketing-consent, so you can see how many contacts the flow couldn't offer anything to. - Clean up after the flow. A tag the flow added at the start (
in-onboarding) is removed in the last step, so it only marks contacts who are still going through it.
When every branch of a split needs the same write, put one update step below the split instead of one per branch: all branches continue there (see Building a flow).
Changes from a flow win over your data sources
A contact's data usually comes from several places at once — a store connector, a CSV import, your API — and Instasent combines them into a single profile (see Integrations & data sources). When those sources disagree about a contact's tags, lists or subscription, some carry more weight than others. A change made by hand in the panel carries the most: it wins over every connector. The three update steps write exactly like that manual change — as if someone on your team had edited the contact on their profile.
In practice:
- Adding doesn't conflict with your sources. A tag or list a flow adds sits next to whatever your sources send, and doesn't stop them from updating anything else.
- Removing overrides your sources for that contact. The removal is recorded as your
decision, not as a one-off cleanup. Suppose your store connector marks its best
customers with the tag
vipon every sync, and a flow removesvipfrom customers who stop buying. From then on, the connector can sendvipfor that customer as often as it likes: the contact won't carry it again. The flow has broken the value the store was maintaining. - So use tags and lists that belong to your flows — values no data source fills in,
for example with a prefix you reserve for flows (
flow-inactive,flow-welcome-sent). In the example above, the flow would addflow-inactiveand your segments would exclude it, leavingvipto the store. Be especially careful with lists: they are often populated by a data source (see Lists and tags).
For how data from your sources and manual changes combine, see How unification works and Data composition.
Manage subscription follows the same rule: it writes the subscription with the same priority as the panel, so a connector can't undo what the flow recorded.
Manage subscription
Manage subscription records a change in the contact's subscription on a channel, the same change someone on your team can make from the contact's profile. It has two settings: the channel and the operation.
Channel
SMS is the channel you can choose. SMS and RCS share one subscription, so the step covers both, as the hint under the field says ("SMS and RCS share one subscription, so this covers both."). WhatsApp is shown but can't be selected. How the shared subscription works is explained in Shared consent (RCS & SMS).
Operation
A contact's consent on a channel is made of two separate settings: their marketing preference (accepted, declined, or no preference) and suppression (subscribed, or suppressed so that nothing reaches them on that channel). Both are explained in How consent works. The four operations come in two pairs: Opt in and Opt out set the marketing preference; Suppress and Reactivate set the suppression. A new step starts on Opt in.
| Operation | What the panel says | What changes | Which messages reach the contact afterwards |
|---|---|---|---|
| Opt in | Records that the contact accepts marketing on this channel. | Marketing preference → accepted | Messages under any consent policy, unless the contact is suppressed |
| Opt out | Records that the contact refuses marketing. They still receive messages sent under the Basic policy. | Marketing preference → declined | Only messages sent under Basic |
| Suppress | Blocks every message on this channel, marketing or not. Only an admin or a flow can undo it. | Suppression on | Nothing on SMS or RCS |
| Reactivate | Lifts the suppression. Their marketing preference stays exactly as it was. | Suppression off | Whatever their marketing preference allows |
Which consent policy a flow message uses, and who each policy reaches, is explained in Sending messages.
Each pair leaves the other alone
Because the two settings are independent, each operation changes only its own:
- Opt in doesn't lift a suppression. A suppressed contact still receives nothing on the channel after an Opt in. To bring back a suppressed contact who has now accepted marketing, use two steps: Reactivate, then Opt in.
- Reactivate doesn't touch the marketing preference. A contact who declined marketing and was later suppressed comes back still declined: only Basic messages reach them.
- Opt out never turns into a suppression. A STOP from the contact can end in suppression (see Opt-outs & reactivation), but this step doesn't escalate: an Opt out applied to a contact who had already declined leaves them declined. Use Suppress when you want the hard block.
What it doesn't do
The step changes the subscription and nothing else. In the panel's words: "It changes the subscription and nothing else: it never replies to the contact and never triggers the STOP keyword flow." No confirmation message is sent; if you want to confirm the change to the contact, add a Send message step after it.
What else happens when a flow updates a contact
A flow's write is an ordinary change to the contact, so it has the same consequences as a change coming from anywhere else:
- It can start other flows. Tag and list changes arrive as the Customer created / updated event, with the values in Added tags, Added lists, Lost tags or Lost lists; Opt in and Reactivate arrive as Customer subscribed, and Opt out and Suppress as Customer unsubscribed. A flow triggered on those events starts for this contact just as it would for a change from a connector (see The trigger: who enters and when).
- Waiting flows notice an opt-out. If the contact is in another flow, sitting in a Wait for activity with an Unsubscribed branch, this step's Opt out and Suppress count there like any other unsubscribe: Opt-out catches Opt out, Blocked catches Suppress, and Any, the option the panel recommends, catches both (see Waits).
- A flow can trigger itself. A flow that adds a tag and starts when a contact gains that same tag sends the contact back to the beginning. Its re-entry settings put a limit on how often that happens, but the simplest fix is not to trigger a flow on a value it writes itself (see How often a contact can enter).
- The next step can still see the old value. The change takes a moment to reach the contact, so a step placed immediately after it, with no wait in between, can still read the value from before the update. That applies to a Check tag, Check list, Check consent or attribute split, and to a Send message right after Manage subscription: after an Opt in the message can be skipped because the contact still has no consent, and after an Opt out it can still go out. Put a Fixed delay of at least 1 minute between the update and any step that depends on it (see Branches).
- The contact can leave the flow's own audience. If who can enter the flow depends on a tag or list that the flow itself removes, and Cancel the run if the contact leaves the audience is on, the run is cancelled before one of the following steps (see Goals and exits).
- Test runs write for real. A test run is a real run of the draft for one contact, so these steps change that contact's tags, lists and subscription (see Testing, publishing and versions).
Example: an SMS that asks for marketing consent
A store wants to grow the list of customers who accept SMS offers, and asks them right after a delivery. The flow SMS offers opt-in:
- Starts on Order delivered.
- Send message: "Your order has arrived. Would you like to receive our offers by SMS? Reply YES."
- Wait for activity, with How long to wait set to 2 days and one specific branch,
Replied with text, with the patterns
yesandy. - In that branch: Manage subscription on SMS with Opt in, then Update
lists with Add
sms-offers. - No interaction: nothing — the contact simply reaches the end of the flow.
flowchart TD
T["Trigger: Order delivered"] --> S["Send message: Would you like our offers? Reply YES"]
S --> W{"Wait for activity (2 days)"}
W -->|"Replied with text: yes / y"| M["Manage subscription: SMS · Opt in"]
M --> L["Update lists: Add · sms-offers"]
W -->|"No interaction"| E["Flow completed"]
L --> E
What happens to three customers whose orders arrive the same day:
- Anna replies "Yes". The branch matches (matching ignores upper and lower case), her
marketing preference on SMS becomes accepted — which also covers RCS — and she joins
the
sms-offerslist. From now on, campaigns and flow messages with the Opt-in policy reach her (as long as she isn't suppressed), and you can target the list directly. - Leo doesn't answer. After 2 days he takes No interaction and the run ends. His preference stays as it was: not answering is not a "no".
- Martha replies STOP. That isn't one of the patterns, so the branch doesn't match and, after the 2 days, she leaves through No interaction; her opt-out is recorded and respected by the usual STOP handling, independently of the flow. To give those contacts a path of their own, add an Unsubscribed branch to the wait.
Two things to check before publishing a flow like this. Replies are only possible where contacts can answer an SMS, which depends on the market (see Opt-outs & reactivation). And the question itself is a message like any other, sent under the consent policy of its own Send message step (see Sending messages).
Related
The marketing preference and suppression, and which messages reach each contact.
BranchesRoute contacts by tag, list, segment, contact field, event, consent or an A/B split.
The trigger: who enters and whenStart a flow when a contact gains a tag, joins a list or changes their subscription.
Integrations & data sourcesWhere your contacts' data comes from and how sources are combined.
Last updated