Conditional
Branch your workflow based on conditions
What does this node do?
The Conditional node evaluates conditions and routes your workflow to different branches. Use it for data validation, error handling, A/B logic, and any scenario where execution depends on data values.
Common uses:
- Route based on data values
- Validate data before processing
- Handle error conditions
- Implement business logic
Quick setup
Add the Conditional node
Find it in Tools → If/Else
Set your condition
Choose left value, operator, and right value
Connect both branches
Connect nodes to True and False outputs
Test with sample data
Verify routing works as expected
Configuration
Required fields
left_value any required The value to compare (left side of condition).
Examples:
- Variable:
{{WebScraper_0.wordCount}} - Static:
100 - Nested:
{{data.status}}
operator string required The comparison operator.
| Operator | Description | Example |
|---|---|---|
equals | Equal to | status equals "active" |
not_equals | Not equal to | type != "test" |
greater_than | Greater than | score > 80 |
greater_than_or_equal | Greater or equal | count >= 10 |
less_than | Less than | price < 100 |
less_than_or_equal | Less or equal | items <= 5 |
contains | String contains | email contains "@gmail" |
not_contains | Doesn’t contain | url not_contains "test" |
starts_with | String starts with | name starts_with "Dr." |
ends_with | String ends with | file ends_with ".pdf" |
is_empty | Value is empty/null | data is_empty |
is_not_empty | Value exists | result is_not_empty |
right_value any The value to compare against (right side).
Not required for is_empty and is_not_empty.
Optional fields
case_sensitive boolean default: true Whether string comparisons are case-sensitive.
multiple_conditions array Additional conditions combined with AND/OR logic.
[
{
"left": "{{status}}",
"operator": "equals",
"right": "active",
"logic": "AND"
}
] Output
The node evaluates and routes to one of two outputs:
{
"condition_met": true,
"left_value": 150,
"operator": "greater_than",
"right_value": 100,
"branch_taken": "true_branch"
}
Examples
Data validation
Check if content exists before processing:
Condition: {{WebScraper_0.content}} is_not_empty
True → Process content
False → Log "No content found"
Score-based routing
Route leads by score:
graph LR
A[Lead] --> B{Score >= 80?}
B -->|True| C[Hot Lead Flow]
B -->|False| D{Score >= 50?}
D -->|True| E[Warm Lead Flow]
D -->|False| F[Nurture Flow]
Configuration:
- Left:
{{lead.score}} - Operator:
greater_than_or_equal - Right:
80
Error handling
Check API response status:
Condition: {{HTTP_0.status}} equals 200
True → Process response
False → Handle error
Content type filtering
Process only articles:
Condition: {{page.type}} equals "article"
True → Analyze article
False → Skip
Multiple conditions
Combine conditions with AND/OR:
AND logic (all must be true)
Condition 1: score > 50
AND
Condition 2: status equals "active"
AND
Condition 3: region equals "US"
All three must be true for the True branch.
OR logic (any can be true)
Condition 1: type equals "premium"
OR
Condition 2: spending > 1000
Either condition triggers the True branch.
Mixed logic
(score > 80 AND status = "active")
OR
(type = "vip")
Common patterns
Null/empty checking
Always validate data exists:
graph LR
A[Data] --> B{Not Empty?}
B -->|Yes| C[Process]
B -->|No| D[Handle Missing]
Range checking
Check if value is in range:
graph LR
A[Value] --> B{>= Min?}
B -->|Yes| C{<= Max?}
B -->|No| D[Below Range]
C -->|Yes| E[In Range]
C -->|No| F[Above Range]
Multi-way branching
Route to multiple paths:
graph LR
A[Input] --> B{Type A?}
B -->|Yes| C[Process A]
B -->|No| D{Type B?}
D -->|Yes| E[Process B]
D -->|No| F{Type C?}
F -->|Yes| G[Process C]
F -->|No| H[Default]
Validation pipeline
Check multiple requirements:
graph LR
A[Input] --> B{Has Email?}
B -->|No| F[Fail]
B -->|Yes| C{Valid Format?}
C -->|No| F
C -->|Yes| D{Not Duplicate?}
D -->|No| F
D -->|Yes| E[Success]
Best practices
Be explicit about types
Numbers and strings compare differently:
❌ "100" equals 100 → May fail (string vs number)
✅ 100 equals 100 → Works (both numbers)
Handle the False branch
Always connect both branches:
❌ Only connect True, ignore False
✅ Connect both, even if False just logs
Use descriptive conditions
Make conditions readable:
❌ {{x}} > {{y}}
✅ {{lead.score}} greater_than {{threshold}}
Test edge cases
Verify behavior with:
- Empty values
- Null values
- Zero
- Boundary values (exactly equal to threshold)
Common issues
Condition always True/False
- Check data types match (string vs number)
- Verify variable paths are correct
- Log the actual values being compared
String comparison fails
- Check case sensitivity setting
- Trim whitespace from values
- Verify encoding matches
Number comparison unexpected
- Ensure values are numbers, not strings
- Check for null/undefined values
- Verify number format (decimals, etc.)
Multiple conditions not working
- Verify AND/OR logic is correct
- Check each condition individually
- Ensure all values are accessible