SFTP
Upload files to a remote server via SFTP in CSV or JSONL format. Use Zeotap to export data to legacy systems, partner drop zones, or any server accessible over SSH.
Prerequisites
- An SFTP server accessible over SSH (port 22 by default)
- A user account with write access to the target directory
- Either a password or SSH private key for authentication
Authentication
SFTP supports two authentication methods:
Password
- Enter the SFTP Username and Password in Zeotap
SSH Key
- Enter the SFTP Username in Zeotap
- Paste the Private Key in PEM format (begins with
-----BEGIN OPENSSH PRIVATE KEY-----). If the key is encrypted, also enter the Private Key Passphrase
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
| Host | Text | Yes | SFTP server hostname or IP address (e.g., sftp.example.com) |
| Port | Number | No | SFTP server port. Default: 22. Valid range: 1—65535 |
Target Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Remote Directory | Text | Yes | The directory on the SFTP server to upload files to (e.g., /data/imports) |
| File Format | Select | Yes | Output file format: CSV or JSONL (Newline Delimited JSON). Default: CSV |
Supported Operations
Sync Modes: Insert, Snapshot
Audience Sync Modes: Add, Snapshot
Features
- Field Mapping: No — SFTP writes all mapped fields as file columns
- Schema Introspection: No — SFTP is a file-based destination without schema discovery
How It Works
Zeotap uploads data files to the remote SFTP server:
- Data is serialized into the selected format (CSV or JSONL)
- An SSH connection is established to the SFTP server
- Files are uploaded to
{remote_directory}/{YYYY-MM-DD}/{batch_id}.{ext} - The SSH connection is closed after upload completes
Sync mode semantics
- Insert writes the full current dataset as new files on every run — each sync appends new files to the remote directory.
- Add (audience syncs) writes only new and updated audience members. Members who left the audience since the previous run are excluded from the files.
- Snapshot writes the complete current dataset as new files on every run and never diffs. There is no
_operationcolumn (the files are the whole dataset) and unchanged rows are included every time. Records that left are simply absent from the next drop rather than delivered taggedremoved, so treat each run’s output as authoritative and replace your prior copy rather than merging into it. Unlike Insert, snapshot is guaranteed to read the full model output on every warehouse: it never adopts native change tracking (Snowflake streams, Databricks CDF), which can only surface deltas.
Troubleshooting
Connection refused
Verify the host and port are correct. Ensure the SFTP server is running and accepting connections. Check that firewalls allow inbound SSH traffic on the configured port.
Authentication failed
For password authentication, verify the username and password. For SSH key authentication, ensure the private key matches a public key in the server’s authorized_keys file. The key must be in PEM format.
Permission denied on remote directory
The SFTP user must have write permissions on the target remote directory. Contact the server administrator to grant access.
SFTP subsystem unavailable
The SSH server must have the SFTP subsystem enabled. This is typically configured in the server’s sshd_config file with the Subsystem sftp directive.
Host key verification
Zeotap does not verify host keys by default. If you require host key verification, contact support to configure known hosts.