{"workflow":{"id":14184,"name":"Generate branded PDF reports from incoming emails using Autype and OpenRouter","views":4,"recentViews":0,"totalViews":4,"createdAt":"2026-03-19T19:03:05.756Z","description":"![Workflow n8n screenshot](fileId:4992)\n\n⚠️ Important: This workflow uses the [Autype](https://www.npmjs.com/package/n8n-nodes-autype) community node and requires a self-hosted n8n instance.\n\nSend an email with a document request and optional PDF attachments. The AI assistant can summarize documents, compare multiple PDFs, draft new content, or create documents from scratch with internet research — all output as professionally branded PDFs using [Autype](https://autype.com). The finished document is delivered back to the sender via email.\n\n## Who is this for?\n\nConsultants, analysts, project managers, and teams who need on-demand document generation. Send an email and get a branded PDF back — whether it's a summary, comparison, draft, or a freshly researched document.\n\n**Concrete example:** Attach 3 PDF proposals and write \"Compare these proposals and recommend the best option\" — each PDF is OCR'd via [Autype Lens](https://autype.com/de/lens), the AI assistant produces a structured comparison with tables, and you receive a branded PDF within minutes.\n\nThis also works as **an additional skill for an AI agent**. Instead of an email trigger, connect the workflow to a webhook or chat trigger so an agent can call it when a user asks \"create a summary of these documents.\"\n\n## What this workflow does\n\nOn each incoming email, the workflow:\n1. Extracts the email subject + body as the document request, and detects PDF attachments\n2. Processes each attached PDF sequentially: uploads to Autype, extracts text via [Lens OCR](https://docs.autype.com/api-reference/tools/lens-ocr)\n3. Combines all OCR results into a single context\n4. Downloads the [Autype Extended Markdown](https://docs.autype.com/getting-started/concepts/extended-markdown) syntax reference so the AI knows the output format\n5. Passes the request text + all PDF content to an AI Document Assistant with Firecrawl and SerpAPI as research tools\n6. The assistant determines the task type (summarize, compare, draft, or create from scratch) and produces the document in Autype Extended Markdown\n7. Autype [renders the markdown](https://docs.autype.com/api-reference/render) to a branded PDF with company styling (fonts, colors, heading styles, tables, header with logo, footer with page numbers)\n8. The PDF is delivered back to the original sender via email\n\n## Output structure\n\n![output structure diagram](fileId:4991)\n\n\n## How it works\n\n1. **New Email Received** — An IMAP Email Trigger monitors your inbox for incoming document requests. The email subject and body become the request text; PDF attachments are automatically detected.\n2. **Set Company Config** — A Set node defines your company name, logo URL, and brand color. Edit these values once.\n3. **Extract & Split PDFs** — A Code node extracts the sender email, combines subject + body as request text, and detects PDF attachments. Each PDF is split into a separate item for loop processing. If no PDFs are attached, a single item with just the text is output.\n4. **Has PDFs?** — An IF node routes the flow: emails with PDF attachments enter the processing loop, text-only emails skip directly to the AI Assistant.\n5. **Loop Over PDFs** — A Split In Batches node processes each PDF sequentially (one at a time to avoid API rate limits).\n6. **Upload PDF to Autype** — Each PDF is uploaded to Autype via the community node (`resource: file`).\n7. **Autype Lens OCR** — An HTTP Request node triggers [Autype Lens OCR](https://docs.autype.com/api-reference/tools/lens-ocr) on the uploaded file with `outputFormat: \"md\"`. This uses **Generic Auth Type → Header Auth** with `X-API-Key` set to your Autype API key. Cost: 4 credits per page. A dedicated community node for Lens is planned.\n8. **Wait for OCR → Poll OCR Status** — Waits 8 seconds, then polls the job status via HTTP Request (same Header Auth credential). The loop continues to the next PDF after each OCR completes.\n9. **Extract OCR Text** — Extracts the markdown text from each OCR result and stores it with the original filename.\n10. **Combine All OCR Results** — After the loop completes, collects all OCR texts and combines them into a single context string with labeled sections per PDF.\n11. **Prepare Text Only** — For emails without PDFs, passes just the request text forward.\n12. **Download Markdown Syntax** — Fetches the [Autype Extended Markdown syntax reference](https://autype.com/llm-resources/markdown-syntax.md) so the AI knows the output format.\n13. **Merge Context** — Combines the request text, all OCR content, and the markdown syntax reference into a single item for the AI Agent.\n14. **AI Document Assistant** — An n8n AI Agent (OpenRouter) with two tools:\n    - **Firecrawl Scrape** — Scrapes specific URLs to extract page content as markdown.\n    - **SerpAPI** — Web search for current information, statistics, and facts.\n    - The assistant determines the task type (summarize, compare, draft, or create from scratch). The system prompt limits tool usage to max 5 calls and prioritizes attached PDF content.\n15. **Prepare Render Payload** — Cleans the AI output (strips code fences), generates a filename, and prepares branding variables.\n16. **Render Branded PDF** — Autype [Render from Markdown](https://docs.autype.com/api-reference/render) generates the PDF with a full `defaults` JSON for company styling: Roboto font, heading colors from brand color, styled tables with colored headers, header with company logo, and footer with page numbers. See the [defaults schema](https://docs.autype.com/api-reference/json-syntax/defaults) for all options.\n17. **Send Report via Email** — SMTP sends the PDF as an attachment back to the original email sender.\n\n## Setup\n\n1. Install the **Autype community node** (`n8n-nodes-autype`) via **Settings &gt; Community Nodes**.\n2. Create an **Autype API credential** with your API key from [app.autype.com](https://app.autype.com). See [API Keys in Settings](https://docs.autype.com/getting-started/editor/settings#api-keys).\n3. Create a **Header Auth credential** for the Lens OCR HTTP Request nodes:\n   - Go to **Credentials &gt; New &gt; Header Auth**\n   - Name: `X-API-Key`\n   - Value: your Autype API key (same key as step 2)\n   - Assign this credential to the \"Autype Lens OCR\" and \"Poll OCR Status\" nodes.\n4. Create an **OpenRouter API credential** (or replace the chat model with OpenAI/Anthropic).\n5. Create an **IMAP credential** for the email inbox to monitor.\n6. Create an **SMTP credential** for sending emails.\n7. Get a **Firecrawl API key** from [firecrawl.dev](https://firecrawl.dev) and create a Firecrawl credential.\n8. Get a **SerpAPI key** from [serpapi.com](https://serpapi.com) and create a SerpAPI credential.\n9. Import this workflow and assign your credentials to each node.\n10. Edit the **Set Company Config** node:\n    - `companyName` — Your company name (appears in header/footer)\n    - `companyLogoUrl` — URL to your company logo (PNG/JPEG, publicly accessible)\n    - `brandColor` — Hex color for headings and table headers (e.g. `#1a5276`)\n11. Update the **Send Report via Email** node with your sender email address.\n12. Activate the workflow — any new email to the monitored inbox triggers document generation.\n\n&gt; **Note:** This is a community node. It is not maintained by the n8n team. You need a self-hosted n8n instance to use community nodes.\n\n## Requirements\n\n- Self-hosted n8n instance (community nodes are not available on n8n Cloud)\n- [Autype](https://autype.com) account with API key ([Lens OCR](https://docs.autype.com/api-reference/tools/lens-ocr) costs 4 credits/page, [Render from Markdown](https://docs.autype.com/api-reference/render) costs 1 credit)\n- `n8n-nodes-autype` [community node](https://www.npmjs.com/package/n8n-nodes-autype) installed\n- OpenRouter API key (or OpenAI/Anthropic — configurable chat model)\n- IMAP credentials for the monitored inbox\n- SMTP credentials for sending emails\n- Firecrawl API key ([free tier: 500 pages/month](https://firecrawl.dev))\n- SerpAPI key ([serpapi.com](https://serpapi.com))\n\n## How to customize\n\n- **Change AI model:** Replace the OpenRouter Chat Model sub-node with OpenAI, Anthropic Claude, Google Gemini, or any LangChain-compatible chat model.\n- **Add more research tools:** Add additional tool nodes for specialized APIs — Google Scholar, SEC filings, PubMed, or internal knowledge bases.\n- **Customize styling:** Edit the `defaults` JSON in the Render Branded PDF node to change fonts, colors, heading styles, table designs, header/footer content, and spacing. See the [defaults schema](https://docs.autype.com/api-reference/json-syntax/defaults) for all available options.\n- **Replace email trigger:** Swap the IMAP Email Trigger with a Form Trigger, Webhook, or Chat Trigger to accept input from different sources.\n- **Add watermark:** Insert an Autype Watermark step after rendering to stamp \"DRAFT\" or \"CONFIDENTIAL\" on every page.\n- **Save to cloud storage:** Add a Google Drive, S3, or SharePoint upload step after rendering (before or instead of SMTP).\n- **Adjust OCR wait time:** For large PDFs (10+ pages), increase the Wait node from 8 to 15-20 seconds, or add a retry loop that polls until status is COMPLETED.\n- **Use Autype community node for Lens:** Once the Autype community node adds Lens OCR support, replace the HTTP Request OCR/poll chain with a single Autype node.\n- **Change output format:** Switch from [Render from Markdown](https://docs.autype.com/api-reference/render) to Render from JSON for a better manipulation experience\n","workflow":{"meta":{"instanceId":"","templateCredsSetupCompleted":true},"nodes":[{"id":"9bb1c1b3-916f-47da-9596-f531966726af","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-17424,2688],"parameters":{"width":576,"height":850,"content":"## AI Document Assistant: Branded PDF Generation from Email\n\nReceive an email with a document request and optional PDF attachments. The AI assistant can create drafts, summarize documents, compare multiple PDFs, or write new documents with internet research — all output as professionally branded PDFs using Autype.\n\n### How it works\n1. **Email Trigger** — Monitors inbox for incoming document requests with optional PDF attachments.\n2. **Extract & Split PDFs** — Extracts email content and splits PDF attachments into individual items for processing.\n3. **Loop: Upload + OCR each PDF** — Each PDF is uploaded to Autype, OCR'd via Lens, and the extracted text is collected.\n4. **Combine Results** — All OCR texts are merged with the original request text.\n5. **Download Syntax Reference** — Fetches Autype Extended Markdown syntax so the AI knows the output format.\n6. **AI Assistant** — Processes the request (summarize, compare, draft, research), writes a document in Autype Extended Markdown.\n7. **Render PDF** — Autype renders the markdown to a branded PDF with company styling.\n8. **Send via Email** — The PDF is emailed back to the sender via SMTP.\n\n### Requirements\n- Self-hosted n8n (community nodes)\n- `n8n-nodes-autype` community node\n- Autype API key\n- OpenRouter API key (or OpenAI/Anthropic)\n- Firecrawl API key\n- SerpAPI key\n- SMTP credentials (for email delivery)\n\n> **Note:** This workflow uses the [Autype](https://www.npmjs.com/package/n8n-nodes-autype) community node. Community nodes are only available on **self-hosted n8n instances**."},"typeVersion":1},{"id":"6cb7e941-ffac-469b-b3bb-5c5548558606","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-16784,2864],"parameters":{"color":7,"width":700,"height":260,"content":"### 1. Email Input & Config\nThe IMAP Email Trigger monitors your inbox for incoming document requests. PDF attachments are automatically detected. The Set Company Config node defines branding variables."},"typeVersion":1},{"id":"67d4eed1-67c4-40e0-a1c8-4f402327db8b","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-15856,3104],"parameters":{"color":7,"width":1512,"height":452,"content":"### 2. PDF Processing Loop\nEach uploaded PDF is processed sequentially: uploaded to Autype via the community node, OCR'd via Autype Lens (HTTP Request), then the extracted markdown text is collected. After all PDFs are processed, the results are combined into a single context string.\n\n**Lens OCR setup:** The Lens OCR and Poll OCR Status nodes use HTTP Request with **Generic Auth Type → Header Auth**. Create a Header Auth credential with **Name: `X-API-Key`** and **Value: your Autype API key**. A dedicated Autype community node for Lens OCR is coming soon."},"typeVersion":1},{"id":"303e476e-c3ba-4ce7-987c-41bd83bf458e","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-15616,2640],"parameters":{"color":7,"width":780,"height":292,"content":"### 3. AI Document Assistant\nThe AI Assistant receives the request text, all OCR content from attached PDFs, and the Autype Extended Markdown syntax reference. It can summarize, compare, draft, or create documents from scratch — using Firecrawl and SerpAPI for research when needed."},"typeVersion":1},{"id":"50b38871-3e87-4bfa-8a42-11e74a12005d","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-14560,2576],"parameters":{"color":7,"width":668,"height":308,"content":"### 4. Render & Send\nThe AI output is cleaned and rendered to a branded PDF via Autype Render from Markdown. Company styling is applied via a defaults JSON (fonts, colors, heading styles, table styles, header with logo, footer with page numbers). The PDF is sent back to the sender via SMTP."},"typeVersion":1},{"id":"b5611b64-205a-4d01-b262-55cae1cd2af2","name":"Set Company Config","type":"n8n-nodes-base.set","position":[-16496,2960],"parameters":{"options":{},"assignments":{"assignments":[{"id":"cfg-company","name":"companyName","type":"string","value":"Your Company Name"},{"id":"cfg-logo","name":"companyLogoUrl","type":"string","value":"https://placehold.co/50x50/orange/white"},{"id":"cfg-color","name":"brandColor","type":"string","value":"#1a5276"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"13711b2a-2a55-4500-9390-9293a87af7d8","name":"New Email Received","type":"n8n-nodes-base.emailReadImap","position":[-16736,2960],"parameters":{"options":{},"downloadAttachments":true},"credentials":{"imap":{"id":"credential-id","name":"IMAP account"}},"typeVersion":2},{"id":"9b84550e-70e7-4e43-91bb-70b1ba30a189","name":"Extract & Split PDFs","type":"n8n-nodes-base.code","position":[-16288,2960],"parameters":{"jsCode":"// Extract email data and split PDF attachments into separate items for loop processing\nconst item = $input.first();\nconst emailData = item.json;\nconst binary = item.binary || {};\n\n// Extract email fields\nconst subject = emailData.subject || '';\nconst bodyText = (emailData.textPlain || emailData.text || emailData.html || '').substring(0, 5000);\nconst fromRaw = emailData.from || '';\n// Extract email address from 'Name <user@example.com>' format\nconst emailMatch = fromRaw.match(/<([^>]+)>/);\nconst senderEmail = emailMatch ? emailMatch[1] : fromRaw;\nconst senderName = fromRaw.replace(/<[^>]+>/, '').trim();\n\n// Combine subject + body as the request text\nconst requestText = subject + (bodyText ? '\\n\\n' + bodyText : '');\n\n// Scan binary attachments for PDFs\nconst pdfItems = [];\nfor (const key of Object.keys(binary)) {\n  const bin = binary[key];\n  if (bin.mimeType === 'application/pdf' || (bin.fileName && bin.fileName.toLowerCase().endsWith('.pdf'))) {\n    pdfItems.push({ fileName: bin.fileName || `document-${pdfItems.length + 1}.pdf`, binaryKey: key });\n  }\n}\n\nif (pdfItems.length === 0) {\n  return [{ json: { requestText, senderEmail, senderName, hasPdfs: false, pdfCount: 0 } }];\n}\n\n// Output one item per PDF with its binary under the key 'data'\nconst results = [];\nfor (let i = 0; i < pdfItems.length; i++) {\n  const pdf = pdfItems[i];\n  results.push({\n    json: { requestText, senderEmail, senderName, hasPdfs: true, pdfCount: pdfItems.length, pdfIndex: i, pdfFileName: pdf.fileName, pdfBinaryKey: 'data' },\n    binary: { data: binary[pdf.binaryKey] }\n  });\n}\nreturn results;"},"typeVersion":2},{"id":"214e9426-fff8-4a82-a015-233306d184c0","name":"Has PDFs?","type":"n8n-nodes-base.if","position":[-16064,2960],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"has-pdfs","operator":{"type":"boolean","operation":"true"},"leftValue":"={{ $json.hasPdfs }}","rightValue":true}]}},"typeVersion":2.2},{"id":"27c24be6-1e45-46bc-bff3-b1228998b736","name":"Loop Over PDFs","type":"n8n-nodes-base.splitInBatches","position":[-15792,3360],"parameters":{"options":{"reset":false}},"typeVersion":3},{"id":"30a46778-ed0f-4ad6-86c9-e2c6b7d9b50d","name":"Upload PDF to Autype","type":"n8n-nodes-autype.autype","position":[-15440,3312],"parameters":{"resource":"file"},"credentials":{"autypeApi":{"id":"credential-id","name":"Autype account"}},"typeVersion":1},{"id":"360692db-d3be-42c4-8ae5-cb7149701ae3","name":"Wait for OCR","type":"n8n-nodes-base.wait","position":[-14992,3312],"webhookId":"","parameters":{"amount":8},"typeVersion":1.1},{"id":"23289509-ed73-48a7-bae8-35de4ca79d6e","name":"Poll OCR Status","type":"n8n-nodes-base.httpRequest","position":[-14768,3312],"parameters":{"url":"=https://api.autype.com/api/v1/dev/tools/jobs/{{ $('Autype Lens OCR').item.json.id }}","options":{},"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"credential-id","name":"Autype API (Header Auth)"}},"typeVersion":4.2},{"id":"22ed08f4-1d00-417f-aca4-9a7b1be666dc","name":"Extract OCR Text","type":"n8n-nodes-base.code","position":[-14544,3312],"parameters":{"jsCode":"const item = $input.first();\nconst status = item.json.status;\nconst loopItem = $('Loop Over PDFs').first().json;\nconst fileName = loopItem.pdfFileName || 'document.pdf';\n\nlet ocrText = '';\nif (status === 'COMPLETED') {\n  ocrText = item.json.result?.markdown || item.json.result?.text || item.json.metadata?.markdown || item.json.metadata?.text || JSON.stringify(item.json.result || item.json.metadata || {});\n  ocrText = ocrText.substring(0, 15000);\n} else if (status === 'FAILED') {\n  ocrText = '[OCR failed — could not process this PDF]';\n} else {\n  ocrText = '[OCR still processing — try increasing wait time]';\n}\n\nreturn [{\n  json: {\n    pdfFileName: fileName,\n    ocrText\n  }\n}];"},"typeVersion":2},{"id":"44aab7d9-445a-4978-8622-a190828fc3a4","name":"Combine All OCR Results","type":"n8n-nodes-base.code","position":[-15600,3200],"parameters":{"jsCode":"// Collect all OCR results from the loop and combine with original request\nconst allItems = $('Extract OCR Text').all();\nconst formData = $('Extract & Split PDFs').first().json;\n\nconst pdfSections = allItems.map((item, i) => {\n  const name = item.json.pdfFileName || `Document ${i + 1}`;\n  return `### PDF ${i + 1}: ${name}\\n\\n${item.json.ocrText}`;\n}).join('\\n\\n---\\n\\n');\n\nreturn [{\n  json: {\n    requestText: formData.requestText,\n    senderEmail: formData.senderEmail,\n    pdfContent: pdfSections,\n    pdfCount: allItems.length,\n    hasPdfs: true\n  }\n}];"},"typeVersion":2},{"id":"53d42f3e-7327-4cd6-9f6d-3a6b296434fc","name":"Prepare Text Only","type":"n8n-nodes-base.code","position":[-15776,2768],"parameters":{"jsCode":"const formData = $input.first().json;\n\nreturn [{\n  json: {\n    requestText: formData.requestText,\n    senderEmail: formData.senderEmail,\n    pdfContent: '',\n    pdfCount: 0,\n    hasPdfs: false\n  }\n}];"},"typeVersion":2},{"id":"d16c4859-0eeb-4951-af07-a94dbb80ffb4","name":"Download Markdown Syntax","type":"n8n-nodes-base.httpRequest","position":[-15504,2768],"parameters":{"url":"https://autype.com/llm-resources/markdown-syntax.md","options":{"response":{"response":{"responseFormat":"text"}}}},"typeVersion":4.2},{"id":"9f865bee-62a8-407b-869b-29ad03844a17","name":"Merge Context","type":"n8n-nodes-base.code","position":[-15312,2768],"parameters":{"jsCode":"// Merge the context data with the downloaded markdown syntax\nconst syntaxData = $input.first().json?.data || '';\n\n// Get the context from whichever branch was executed\nlet context;\ntry {\n  context = $('Combine All OCR Results').first().json;\n} catch (e) {\n  try {\n    context = $('Prepare Text Only').first().json;\n  } catch (e2) {\n    context = $('Extract & Split PDFs').first().json;\n  }\n}\n\nreturn [{\n  json: {\n    ...context,\n    markdownSyntax: syntaxData.substring(0, 12000)\n  }\n}];"},"typeVersion":2},{"id":"fb2f1810-2947-4d44-94b8-c10c87013228","name":"AI Document Assistant","type":"@n8n/n8n-nodes-langchain.agent","position":[-15088,2768],"parameters":{"text":"=## Document Request\n\n{{ $json.requestText }}\n\n{{ $json.hasPdfs ? '---\\n\\n## Attached Documents (' + $json.pdfCount + ' files)\\n\\nThe following content was extracted from the attached PDF documents. Use this as your PRIMARY source material.\\n\\n' + $json.pdfContent : '(No document attachments)' }}\n\n---\n\n**Your task:** Produce a well-structured document in Autype Extended Markdown format based on the request above.\n\nDetermine the best approach based on the request:\n- **Summarize**: If asked to summarize attached documents, produce a concise but thorough summary.\n- **Compare**: If multiple documents are attached and a comparison is requested, create a structured comparison with tables.\n- **Draft / Rewrite**: If asked to draft, restructure, or rewrite content, produce a polished version.\n- **Create from scratch**: If no documents are attached or the request asks for new content, write the document from your knowledge and use research tools if needed.\n\n**IMPORTANT rules for tool usage:**\n- If PDF documents were attached, use their content as the PRIMARY input. Do NOT search for information already in the PDFs.\n- Only use Firecrawl or SerpAPI if the request EXPLICITLY asks for external research or if you need to verify/supplement specific facts.\n- You may use a MAXIMUM of 5 tool calls total. Plan your searches carefully.\n- If the task is purely about the attached documents (summarize, compare, rewrite) — do NOT use any tools.\n\n**Document formatting:**\n1. Clear title (# heading)\n2. Executive summary or introduction\n3. Well-structured sections (##, ###)\n4. Tables where data comparison is useful\n5. Blockquotes for key insights or callouts\n6. Conclusion with actionable recommendations where appropriate\n\nReturn ONLY the Autype Extended Markdown content. No code fences, no explanation outside the document.","options":{"maxIterations":6,"systemMessage":"=You are a professional AI document assistant. You help users create, summarize, compare, and draft documents. You receive requests via email with optional PDF attachments and produce polished, PDF-ready documents.\n\n## Your capabilities\n1. **Summarize** — Create concise summaries of attached documents, preserving key facts and structure.\n2. **Compare** — Analyze multiple documents side-by-side, highlighting differences, similarities, and key takeaways in tables.\n3. **Draft / Rewrite** — Take existing content and produce a polished, restructured version.\n4. **Create from scratch** — Write new documents based on a topic, optionally using internet research.\n\n## CRITICAL: Tool usage rules\n- You have a STRICT MAXIMUM of 5 tool calls total. Every Firecrawl or SerpAPI call counts.\n- **If PDF documents are attached:** Their content is your PRIMARY source. Work with what you have. Do NOT search unless the user explicitly asks for external research or comparison with external data.\n- **If no PDFs are attached and research is needed:** Use SerpAPI for broad research (max 2-3 calls) and Firecrawl only to scrape specific URLs mentioned in the request.\n- **If the task is writing/creative:** Write directly from your knowledge. Only search if you need specific current facts.\n- NEVER call a tool repeatedly for the same or similar query. Plan your searches before executing.\n\n## Your tools\n- **Firecrawl**: Scrape a specific URL to extract its page content as markdown. Only use when a concrete URL is known.\n- **SerpAPI**: Web search for finding current information, statistics, and facts. One well-formulated query often suffices.\n\n## Output format\nYou write documents in **Autype Extended Markdown** format. Here is the syntax reference:\n\n{{ $json.markdownSyntax || 'Standard Markdown with extended features' }}\n\n## Key formatting rules\n- Use standard markdown headings: # for title, ## for sections, ### for subsections\n- Use **bold** and *italic* for emphasis\n- Use tables with | syntax for data comparisons\n- Use > blockquotes for callouts and key insights\n- Use --- for horizontal rules / section breaks\n- Use ordered and unordered lists\n- Do NOT use HTML tags or &nbsp;\n- Do NOT use ``` code blocks unless showing actual code\n- Keep the document professional and business-ready\n- Write in the same language as the incoming request\n\n## Document structure\nAlways structure your output as:\n1. # Title\n2. Executive Summary (brief overview)\n3. Main Content (multiple ## sections)\n4. Data/Comparisons (tables where useful)\n5. Conclusion & Recommendations\n\nReturn ONLY the markdown content. No wrapper, no code fences, no meta-commentary."},"promptType":"define"},"typeVersion":2},{"id":"70d3be18-47e7-4640-a5f0-473d9e5553db","name":"Prepare Render Payload","type":"n8n-nodes-base.code","position":[-14496,2704],"parameters":{"jsCode":"const agentOutput = $json.output || $json.text || '';\nconst config = $('Set Company Config').first().json;\nconst context = $('Merge Context').first().json;\n\n// Clean markdown: remove code fences if the AI wrapped it\nlet markdown = agentOutput;\nif (markdown.startsWith('```')) {\n  markdown = markdown.replace(/^```(?:markdown|md)?\\n?/, '').replace(/\\n?```$/, '');\n}\nmarkdown = markdown.trim();\n\n// Build a clean filename\nconst requestText = context.requestText || 'document';\nconst cleanName = requestText\n  .substring(0, 60)\n  .replace(/[^a-zA-Z0-9\\s-]/g, '')\n  .replace(/\\s+/g, '-')\n  .toLowerCase();\n\nconst today = new Date().toISOString().split('T')[0];\n\nreturn [{\n  json: {\n    markdown,\n    filename: `${cleanName}-${today}`,\n    title: requestText.substring(0, 100),\n    senderEmail: context.senderEmail,\n    companyName: config.companyName,\n    companyLogoUrl: config.companyLogoUrl,\n    brandColor: config.brandColor\n  }\n}];"},"typeVersion":2},{"id":"bea023a8-09d9-476e-896f-b937531efd8d","name":"Render Branded PDF","type":"n8n-nodes-autype.autype","position":[-14304,2704],"parameters":{"content":"={{ $json.markdown }}","operation":"renderMarkdown","downloadOutput":true,"markdownAdditionalFields":{"size":"A4","title":"={{ $json.title }}","defaults":"={{ JSON.stringify({ fontFamily: 'Roboto', fontSize: 11, color: '#333333', lineHeight: 1.5, headingNumbering: '1.1.1', spacing: { before: { h1: 20, h2: 18, h3: 16, h4: 14, h5: 12, h6: 10, text: 0, table: 10, list: 8, image: 10, code: 10, chart: 10, math: 10 }, after: { h1: 14, h2: 12, h3: 10, h4: 8, h5: 6, h6: 5, text: 8, table: 14, list: 8, image: 14, code: 14, chart: 14, math: 15 } }, chart: { colors: ['#3b82f6', '#ef4444', '#10b981', '#f59e0b', '#8b5cf6'], borderColors: ['#2563eb', '#dc2626', '#059669', '#d97706', '#7c3aed'] }, styles: { h1: { color: $json.brandColor || '#1a365d', fontSize: 24, fontWeight: 'bold', pageBreakBefore: true }, h2: { color: $json.brandColor || '#2c5282', fontSize: 20, fontWeight: 'bold' }, h3: { color: '#2d3748', fontSize: 16, fontWeight: 'bold' }, h4: { fontSize: 14, fontWeight: 'bold' }, h5: { fontSize: 12, fontWeight: 'normal' }, h6: { fontSize: 11, fontWeight: 'normal' }, text: { fontSize: 11 }, table: { header: { color: '#ffffff', backgroundColor: $json.brandColor || '#2c5282' }, borders: { inner: { color: '#e2e8f0', width: 1 }, outer: { color: '#e2e8f0', width: 1 } }, cellPadding: { top: 6, left: 8, right: 8, bottom: 6 } } }, header: { left: $json.companyLogoUrl ? { type: 'image', src: $json.companyLogoUrl, width: 60, align: 'left' } : ($json.companyName || ''), right: { type: 'text', content: [{ text: $json.companyName || '', color: '#666666', fontSize: 9 }] }, excludeFirstPage: true }, footer: { left: { type: 'text', content: [{ text: $json.companyName || '', color: '#999999', fontSize: 8 }] }, center: 'Page ${pageNumber} of ${totalPages}', excludeFirstPage: false } }) }}","orientation":"portrait"}},"credentials":{"autypeApi":{"id":"credential-id","name":"Autype account"}},"typeVersion":1},{"id":"69c3f622-ab0c-4a55-bd62-d352782b6d68","name":"Send Report via Email","type":"n8n-nodes-base.emailSend","position":[-14112,2704],"webhookId":"","parameters":{"options":{"attachments":"data"},"subject":"=Your Document: {{ $('Prepare Render Payload').item.json.title }}","toEmail":"={{ $('New Email Received').item.json.from }}","fromEmail":"=Your Name <your-email@example.com>"},"credentials":{"smtp":{"id":"credential-id","name":"SMTP account"}},"typeVersion":2.1},{"id":"a20a6e19-7a60-4091-bd25-c939ad1f4505","name":"/scrape in Firecrawl","type":"@mendable/n8n-nodes-firecrawl.firecrawlTool","position":[-14800,2960],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","operation":"scrape","scrapeOptions":{"options":{"headers":{}}},"requestOptions":{}},"credentials":{"firecrawlApi":{"id":"credential-id","name":"Firecrawl account"}},"typeVersion":1},{"id":"80f59ecf-1be3-4f3a-aa7c-587ff41410fe","name":"OpenRouter Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[-15184,2944],"parameters":{"model":"z-ai/glm-5","options":{}},"credentials":{"openRouterApi":{"id":"credential-id","name":"OpenRouter account"}},"typeVersion":1},{"id":"6f69382b-4322-4138-aa98-6c521738cda4","name":"SerpAPI","type":"@n8n/n8n-nodes-langchain.toolSerpApi","position":[-14944,2960],"parameters":{"options":{}},"credentials":{"serpApi":{"id":"credential-id","name":"SerpApi account"}},"typeVersion":1},{"id":"ff290efa-8e2d-4ce3-8f60-0c24587176df","name":"Autype Lens OCR","type":"n8n-nodes-base.httpRequest","position":[-15216,3312],"parameters":{"url":"=https://api.autype.com/api/v1/dev/tools/lens/ocr","method":"POST","options":{},"jsonBody":"={\n  \"fileId\": \"{{ $json.id }}\",\n  \"outputFormat\": \"md\"\n}","sendBody":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"credential-id","name":"Autype API (Header Auth)"}},"typeVersion":4.2}],"pinData":{},"connections":{"SerpAPI":{"ai_tool":[[{"node":"AI Document Assistant","type":"ai_tool","index":0}]]},"Has PDFs?":{"main":[[{"node":"Loop Over PDFs","type":"main","index":0}],[{"node":"Prepare Text Only","type":"main","index":0}]]},"Wait for OCR":{"main":[[{"node":"Poll OCR Status","type":"main","index":0}]]},"Merge Context":{"main":[[{"node":"AI Document Assistant","type":"main","index":0}]]},"Loop Over PDFs":{"main":[[{"node":"Combine All OCR Results","type":"main","index":0}],[{"node":"Upload PDF to Autype","type":"main","index":0}]]},"Autype Lens OCR":{"main":[[{"node":"Wait for OCR","type":"main","index":0}]]},"Poll OCR Status":{"main":[[{"node":"Extract OCR Text","type":"main","index":0}]]},"Extract OCR Text":{"main":[[{"node":"Loop Over PDFs","type":"main","index":0}]]},"Prepare Text Only":{"main":[[{"node":"Download Markdown Syntax","type":"main","index":0}]]},"New Email Received":{"main":[[{"node":"Set Company Config","type":"main","index":0}]]},"Render Branded PDF":{"main":[[{"node":"Send Report via Email","type":"main","index":0}]]},"Set Company Config":{"main":[[{"node":"Extract & Split PDFs","type":"main","index":0}]]},"/scrape in Firecrawl":{"ai_tool":[[{"node":"AI Document Assistant","type":"ai_tool","index":0}]]},"Extract & Split PDFs":{"main":[[{"node":"Has PDFs?","type":"main","index":0}]]},"Upload PDF to Autype":{"main":[[{"node":"Autype Lens OCR","type":"main","index":0}]]},"AI Document Assistant":{"main":[[{"node":"Prepare Render Payload","type":"main","index":0}]]},"OpenRouter Chat Model":{"ai_languageModel":[[{"node":"AI Document Assistant","type":"ai_languageModel","index":0}]]},"Prepare Render Payload":{"main":[[{"node":"Render Branded PDF","type":"main","index":0}]]},"Combine All OCR Results":{"main":[[{"node":"Download Markdown Syntax","type":"main","index":0}]]},"Download Markdown Syntax":{"main":[[{"node":"Merge Context","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":26,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":6},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-autype.autype":{"count":2},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":3},"n8n-nodes-base.emailReadImap":{"count":1},"n8n-nodes-base.splitInBatches":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"@n8n/n8n-nodes-langchain.toolSerpApi":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenRouter":{"count":1},"@mendable/n8n-nodes-firecrawl.firecrawlTool":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"8Automator","username":"kesim0","bio":"Software Developer with 6+ years of experience based in Bavaria, Germany. I specialize in building business automation solutions, integrations, and tools with n8n to streamline workflows and improve efficiency.","verified":true,"links":[""],"avatar":"https://gravatar.com/avatar/752654f7c39695b04e1c549d8ec67c3cd526e8a97843ec25601baab4a707541e?r=pg&d=retro&size=200"},"nodes":[{"id":10,"icon":"fa:inbox","name":"n8n-nodes-base.emailReadImap","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.emailimap/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/imap/"}]},"categories":["Communication","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Other Trigger Nodes"]}}},"group":"[\"trigger\"]","defaults":{"name":"Email Trigger (IMAP)","color":"#44AA22"},"iconData":{"icon":"inbox","type":"icon"},"displayName":"Email Trigger (IMAP)","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"}]},{"id":11,"icon":"fa:envelope","name":"n8n-nodes-base.emailSend","codex":{"data":{"alias":["SMTP","email","human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/sendemail/"}]},"categories":["Communication","HITL","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Send Email","color":"#00bb88"},"iconData":{"icon":"envelope","type":"icon"},"displayName":"Send Email","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"},{"id":28,"name":"HITL"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1199,"icon":"file:serpApi.svg","name":"@n8n/n8n-nodes-langchain.toolSerpApi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolserpapi/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]}}},"group":"[\"transform\"]","defaults":{"name":"SerpAPI"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMCIgdmlld0JveD0iMCAwIDQ2ODAgMTM0MCI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTQ0NjMgMTIxdjExMGgyMDdWMTFoLTIwN3pNMzAwLjUgNDcuNmMtMi43LjItMTIuMi44LTIxIDEuNC02OC4yIDQuNi0xMjMuOCAxOC4xLTE2MSAzOS4yQzYwLjYgMTIxIDMxLjggMTc0LjIgMjQgMjYzYy0yLjcgMzEuNS0yLjIgOTguMyAxLjEgMTM1QzM1IDUwOS40IDcyLjggNTU1LjEgMTg1IDU5MS41YzI0IDcuNyA1NS4xIDE1LjggOTguMiAyNS41IDIwIDQuNSA0Ny4xIDEwLjkgNjAuMyAxNC4yIDcxLjggMTggOTUgMzIuNSAxMDIuNSA2My45IDUuMiAyMS45IDUuMiA3NC4zLjEgOTcuOS05IDQwLjktMzYuMSA1NS44LTEwNS44IDU3LjgtOTEuNiAyLjgtMTc3LTkuMy0yNzkuNi0zOS41LTEwLjQtMy0xOS4yLTUuMS0xOS43LTQuNy0uOSAxLjEtMzYuMyAxNjUuNC0zNS43IDE2NiAxLjMgMS4zIDM0LjQgMTQuMyA0OS43IDE5LjUgNTkuOSAyMC41IDEyMy4yIDMzLjMgMTk3LjUgNDAgMTkuMiAxLjcgOTIuMSAyLjMgMTE3IDEgMTMzLjYtNy4yIDIxMC0zNi40IDI1My4xLTk2LjggMzQuMy00OCA0Ni44LTExNy4yIDQyLjUtMjM1LjMtMi4zLTYyLjgtNy41LTkyLjEtMjEuNi0xMjEuNS0yNy41LTU3LjItODktOTAuMS0yMzUuNS0xMjYuMS05Mi44LTIyLjgtMTA0LjktMjYuMS0xMjMuMy0zMy40LTI1LjctMTAuMy0zNy41LTIyLTQyLjctNDIuNS0zLjctMTQuNS01LjItNTUuOS0yLjktNzkgNC0zOS45IDIwLjEtNTYuMyA2MS45LTYzIDMzLjctNS40IDExNC42LTMuNiAxODQuNSA0LjEgMjcgMyA3NC41IDkuNyAxMTAuOSAxNS43IDE2LjMgMi43IDI2IDMuOSAyNi4yIDMuMi42LTEuOSAyMS41LTE3OS44IDIxLjEtMTgwLjEtLjctLjgtNDAuNS04LjUtNjMuNi0xMi4zQzUzMS43IDU4IDQ4OS40IDUzIDQzMy41IDQ4LjljLTE0LjEtMS0xMjIuMS0yLjEtMTMzLTEuM20yNjk5IDE0LjZjLTEgMi45LTI5MS41IDk1Ni44LTI5MS41IDk1Ny4zIDAgLjMgNTAuNS40IDExMi4yLjNsMTEyLjMtLjMgMjUuMi05MWMxMy44LTUwLjEgMjUuNC05MiAyNS44LTkzLjNsLjUtMi4yIDE2MC44LjIgMTYwLjcuMyAyNS41IDkyYzE0LjEgNTAuNiAyNS44IDkyLjYgMjYgOTMuMy40IDEgMjMuNCAxLjIgMTEyLjYgMWwxMTItLjMtMTQ2LjYtNDc5LTE0Ni43LTQ3OS0xNDQuMi0uM2MtMTE0LjgtLjItMTQ0LjMgMC0xNDQuNiAxbTE5OS4zIDM5MGMyOS44IDEwOS42IDU0LjIgMTk5LjYgNTQuMiAyMDAgMCAuNS00OS41LjgtMTEwLjEuOC05MS4zIDAtMTEwLS4yLTEwOS42LTEuMy4zLS44IDI1LjItOTAuOCA1NS4zLTIwMCAzMC4xLTEwOS4zIDU1LjEtMTk4LjcgNTUuNC0xOTguN3MyNSA4OS43IDU0LjggMTk5LjJNMTA2MiAzMDQuNmMtMTcuNC45LTM4LjYgMi43LTQ4LjUgNC0xMjkuOCAxNy41LTIwNS44IDg1LjktMjI2LjUgMjA0LjEtNS4yIDI5LjctNS4zIDMwLjktNS43IDE0Mi44LS41IDExMC4xLS4xIDEyNi43IDMuOCAxNTQuNCA3LjEgNTAuOCAyNSA5NS43IDUxLjQgMTI4LjYgMzcuMyA0Ni42IDk0LjggNzYuOSAxNjguOSA4OC45IDM0LjEgNS42IDU3LjQgNyAxMDIuMSA2LjMgNTMuNC0uOSA5OC41LTUuOSAxNTMuNS0xNy4yIDM5LjItOCA5Ny0yNC42IDk3LTI3LjcgMC0xLjItMjguOS0xNTAuNi0yOS42LTE1Mi45LS40LTEuNS0uOS0xLjUtNS4yLS4zLTQwLjggMTIuNC0xMTAuNSAyMy45LTE2Ni45IDI3LjUtMjQuOCAxLjYtNzcuNC43LTkxLjEtMS41LTQxLTYuNy02MC41LTIwLjQtNzAuMy00OS43LTQuMS0xMi40LTUuOS0yNS4yLTYuNi00OS4ybC0uNi0yMC43SDEzNjZ2LTczLjhjMC03Ni42LS45LTEwOS40LTMuNi0xMzMuNS0xMi4yLTExMC43LTYwLjUtMTc4LjgtMTQ5LjYtMjEwLjgtMjIuNS04LTUzLjYtMTQuNi04Mi44LTE3LjMtMTUuNS0xLjUtNTUuNy0yLjctNjgtMm0zOSAxNjMuNGMyMS43IDIuNyAzNS42IDguNiA0Ny4xIDIwIDE2LjMgMTYuMyAyMS4yIDMzLjMgMjEuMyA3NC41bC4xIDI0aC0xODFsLS4zLTE1Yy0uOC00MS4yIDYuMy02NC43IDI0LjYtODEuNyAxMS4zLTEwLjQgMjUuMy0xNy4xIDQyLjMtMjAuMiAxNC42LTIuNyAzMi0zLjMgNDUuOS0xLjZtMTI5Ni41LTE2Mi45Yy0zOS4zIDIuNy04NSAxNC42LTEzMC43IDM0LTE3LjggNy42LTQ0LjQgMjEtNTguMSAyOS4ybC0xMC44IDYuNS0xLjItMy4xYy0uNy0xLjgtNS42LTE0LjMtMTAuOC0yNy45bC05LjQtMjQuOEgyMDE0djUwNi41YzAgNDY0LjcuMSA1MDYuNSAxLjYgNTA2LjUuOSAwIDQ3LTYuMyAxMDIuNC0xNCA1NS41LTcuNyAxMDEuMy0xNCAxMDEuOS0xNCAuOCAwIDEuMS00Mi40IDEuMS0xNDQuOHYtMTQ0LjlsOC4zIDEuOGMzNS42IDcuOSA4MiAxNCAxMjguNSAxNyAyNC4yIDEuNSA3Mi42LjcgODguNy0xLjUgNjcuOS05LjUgMTE1LjMtMzYuNSAxNDYuOS04My42IDcuNi0xMS4zIDE5LjUtMzUuNyAyNC40LTUwIDcuNi0yMi4yIDEyLjUtNDYuMSAxNS45LTc2LjUgMS4zLTExLjYgMS42LTM0LjkgMi0xMzYgLjUtMTIzLjkgMC0xNTEuNC0zLjItMTc3LjUtMTAtODIuMi00MS42LTEzOS43LTk0LjctMTcyLjYtMjguOC0xNy45LTYyLjgtMjcuNy0xMDUuMy0zMC40LTE2LjUtMS4xLTE5LTEuMS0zNSAuMU0yMzY0IDQ4NWMxOS45IDEuOSAzMi40IDYuOCA0My4xIDE2LjhzMTYuNiAyMiAxOS40IDM5LjVjMi4yIDEzLjcgMi4yIDI0Mi4yIDAgMjU1LTQuOCAyNy4zLTE3LjkgNDQuNS00MC40IDUyLjctMTIgNC40LTIxLjUgNS40LTQ2LjEgNC43LTIyLjUtLjYtNDQuOS0yLjktNzEtNy4xLTE1LjctMi42LTM3LjEtNi44LTQ0LjItOC42bC0zLjgtMS4xVjUzOS4ybDQuMy0zLjdjNi42LTUuNyAyNi4yLTE4LjYgMzcuOC0yNC44IDMwLjItMTYuMiA1Ny43LTI0LjQgODguNC0yNi42IDEuMSAwIDYuNy40IDEyLjUuOW0xNzE0LjUtMTgwLjRjLTU5IDMuNS0xMzQuNCAyOC4zLTE5My43IDYzLjdsLTEwLjcgNi40LTQuOS0xMi42Yy0yLjctNi45LTcuNS0xOS41LTEwLjctMjcuOWwtNS45LTE1LjJIMzY5MHY1MDYuNWMwIDQ2OCAuMSA1MDYuNSAxLjYgNTA2LjUuOSAwIDQ3LjEtNi4zIDEwMi42LTE0czEwMS4zLTE0IDEwMS44LTE0Yy42IDAgMS01My4zIDEtMTQ0Ljh2LTE0NC44bDE4LjMgMy43YzMwLjIgNi4xIDU2LjUgOS43IDk3LjcgMTMuNiAyMy41IDIuMiA4OC45IDIuNSAxMDUgLjUgMzEtMy45IDU5LjUtMTIgODIuOS0yMy45IDE5LjItOS42IDMwLjktMTguMSA0Ni4xLTMzLjMgMjkuMi0yOS4yIDQ3LTY1LjEgNTctMTE1IDcuNC0zNyA4LTUxLjMgOC0xOTEgMC0xMzguOS0uNi0xNTIuOC04LTE5MC0yMC4zLTEwMi04MC42LTE2MC44LTE3Ny0xNzIuNC0xMy0xLjUtMzguMS0yLjYtNDguNS0yTTQwNDEgNDg1YzEyLjYgMS4yIDE5LjggMy4yIDI5LjcgOCAxNS4zIDcuNSAyNS4yIDIwLjggMzAuNiA0MWwyLjIgOC41djI1M2wtMi4yIDguNGMtNi4yIDIzLjEtMjAuMiAzOS00MC4xIDQ1LjUtMTMuMSA0LjMtMTkuNyA0LjktNDQuMiA0LjMtMjIuMi0uNi0zNi4xLTEuOS02My41LTUuOC0xMy43LTItNDUuMy04LTUyLjctMTBsLTMuOC0xVjUzOWw1LjgtNC41YzMyLjctMjYuMSA3OC44LTQ2IDExNC41LTQ5LjQgMTEuNi0xLjIgMTMuMS0xLjIgMjMuNy0uMU0xODc5IDMwNy42Yy00NS4xIDExLjgtMTE1LjcgNDIuNi0xNjIuNSA3MC45LTcuOCA0LjgtMTIuMiA2LjktMTIuNiA2LjItLjMtLjctMy43LTE1LjctNy40LTMzLjVsLTYuOC0zMi4ySDE1MTd2NzAxaDIwN1Y1OTIuMmwxMC44LTdjMzUuNy0yMy4xIDk3LjctNTMuNyAxNTguNC03OC4yIDguNC0zLjQgMTUuNi02LjUgMTYtNi44LjQtLjQtMy4xLTQzLjctNy44LTk2LjItNC42LTUyLjUtOC40LTk2LjMtOC40LTk3LjMgMC0yLjMtMi40LTIuMi0xNCAuOW0yNTg0IDM2MS45VjEwMjBoMjA3VjMxOWgtMjA3eiIvPjwvc3ZnPg=="},"displayName":"SerpApi (Google Search)","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1281,"icon":"file:openrouter.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenrouter/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenRouter Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjOTRBM0I4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAwIDI0IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5PcGVuUm91dGVyPC90aXRsZT48cGF0aCBkPSJNMTYuODA0IDEuOTU3bDcuMjIgNC4xMDV2LjA4N0wxNi43MyAxMC4yMWwuMDE3LTIuMTE3LS44MjEtLjAzYy0xLjA1OS0uMDI4LTEuNjExLjAwMi0yLjI2OC4xMS0xLjA2NC4xNzUtMi4wMzguNTc3LTMuMTQ3IDEuMzUyTDguMzQ1IDExLjAzYy0uMjg0LjE5NS0uNDk1LjMzNi0uNjguNDU1bC0uNTE1LjMyMi0uMzk3LjIzNC4zODUuMjMuNTMuMzM4Yy40NzYuMzE0IDEuMTcuNzk2IDIuNzAxIDEuODY2IDEuMTEuNzc1IDIuMDgzIDEuMTc3IDMuMTQ3IDEuMzUybC4zLjA0NWMuNjk0LjA5MSAxLjM3NS4wOTQgMi44MjUuMDMzbC4wMjItMi4xNTkgNy4yMiA0LjEwNXYuMDg3TDE2LjU4OSAyMmwuMDE0LTEuODYyLS42MzUuMDIyYy0xLjM4Ni4wNDItMi4xMzcuMDAyLTMuMTM4LS4xNjItMS42OTQtLjI4LTMuMjYtLjkyNi00Ljg4MS0yLjA1OWwtMi4xNTgtMS41YTIxLjk5NyAyMS45OTcgMCAwMC0uNzU1LS40OThsLS40NjctLjI4YTU1LjkyNyA1NS45MjcgMCAwMC0uNzYtLjQzQzIuOTA4IDE0LjczLjU2MyAxNC4xMTYgMCAxNC4xMTZWOS44ODhsLjE0LjAwNGMuNTY0LS4wMDcgMi45MS0uNjIyIDMuODA5LTEuMTI0bDEuMDE2LS41OC40MzgtLjI3NGMuNDI4LS4yOCAxLjA3Mi0uNzI2IDIuNjg2LTEuODUzIDEuNjIxLTEuMTMzIDMuMTg2LTEuNzggNC44ODEtMi4wNTkgMS4xNTItLjE5IDEuOTc0LS4yMTMgMy44MTQtLjEzOGwuMDItMS45MDd6Ij48L3BhdGg+PC9zdmc+Cg=="},"displayName":"OpenRouter Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":51,"name":"Multimodal AI"}],"image":[{"id":4991,"url":"https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/mermaid_diagram_2026_03_19_195908_afaf9bc624.png"},{"id":4992,"url":"https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/Screenshot_2026_03_19_at_19_46_11_7a3e5f67c0.png"}]}}