Condition nodes evaluate data about the customer or their triggering event and split the flow into a YES path and a NO path. They are what makes automations targeted rather than generic — instead of sending the same message to every customer who triggers a flow, conditions let you branch based on order value, purchase history, segment membership, reply behavior, and more. Every condition branch must connect to at least one subsequent node. A branch that leads nowhere will fail flow validation.Documentation Index
Fetch the complete documentation index at: https://docs.digifist.com/llms.txt
Use this file to discover all available pages before exploring further.
What this covers
- All ten available condition types
- AND/OR logic and nested grouping
- How to read a condition node’s output
- Practical branching patterns
Condition types
Message Delivery Status
Message Delivery Status
MESSAGE_DELIVERY_STATUS — Evaluates whether the last message sent to the customer in this flow was delivered or read.Use this to branch based on whether previous communication reached the customer. A common pattern is to send a recovery message, wait 24 hours, then check delivery status before deciding whether to send a follow-up or exit the flow for undelivered cases.Available evaluations: delivered, read, failed, sent (but not yet delivered or read)User Reply Status
User Reply Status
USER_REPLY_STATUS — Evaluates whether the customer replied to the last message sent in this flow within a defined window.Use this to suppress a follow-up message when the customer has already engaged. For example: send an initial recovery message, wait 4 hours, check if the customer replied — if YES, exit the flow; if NO, send a reminder.This condition requires an active conversation window context — it checks for a customer-initiated inbound message after the last outbound action in the flow.Order Recency
Order Recency
ORDER_RECENCY — Evaluates how recently the customer placed an order.Use this to prevent recovery or re-engagement messages from reaching customers who have already purchased since the trigger fired. This is particularly useful in abandoned checkout flows where the customer may have completed a purchase on a different device or channel after abandoning.Available operators: before / after / within last X daysCustomer Tag
Customer Tag
CUSTOMER_TAG — Evaluates whether the customer currently has a specific Shopify tag on their customer record.Use this to differentiate treatment based on lifecycle stage, loyalty tier, or any other tag-based segmentation your store uses. For example: branch VIP-tagged customers to a premium offer template while routing standard customers to a general recovery template.Available operators: has tag / does not have tagProduct in Order Has Tag
Product in Order Has Tag
PRODUCT_IN_ORDER_HAS_TAG — Evaluates whether the order that triggered this flow contains a product with a specific Shopify product tag.Use this to send product-category-specific follow-ups. For example: in a post-purchase cross-sell flow, check whether the triggering order contained a product tagged “Shoes” — if YES, send an accessories recommendation; if NO, route to a different recommendation template.Available operators: contains a product with tag / does not contain a product with tagSegment Membership
Segment Membership
SEGMENT_MEMBERSHIP — Evaluates whether the customer is currently a member of a specific segment.Use this to apply dynamic audience logic mid-flow. Segment membership is evaluated at the moment the customer reaches the condition node — not at the time the flow was triggered. This means a customer who joins or leaves a segment between trigger and condition evaluation will be routed correctly based on their current state.Available operators: is a member / is not a memberOrder Value
Order Value
ORDER_VALUE — Evaluates the total value of the order that triggered this flow.Use this to differentiate message treatment by order size. The most common pattern is an abandoned checkout flow that routes high-value abandonments to a personalized VIP recovery template and lower-value abandonments to a standard template.Available operators: >, <, >=, <=, =, betweenItem Count in Order
Item Count in Order
ITEM_COUNT_IN_ORDER — Evaluates the number of line items in the triggering order.Use this to differentiate between single-item and multi-item orders, which often warrant different messaging strategies — a customer who bought one item may respond differently to a cross-sell than a customer who already bought multiple products.Available operators: >, <, >=, <=, =, betweenList Membership
List Membership
LIST_MEMBERSHIP — Evaluates whether the customer is currently a member of a specific Customer List.Use this similarly to segment membership, but against static lists rather than dynamic rule-based segments. Useful for suppressing messages to customers on a VIP or do-not-contact list, or for routing list members to a dedicated message variant.Available operators: is a member / is not a memberCustomer Country
Customer Country
CUSTOMER_COUNTRY — Evaluates the customer’s country from their Shopify profile.Use this to localize messaging — routing customers from different markets to templates written in the appropriate language, or applying market-specific offers. Particularly relevant for Galantis’s primary markets (LATAM, MENA, India) where a single flow serving multiple countries often needs country-level branching.Available operators: is / is not / in list / not in listAND/OR logic and grouping
Multiple conditions can be combined within a single Condition Node using AND and OR operators, and grouped for complex evaluation. AND logic within a group — all conditions in the group must be true for the group to evaluate as true:Condition reference
| Condition | Evaluates | Key operators |
|---|---|---|
MESSAGE_DELIVERY_STATUS | Delivery state of last message | delivered / read / failed |
USER_REPLY_STATUS | Whether customer replied | replied / did not reply |
ORDER_RECENCY | Time since last order | before / after / within X days |
CUSTOMER_TAG | Shopify tag presence | has / does not have |
PRODUCT_IN_ORDER_HAS_TAG | Product tag in triggering order | contains / does not contain |
SEGMENT_MEMBERSHIP | Current segment membership | is / is not member |
ORDER_VALUE | Triggering order total | >, <, >=, <=, =, between |
ITEM_COUNT_IN_ORDER | Line item count in triggering order | >, <, >=, <=, =, between |
LIST_MEMBERSHIP | Current list membership | is / is not member |
CUSTOMER_COUNTRY | Customer’s country | is / is not / in / not in |
Best practices
- Always connect both YES and NO branches. A condition with an unconnected branch fails validation and blocks activation. Even if the NO path should do nothing, connect it to an explicit exit point or omit the condition if branching is not needed.
- Use
ORDER_RECENCYin recovery flows. An abandoned checkout customer who purchased before the recovery message sends should not receive a recovery message. A recency check before the action node prevents this. - Prefer segment conditions for complex audience logic. Rather than stacking multiple conditions in a single node, consider building a segment that captures the complex logic and using a single
SEGMENT_MEMBERSHIPcondition node. This makes the flow easier to read and the segment independently useful for campaigns. - Evaluate country conditions early in international flows. If a flow needs to send different templates per language, place the country condition node before any action nodes so routing happens before any message is sent.
Related guides
- Flow Builder — Placing and connecting Condition Nodes on the canvas
- Actions — The Action Nodes that conditions route customers toward
- Triggers — What data is available from each trigger for condition evaluation
- Recipes — Condition usage in context across common flow patterns