Skip to main content

Action Nodes

Action nodes process data, interact with external services, and implement workflow logic. They form the core of your automation workflows, transforming inputs into meaningful outputs.

Action Node Categories

Data Transformation

Manipulate, filter, and reshape data

API Operations

Interact with external services

Flow Control

Route and control workflow execution

Data Transformation Nodes

Transform data without writing code - these nodes provide powerful manipulation capabilities through intuitive interfaces.

Set (Edit Fields)

The primary node for data manipulation - add, remove, rename, and transform fields.
Operations:
  • Add/remove fields
  • Rename fields
  • Set values with expressions
  • Include/exclude fields
  • Keep only specific fields
Modes:
  • Manual - Define fields explicitly
  • Expression - Use code for field mapping
  • Include - Specify fields to keep
  • Exclude - Remove specific fields
When to Use:
  • Rename fields for consistency
  • Add calculated fields
  • Clean up data structure
  • Prepare data for next node
  • Type conversions

Filter

Keep or remove items based on conditions - essential for data quality and routing.
Comparison Operators:
  • String: equals, not equals, contains, not contains, starts with, ends with, regex
  • Number: equals, not equals, larger, smaller, larger or equal, smaller or equal
  • Boolean: true, false, equals
  • Date: equals, after, before, after or equal, before or equal
  • Array: contains, not contains, length equals, is empty, is not empty
  • Exists: is empty, is not empty, exists, does not exist
Logical Combinators:
  • AND - All conditions must match
  • OR - Any condition must match
Example - Complex Filter:
{
  "conditions": {
    "combinator": "and",
    "conditions": [
      {
        "leftValue": "={{ $json.status }}",
        "operator": "equals",
        "rightValue": "active"
      },
      {
        "leftValue": "={{ $json.amount }}",
        "operator": "gt",
        "rightValue": 100
      },
      {
        "leftValue": "={{ $json.email }}",
        "operator": "contains",
        "rightValue": "@company.com"
      }
    ]
  }
}

Transform Nodes Collection

Purpose: Combine multiple items into a single item with aggregated values.Operations:
  • Sum, average, min, max
  • Count items
  • Concatenate strings
  • Collect arrays
  • Group by fields
Example - Sum by Category:
{
  "aggregate": "aggregateIndividualFields",
  "fieldsToAggregate": {
    "values": [
      {
        "fieldToAggregate": "amount",
        "operation": "sum",
        "outputFieldName": "totalAmount"
      },
      {
        "fieldToAggregate": "id",
        "operation": "count",
        "outputFieldName": "itemCount"
      }
    ]
  },
  "options": {
    "groupBy": "category"
  }
}
Use Cases:
  • Calculate totals
  • Generate statistics
  • Count occurrences
  • Group data
Purpose: Split arrays into separate items - opposite of aggregation.Example:Input:
{
  "orders": [
    { "id": 1, "product": "A" },
    { "id": 2, "product": "B" }
  ]
}
Configuration:
{
  "fieldToSplitOut": "orders",
  "options": {
    "include": "selectedOtherFields",
    "includeFields": "customerId, date"
  }
}
Output:
{ "id": 1, "product": "A", "customerId": "123" }
{ "id": 2, "product": "B", "customerId": "123" }
Use Cases:
  • Process array items individually
  • Flatten nested data
  • Loop over items
Purpose: Order items by field values.Configuration:
{
  "sortFieldsUi": {
    "sortField": [
      {
        "fieldName": "date",
        "order": "descending"
      },
      {
        "fieldName": "amount",
        "order": "ascending"
      }
    ]
  }
}
Features:
  • Multiple sort fields
  • Ascending/descending
  • Type-aware sorting
  • Null handling
Use Cases:
  • Order by date
  • Prioritize items
  • Rank results
Purpose: Restrict the number of items returned.Configuration:
{
  "maxItems": 10,
  "keepMissing": false
}
Use Cases:
  • Take top N results
  • Pagination
  • Sample data
  • Prevent overload
Purpose: Eliminate duplicate items based on field values.Configuration:
{
  "compare": "selectedFields",
  "fieldsToCompare": {
    "fields": [
      { "fieldName": "email" },
      { "fieldName": "userId" }
    ]
  }
}
Options:
  • All fields
  • Selected fields
  • Expression-based
Use Cases:
  • Deduplicate records
  • Unique emails
  • Clean data
Purpose: Create pivot tables and data summaries.Configuration:
{
  "aggregate": "aggregateIndividualFields",
  "fieldsToAggregate": {
    "values": [
      {
        "fieldToAggregate": "revenue",
        "operation": "sum"
      }
    ]
  },
  "groupBy": "region, quarter"
}
Use Cases:
  • Pivot tables
  • Sales reports
  • Analytics summaries

Date & Time

DateTime Node

Operations:
  • Format dates
  • Calculate date differences
  • Add/subtract time
  • Convert timezones
  • Parse date strings
Examples:Format Date:
{
  "action": "format",
  "date": "={{ $json.createdAt }}",
  "format": "yyyy-MM-dd HH:mm:ss",
  "outputFieldName": "formattedDate"
}
Add Days:
{
  "action": "calculate",
  "date": "={{ $now }}",
  "operation": "add",
  "duration": 7,
  "timeUnit": "days"
}
Calculate Age:
{
  "action": "getTimeBetweenDates",
  "startDate": "={{ $json.birthDate }}",
  "endDate": "={{ $now }}",
  "units": "years"
}

Flow Control Nodes

Control workflow execution path based on conditions and logic.

If Node

Purpose: Route items to True or False branches based on conditions.Outputs:
  • True - Items that match conditions
  • False - Items that don’t match
