FTP / SFTP Nodes
FTP/SFTP nodes enable pipelines to transfer files to and from remote servers. Use these nodes to automate file-based integrations, data imports/exports, and partner data exchanges. All four node types support both FTP and SFTP protocols through your configured connections.
Configuration Quick Reference
| Field | What you choose | Details |
|---|---|---|
| Parameters | Connection, Function, Function Parameters, Timeout Override | Select the connection profile, function, configure function parameters with expression support, and optionally override timeout. |
| Settings | Description, Timeout (seconds), Retry on Timeout, Retry on Fail, On Error | Node description, maximum execution time, retry behavior on timeout or failure, and error handling strategy. All execution settings default to pipeline-level values. |
FTP Upload Node

FTP Upload Node
Upload files to remote FTP/SFTP servers.
Supported Function Types:
| Function Name | Purpose | Common Use Cases |
|---|---|---|
| Upload | Upload file content to remote server | Data exports, report distribution, configuration deployment |
Node Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| Connection | Selection | Yes | FTP/SFTP connection profile to use |
| Function | Selection | Yes | Upload function from the selected connection |
| Function Parameters | Dynamic | Varies | Auto-populated from the function schema. See your FTP/SFTP connection functions for full parameter details. |
| Timeout Override | Number (seconds) | No | Override the default function timeout |
All function parameters support expression syntax ({{ expression }}) for dynamic values from the pipeline context.
Input
The node receives the output of the previous node as input. Input data can be referenced in function parameter expressions using $input.
Output Structure
On success the node produces:
{
"result": {
"remotePath": "/uploads/data/report.csv",
"size": 2048
},
"_metadata": { "success": true, "functionId": "<function-id>", "durationMs": 156, "timestamp": "2026-01-15T08:30:00Z" }
}
Upload Result Fields
| Field | Type | Description |
|---|---|---|
result.remotePath | string | Full path where the file was uploaded |
result.size | number | Bytes sent to the remote server |
result.appended | boolean | Present, and true, only when the upload appended to an existing file (Append to File on) |
_metadata.method, _metadata.connectionId, _metadata.protocol | string | The call's own facts, on every FTP node: the operation that ran, the connection it ran over, and ftp |
FTP Download Node

FTP Download Node
Download files from remote FTP/SFTP servers.
Supported Function Types:
| Function Name | Purpose | Common Use Cases |
|---|---|---|
| Download | Download file content from remote server | Data imports, report retrieval, configuration fetch |
Node Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| Connection | Selection | Yes | FTP/SFTP connection profile to use |
| Function | Selection | Yes | Download function from the selected connection |
| Function Parameters | Dynamic | Varies | Auto-populated from the function schema (e.g., remotePath). See your FTP/SFTP connection functions for full parameter details. |
| Timeout Override | Number (seconds) | No | Override the default function timeout |
Input
The node receives the output of the previous node as input. Use expressions like {{ $input[0].result.files[0].name }} (after a List) to dynamically specify which file to download.
Output Structure
On success the node produces:
{
"result": {
"remotePath": "/data/exports/sales.csv",
"size": 4096,
"encoding": "text",
"content": "header1,header2\nvalue1,value2\n..."
},
"_metadata": { "success": true, "functionId": "<function-id>", "durationMs": 234, "timestamp": "2026-01-15T08:30:00Z" }
}
Download Result Fields
| Field | Type | Description |
|---|---|---|
result.remotePath | string | Path of the downloaded file |
result.size | number | File size in bytes |
result.encoding | string | text when the content is delivered as is, base64 when the file was binary |
result.content | string | File content — the text itself, or base64 when encoding says so |
FTP List Node

FTP List Node
List files and directories on remote FTP/SFTP servers.
Supported Function Types:
| Function Name | Purpose | Common Use Cases |
|---|---|---|
| List | List files and directories | Check for new files, inventory contents, monitor availability |
Node Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| Connection | Selection | Yes | FTP/SFTP connection profile to use |
| Function | Selection | Yes | List function from the selected connection |
| Function Parameters | Dynamic | Varies | Auto-populated from the function schema (e.g., remotePath, pattern). See your FTP/SFTP connection functions for full parameter details. |
| Timeout Override | Number (seconds) | No | Override the default function timeout |
Input
The node receives the output of the previous node as input. Use expressions to dynamically specify the directory path or file pattern.
Output Structure
On success the node produces:
{
"result": {
"remotePath": "/incoming/data",
"count": 2,
"files": [
{ "name": "sales_2026-01-15.csv", "size": 2048, "isDir": false, "modified": "2026-01-15T06:00:00Z" },
{ "name": "archive", "size": 0, "isDir": true, "modified": "2026-01-14T12:00:00Z" }
]
},
"_metadata": { "success": true, "functionId": "<function-id>", "durationMs": 89, "timestamp": "2026-01-15T08:30:00Z" }
}
List Result Fields
| Field | Type | Description |
|---|---|---|
result.remotePath | string | Directory that was listed |
result.count | number | Number of entries delivered (after the pattern filter) |
result.files | array | One entry per file or directory: name, size (0 for directories), isDir, modified (RFC 3339 UTC) |
FTP Delete Node

