Before you begin
Your server must meet all of these requirements.
If your server needs an allowlist, use Cloud Storage
instead. Ask your Kadoa contact if you are unsure whether your server qualifies.
Prepare the server
- Create a dedicated account for Kadoa. Do not reuse a person’s login.
-
Create the base directory that Kadoa writes into, for example
/incoming/kadoa. - Give the account write, create, and delete permission on that directory and everything below it. Kadoa needs delete permission to clear its own temporary files.
- Confirm that the account can create subdirectories. Kadoa creates one directory per workflow run below the base directory.
-
Record the server’s host-key algorithm and SHA-256 fingerprint. Run this on the
server itself, not from a client that has never connected:
The command prints the key size, then the fingerprint in the form
SHA256:<43 characters>, then a comment. Send Kadoa the fingerprint exactly as printed, including theSHA256:prefix.
Add your credentials
Store the login credential as a secret variable first. Kadoa never accepts a password or private key through email, chat, or a ticket.- Open Team settings and select Variables.
- For a password, select Create variable, enter a key such as
SFTP_PASSWORD, choose Secret, and enter the value. - For an SSH private key, store the key in your Google Secret Manager project. Then create a customer-managed Secret Variable that references that secret.
- Select Save.
Give Kadoa the connection details
Send these non-secret details to your Kadoa contact:
Also send your expected file sizes, your server’s idle timeout, and any limit on
concurrent sessions. Kadoa sets its connection timeouts from those numbers.
Kadoa creates the connector disabled, tests it, and enables delivery only after a
verified first run.
Formats and file layout
Choose any combination of these formats. Kadoa writes one file per format per run.
If you do not choose formats, Kadoa delivers Parquet and JSONL.
Files land below your base directory in a directory per run:
{teamId},
{workflowId}, {runId}, {runDatetimeSafe}, {runDatetime}, and {runDate}.
How delivery works
Kadoa uploads each file to a temporary name that ends in.part, waits for the server
to confirm the write, then renames it to the final name with
posix-rename@openssh.com. The rename is atomic, so a reader never sees a partial
file, and a repeated run replaces the previous file in one step.
Only read files that do not end in .part. A file with that suffix is still being
written or was left by an interrupted run.
Kadoa makes at most five connection attempts for one run, waiting 2, 5, 10, and 20
seconds between them. A run that already delivered some formats resumes with only the
missing ones. Errors that cannot improve by retrying, such as a wrong fingerprint,
a rejected login, or a missing base directory, stop after the first attempt.
A failed SFTP delivery never fails the workflow itself. The run still completes and
its data stays available through every other integration.
Preview runs and quality-assurance runs are not delivered.
Verify the first delivery
- Ask Kadoa to run the workflow once with the connector enabled.
- List the run directory on your server and confirm one file per chosen format.
- Confirm that no file ends in
.part. - Compare the record count in the delivered file against the run’s record count in the Kadoa dashboard.
- Run the workflow a second time and confirm that the new run writes a new directory.
Rotate or replace credentials
- Update the value in Team settings → Variables. Rotate the existing variable rather than creating a new one, so the connector keeps working.
- Ask Kadoa to run the connection test.
- Retire the old credential on your server only after the test passes.
Troubleshoot
Limits
- No source-IP allowlisting. Kadoa cannot give you a fixed egress address for SFTP.
- Your server must be reachable from the public internet. Kadoa cannot reach a private network, a VPN-only host, or a private IP address.
- Password and SSH private-key login only.
- The connection test is advisory. It proves a login and a file round trip at that moment. It does not guarantee the next delivery.
- A connection lost at the end of an upload can leave one
.partfile behind. Paths are unique per run, so no later run reuses or cleans that file.