Creating Workflows
This guide walks you through creating workflows using KeeperHub’s visual workflow builder.
Getting Started
- Click the workflow dropdown in the top-left corner
- Select New Workflow to create a blank workflow
- The visual canvas opens with zoom controls and the AI assistant
The Workflow Canvas
Navigation
- Zoom: Use the +/- buttons in the bottom-left, or scroll to zoom
- Pan: Click and drag on empty canvas space to move around
- Fit: Click the fit button to center all nodes in view
Top Toolbar
| Button | Function |
|---|---|
| + | Add a new node |
| Undo/Redo | Undo or redo recent changes |
| Save | Save current workflow state |
| Download | Export workflow as JSON |
| Lock | Lock workflow to prevent edits |
| Run | Execute the workflow manually |
Adding Nodes
Add nodes to your workflow using any of these methods:
Method 1: Toolbar Button
Click the + button in the top toolbar to open the node picker.
Method 2: Context Menu
Right-click anywhere on the canvas to open a context menu with node options.
Method 3: Edge Dragging
Drag from an existing node’s output connector (the dot on the right side) to create a new connected node.
Connecting Nodes
Nodes have connector points:
- Input (left side): Receives data from previous nodes
- Output (right side): Sends data to subsequent nodes
To connect nodes:
- Click and hold on a node’s output connector
- Drag to another node’s input connector
- Release to create the connection
Connections show the data flow direction with a curved line between nodes.
Configuring Nodes
Click any node to open the configuration panel on the right side of the screen.
Common Configuration Fields
| Field | Description |
|---|---|
| Service | The type of service (Web3, Email, Discord, etc.) |
| Connection | Your configured connection for this service |
| Network | Blockchain network (for Web3 nodes) |
| Address | Wallet or contract address (for Web3 nodes) |
| Label | Display name for this node |
| Description | Optional notes |
| Enabled | Toggle to activate/deactivate this node |
Trigger Configuration
For trigger nodes, you’ll also configure:
- Schedule: Interval for scheduled triggers (every 5 minutes, hourly, etc.)
- Webhook URL: Provided URL for webhook triggers
- Event Filter: Event signature for event triggers
- Block Interval: Network and block interval for block triggers (e.g., every 10 blocks on Ethereum)
Condition Configuration
Condition nodes evaluate expressions and branch the workflow into true and false paths. Use the Visual builder for point-and-click rule creation, or switch to Expression mode to write raw JavaScript expressions.
Visual Builder
Each rule has a left operand, an operator, and (for binary operators) a right operand. Operands accept literal values or template references like {{@nodeId:Label.field}}.
Combine multiple rules with AND / OR logic toggles, and nest groups for complex conditions.
Operators
| Operator | Label | Type | Description |
|---|---|---|---|
== | soft equals | Comparison | Loose equality (type coercion) |
=== | equals | Comparison | Strict equality (no type coercion) |
!= | soft not equals | Comparison | Loose inequality |
!== | not equals | Comparison | Strict inequality |
> | greater than | Comparison | Numeric greater than |
>= | greater than or equal | Comparison | Numeric greater than or equal |
< | less than | Comparison | Numeric less than |
<= | less than or equal | Comparison | Numeric less than or equal |
contains | contains | String | Left operand contains right operand |
startsWith | starts with | String | Left operand starts with right operand |
endsWith | ends with | String | Left operand ends with right operand |
matchesRegex | matches regex | Pattern | Left operand matches regex pattern in right operand |
isEmpty | is empty | Existence | Value is null, undefined, or empty string |
isNotEmpty | is not empty | Existence | Value is not null, undefined, or empty string |
exists | exists | Existence | Value is not null and not undefined |
doesNotExist | does not exist | Existence | Value is null or undefined |
When to use soft vs strict equality: Use == (soft equals) when comparing values that may differ in type, such as a string "0" against a number 0. Use === (equals) when you need exact type matching. Most blockchain data arrives as strings, so soft equality is the default for new conditions.
Expression Mode
Expression mode allows you to write raw JavaScript condition expressions for advanced logic. In addition to the comparison and logical operators in the Visual Builder, you can use arithmetic operators for calculations:
| Operator | Description |
|---|---|
+ | Addition |
- | Subtraction |
* | Multiplication |
/ | Division |
% | Modulo (remainder) |
** | Exponentiation (power) |
Example expressions:
{{@CheckBalance:Balance.value}} * 2 > 100- Check if double the balance exceeds 100{{@GetPrice:Price.usd}} ** 2 >= 10000- Check if price squared is at least 10,000({{@GetAmount:Amount.wei}} / 1000000000000000000) >= 0.5- Convert wei to ETH and check threshold{{@GetRewards:Rewards.amount}} % 10 === 0- Check if rewards are divisible by 10
Expression mode also supports JavaScript methods, array indexing, and property access for complex logic.
Dual Output Paths
Condition nodes have two output handles:
- true — downstream nodes connected here execute when the condition passes
- false — downstream nodes connected here execute when the condition fails
Connect different branches to each handle to create if/else logic in a single node.
Managing Connections
Before using certain node types, set up connections in your account:
- Click your profile icon in the top-right
- Select Connections
- Add connections for services you need:
- Web3 wallets
- Email providers
- Discord webhooks
- Slack workspaces
Enabling and Running
Enable Individual Nodes
Each node has an Enabled toggle in its configuration panel. Disabled nodes are skipped during execution.
Test Your Workflow
Click the green Run button to execute the workflow immediately. This is useful for testing before enabling scheduled execution.
Delete Nodes
Click Delete in the node configuration panel to remove a node and its connections.
Saving Workflows
- Workflows automatically save when you make changes
- Use the Save button to force-save current state
- Invalid configurations prevent saving until fixed
Using AI to Create Workflows
The Ask AI… input at the bottom of the canvas lets you describe your automation in natural language:
- Click the input field or use the keyboard shortcut
- Describe what you want to automate
- The AI will suggest nodes and configurations
- Review and adjust the generated workflow
Example Prompts
- “Alert me on Discord when my wallet balance drops below 0.1 ETH”
- “Every hour, check if a contract’s totalSupply changed and email me”
- “When someone sends ETH to my wallet, log it to Slack”
Importing from the Hub
The Hub lists workflow templates shared by the community. To use a template:
- Browse the Hub from the main navigation
- Select a workflow template
- Click Duplicate to copy it into your workspace
The copy is created with a unique name (e.g., “My Workflow (Copy)”) and set to private visibility. Node configurations are preserved, but integration credentials are removed so you can assign your own connections.
You can also duplicate any public workflow you are viewing by clicking the Duplicate button in the toolbar.
Workflow States
| State | Description |
|---|---|
| Draft | Workflow is being edited, not running |
| Active | Workflow is enabled and will execute on triggers |
| Paused | Workflow exists but all triggers are disabled |
Best Practices
- Test on Sepolia first: Use the testnet before deploying to Mainnet
- Name your nodes clearly: Use descriptive labels for easy understanding
- Start simple: Begin with one trigger and one action, then add complexity
- Check your connections: Ensure all required connections are configured before enabling
- Review the Run output: Check execution logs after running to verify behavior