Conditions and branching

Conditions split an automation run down a YES or NO branch based on a contact tag or attribute.

Last updated: May 2026

CONDITIONHas tag "vip"?YESNOSEND EMAILVIP exclusive offerSEND EMAILStandard offer

Overview

A condition node sends the run down one of two branches. The green YES handle on the left fires when the check passes. The red NO handle on the right fires when it fails. Branch labels are baked into the edges, so the engine always knows which path to take at runtime.

Has tag check

Checks whether the contact currently has a specific tag.

Fields

  • Tag: the exact tag to check for. Case-sensitive.

Pair this with Add tag and Remove tag actions to build state machines (onboarded activeinactive-90dchurned).

Contact attribute check

Checks a contact field (custom or built-in) against a value with one of five operators.

existsfield has any valueequalsexact matchcontainssubstring matchgtgreater thanltless than

Fields

  • Attribute: the field name (e.g. country, plan, signup_source).
  • Operator: exists, equals, contains, gt, lt.
  • Value: required for every operator except exists.

gt and lt coerce both sides to numbers. contains is a case-insensitive substring match. equals is exact (case-sensitive). Missing attributes always fail the check (NO branch fires).

YES and NO branches

Each condition node has two outgoing handles. The left handle (green, labeled YES) carries the pass branch. The right handle (red, labeled NO) carries the fail branch. The canvas shows the labels right on the edge so you can scan the graph without opening the inspector.

Click the small + button under either handle to drop a new node onto that branch. You can leave a branch empty during drafting, but Publish requires every condition to have both branches wired (or wired to Exit).

What happens if a branch is missing

At validate time (Publish), Grivo flags a condition that's missing a YES or NO edge with a friendly message: "Has tag check: connect both the YES and the NO branch (or send one to Exit)."

At runtime, if you somehow ended up with a missing branch (rare, only if data was edited externally), the run ends in completed for that contact and a warning is recorded against the node.

Examples

  • VIP vs standard offer: condition has_tag = vip. YES sends premium discount, NO sends standard.
  • Trial expired check: condition plan equals trial_expired. YES enters win-back sequence, NO exits.
  • Country-specific welcome: condition country equals US. YES sends US email, NO sends global email.
  • Engagement segment: condition last_open_days lt 30. YES continues onboarding, NO exits to a re-engagement automation.

See full graph layouts on the Use cases page.

Next steps