Skip to documentation content
Warehouses and event destinations

Connect SFTP

Import CSV files from an SFTP directory into profile attributes.

All connectors · Checked against AXO’s implementation in October 2026.

Prepare access

Use an owner or admin account in AXO and confirm the selected site. Have permission to authorize the external account or create its server credentials. Keep secrets in the connector’s protected configuration.

SettingValue to prepare
hostSFTP hostname.
portOptional port; defaults to 22.
usernameUser allowed to list and read the directory.
passwordPassword for that user.
directoryDirectory containing CSV files; defaults to the login directory.

Connect

The current catalog form does not expose the full configuration for this connector. Use Advanced setup below before completing these steps.

  1. Create the connector using Advanced setup with the fields above. There is no OAuth flow.
  2. Upload a .csv file into the configured directory, with a header row and an email column. Other nonempty columns become profile attributes. Rows without email are skipped. Matching emails update profiles; a new email creates an identified profile.
  3. Call update_integration with integration_id and active: true after checking the host, directory and sample row. The standard deployment schedules source synchronization every 15 minutes, processing up to five files per integration per run when capacity permits. Open Audience → Profiles and search the test email to check its imported attributes.
CSV sample
email,plan,customer_tier
test@example.com,pro,gold

Review privacy settings if Passive mode is enabled; that mode intentionally prevents identity imports. For a source-sync error that is not exposed in the dashboard, contact AXO with the integration ID and run time.

Verify the result

There is no dedicated SFTP test button. Verify an imported row. Files are processed oldest first, one file per fetch, using file modification time as the cursor. Give files distinct increasing modification times; equal timestamps can cause later files to be skipped.

Record the AXO integration or trigger result and the receiving system’s result. A saved configuration, credential check, and completed delivery establish different things. Use a controlled destination for a test that writes data or sends a message.

Fix a failed connection

Check network reachability, password authentication, directory read permissions, and the CSV header. A file whose modification time is not newer than the cursor is skipped. Passive mode skips source imports. Generic Health logs cover outbound delivery, not this source-sync job; if no profile appears after scheduled runs, give AXO the integration ID and ask for its source-sync status/error. This connector does not export files.

For a saved catalog connector, open Health to read the latest error, then repair the settings through the setup method on this page. Pause delivery while correcting an unintended destination. Reconnect OAuth when its grant is revoked; for key-based connections, save the replacement key, verify it, then revoke the old key at the provider.

Advanced setup with an AXO MCP client

  1. Connect the AXO MCP server with write access to the intended site. The authenticated account must have owner/admin permission.
  2. Call create_integration with the type below and a config object using the exact field names above. Start with active: false and no event subscriptions. Supply credential values through your protected tool configuration.
  3. Keep the returned integration ID. Use update_integration for corrections rather than creating duplicates.
  4. Complete any authorization steps above, configure the trigger or source, and perform the verification described here. Source imports need the integration enabled before scheduled synchronization can run. Use test_integration only if this guide describes a supported test.
  5. Use update_integration with the returned integration_id and active: true to enable the integration after checking its external account and payload. Enable the intended trigger separately. Copy expected_revision from the latest get_integration read when one is returned.
Create integration arguments
{
  "type": "ftp",
  "config": {
    "host": "REPLACE_WITH_YOUR_VALUE",
    "port": 22,
    "username": "REPLACE_WITH_YOUR_VALUE",
    "password": "REPLACE_WITH_YOUR_VALUE",
    "directory": "REPLACE_WITH_YOUR_VALUE"
  },
  "events": [],
  "active": false
}

The example is a configuration checklist. Replace placeholders and omit optional or inapplicable fields before calling the tool. A dry run previews the request but does not validate provider access.

Next: create an event-triggered action, or implement a webhook receiver.