Static File
Embed a data file (CSV, PDF, JSON, Parquet, …) in the workflow so downstream nodes can reuse it every run
What does the Static File node do?
The Static File node lets you upload a data file once and pin it to the workflow. You reuse the same file on every run — no Google Drive connection and no re-upload at launch.
The file is stored in the workflow’s asset storage. The node keeps a reference (name, type, size). Replacing the file removes the previous asset so storage stays tidy.
Common use cases:
- Reference data that rarely changes (category rules, taxonomy, brand glossary)
- A PDF or DOCX brief the LLM should read on every run
- A fixed JSON or CSV seed used as context for classification or enrichment
- A correspondence file (IDs → labels) kept next to the workflow that needs it
Quick setup
Add the node to the canvas
Open the Node Library, go to Inputs → Static, then drag Static File onto your workspace.
Upload a file
Open the node settings and click the upload area (or drag a file onto it). Accepted extensions: .txt, .log, .md, .markdown, .csv, .tsv, .json, .jsonl, .ndjson, .xml, .html, .htm, .yaml, .yml, .toml, .pdf, .docx, .xlsx, .pptx, .parquet. Max size: 100 MB.
The file uploads automatically and the node persists the reference — no separate “Save” step.
Connect the output
Connect the File output to a downstream node that can use the file — typically an LLM, Agent, or Merge With Template. See Which downstream node should you use? before wiring other tools.
Configuration parameters
Required fields
Name string required default: Static File Node name — Label shown on the canvas. Rename to something descriptive (“Category rules CSV”, “Brand brief PDF”) so the workflow reads at a glance.
Description string required default: Embed a data file (CSV, PDF, JSON, Parquet, …) in the workflow Node description — A short note about the file’s content or its role in the workflow.
File file required The uploaded file. The settings panel shows the filename, type and size. Three actions are available on a configured file:
- Replace — pick a new file; the previous asset is deleted automatically.
- Download — re-download the current file via a short-lived signed URL.
- Remove — delete the asset and clear the node.
Limits & storage — Hard limit is 100 MB per file (rejected with a toast otherwise). The asset is stored on the workflow’s private storage; signed download URLs are short-lived (regenerate via the Download button each time).
What does the node output?
A single File output anchor.
Analogy — the locker
When you upload a file into Static File, the platform stores the document in a secure locker. What travels on the connection wire is a reference — like a locker number — not the file itself.
What happens next depends on the node you connect:
- LLM, Agent, and Merge With Template open the locker for you and inject the file text (CSV as CSV text, PDF as extracted text, and so on).
- Code Block receives a temporary access link to the file — what happens next depends on the code inside that node (see For developers).
- Some other nodes (for example JSON Path Extractor, or Data Analyzer in dynamic-file mode) do not open this locker on their own — a direct wire often fails or yields nothing useful.
file file A file reference that the platform resolves according to the downstream node. Nodes that know how to open the locker receive the extracted text content. Other nodes may only see the reference and cannot use the file as-is.
Who receives what?
| Downstream node | What it effectively gets |
|---|---|
| LLM / Agent | File content as text (ready for the prompt) |
| Merge With Template | File content as text (inserted via {{yourVariable}}) |
| Code Block | A temporary access link — see For developers |
| JSON Path Extractor, Data Analyzer (dynamic file) | Not usable via a direct Static File wire |
When the content is opened for an LLM (for example an embedded CSV), it looks like the file itself:
brand,min_price,category
Acme,50,Premium
Acme,0,Standard
Which downstream node should you use?
Pick the path that matches your goal. You do not need to write code for the common cases below.
| Your goal | Wire to… | Why |
|---|---|---|
| Have a model read a PDF or CSV (brief, rules, glossary) | LLM or Agent | Content is injected into the context automatically |
| Combine the file with other texts before the LLM | Merge With Template, then LLM | Merge opens the file and assembles everything with {{myVariable}} |
| Classify or decide from rules stored in a CSV | Static File + product data → LLM | No-code path: the model sees the CSV and the product attributes in the prompt |
| Analyse a CSV with the dedicated AI node | Data Analyzer in static_file mode + org Datasource | Pick the CSV from Datasources — do not wire Static File into the dynamic file port |
| Extract a specific field from an embedded JSON | Static File (.json) → LLM (JSON output schema) → JSON Path Extractor | Do not wire Static File directly into JSON Path Extractor |
A connection that looks valid on the canvas does not guarantee that the downstream node can open the locker. Prefer LLM, Agent, or Merge With Template unless you know the target node resolves Static File assets.
Need the raw text content of the file inside a node that does not extract it on its own? Insert Merge With Template with a single variable such as {{data}}. Merge opens the locker and outputs plain text you can pass downstream.
Pattern: Static File → Merge With Template → LLM
Use this when the next node expects text and you want to assemble the file with other snippets.
Static File (rules.csv) → Merge With Template → LLM
template: {{data}}
On the canvas:
- Upload the CSV in Static File.
- Add Merge With Template; in the template, write
{{data}}(or any variable name you prefer). - Connect Static File File to the Merge input named
data. - Connect Merge Merged content to the LLM (or another text node).
What the LLM receives: the CSV as text, ready to cite in the prompt.
When to use it: combine the pinned file with other variables in one block; or feed text into a node that does not resolve Static File by itself.
When to skip it: a direct Static File → LLM wire is enough if you only need the model to read that one file.
Usage examples
Example 1: Classify a product from a CSV of rules
Situation: Category rules live in rules.csv. Each run receives product attributes (brand, price, SKU) and must return the matching category.
Sample CSV:
brand,min_price,category
Acme,50,Premium
Acme,0,Standard
On the canvas:
- Add Static File, upload
rules.csv, rename the node “Category rules”. - Add a Text Input (or another upstream source) for the product attributes.
- Add an LLM. Connect both Static File and the product input. In the prompt, ask the model to apply the rules from the file and return the category.
What the LLM receives: the CSV as text (locker opened automatically) plus the product attributes from the other input.
Expected result: for an Acme product at €79, the model returns something like Premium.
Variant with Merge: if the prompt must combine several text blocks, insert Merge With Template between Static File and the LLM with {{rules}} in the template.
For rules that must be applied the same way on every run with no model variation, ask your technical team about Code Block — see For developers. For most no-code workflows, the LLM path above is enough.
Example 2: Give a PDF brief to the LLM on every run
Situation: You want a brand or campaign brief to stay attached to the workflow so the model always has the same context.
On the canvas:
- Upload
brief.pdfin Static File; rename the node “Q1 brief”. - Connect File directly to an LLM.
- In the prompt, refer to the brief (tone, audience, constraints) and ask for the deliverable.
What the LLM receives: the PDF content extracted as text — you do not paste the brief into the prompt yourself.
Expected result: the model answers using the brief as reference (for example a draft that follows the stated tone of voice).
Example 3: Analyse a reference CSV with Data Analyzer
Situation: You want the dedicated Data Analyzer node to answer natural-language questions about a fixed CSV.
On the canvas:
- Add Data Analyzer.
- Set the data source mode to static_file (or the equivalent picker label in the settings).
- Select the CSV from your organization Datasources — do not connect a Static File output to the dynamic file port.
- Write instructions (for example “summarise top categories by revenue”).
What Data Analyzer receives: the CSV chosen from Datasources, not a Static File canvas wire.
Expected result: a text answer based on that CSV, reusable every run until you change the Datasource selection.
Wiring Static File into Data Analyzer’s dynamic file input typically fails with a missing datasource error. Use the Datasource picker, or use Static File → LLM / Merge With Template instead.
How does it fit into a workflow?
Typical no-code pattern for product classification from pinned rules:
graph LR
ProductInput[Text_Input product]
RulesFile[Static_File rules.csv]
MergeNode[Merge_With_Template]
LlmNode[LLM classify]
ProductInput --> LlmNode
RulesFile --> MergeNode
MergeNode --> LlmNode
Direct path without Merge when only the rules file and the product text matter:
graph LR
ProductInput[Text_Input product]
RulesFile[Static_File rules.csv]
LlmNode[LLM classify]
ProductInput --> LlmNode
RulesFile --> LlmNode
Best practices
Rename the node to the file’s role (“Category rules”, “Q1 brief PDF”) — faster to scan than a generic “Static File”.
Replace, don’t add another node. Use Replace when the file changes; the old asset is cleaned up automatically. Adding a second Static File just for “the new version” leaves unused assets in storage.
Prefer LLM or Merge With Template when you need the file text in a no-code flow. Open the locker with a node that knows how to do it.
Don’t upload secrets (API keys, customer PII, credentials) into Static File. Use Static Constants for short secrets, or platform integrations for credentials. Asset storage is workflow-scoped but not designed for sensitive material.
Don’t assume every node can read Static File. JSON Path Extractor and Data Analyzer (dynamic file) are common traps — see Common issues.
Common issues
The downstream node does not see the file content
Cause: That node does not open the locker on its own. It only receives a reference, not the text.
Solution: Wire Static File to an LLM, Agent, or Merge With Template (for example template {{data}}). For custom processing, see For developers.
JSON Path Extractor fails when wired from Static File
Cause: JSON Path Extractor expects structured JSON. A CSV is not JSON, and a raw Static File reference is not JSON either.
Solution: Use Static File (.json) → LLM with a JSON output schema, then JSON Path Extractor. Or keep classification in the LLM without JSON Path Extractor.
Data Analyzer reports Datasource not found
Cause: In dynamic-file mode, Data Analyzer looks up organization Datasources — not Static File workflow assets.
Solution: Use Data Analyzer in static_file mode and pick a CSV from Datasources, or switch to Static File → LLM / Merge With Template.
The LLM seems to ignore the file
Cause: The File connection is missing, or the prompt never mentions the file.
Solution: Confirm the File output is connected to the LLM. In the prompt, refer explicitly to the attached file (rules, brief, glossary) and what to do with it.
Upload fails with 'too large' toast
Cause: The file exceeds the 100 MB hard limit.
Solution: Compress the file, split it, or move the data to an external store (BigQuery, cloud storage) and reference it via a credentialed integration instead.
The selected extension isn't accepted
Cause: The file’s extension isn’t in the allowed list. Static File rejects media formats meant for other nodes (images, video, audio).
Solution: Use Static Image / Static Video for media. For data files, convert to a supported format (.csv, .json, .parquet, etc.).
Download button does nothing or 404s
Cause: The signed URL expired (they are short-lived) or the asset was deleted outside the node.
Solution: Reopen the settings panel — the URL is regenerated on each click. If the issue persists, re-upload the file.
For developers
How Static File resolution works under the hood
At run time, Static File emits an asset ID (workflow asset), not the file bytes. The runner resolves that ID differently depending on the consumer:
- LLM, Agent, Merge With Template, and Human in the Loop resolve the asset to extracted text (CSV → CSV text, PDF → text, and so on).
- Code Block resolves the asset to a temporary signed URL. The code inside the node must download and parse the file. That is the intended path for deterministic custom logic (for example applying CSV rules without an LLM).
- Merge With Template is a practical text converter: once the file is resolved to text, a template such as
{{data}}exposes that content to any downstream text consumer — including patterns where operators insert Merge before a node that does not resolve Static File itself. - JSON Path Extractor only accepts parseable JSON. Do not wire Static File (CSV or raw asset ID) directly into it. Typical chain: JSON file → intermediate step that produces JSON text → JSON Path Extractor.
- Data Analyzer in dynamic-file mode loads IDs from the organization Datasource table, not from Static File workflow assets — hence “Datasource not found” when Static File is wired to that port.
flowchart TD
SF[Static_File asset_id]
SF --> IOManager
IOManager -->|"resolve content"| TextNodes[LLM Agent Merge HITL]
IOManager -->|"resolve URL"| CodeBlock[Code_Block]
IOManager -->|"no resolution"| Other[Other_tools]
TextNodes --> ExtractedText[Extracted_text]
CodeBlock --> SignedUrl[Signed_URL]
Other --> RawId[Raw_asset_id] Related nodes
Most common no-code consumer — reads the pinned file as prompt context.
Opens the file as text and assembles it with other variables via {{…}}.
Analyse a CSV via organization Datasources (not via the Static File port).
Use when the file must be chosen by the user at runtime instead of pinned in the workflow.