How it works
- Define one or more variables with names and values
- Values can be static or dynamic (using expressions)
- Reference the variables in downstream nodes using
{{nodes.variables.variable_name}}
Configuration
Each variable has two properties:| Property | Description |
|---|---|
| Name | A unique identifier for the variable (e.g., threshold, template) |
| Value | The value to store—can be static text, numbers, or dynamic expressions |
Defining variables
Static values
Define constants that don’t change:| Name | Value |
|---|---|
score_threshold | 50 |
default_tier | "standard" |
api_base_url | "https://api.example.com" |
Dynamic values with expressions
Use expressions to compute values from previous nodes:| Name | Value |
|---|---|
full_name | {{nodes.start.first_name}} {{nodes.start.last_name}} |
domain | {{nodes.enrich.website.split('//')[1]}} |
is_enterprise | {{nodes.enrich.employee_count > 1000}} |
Referencing variables
Access variables in downstream nodes using expressions:| Expression | Returns |
|---|---|
{{nodes.variables.full_name}} | The stored full name string |
{{nodes.variables.config.retries}} | 3 (nested property access) |
{{nodes.variables.is_enterprise}} | true or false |
Replace
variables with the actual name of your Variables node if you’ve
renamed it.Common use cases
Simplify complex expressions
Instead of repeating complex expressions, define them once: Without Variables:Define configuration values
Centralize settings that might change:| Name | Value | Purpose |
|---|---|---|
min_score | 40 | Lead qualification threshold |
max_contacts | 5 | Limit contacts per company |
campaign_id | "camp_123" | Target campaign for enrollment |
Create conditional values
Compute values based on conditions:| Name | Value |
|---|---|
tier | {{nodes.score.value >= 70 ? "hot" : nodes.score.value >= 40 ? "warm" : "cold"}} |
priority | {{nodes.enrich.funding > 10000000 ? "high" : "normal"}} |
Variables vs. JavaScript
Choose the right tool for the job:| Use Variables when… | Use JavaScript when… |
|---|---|
| Storing simple values or expressions | Complex logic with multiple conditions |
| Centralizing configuration | Array transformations (map, filter, reduce) |
| Making workflows more readable | String parsing or manipulation |
| Preparing data for integrations | Error handling with try/catch |
Variables vs. Memory
Both store values, but they serve different purposes:| Feature | Variables | Memory |
|---|---|---|
| Scope | Current workflow execution only | Persists across executions |
| Purpose | Intermediate values, config | Counters, caching, cross-play state |
| Access | Direct via nodes.variables | Requires Get/Set actions |
| Persistence | Gone after execution completes | Remains until explicitly removed |
Best practices
Use descriptive names
Use descriptive names
Name variables clearly:
qualified_lead_threshold is better than
threshold or t. Future you will thank present you.Group related variables
Group related variables
Define early, use often
Define early, use often
Place Variables nodes near the start of your workflow so values are
available to all downstream nodes.
Avoid over-nesting
Avoid over-nesting
Keep variable values reasonably simple. If you’re building deeply nested
objects, consider using JavaScript instead.

