Condition
One yes/no question, two paths. How the Condition node compares a value, which of its 27 operators to reach for, and what happens when the variable it checks does not exist.
Every workflow you have built so far runs in a straight line: each node hands its output to the next, and the whole thing does the same thing every time. Real work is not like that. A warm lead should be called today; a cold one should go into a nurture sequence. Same trigger, same data, two different answers.
Condition is how a workflow chooses. It asks exactly one yes/no question and sends the run down one of two paths. It is the if-statement of automation — and it is the node you will reach for more than any other in the Logic group.
The three fields that make the question
A Condition is a sentence with three parts: a variable to check, an operator to compare with, and a value to compare against. Read left to right, the one in this lesson says: {{crmmanager_1.entity.lead_status}} contains Warm.
| Field | What it holds |
|---|---|
variable | Variable to evaluate (supports legacy value_path) |
operator | Comparison operator One of: == · != · > · < · >= · <= · contains · not_contains · starts_with · ends_with · regex_match · is_empty · is_not_empty · greater_than · less_than · in · not_in · before · after · date_between · date_equals · within_last_days · within_next_days · time_before · time_after · time_between · time_equals Defaults to ==. |
value | Value to compare against (supports legacy comparison_value) |
variable
- What it holds
- Variable to evaluate (supports legacy value_path)
operator
- What it holds
- Comparison operator One of:
== · != · > · < · >= · <= · contains · not_contains · starts_with · ends_with · regex_match · is_empty · is_not_empty · greater_than · less_than · in · not_in · before · after · date_between · date_equals · within_last_days · within_next_days · time_before · time_after · time_between · time_equalsDefaults to==.
value
- What it holds
- Value to compare against (supports legacy comparison_value)
The variable side is dynamic — it is a {{ }} reference resolved fresh on every run. The value side is usually a literal, but it accepts a reference too, so you can compare two moving things to each other: is this deal worth more than the budget the contact told us?
A worked example
Here is the whole thing as it runs. A contact's lead status changes, the workflow reads that contact back out of the CRM, and the Condition decides what happens next.
One question, two paths
Click the Condition node to see the comparison it makes. The Yes and No connectors are its two output handles.
Scroll for all 5 steps →
Two things in that diagram are worth pausing on. The trigger watches lead_status specifically, so editing a contact's phone number does not start this workflow. And the Condition has two outgoing connectors, not one — every downstream node hangs off either the Yes handle or the No handle. A Condition with nothing wired to one of its handles is a run that quietly stops.
Twenty-seven operators, four families
The operator dropdown is the part learners underestimate. It holds 27 operators, and they fall into four groups:
| Family | Operators | Use it for |
|---|---|---|
| Equality & numeric | == != > < >= <= | Amounts, scores, counts |
| String | contains not_contains starts_with ends_with regex_match is_empty is_not_empty | Statuses, tags, free text |
| List membership | in not_in | “Is it one of these three stages?” |
| Date & time | before after date_between within_last_days within_next_days plus the time_* siblings | Renewals, follow-up windows, office hours |
Equality & numeric
- Operators
==!=><>=<=- Use it for
- Amounts, scores, counts
String
- Operators
containsnot_containsstarts_withends_withregex_matchis_emptyis_not_empty- Use it for
- Statuses, tags, free text
List membership
- Operators
innot_in- Use it for
- “Is it one of these three stages?”
Date & time
- Operators
beforeafterdate_betweenwithin_last_dayswithin_next_daysplus thetime_*siblings- Use it for
- Renewals, follow-up windows, office hours
Two behaviours that surprise people. First, contains is case-insensitive — Warm matches warm and WARM. Second, both sides are parsed as a date first, then as a number, and only then as text — so 42 is genuinely less than 100, rather than sorting after it the way strings would.
What happens when the variable is missing
This is the failure worth knowing before you hit it. If the reference cannot be resolved — the field is empty, or the upstream node did not return what you expected — the Condition does not error. It compares against nothing and takes whichever path that implies: is_empty goes Yes, == goes No. The run continues down a branch you did not intend, which is much harder to spot than a failure.
When a Condition sends a run the wrong way, open the execution log and look at what the node actually compared. It reports both resolved sides, which almost always shows the reference was the problem rather than the operator.
Watch out: Flat config {variable, operator, value}; wire edges on the `true` / `false` handles.
The alias, and why it says if_1
Drag a Condition onto the canvas and the builder names it if_1 — not condition_1. That name is its alias: the namespace downstream nodes use to read its output, as in {{if_1.condition_result}}. Every node type has its own short base, and the number counts up as you add more of them.
Rename it. A workflow with three nodes called if_1, if_2 and if_3 is unreadable a month later. The Description field costs five seconds and turns the node into “Lead is warm or hot” on the canvas.
Try it
- Add a Condition to any workflow that already has a trigger.
- Set the variable to something the trigger gives you, pick
is_not_empty, and leave the value blank. - Wire a node to Yes and a different node to No, then run it and watch which one fires.
- Now break it on purpose: misspell the variable, run it again, and read what the node reports comparing.
Next: Multi-Condition Router — for when two paths are not enough and you need a run to pick one of several.
Related lessons
Base rates — what a piece of evidence is actually worth
A face-recognition system that is 99.9% accurate and almost entirely wrong, and a number that sent an innocent woman to prison. Both are the same arithmetic, and it is the arithmetic that decides what any piece of evidence is worth.
ReadConfirmation and survivorship — what you never looked for
Two questions about evidence you did not go looking for. One is a rule you have to discover, and one is a pattern in five famous people — and in both, the thing that would have told you the truth is the thing nobody checks.
ReadLoss aversion, sunk cost and regression — what it costs you
Four questions you answer about yourself rather than about a scenario, and your own answers are the finding. Then the pattern that makes praise look useless and criticism look like it works, whatever you actually do.
Read
