Back to Nodes

Unsiloed

Last updated Aug 26, 2026

Unsiloed AI — parse and OCR documents (PDF, scans, images) into clean Markdown inside n8n

192 Weekly Downloads
644 Monthly Downloads

Included Nodes

Unsiloed

Description

n8n-nodes-unsiloed

An n8n community node for Unsiloed AI. It reads documents (PDFs, scans, photos, images) and returns clean Markdown or structured JSON inside your workflows.

n8n has no built-in OCR. Its Extract from File node reads a PDF’s embedded text layer, not the page, so a scan, a phone photo, or any PDF with a broken text layer comes back as confident nonsense and nothing warns you. This node OCRs the rendered page instead, so it reads what a person sees.

Why n8n’s Built-In Extraction Falls Short

The built-in extractor trusts the text layer. That layer is fine for clean born-digital PDFs, but scans and many exports either have no text layer or a broken one, and the extractor returns garbage without failing. Same invoice, same workflow, two extractors:

n8n Extract from PDF →  "OFCGOET  Ofcgoet Fg. IC-9762 ...  Zgzqsrxt $33,002.99"
Unsiloed             →  "INVOICE  Invoice No. HV-2087 ...  Total due  $11,557.22"

Parse forces OCR on the rendered pixels, and Extract reads the rendered document by design, so a bad text layer can’t poison either result.

What the Node Does

The node has two operations:

  • Parse: OCR the document and return layout-aware Markdown (headings, tables, paragraphs). No schema required.
  • Extract: pull named fields into JSON using a schema you define (invoice number, totals, dates, line items). Each value comes back with a confidence score and a citation (page and bounding box).
  • Installing

    The node is published on npm as n8n-nodes-unsiloed, so you can install it from n8n’s own UI, with no terminal and no restart:

    1. Open Settings → Community Nodes → Install.
    2. Enter n8n-nodes-unsiloed and confirm.
    3. Search for Unsiloed in the node panel.

    Once installed, the node type is n8n-nodes-unsiloed.unsiloed.

    This is for self-hosted n8n. n8n Cloud only allows community nodes that n8n has itself verified, and this node isn’t verified yet, so Cloud users need a self-hosted instance for now.

    If you’d rather install from the command line, add it to your n8n user folder and restart n8n:

    mkdir -p ~/.n8n/nodes && cd ~/.n8n/nodes
    npm install n8n-nodes-unsiloed
    

    Installing From Source Instead

    You only need this if you’re modifying the node. n8n loads anything in ~/.n8n/custom on startup, and the compiled dist/ is committed, so no build step is required. Note that a node loaded this way registers as CUSTOM.unsiloed, not n8n-nodes-unsiloed.unsiloed — so workflows exported from one install won’t import into the other without editing the node’s type.

    For Docker:

    git clone https://github.com/Unsiloed-AI/n8n-nodes-unsiloed
    docker cp n8n-nodes-unsiloed/dist/. :/home/node/.n8n/custom/
    docker restart 
    

    Or run the bundled installer from the node’s folder:

    cd n8n-nodes-unsiloed && ./install.sh 
    

    For a local n8n install:

    git clone https://github.com/Unsiloed-AI/n8n-nodes-unsiloed
    mkdir -p ~/.n8n/custom
    cp -r n8n-nodes-unsiloed/dist/* ~/.n8n/custom/
    

    then restart n8n

    Setting Up the Credential

    Create an Unsiloed API credential on the node:

  • API Key: your Unsiloed key (get one at unsiloed.ai)
  • Base URL: https://prod.visionapi.unsiloed.ai (the default)
  • Use the credential’s Test button to confirm the key works before you run a workflow.

    Using the Node

    Give the node a document, then choose an operation depending on what you need back. Document Source controls where the document comes from:

  • Binary Property (default) feeds the node a binary file from an earlier step, such as Read/Write Files from Disk, an email attachment, an HTTP download, or a form upload. The default binary field is data.
  • URL points the node at a publicly reachable document instead, and Unsiloed fetches it.

Using the Node as an AI Agent Tool

The node can be attached to an AI Agent on its Tool socket, letting an agent parse or extract from a document on its own.

Set Document Source to URL when you do. n8n does not pass binary data to tools, so a tool-mode node never receives the agent’s upstream file and Binary Property mode cannot work there. Click the sparkle beside Document URL so the agent supplies the address itself, and it will fill it from the conversation.

Self-hosted instances also need N8NCOMMUNITYPACKAGESALLOWTOOL_USAGE=true, otherwise n8n hides community nodes from the tool list.

Parse: Clean Markdown From Any Document

Parse needs no configuration beyond the document source. Point it at any document and it returns the document as Markdown in the markdown field, with tables and headings preserved. This is the fastest way to try the node: install it, drop in a scan or a photo, and run.

Use Parse when you want the full document text, for example to feed a language model, index a knowledge base, or store a readable copy.

Extract: Structured Fields You Define

Extract returns structured JSON, so you tell it which fields to pull with a JSON Schema. Set the Schema (JSON) field on the node. This example pulls an invoice’s header fields and its line-item table:

{
  "type": "object",
  "properties": {
    "vendor": { "type": "string", "description": "Company that issued the invoice" },
    "invoice_number": { "type": "string" },
    "total_due": { "type": "string" },
    "line_items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "description": { "type": "string" },
          "quantity": { "type": "string" },
          "unit_price": { "type": "string" },
          "amount": { "type": "string" }
        }
      }
    }
  }
}

Each property becomes a key in the output, holding a value, a nested score (with groundingscore and extractionscore), and a citation you can act on:

{
  "total_due": {
    "value": "$11,557.22",
    "score": { "groundingscore": 0.998, "extractionscore": 0.998 },
    "citation": { "page": 1, "bbox": [470, 577, 533, 592], "pagewidth": 595.28, "pageheight": 841.89 }
  }
}

So in later steps the value is {{ $json.totaldue.value }} and its confidence is {{ $json.totaldue.score.grounding_score }} — the scores are nested under score, not on the field itself. To run Extract on a different document, change the property names and descriptions to the fields you want. The schema above is generic enough to work on most invoices as-is; a receipt, a contract, or an ID needs its own field list.

Extraction runs on Unsiloed’s gamma model (the recommended, most thorough tier), with citations enabled so every field comes back grounded.

Once you have the output, wire it into a spreadsheet, a database, a notification, or a language-model step. The examples/ folder in the repo has a ready-to-import Parse workflow with a sample document.

Building From Source

The committed dist/ is prebuilt, so most people don’t need this. To rebuild after changing the source:

npm install
npm run build

License

MIT