When to Use:
  • Binary decision points
  • Conditional routing
  • Error handling paths
  • Validation checks
vs. Filter Node:
  • If - Routes to different paths
  • Filter - Removes items from single path

Switch Node

Switch Node

Purpose: Route items to multiple branches based on rules.Configuration:
{
  "mode": "rules",
  "rules": {
    "rules": [
      {
        "output": 0,
        "conditions": {
          "conditions": [
            {
              "leftValue": "={{ $json.priority }}",
              "operator": "equals",
              "rightValue": "urgent"
            }
          ]
        }
      },
      {
        "output": 1,
        "conditions": {
          "conditions": [
            {
              "leftValue": "={{ $json.priority }}",
              "operator": "equals",
              "rightValue": "high"
            }
          ]
        }
      },
      {
        "output": 2,
        "conditions": {
          "conditions": [
            {
              "leftValue": "={{ $json.priority }}",
              "operator": "equals",
              "rightValue": "medium"
            }
          ]
        }
      }
    ]
  },
  "fallbackOutput": 3
}
Use Cases:
  • Multi-tier routing
  • Category-based processing
  • Priority queues
  • Status-based workflows

Merge Node

Append:
  • Combine all items from all branches
  • No matching required
  • Simple concatenation
Keep Key Matches:
  • Join items with matching field values
  • Like SQL JOIN
  • Merge on common key
Merge By Index:
  • Combine items at same position
  • Index-based matching
  • Pair items 1:1
Multiplex:
  • Create all combinations
  • Cartesian product
  • Each item paired with every other

Code Execution Nodes

Use Code nodes as a last resort. Native nodes are faster, more maintainable, and easier to debug.

Code Node

Access Input Data:
// Get all items
const items = $input.all();

// Process each item
const results = items.map(item => ({
  json: {
    fullName: `${item.json.firstName} ${item.json.lastName}`,
    email: item.json.email.toLowerCase(),
    timestamp: new Date().toISOString()
  }
}));

return results;
Use Node Context:
// Access workflow data
const workflowData = $workflow.staticData;

// Get execution context
const executionId = $execution.id;
const mode = $execution.mode;  // 'manual' or 'trigger'

// Access environment variables
const apiKey = $env.API_KEY;

return $input.all();
Date Manipulation:
// Luxon is available
const { DateTime } = require('luxon');

const items = $input.all();

const processed = items.map(item => ({
  json: {
    ...item.json,
    formattedDate: DateTime.fromISO(item.json.date)
      .setZone('America/New_York')
      .toFormat('yyyy-MM-dd HH:mm:ss')
  }
}));

return processed;

Utility Nodes

Purpose: Pause workflow execution for a duration or until a specific time.Configuration:
{
  "unit": "minutes",
  "amount": 5
}
Use Cases:
  • Rate limiting
  • Scheduled delays
  • Cooldown periods
  • Waiting for async operations
Purpose: Halt workflow execution with or without error.Configuration:
{
  "errorMessage": "Validation failed: {{ $json.error }}"
}
Use Cases:
  • Validation failures
  • Business rule violations
  • Graceful termination
  • Error propagation
Purpose: Call another workflow from current workflow.Configuration:
{
  "workflowId": "123",
  "waitForWorkflow": true,
  "jsonData": "={{ $json }}"
}
Use Cases:
  • Reusable sub-workflows
  • Modular design
  • Complex orchestration
  • Workflow composition
Purpose: Do nothing - pass data through unchanged.Use Cases:
  • Workflow documentation
  • Visual organization
  • Placeholder for future nodes
  • Connection point
Purpose: Add annotations and documentation to canvas.Use Cases:
  • Document workflow logic
  • Explain complex sections
  • Add warnings
  • Team collaboration notes

File Processing Nodes

Operations:
  • Read binary files
  • Write binary files
  • Convert to/from base64
  • Handle file metadata
Example:
{
  "operation": "read",
  "filePath": "/data/reports/{{ $json.filename }}",
  "dataPropertyName": "fileData"
}
Purpose: Convert JSON/text data to file.Configuration:
{
  "operation": "toText",
  "options": {
    "fileName": "report.csv",
    "mimeType": "text/csv"
  }
}
Purpose: Extract data from files (CSV, JSON, XML, PDF).Example:
{
  "operation": "csv",
  "binaryPropertyName": "data",
  "options": {
    "delimiter": ",",
    "headerRow": true
  }
}
Operations:
  • Compress files (zip, gzip)
  • Decompress archives
  • Multiple file handling
Use Cases:
  • File archiving
  • Reduce transfer size
  • Backup compression

HTTP & API Nodes

HTTP Request

Detailed in Popular Nodes, the HTTP Request node is the most versatile action node for API integration.

GraphQL

GraphQL Node

Purpose: Execute GraphQL queries and mutations.Example Query:
query GetUser($id: ID!) {
  user(id: $id) {
    name
    email
    posts {
      title
      createdAt
    }
  }
}
Configuration:
{
  "operation": "query",
  "query": "...",
  "variables": {
    "id": "={{ $json.userId }}"
  }
}

Best Practices

Optimize Data Flow:
  • Filter data early
  • Use native nodes over Code
  • Limit API calls
  • Batch operations when possible
Avoid Bottlenecks:
  • Don’t process unnecessary fields
  • Remove unused data
  • Use Set node to clean up
  • Consider splitting large workflows
Memory Management:
  • Limit item count with Limit node
  • Clear large binary data
  • Avoid storing full responses

Next Steps

Trigger Nodes

Learn how to start workflows automatically

Popular Nodes

Explore commonly used integrations

Build Workflows

Create your first automated workflow

Expressions

Master data transformation with expressions