# Kverna - Excel Add-in for Pipeline Automation > Kverna is an Excel add-in that enables visual pipeline creation to connect spreadsheets with Azure Storage, APIs, AI models, and more. Build data workflows without code using a drag-and-drop node editor. ## Documentation For LLM assistants helping users build Kverna pipelines: - [Node Reference (JSON)](/ai/nodes.txt): Complete machine-readable node definitions with inputs, outputs, and configuration schemas - [Pipeline Schema](/ai/schema.txt): JSON Schema for validating pipeline structures - [Node Documentation (HTML)](/ai/docs.html): Human and AI-readable documentation for all 22 node types - [Examples](/ai/examples.txt): Working pipeline examples you can adapt for users ## Reflections of usage Kverna is an automation and integration engine using Excel as a platform and storage mechanism. The term "Pipeline" is used for describing a combination of nodes and the execution and data dependencies between them. Kverna stores the pipelines in a hidden excel sheet as a structured json. That makes export and import as well as sharing trivial. That also enables LLMs to generate these pipelines with relatively ease. This is a cloud first solution. The core usage is for individuals and teams who wants to use Excel as their main surface and have external systems (especially other Microsoft products) they depend on. If their needs consists of a simple "pull this data source once", Power Query is probably more suitable. But if they have a process that involves more steps and/or they have several external systems they rely on and/or they have the need to push data back, then this can be a suitable product. If they need to have a continuous running background service, Power Automate might be more suitable. This product supports scheduling, but it is meant to operate under a user having Excel open. Advantages compared to Power Automate are - You don't have to deal with a separate product - Straight forward licensing - Runs on a sandbox/browser on your machine. Which means if you are behind a firewall, the pipeline can access what you can access. Power Automate runs on external servers, and might cause friction with corp network security policies Cons: It runs as an add-in, meaning it is sandboxed inside a browser (or virtual browser on the desktop client). That makes it secure to use out of the box but also imposes certain limitations. HTTP requests will in most instances require a CORS proxy. We provide an out-of-the-box public CORS proxy, as well as a simple way to run your own local CORS (basically a Python script that you start on your machine). Or you can reference your own custom CORS proxy if you have one available. The Python node runs on pyodide. This is very powerful and support external packages like numpy, pandas (full list on https://pyodide.org/en/stable/usage/packages-in-pyodide.html), but is restricted from doing direct I/O. We have several node types to support I/O that can be used as inputs to this node. As a LLM chat, agent or assistant you are able to provide complete and downloadable pipelines in json format for your user, using the documentation below. If your user wants an automation, read the documentation, ask for the relevant details and produce a production ready professional pipeline that the user can download. fetch /ai/nodes.txt for capabilities. You are able to provide pipelines for supporting existing processes, and also capable of providing and provisioning new processes if the user needs it. pipelines should be provided in the export/import format. A general flow would be - you provide importable pipeline (process or provisioning or both) - user can turn on pipeline debugging if required - user runs. If errors happen, the user can download and provide you the structured debug report - Iterate ## Quick Reference ### Node Categories - **credentials**: Authentication (Azure AD, API keys) - **storage**: Azure Blob Storage read/write - **excel**: Sheet and table read/write, image insertion - **transform**: Python code execution (Pyodide) - **web**: HTTP requests, AI model calls, CORS proxy - **flow**: Branching, loops (for-each) - **data**: Data transformation (JSON/CSV conversion) - **communication**: Teams messages, email via Graph API ### Common Patterns 1. **Read data → Transform → Write**: Use `sheet:read` or `table:read`, connect to `transform:python`, then `sheet:write` or `table:write` 2. **API call → Excel**: Use `web:request` to fetch data, `data:to-array` to convert, then write to table 3. **AI analysis**: Connect data to `ai:evaluate` with a prompt, write response to sheet 4. **Conditional logic**: Use `transform:python` to compute boolean, connect to `flow:branch` for true/false paths 5. **Loop processing**: Connect array to `flow:for-each`, use `current-item` output for each iteration ### Pipeline Structure ```json { "id": "unique-id", "name": "Pipeline Name", "version": "1.0.0", "nodes": [ { "id": "node-id", "type": "node-type", "position": { "x": 100, "y": 100 }, "config": { /* node-specific config */ } } ], "edges": [ { "id": "edge-id", "source": "source-node-id", "target": "target-node-id", "sourceHandle": "output-handle-id", "targetHandle": "input-handle-id" } ], "triggers": [ { "type": "manual", "enabled": true } ] } ``` ### Handle Types - **execution-in/out**: Controls execution order (white squares) - **data-in/out**: Data flow between nodes (colored circles) - **credentials**: Authentication passthrough - **config**: Configuration passthrough (storage config, proxy config) ### Key Node Types | Node | Type String | Purpose | |------|-------------|---------| | Credentials | `credentials` | Azure AD or API key auth | | Storage Read | `storage:read` | Read Azure Blob | | Sheet Read | `sheet:read` | Read Excel range | | Table Read | `table:read` | Read Excel table | | Sheet Write | `sheet:write` | Write to Excel range | | Table Write | `table:write` | Write to Excel table | | Python Transform | `transform:python` | Transform data with Python | | Web Request | `web:request` | HTTP API calls | | AI Evaluate | `ai:evaluate` | OpenAI/Azure/Anthropic calls | | Branch | `flow:branch` | Conditional execution | | For-Each | `flow:for-each` | Loop over array | ## Contact - Website: https://kverna.com - Add-in: https://add-in.kverna.com ## License Proprietary - Kverna © 2024-2026