> For the complete documentation index, see [llms.txt](https://docs.solutioo.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.solutioo.de/datanorm-item-import/datanorm_en_us/importing-datanorm-files/sftp-import.md).

# Automated SFTP Import

## How it works

Many suppliers put their files on an SFTP server. The app collects them from there so nobody has to upload anything.

Because Business Central online cannot open SFTP connections itself, the connection runs through an **Azure Function** acting as an intermediary. Business Central talks to the function over HTTPS, the function talks to the SFTP server.

{% stepper %}
{% step %}

#### Poll

The job queue polls the inbound folder at a fixed interval.
{% endstep %}

{% step %}

#### Download

New files matching the name filter are transferred in chunks.
{% endstep %}

{% step %}

#### Process

An import session is created for each file. From there the flow matches the [Import Process](/datanorm-item-import/datanorm_en_us/importing-datanorm-files/import-process.md).
{% endstep %}

{% step %}

#### Archive

After processing, the file is moved to the archive folder or deleted.
{% endstep %}
{% endstepper %}

## Configuration

Open **DATANORM SFTP Setup**.

### General

<table><thead><tr><th width="290">Field</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>Enabled</strong></td><td>Switches automatic collection on. Leave it off until all other values are correct.</td></tr><tr><td><strong>Polling Interval (Minutes)</strong></td><td>How often the inbound folder is checked.</td></tr></tbody></table>

### SFTP Connection

<table><thead><tr><th width="290">Field</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>SFTP Host</strong></td><td>Server name or IP address.</td></tr><tr><td><strong>SFTP Port</strong></td><td>Server port, usually 22.</td></tr><tr><td><strong>SFTP Username</strong></td><td>User for signing in.</td></tr><tr><td><strong>SFTP Password</strong></td><td>Password. Stored encrypted and never shown in clear text.</td></tr></tbody></table>

### Folders

<table><thead><tr><th width="290">Field</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>Base Folder Path</strong></td><td>Root directory on the server.</td></tr><tr><td><strong>Inbound Folder</strong></td><td>Folder where new files are expected.</td></tr><tr><td><strong>Archive Folder</strong></td><td>Destination for processed files.</td></tr><tr><td><strong>File Name Filter</strong></td><td>Pattern for the files to collect, for example <code>DATANORM.*</code>. Prevents unrelated files from being read.</td></tr><tr><td><strong>Delete After Import</strong></td><td>Deletes the file after processing instead of archiving it.</td></tr></tbody></table>

### Azure Function

<table><thead><tr><th width="290">Field</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>Azure Function URL</strong></td><td>Address of the intermediary function.</td></tr><tr><td><strong>Azure Function API Key</strong></td><td>Key for access. Stored encrypted.</td></tr><tr><td><strong>Max Chunk Size (KB)</strong></td><td>Size of the transfer chunks. Smaller chunks are more robust on unstable connections.</td></tr></tbody></table>

### Status

<table><thead><tr><th width="290">Field</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>Last Polling Time</strong></td><td>When the last poll happened.</td></tr><tr><td><strong>Last Polling Status</strong></td><td>Result or error message of the last poll.</td></tr></tbody></table>

## Bringing it into service

{% stepper %}
{% step %}

#### Enter the connection details

Host, port, user, password plus the URL and key of the Azure Function.
{% endstep %}

{% step %}

#### Test the connection

Use the connection test action to check that the server and the function are reachable.
{% endstep %}

{% step %}

#### Look at the files

**DATANORM SFTP Files** shows what is in the inbound folder. That lets you verify the name filter before anything is processed.
{% endstep %}

{% step %}

#### Set up the job queue

Create the entry for the automatic import and set the interval.
{% endstep %}

{% step %}

#### Enable

Only now switch **Enabled** on.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Make the name filter as narrow as possible. Without a filter the app reads every file in the inbound folder – including covering letters or price lists in other formats, which then show up as failed sessions.
{% endhint %}

{% hint style="info" %}
Automatic import does not replace the staging review. As long as **Auto-Sync to Items** is off, collected files wait for your approval. That is the recommended way to run it.
{% endhint %}

## Vendor on SFTP import

Automatically collected files get the **default vendor** from the setup, because nobody is there to confirm a dialog. If you collect files from several suppliers, check the assignment on the import session and correct it with **Assign Vendor** where needed, see [Manual Import and Vendor Assignment](/datanorm-item-import/datanorm_en_us/importing-datanorm-files/manual-import.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.solutioo.de/datanorm-item-import/datanorm_en_us/importing-datanorm-files/sftp-import.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
