Go to Studio

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 ToolsIf/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.

OperatorDescriptionExample
equalsEqual tostatus equals "active"
not_equalsNot equal totype != "test"
greater_thanGreater thanscore > 80
greater_than_or_equalGreater or equalcount >= 10
less_thanLess thanprice < 100
less_than_or_equalLess or equalitems <= 5
containsString containsemail contains "@gmail"
not_containsDoesn’t containurl not_contains "test"
starts_withString starts withname starts_with "Dr."
ends_withString ends withfile ends_with ".pdf"
is_emptyValue is empty/nulldata is_empty
is_not_emptyValue existsresult 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