Flows use the same contact filters as segments — see the Contact filter reference for the full field list and How filters work in Spoks for operators. Inside a flow there are two flow-specific additions: trigger filters and suppression.
Contact filters vs. trigger filters
Inside a flow there are two filter slots near the trigger:
Contacts Filter — tests the contact's standing attributes and history (consent status, total orders, last purchase date, and so on). This is the same contact filter used in segments.
Trigger Filter — tests the triggering event itself rather than the contact's profile. Added with the Add Trigger Filter button; the available options depend on which trigger the flow uses.
Trigger filters available by trigger
Trigger filter options are specific to the trigger you chose:
Trigger | Trigger filter(s) |
New tag | Added tags — pick one or more of your tags (contains). A tag has to be on at least one contact before it appears in the picker; see How do I add and delete tags? |
Form submission | Form submission — pick one or more of your forms (contains) |
Checkout started, Placed order, Cart abandoned, Product viewed, Order delivered | Product, Collections, Vendor |
Where filters live: trigger vs. step
Filters can sit in two places within a flow:
At the trigger — the Contacts Filter and Trigger Filter control who qualifies for the whole flow.
On an individual step — each send step (email or SMS) can carry its own contacts filter, so different contacts in the same flow receive different messages. The Thank You template filters one step to Total orders equals 1 and a later step to Total orders equals 2.
Trigger filters also act as suppression filters
Suppression applies only to the filters at the trigger (the Contacts Filter and Trigger Filter). The builder notes it: "This filter also acts as a suppression filter."
A trigger-level filter keeps checking after enrollment: if a contact stops matching while partway through the flow, they're removed and won't receive the remaining messages. For example, in an Abandoned Checkout flow filtered on Last purchase is before flow started, a shopper who completes their purchase no longer matches and drops out before the reminder.
The check runs when the contact's next step is due. A shopper who buys during a delay still shows as waiting on that delay until it ends, and is removed at that point, before the next message is sent.
Per-step filters do not suppress. A filter on a step only decides who receives that message; it never removes a contact from the flow.
A step filter is the list of who does receive that message. To leave a group out, write the filter as the exclusion: to skip anyone who already had this email, use Received Email, equals 0, over all time, Where Email Subject contains its subject.
To stop a flow email arriving on the same day as a campaign, put a step filter on the send step: Received Email, equals 0, less than 1 day. Only contacts who have had no email from you in the last day pass the step. Put the same filter on the flow's contacts filter instead if you would rather they never enter the flow.
How filters interact with re-enrollment
Re-enrollment is a flow setting: in the flow's Settings you can allow it, allow only one entry, or set a re-entry period. Trigger-level filters are re-evaluated on each enrollment, so the "flow started" reference resets to that new enrollment. This is why date filters like is before flow started stay meaningful across repeat enrollments.
In short
Contact filters test the person; trigger filters test the enrolling event and are specific to the chosen trigger.
Only the filters at the trigger suppress — contacts who stop matching are removed mid-flow. Per-step filters gate that one message only.
On re-enrollment, trigger-level filters and the "flow started" reference are re-evaluated.