A condition decides which way a workflow goes. A switch does the same across several cases. Both read values from the trigger's data and test them.
Condition Groups
A condition is a group of rules with a mode:
| Mode | Passes when |
|---|---|
| All of these | Every rule passes |
| Any of these | At least one rule passes |
| None of these | No rule passes |
Groups nest, so you can express "all of these, and any of those" without contortion. Build the shape you mean rather than flattening it into one long list - a nested group that reads clearly is worth more than a clever flat one.
The Operators
Fifty-two operators, filtered to what makes sense for the field's type. A date field offers date operators; a text field offers text ones.
Comparison - equals, not equals, greater than, less than, greater or equal, less or equal, between, not between. Also equals case-insensitive for text, which is usually what you want when comparing text a human typed.
Text - contains, does not contain, starts with, ends with, matches regex, does not match regex, and length equals, greater than or less than.
Emptiness - is empty, is not empty, is null, is not null, is set, is not set. These are not identical: a field can be present and blank, or absent entirely. When a condition on emptiness behaves oddly, try the other one.
Lists - in list, not in list, list contains, list does not contain, list contains any of, list contains all of.
Booleans - is true, is false.
Dates - the richest set, and where most of the useful automations live:
| Operator | Use for |
|---|---|
| Date before / Date after | Fixed cut-offs |
| Date within N days | A window either side |
| Is today / Is tomorrow / Was yesterday | Daily jobs |
| Is in next N days / Was in past N days | Look-ahead and look-back |
| Is older than N days | Staleness |
| Is more than N days away | Early warning |
| Is birthday or anniversary today | Matches day and month, ignoring year |
| Is this month | Matches month, ignoring day and year |
| Is a weekday / Is weekend | Working-day logic |
| Is day of week / Is day of month | Specific recurring days |
Tip
"Is birthday or anniversary today" is the one people build badly by hand. It matches day and month while ignoring the year, so it works for birthdays, contract anniversaries and joining dates without any date arithmetic.
Change operators - has changed, changed to, changed from, changed from X to Y. These compare the value before and after, so you can act on a transition rather than a state. "Changed to at-risk" fires once, when it happens. "Is at-risk" is true every time anything on that record changes.
That distinction prevents a large class of repeated-notification bugs.
Switches
A switch branches to several cases at once, rather than yes and no. Use it when one field decides between three or more paths - routing by region, by priority, by type.
A switch with two cases should be a condition. A chain of five conditions testing the same field should be a switch.
Values From The Record
Rules read values from the triggering record - and custom fields are first-class here, so you can branch on anything you have added yourself. See Custom Fields.
Common Mistakes
Testing state where you meant transition. Use the change operators when you care that something became true.
Comparing text exactly. Use equals case-insensitive, or contains, when a human typed the value.
Assuming empty means null. They are different. If a rule is not matching records you can see are blank, swap the operator.
Over-nesting. If a condition needs four levels, the workflow is probably two workflows.
Testing Conditions
Use the dry run. It executes against a sample payload without sending anything, and shows which branch was taken. Test both paths - a condition that always goes the same way is not doing anything, and you will not notice until the other case matters.
Caution
A condition with no matching data does not error. It takes the false branch, silently. If a workflow "does nothing", the usual cause is a condition that never passes because the field it reads is empty on the records that trigger it.
Common Questions
Can I compare two fields? Rules test a field against a value. To compare fields, compute one into a variable first with a transform, then test that.
Why is my operator missing? Operators are filtered by field type. A text field will not offer greater than.
Does the condition see custom fields? Yes.
What happens if a branch has nothing attached? The workflow ends there. That is fine when it is deliberate, and a silent stop when it is not.
Did this answer your question?
No, ask a person