FTP Delete Node
Delete files on remote FTP/SFTP servers.
Supported Function Types:
| Function Name | Purpose | Common Use Cases |
|---|---|---|
| Delete | Delete a file from remote server | Clean up processed files, remove temporary data |
Node Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| Connection | Selection | Yes | FTP/SFTP connection profile to use |
| Function | Selection | Yes | Delete function from the selected connection |
| Function Parameters | Dynamic | Varies | Auto-populated from the function schema (e.g., remotePath). See your FTP/SFTP connection functions for full parameter details. |
| Timeout Override | Number (seconds) | No | Override the default function timeout |
Input
The node receives the output of the previous node as input. Use expressions like {{ $input[0].result.files[0].name }} to dynamically specify which file to delete.
Output Structure
On success the node produces:
{
"result": { "remotePath": "/processed/old_data.csv" },
"_metadata": { "success": true, "functionId": "<function-id>", "durationMs": 67, "timestamp": "2026-01-15T08:30:00Z" }
}
Delete Result Fields
| Field | Type | Description |
|---|---|---|
result.remotePath | string | Path of the deleted file |
FTP Rename Node
Rename or move a file on the remote server. When a file already exists at the destination, the rename fails with destination file already exists — unless the function's Overwrite option is on, in which case that file is replaced.
Supported Function Types:
| Function Name | Purpose | Common Use Cases |
|---|---|---|
| Rename | Rename sourcePath to destinationPath on the server | Archiving processed files, atomic hand-off (upload under a temporary name, then rename — with Overwrite on when the rename replaces the previous file) |
Output Structure
{
"result": { "sourcePath": "/incoming/orders.csv", "destinationPath": "/incoming/processed/orders.csv" },
"_metadata": { "success": true, "functionId": "<function-id>", "durationMs": 31, "timestamp": "2026-01-15T08:30:00Z" }
}
| Field | Type | Description |
|---|---|---|
result.sourcePath | string | Resolved source path |
result.destinationPath | string | Resolved destination path |
Common Use Cases
Download and Process New Files
Poll for new files, download them, and process the contents:
- Use FTP List to find files matching a pattern (e.g.,
*.csv) - Use For Each Loop to iterate over the file list
- Use FTP Download to retrieve each file
- Use File Extractor to parse CSV content into JSON
- Process the data with subsequent nodes
[Schedule] → [FTP List] → [For Each] → [FTP Download] → [File Extractor] → [Process]
Export Data to Partner SFTP
Generate a report and upload it to a partner's SFTP server:
- Generate or transform data in previous nodes
- Use Data Serializer to format as CSV/JSON
- Use FTP Upload to send the file
[Fetch Data] → [Transform] → [Data Serializer] → [FTP Upload]
Process and Clean Up Files
Download files, process them, then delete the originals:
- FTP List to find files to process
- FTP Download to retrieve file content
- Process the data
- FTP Delete to remove the original file
[FTP List] → [For Each] → [FTP Download] → [Process] → [FTP Delete]
Dynamic File Paths
Use expressions to build file paths dynamically. A path is relative to the connection's Base Path. An absolute path — such as the result.remotePath another FTP node returns — is used as given, but it must lie inside the Base Path: a path that resolves outside it fails with file path is outside base directory.
// Upload with date-based path
Remote Path: {{ 'exports/' + ($execution.startedAt | date: 'YYYY-MM-DD') + '/report.csv' }}
// Download file from previous node's output
Remote Path: {{ 'incoming/' + $input[0].result.files[0].name }}
// Delete processed file
Remote Path: {{ $input[0].result.remotePath }}
Settings Tab
All FTP/SFTP node types share the same Settings tab:
| Setting | Type | Default | Description |
|---|---|---|---|
| Description | Text | — | Optional description displayed on the node |
| Timeout (seconds) | Number | Pipeline default | Maximum time the node may run before timing out |
| Retry on Timeout | Toggle | Pipeline default | Automatically retry the node if it times out |
| Retry on Fail | Toggle | Pipeline default | Automatically retry the node if it fails |
| On Error | Selection | Pipeline default | Error strategy: Pipeline Default (the pipeline's Error Handling setting), Stop Pipeline or Continue Execution |
When left at their defaults, these settings inherit from the pipeline-level execution configuration.
Integration with Other Nodes
File Extractor
The FTP Download node is commonly used with the File Extractor node to parse CSV and Excel files:
- FTP Download retrieves the raw file content
- File Extractor parses the content into structured JSON rows
Set the File Extractor's inputField to result.content, where the FTP Download node puts the content.
For Each Loop
Use For Each Loop to process multiple files from an FTP List result:
- FTP List returns an array of files
- For Each Loop iterates over
result.files - Each iteration processes one file
Data Serializer
Use Data Serializer before FTP Upload to format data:
- Transform and prepare data in previous nodes
- Data Serializer converts to CSV, JSON, or XML
- FTP Upload sends the formatted content
Best Practices
- Use specific file paths when possible for better performance and clarity
- Set appropriate timeouts for large file transfers or slow connections
- Implement error handling with the "On Error" setting for critical transfers
- Use parameterized paths for date-based or dynamic file organization
- Delete processed files to prevent duplicate processing
- Monitor connection health to catch server issues before pipeline failures
For unreliable network connections, enable "Retry on Timeout" and "Retry on Fail" with appropriate retry counts. This improves pipeline resilience without manual intervention.
Related Documentation
- FTP/SFTP Connection Guide — connection configuration, function builder, and detailed parameter reference
- File Extractor Node — parse CSV and Excel files into structured JSON
- For Each Loop Node — iterate over file lists for batch processing
- Data Serializer Node — format data for upload