> ## Documentation Index
> Fetch the complete documentation index at: https://www.unsiloed.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Integrate Unsiloed with n8n

> Install the Unsiloed community node in n8n, parse an invoice into Markdown, and extract fields into JSON for downstream workflow steps.

Use the Unsiloed community node to read a document inside an n8n workflow. The
**Parse** operation returns the document as Markdown. **Extract** returns fields
defined by a JSON Schema, with confidence scores and source citations when available.
The node handles job polling, so you don't need separate HTTP or Wait nodes to
check processing status.

In this guide, we'll download a sample invoice, parse it, then extract its vendor,
invoice number, and total. The resulting values can feed a spreadsheet or database
node. Here's the finished workflow running:

![The n8n workflow runs: Download invoice fetches the PDF, the Unsiloed node extracts it, and Map invoice values outputs the vendor, invoice number HV-2087, and total \$11,557.22](https://mintcdn.com/unsiloed/e0LwcW_SjZ337TLx/images/n8n/extraction-run.gif?s=aebe8d79553ef99ee1b3a5d5b5cb8d1a)

## Requirements for the n8n Integration

You need:

* A self-hosted n8n instance with community node installation enabled
* An Owner or Admin account on that instance
* An Unsiloed API key from the [Unsiloed dashboard](https://app.unsiloed.ai)

This guide was tested with n8n 2.36.7 and version 1.0.5 of the
[Unsiloed community node](https://github.com/Unsiloed-AI/n8n-nodes-unsiloed).

> [!NOTE]
>
> This package requires self-hosted n8n. n8n Cloud only installs verified community
> nodes, and the Unsiloed package is currently unverified. See the
> [node installation requirements](https://github.com/Unsiloed-AI/n8n-nodes-unsiloed#installing).

## Install the Unsiloed Node

Install the package through n8n's settings, then add it to a workflow.

**1. Install the community package**

Open **Settings → Community nodes** and click **Install** (or **Install a
community node** if no packages are installed). Enter the following npm package name:

```text theme={null}
n8n-nodes-unsiloed
```

Select the community package acknowledgment and click **Install**. The package
should appear in the installed list with one node named **Unsiloed**.

![The n8n community node installation dialog with n8n-nodes-unsiloed entered as the npm package name](https://mintcdn.com/unsiloed/dVkUTC7AHpxHGBvi/images/n8n/install-node.png?fit=max\&auto=format\&n=dVkUTC7AHpxHGBvi\&q=85\&s=62c9847fe524e83525637832002ab91d)

If **Community nodes** is missing, see the
[n8n installation guide](https://docs.n8n.io/integrations/community-nodes/installation-and-management/gui-installation).

**2. Create a workflow**

Create a blank workflow and add **Manual Trigger** (labeled **When clicking
Execute workflow** on the canvas). This lets us test the
document-processing steps before connecting an email or upload trigger.

**3. Download the sample invoice**

Connect an **HTTP Request** node after the trigger. Set **Method** to **GET**
and enter the direct download URL for the [sample invoice](https://github.com/Unsiloed-AI/n8n-nodes-unsiloed/blob/main/examples/sample-invoice.pdf):

```text theme={null}
https://raw.githubusercontent.com/Unsiloed-AI/n8n-nodes-unsiloed/main/examples/sample-invoice.pdf
```

Under **Options**, add **Response**. Set **Response Format** to **File** and
**Put Output in Field** to `data`. Rename the node **Download invoice**.

![The HTTP Request node is configured to download the sample invoice from the Unsiloed GitHub repository, with Response Format set to File and Put Output in Field set to data](https://mintcdn.com/unsiloed/e0LwcW_SjZ337TLx/images/n8n/download-invoice.png?fit=max\&auto=format\&n=e0LwcW_SjZ337TLx\&q=85\&s=473aee726126380b410c0e4bdf62c101)

Click **Execute step**. The node's **Binary** output should show `data` with
the invoice file. Unsiloed needs the file bytes, so the HTTP response must be
a file rather than text or JSON.

## Parse the Invoice into Markdown

The Parse operation reads the whole document without a field schema. Use it when
the next step needs the document's text and tables.

**1. Add Unsiloed and store the API key**

Add a node after **Download invoice**, search for **Unsiloed**, and choose
**Parse a document into clean markdown**.

In the node's credential selector, choose **Create new credential**. Paste
your key into **API Key** and leave **Base URL** at its default:

```text theme={null}
https://prod.visionapi.unsiloed.ai
```

Click **Save**. n8n tests the key and should show **Connection tested
successfully**. Close the dialog and check that the Unsiloed node's
**Credential** field shows the new credential.

![The Unsiloed API credential dialog with a masked API key and the default document-processing API URL](https://mintcdn.com/unsiloed/dVkUTC7AHpxHGBvi/images/n8n/api-credential.png?fit=max\&auto=format\&n=dVkUTC7AHpxHGBvi\&q=85\&s=7a8ed642a6a5496b0fc0db511b8e733d)

**2. Configure the Parse operation**

Use these settings in the Unsiloed node:

| Setting | Value |
| - | - |
| Resource | Document |
| Operation | Parse |
| Document Source | Binary Property |
| Input Binary Field | `data` |
| Force OCR | On |
| Output | Markdown |

**Force OCR** reads the rendered page instead of relying on its embedded text
layer. Leave it on for scans and PDFs whose text layer is missing or garbled.

**3. Run the workflow and inspect the result**

Click **Execute workflow**, then open the Unsiloed node. In its output, select
**JSON** to inspect the `markdown` field.

Each run of the Unsiloed node submits a new processing job, so rerunning the
step processes the document again. For manual testing, use
[data pinning](https://docs.n8n.io/build/work-with-data/pin-and-mock-data)
to reuse the node's output while configuring later steps. Unpin it before
changing the operation or processing another document.

![The Unsiloed Parse node returns invoice text and a line-item table in the markdown field](https://mintcdn.com/unsiloed/dVkUTC7AHpxHGBvi/images/n8n/parse-result.png?fit=max\&auto=format\&n=dVkUTC7AHpxHGBvi\&q=85\&s=23dfdab96cd291166270ff1c4a75f9e5)

In a downstream node's expression editor, use the following expression to
read the document text:

```text theme={null}
{{ $json.markdown }}
```

Choose **Full JSON** in the Unsiloed node's **Output** setting instead if you
need the complete parse response, including chunks and segments.

## Extract Invoice Fields into JSON

Use Extract when a downstream node expects specific fields. We'll reuse the same
download step and change the Unsiloed operation. Extract reads the original file
from **Download invoice**; it doesn't use the Markdown returned by Parse.

**1. Define the fields to extract**

Set **Operation** to **Extract**. Keep **Document Source** set to **Binary
Property** and **Input Binary Field** set to `data`.

Replace **Schema (JSON)** with this schema:

```json theme={null}
{
  "type": "object",
  "properties": {
    "vendor": {
      "type": "string",
      "description": "Company that issued the invoice"
    },
    "invoice_number": {
      "type": "string",
      "description": "Invoice number or ID"
    },
    "total_due": {
      "type": "string",
      "description": "Grand total payable, including the currency symbol"
    }
  }
}
```

The descriptions tell Unsiloed which values to read. This example keeps the
total as a string to preserve its currency symbol. The node uses the `gamma`
extraction model and enables citations.

**2. Run extraction and inspect each field**

Execute the workflow again and open the Unsiloed output. Each extracted field
contains a `value`, nested confidence scores under `score`, and a `citation`
when Unsiloed can ground the value in the document.

![The Unsiloed Extract node returns field objects such as vendor and total\_due, each with a value, confidence scores, and a source citation](https://mintcdn.com/unsiloed/dVkUTC7AHpxHGBvi/images/n8n/extract-result.png?fit=max\&auto=format\&n=dVkUTC7AHpxHGBvi\&q=85\&s=e5f7f6f79405770e90e5f7cded431036)

A citation can be `null`. Check the source invoice before using the values in
a workflow that posts payments or updates accounting records.

For this sample, the invoice number should be `HV-2087` and the total should
be `$11,557.22`. For your own documents, inspect the output for missing or
empty values before mapping it. Adjust the schema's field descriptions if
they don't match the document.

**3. Map the values for the next node**

Add **Edit Fields (Set)** after Unsiloed and choose **Manual Mapping**. Rename
the node **Map invoice values**, then add three String fields and switch each
value to **Expression**:

| Field | Expression |
| - | - |
| `vendor` | `{{ $json.vendor.value }}` |
| `invoice_number` | `{{ $json.invoice_number.value }}` |
| `total_due` | `{{ $json.total_due.value }}` |

Leave **Include Other Input Fields** off to output only the mapped values.
Execute the step. For this sample, the output should contain the three
invoice values shown below. These can map directly to columns in a Google
Sheets or database node.

![The Edit Fields node maps the nested extraction values into vendor, invoice\_number, and total\_due string fields](https://mintcdn.com/unsiloed/dVkUTC7AHpxHGBvi/images/n8n/map-values.png?fit=max\&auto=format\&n=dVkUTC7AHpxHGBvi\&q=85\&s=e43b4e0019014a37f016ddb3a8f2db08)

If a later step needs confidence scores or citations, include those in the
mapping too. For example, the total's grounding score is available through:

```text theme={null}
{{ $json.total_due.score.grounding_score }}
```

The completed extraction workflow has four nodes: a manual trigger, a document
download, Unsiloed extraction, and a field mapping step. Each node passes one item
to the next:

![The complete n8n extraction workflow: Manual Trigger connects to Download invoice, Unsiloed Extract, and Map invoice values, with successful execution indicators on all four nodes](https://mintcdn.com/unsiloed/dVkUTC7AHpxHGBvi/images/n8n/extraction-workflow.png?fit=max\&auto=format\&n=dVkUTC7AHpxHGBvi\&q=85\&s=e7235fe40ac987897df3b65b68ddb2c1)

## Extend the Document Workflow

The download and field mapping steps are where other n8n nodes connect. Connect
external services using their own n8n credentials.

### Connect a Document Source

These nodes can supply documents before Unsiloed:

| Document Source | Nodes to Connect | What to Pass to Unsiloed |
| - | - | - |
| Email attachments | [Gmail Trigger](https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.gmailtrigger/) with **Simplify** off | `attachment_0` for the first attachment, rather than the email body |
| A shared folder | Google Drive Trigger and [Google Drive → Download](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/file-operations/#download-a-file) | The downloaded file's binary property |
| A known S3 object | Schedule Trigger and [AWS S3 → Download a file](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.awss3/) with **Bucket Name** and **File Key** configured | The object downloaded as a binary file |
| A file upload or another application | [n8n Form Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/) or Webhook | The uploaded file's binary property |

For Gmail, turn **Simplify** off in the trigger, then enable **Download
Attachments** under **Options**. With the default attachment prefix, files are
stored as `attachment_0`, `attachment_1`, and so on.
If an email contains several attachments, split them into separate workflow items
before extraction, with one document in the binary field on each item.

Inspect the source node's **Binary** output and set **Input Binary Field** to the
property containing the file. The property name may differ from `data`.

The Unsiloed node also accepts a publicly reachable document URL. Set **Document
Source** to **URL** and enter it in **Document URL**. Unsiloed fetches the file
directly; a local path or a URL that requires your browser session won't work.

### Send Results to Other Services

After Unsiloed, choose a destination for the result:

| Next Step | Nodes to Connect | Example Use |
| - | - | - |
| Add a spreadsheet row | Edit Fields, then [Google Sheets](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/) | Map the invoice number, vendor, and total to sheet columns |
| Store document records | Edit Fields, then [Postgres](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.postgres/) | Insert extracted fields into a database table |
| Route values for review | [If](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/), then [Slack](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/) | Notify a reviewer when a required value is missing or a score falls below your chosen threshold |
| Update another application | Edit Fields, then HTTP Request | Send the mapped JSON to an application API |
| Summarize the document | Parse, then [Basic LLM Chain](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/) with a chat model | Use the `markdown` field as the text to summarize |

## Troubleshoot the n8n Workflow

> [accordion] The Unsiloed node doesn't appear
>
> Confirm that `n8n-nodes-unsiloed` appears under **Settings → Community nodes**,
> then reload the editor. Your instance administrator may need to enable
> community packages.

> [accordion] The input doesn't contain a binary file
>
> Execute the previous step and inspect its **Binary** tab. Its property name
> must match **Input Binary Field**. For an HTTP Request node, set **Response
> Format** to **File** and **Put Output in Field** to `data`.

> [accordion] Unsiloed rejects the API key
>
> Open the selected **Unsiloed API** credential and check its key and base URL.
> Use the credential's connection test to check whether Unsiloed accepts the key.
> The document-processing URL is `https://prod.visionapi.unsiloed.ai`, not the
> dashboard URL.

> [accordion] Extraction reports invalid JSON
>
> Check that **Schema (JSON)** contains valid JSON with double-quoted property
> names and no trailing commas. Start with the schema above, then change the
> property names and descriptions for your document.

> [accordion] The job doesn't finish within the time limit
>
> The node polls up to 90 times, with four seconds between pending responses.
> Try a shorter document. Rerunning the node submits a new processing job.

## Related Guides

> [card] [Unsiloed n8n Node](https://github.com/Unsiloed-AI/n8n-nodes-unsiloed)
>
> Node source, installation instructions, and example workflows.

> [card] [Parse Documents](https://www.unsiloed.ai/docs/document-processing/parsing/parsing.md)
>
> Parsing options and document output formats.

> [card] [Extract Typed Fields](https://www.unsiloed.ai/docs/document-processing/extraction/extraction.md)
>
> Define schemas and inspect extraction results.

> [card] [Google Sheets Integration](https://www.unsiloed.ai/docs/integrations/google-sheets.md)
>
> Call Unsiloed directly from a spreadsheet with Apps Script.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.