{"workflow":{"id":14188,"name":"Extract text from Google Drive files to Google Sheets using NVIDIA NIM","views":22,"recentViews":1,"totalViews":22,"createdAt":"2026-03-20T07:47:28.198Z","description":"This template monitors Google Drive folder for new files, extracts text from PDFs, images, text files, CSVs, and Google Docs., reads images with meta/llama-3.2-11b-vision-instruct, structures the result with nvidia/llama-3.3-nemotron-super-49b-v1.5, logs everything to Google Sheets, and sends a Telegram notification when processing finishes. ✨\n\n## What This Template Does\n- Watches a specific Google Drive folder for new files with Google Drive Trigger. 📂\n- Downloads each new file with Google Drive before processing. ⬇️\n- Routes PDFs, images, text files, CSVs, and Google Docs through the correct extraction branch. 🔀\n- Extracts image text with meta/llama-3.2-11b-vision-instruct  🖼️\n- Structures extracted content into JSON fields with nvidia/llama-3.3-nemotron-super-49b-v1.5 through NVIDIA NIM. 🤖\n- Appends the final result to Google Sheets in Extract_Log. 📊\n- Sends a Telegram notification when processing is complete. 📬\n\n## Key Benefits\n- Turns a Drive folder into a reusable intake point for mixed file types. ⏱️\n- Creates a searchable audit trail in Google Sheets for every processed file. 📚\n- Sends a lightweight Telegram notification without requiring Telegram as the input channel. ✅\n- Keeps the extraction and structuring logic reusable for internal ops or client delivery workflows. 🔁\n- Makes it easier to test multimodal document processing with free-tier NVIDIA NIM models. 💡\n\n## Features\n- Google Drive Trigger configured for new files in a specific folder. 📥\n- Google Drive download step for binary file access before extraction. ⚙️\n- File-type routing with Switch and normalization with Code nodes. 🧠\n- Native n8n Extract from File nodes for PDF, TXT, and CSV parsing. 📄\n- NVIDIA NIM HTTP Request nodes for image OCR and structured JSON generation. 🤖\n- Google Sheets append logging with a fixed `Extract_Log` tab schema. 📈\n- Plain-text Telegram completion notifications with a fixed destination chat ID. 📨\n\n## Requirements\n- n8n instance with access to Google Drive Trigger, Google Drive, Google Docs, Google Sheets, HTTP Request, Telegram, and Extract from File nodes. 🧰\n- Google Drive OAuth2 credential with access to the watched folder. 🔐\n- Google Docs OAuth2 credential with access to any Google Docs files you want to process. 📘\n- Google Sheets OAuth2 credential and a sheet with an `Extract_Log` tab. 📊\n- Telegram bot credential plus a valid destination chat ID for notifications. 🤝\n- NVIDIA NIM API key stored as an HTTP Header Auth credential. 🔑\n- A folder ID and Google Sheet ID added to the provided placeholders before activation. 🛠️\n\n## Target Audience\n- Operations teams monitoring a shared Drive folder for inbound files. 🗂️\n- Founders and solo operators who want document extraction. 👤\n- Agencies building reusable back-office workflows for receipts, notes, and uploaded files. 🏢\n- Analysts who want structured text output logged into Google Sheets automatically. 📋\n- Automation builders testing file-driven multimodal extraction with Drive as the source. 🧪\n\n## Step-by-Step Setup Instructions\n1. Import the workflow and read every sticky note on the canvas before editing any nodes. 📝\n2. Connect your Google Drive, Google Docs, Google Sheets, Telegram, and NVIDIA NIM credentials. 🔐\n3. Replace `REPLACE_WITH_GOOGLE_DRIVE_FOLDER_ID`, `REPLACE_WITH_GOOGLE_SHEET_ID`, and `REPLACE_WITH_TELEGRAM_CHAT_ID` in the marked nodes. 📌\n4. Create the `Extract_Log` tab with the required headers shown in the sticky notes. 📑\n5. Test one file at a time in this order: PDF, TXT, CSV, image, then Google Docs file. 🧪\n6. Confirm that each test adds one clean row to Google Sheets and sends one Telegram notification. ✅\n7. Activate the workflow only after every supported path works end to end. 🚀\n\n**Built by Cordexa Technologies** \n\nhttps://cordexa.tech | cordexatech@gmail.com\n","workflow":{"meta":{"instanceId":"5e489146c7e8b4ae9bfa8950a967f30435a799ec3b2c3f5de2bb68451fd4006f"},"nodes":[{"id":"2a534e69-eb9d-4573-a57b-7e9222984945","name":"Overview","type":"n8n-nodes-base.stickyNote","position":[-400,-144],"parameters":{"color":"#133FA4","width":420,"height":732,"content":"# Extract Text From Google Drive Files\n\n**Who it's for:** Teams and individuals who need to automatically capture, structure, and log content from files dropped into a shared Google Drive folder.\n\n**What it does:** Monitors a Drive folder for new files, extracts text by file type, structures the result with NVIDIA NIM, logs it to Google Sheets, and sends a Telegram notification.\n\n**How it works:**\n1. Google Drive Trigger detects a new file\n2. File type is identified and routed (PDF, image, Google Docs, TXT, CSV)\n3. Text is extracted via the appropriate method for each type\n4. NVIDIA NIM structures the extracted text into a consistent schema\n5. Result is appended to a Google Sheets log\n6. Telegram notification confirms completion\n\n**Required setup:**\n- Google Drive OAuth2 credential\n- NVIDIA NIM API key (HTTP Header Auth)\n- Telegram bot credential\n- Google Sheets OAuth2 credential\n\nBuilt by Cordexa Technologies\nhttps://cordexa.tech\ncordexatech@gmail.com"},"typeVersion":1},{"id":"3bea1e63-9a5d-46b7-a64c-871ccfcbe7b0","name":"Section - Trigger and Input","type":"n8n-nodes-base.stickyNote","position":[64,-144],"parameters":{"color":7,"width":606,"height":740,"content":"## Step 1 — Config\n\nThis workflow watches a specific Google Drive folder every minute, normalizes file metadata, and routes each file by MIME type.\n\nBefore testing:\n- Replace `REPLACE_WITH_GOOGLE_DRIVE_FOLDER_ID` in `Google Drive Trigger` with your Drive folder ID.\n- Replace `REPLACE_WITH_TELEGRAM_CHAT_ID` in `Normalize Input` with your destination Telegram chat ID.\n\nSupported routes:\n- PDF\n- image\n- Google Doc\n- text file\n- CSV\n- unsupported fallback"},"typeVersion":1},{"id":"cf8e5a70-a356-4928-a439-a07218e2fd80","name":"Section - File Fetching","type":"n8n-nodes-base.stickyNote","position":[704,80],"parameters":{"color":7,"width":540,"height":514,"content":"## File Fetching\nDownloads the file binary from Drive for local extraction (PDF, image, TXT, CSV) or fetches Google Doc content directly via the Docs API."},"typeVersion":1},{"id":"c30bf8b9-954b-40b3-9afb-b3b06da0ccf4","name":"Section - Extraction Branches","type":"n8n-nodes-base.stickyNote","position":[1280,-128],"parameters":{"color":7,"width":476,"height":1056,"content":"## Extraction Branches\nExtracts raw text from each supported file type.\n- **PDF** — native Extract from File node\n- **TXT** — native Extract from File node\n- **CSV** — parsed to JSON rows\n- **Image** — NVIDIA Llama 3.2 vision model via HTTP\n- **Google Doc** — pre-fetched upstream, normalised here\n\nAll paths converge on a unified `content` field passed downstream."},"typeVersion":1},{"id":"b401ae90-c106-4686-8a3c-e069984cd9e2","name":"Section - Fallback Paths","type":"n8n-nodes-base.stickyNote","position":[704,640],"parameters":{"color":7,"width":536,"height":628,"content":"## Fallback Paths\nRaw text inputs bypass extraction entirely.\n\nUnsupported MIME types send a Telegram notification and stop — no Sheets row is written."},"typeVersion":1},{"id":"9f515b82-5e33-4b1e-aade-e15632f5ac62","name":"Section - AI Structuring","type":"n8n-nodes-base.stickyNote","position":[1792,80],"parameters":{"color":7,"width":884,"height":558,"content":"## AI Structuring with NVIDIA NIM\nSends extracted text to `nvidia/llama-3.3-nemotron-super-49b-v1.5` with a guided JSON schema. Returns: title, summary, category, language, key points, and confidence notes. Falls back gracefully if the model call fails (`continueOnFail: true`).\n\n\n**Setup:** Add your NVIDIA NIM API key as an HTTP Header Auth credential (`Authorization: Bearer YOUR_KEY`). Apply it to both NVIDIA HTTP Request nodes."},"typeVersion":1},{"id":"06c5660f-6546-4c81-9b74-424248fc3a62","name":"Section - Log and Notify","type":"n8n-nodes-base.stickyNote","position":[2720,16],"parameters":{"color":7,"width":510,"height":736,"content":"## Step 3 — Delivery\n\nThis workflow delivers output in two places:\n\n- `Append Row in Sheet` writes a structured row to the `Extract_Log` tab\n- `Send Reply` sends a short Telegram confirmation message\n\nBefore going live:\n- Replace `REPLACE_WITH_GOOGLE_SHEET_ID` in `Append Row in Sheet`\n- Confirm the target sheet contains an `Extract_Log` tab\n- Confirm the sheet headers match the mapped fields in the node\n- Confirm Telegram replies go to the configured chat ID"},"typeVersion":1},{"id":"f001b69a-0fee-413d-930a-b558021c9d02","name":"Google Drive Trigger","type":"n8n-nodes-base.googleDriveTrigger","position":[144,304],"parameters":{"event":"fileCreated","options":{"fileType":"all"},"pollTimes":{"item":[{"mode":"everyMinute"}]},"triggerOn":"specificFolder","folderToWatch":{"__rl":true,"mode":"id","value":"REPLACE_WITH_GOOGLE_DRIVE_FOLDER_ID"}},"credentials":{"googleDriveOAuth2Api":{"id":"AR6qOfpY1wBvGWac","name":"Google Drive account"}},"typeVersion":1},{"id":"ce0aacba-4dcf-4a66-a5f6-8b2a719dadd1","name":"Normalize Input","type":"n8n-nodes-base.code","position":[336,304],"parameters":{"jsCode":"const fileId = $json.id || $json.fileId || '';\nconst rawMimeType = ($json.mimeType || '').toString();\nconst fileName = ($json.name || $json.fileName || 'drive-file').toString();\nconst mimeType = rawMimeType;\nconst googleDocId = mimeType === 'application/vnd.google-apps.document' ? fileId : '';\nconst googleDocUrl = googleDocId ? `https://docs.google.com/document/d/${googleDocId}` : '';\n\nlet route = 'unsupported';\nif (mimeType === 'application/pdf') {\n  route = 'pdf';\n} else if (mimeType.startsWith('image/')) {\n  route = 'image';\n} else if (mimeType === 'application/vnd.google-apps.document') {\n  route = 'google_doc';\n} else if (mimeType === 'text/csv' || fileName.toLowerCase().endsWith('.csv')) {\n  route = 'csv';\n} else if (mimeType.startsWith('text/')) {\n  route = 'text_file';\n}\n\nreturn [{\n  json: {\n    route,\n    fileId,\n    rawText: '',\n    chatId: 'REPLACE_WITH_TELEGRAM_CHAT_ID',\n    messageId: '',\n    mimeType,\n    fileName,\n    binaryKey: '',\n    googleDocUrl,\n    googleDocId,\n    sourceType: 'google_drive_file',\n    runId: $execution.id\n  }\n}];"},"typeVersion":2},{"id":"9d174ac1-d0d4-4abf-9922-d3646a5107a4","name":"Route Input","type":"n8n-nodes-base.switch","position":[576,304],"parameters":{"rules":{"rules":[{"value2":"pdf","outputKey":"pdf"},{"value2":"image","outputKey":"image"},{"value2":"google_doc","outputKey":"google_doc"},{"value2":"text_file","outputKey":"text_file"},{"value2":"csv","outputKey":"csv"},{"value2":"raw_text","outputKey":"raw_text"}]},"value1":"={{ $json.route }}","dataType":"string"},"typeVersion":2},{"id":"c6e2b331-1781-4f5f-9750-f3c3eba0fbfc","name":"Download Drive File","type":"n8n-nodes-base.googleDrive","position":[832,240],"parameters":{"fileId":{"__rl":true,"mode":"id","value":"={{ $json.fileId }}"},"options":{"fileName":"={{ $json.fileName }}"},"operation":"download"},"credentials":{"googleDriveOAuth2Api":{"id":"AR6qOfpY1wBvGWac","name":"Google Drive account"}},"typeVersion":3},{"id":"abddb5e5-6994-47f6-b766-65e388014cdf","name":"Route Downloaded File","type":"n8n-nodes-base.switch","position":[1072,208],"parameters":{"rules":{"rules":[{"value2":"pdf","outputKey":"pdf"},{"value2":"image","outputKey":"image"},{"value2":"text_file","outputKey":"text_file"},{"value2":"csv","outputKey":"csv"}]},"value1":"={{ $('Normalize Input').item.json.route }}","dataType":"string"},"typeVersion":2},{"id":"9f0b9eaf-2ae4-4666-a35f-2f89b585a5cf","name":"Get Google Doc","type":"n8n-nodes-base.googleDocs","position":[832,432],"parameters":{"operation":"get","documentURL":"={{ $('Normalize Input').first().json.googleDocId }}"},"typeVersion":2},{"id":"96709023-7020-49c3-a2ce-ae6280e3b11b","name":"Normalize Google Doc","type":"n8n-nodes-base.code","position":[1072,432],"parameters":{"jsCode":"function pickLongestString(value) {\n  let best = '';\n  const visit = (v) => {\n    if (typeof v === 'string') {\n      if (v.length > best.length) best = v;\n      return;\n    }\n    if (Array.isArray(v)) {\n      for (const item of v) visit(item);\n      return;\n    }\n    if (v && typeof v === 'object') {\n      for (const key of Object.keys(v)) visit(v[key]);\n    }\n  };\n  visit(value);\n  return best;\n}const content = pickLongestString($input.first().json) || JSON.stringify($input.first().json);\nreturn [{\n  json: {\n    content,\n    fileType: 'google_doc',\n    fileName: $('Normalize Input').first().json.fileName || 'Google Doc',\n    chatId: $('Normalize Input').first().json.chatId,\n    messageId: $('Normalize Input').first().json.messageId,\n    sourceType: 'google_drive_google_doc',\n    runId: $('Normalize Input').first().json.runId\n  }\n}];"},"typeVersion":2},{"id":"db8828df-f8f1-4a92-977d-b2d0fa960f45","name":"Extract from PDF","type":"n8n-nodes-base.extractFromFile","position":[1328,112],"parameters":{"options":{},"operation":"pdf"},"typeVersion":1},{"id":"6753414a-fa67-4168-9bff-9b6379ecdd9e","name":"Normalize PDF","type":"n8n-nodes-base.code","position":[1568,112],"parameters":{"jsCode":"function pickLongestString(value) {\n  let best = '';\n  const visit = (v) => {\n    if (typeof v === 'string') {\n      if (v.length > best.length) best = v;\n      return;\n    }\n    if (Array.isArray(v)) {\n      for (const item of v) visit(item);\n      return;\n    }\n    if (v && typeof v === 'object') {\n      for (const key of Object.keys(v)) visit(v[key]);\n    }\n  };\n  visit(value);\n  return best;\n}const content = pickLongestString($input.first().json) || JSON.stringify($input.first().json);\nreturn [{\n  json: {\n    content,\n    fileType: 'pdf',\n    fileName: $('Normalize Input').first().json.fileName,\n    chatId: $('Normalize Input').first().json.chatId,\n    messageId: $('Normalize Input').first().json.messageId,\n    sourceType: 'google_drive_pdf',\n    runId: $('Normalize Input').first().json.runId\n  }\n}];"},"typeVersion":2},{"id":"53b6ef38-ad3c-4b50-ac40-e04e5503479a","name":"Prepare Image Data URL","type":"n8n-nodes-base.code","position":[1328,272],"parameters":{"jsCode":"const item = $input.first();\nconst binaryKey = $('Normalize Input').first().json.binaryKey || Object.keys(item.binary || {})[0] || 'data';\n\nif (!binaryKey || !item.binary || !item.binary[binaryKey]) {\n  throw new Error('No binary image found on the input item.');\n}\n\nconst bin = item.binary[binaryKey];\nconst mimeType = (bin.mimeType || 'image/jpeg').toLowerCase();\n\nconst buffer = await this.helpers.getBinaryDataBuffer(0, binaryKey);\nconst base64 = Buffer.from(buffer).toString('base64');\n\nif (!base64) {\n  throw new Error('Could not convert input image to base64.');\n}\n\nconst dataUrl = `data:${mimeType};base64,${base64}`;\n\nreturn [{\n  json: {\n    imageDataUrl: dataUrl,\n    fileType: 'image',\n    fileName: $('Normalize Input').first().json.fileName,\n    chatId: $('Normalize Input').first().json.chatId,\n    messageId: $('Normalize Input').first().json.messageId,\n    sourceType: 'google_drive_image',\n    runId: $('Normalize Input').first().json.runId\n  }\n}];"},"typeVersion":2},{"id":"79133794-159c-4987-87bb-80c0821922a5","name":"Build Image Payload","type":"n8n-nodes-base.code","position":[1568,272],"parameters":{"jsCode":"const payload = {\n  model: 'meta/llama-3.2-11b-vision-instruct',\n  messages: [\n    {\n      role: 'system',\n      content: 'You are an OCR extraction assistant. Extract all readable text from the image exactly as written. Return plain text only. No markdown, no bullets, no commentary, no labels, no JSON.'\n    },\n    {\n      role: 'user',\n      content: [\n        {\n          type: 'text',\n          text: 'Extract all readable text from this image exactly as written. Preserve line breaks when possible. If no readable text is visible, return exactly: NO_TEXT_EXTRACTED'\n        },\n        {\n          type: 'image_url',\n          image_url: {\n            url: $json.imageDataUrl\n          }\n        }\n      ]\n    }\n  ],\n  temperature: 0,\n  top_p: 1,\n  max_tokens: 1800,\n  stream: false\n};\n\nreturn [{\n  json: {\n    nimPayload: JSON.stringify(payload),\n    fileType: $json.fileType,\n    fileName: $json.fileName,\n    chatId: $json.chatId,\n    messageId: $json.messageId,\n    sourceType: $json.sourceType,\n    runId: $json.runId\n  }\n}];"},"typeVersion":2},{"id":"d5e49e77-6f5a-4421-875d-0e249be73d27","name":"Analyze Image with NVIDIA","type":"n8n-nodes-base.httpRequest","position":[1824,272],"parameters":{"url":"https://integrate.api.nvidia.com/v1/chat/completions","body":"={{ $json.nimPayload }}","method":"POST","options":{},"sendBody":true,"contentType":"raw","sendHeaders":true,"authentication":"genericCredentialType","rawContentType":"application/json","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"zTXjSj3yvDcbHHfG","name":"Header Auth account"}},"typeVersion":4.2},{"id":"5516a7f4-c51c-462d-9a4d-f51bf226e06e","name":"Normalize Image","type":"n8n-nodes-base.code","position":[2096,272],"parameters":{"jsCode":"const rawContent = $json.choices?.[0]?.message?.content;\n\nlet text = '';\n\nif (typeof rawContent === 'string') {\n  text = rawContent;\n} else if (Array.isArray(rawContent)) {\n  text = rawContent\n    .map(part => {\n      if (typeof part === 'string') return part;\n      if (part?.type === 'text' && typeof part.text === 'string') return part.text;\n      return '';\n    })\n    .filter(Boolean)\n    .join('\\n');\n}\n\ntext = (text || '')\n  .replace(/```[\\s\\S]*?```/g, '')\n  .trim();\n\nif (!text || text === 'NO_TEXT_EXTRACTED') {\n  text = 'No text extracted';\n}\n\nreturn [{\n  json: {\n    content: text,\n    fileType: $('Build Image Payload').first().json.fileType,\n    fileName: $('Build Image Payload').first().json.fileName,\n    chatId: $('Build Image Payload').first().json.chatId,\n    messageId: $('Build Image Payload').first().json.messageId,\n    sourceType: $('Build Image Payload').first().json.sourceType,\n    runId: $('Build Image Payload').first().json.runId\n  }\n}];"},"typeVersion":2},{"id":"75db9680-186f-4594-bda3-a5928b19101b","name":"Extract from Text File","type":"n8n-nodes-base.extractFromFile","position":[1328,592],"parameters":{"options":{},"operation":"text"},"typeVersion":1},{"id":"42b50c4a-2811-4722-a166-d3d9d807e1c6","name":"Normalize Text File","type":"n8n-nodes-base.code","position":[1568,592],"parameters":{"jsCode":"function pickLongestString(value) {\n  let best = '';\n  const visit = (v) => {\n    if (typeof v === 'string') {\n      if (v.length > best.length) best = v;\n      return;\n    }\n    if (Array.isArray(v)) {\n      for (const item of v) visit(item);\n      return;\n    }\n    if (v && typeof v === 'object') {\n      for (const key of Object.keys(v)) visit(v[key]);\n    }\n  };\n  visit(value);\n  return best;\n}const content = pickLongestString($input.first().json) || JSON.stringify($input.first().json);\nreturn [{\n  json: {\n    content,\n    fileType: 'text_file',\n    fileName: $('Normalize Input').first().json.fileName,\n    chatId: $('Normalize Input').first().json.chatId,\n    messageId: $('Normalize Input').first().json.messageId,\n    sourceType: 'google_drive_text_file',\n    runId: $('Normalize Input').first().json.runId\n  }\n}];"},"typeVersion":2},{"id":"ca006ec2-196b-4611-811c-7c6389526cab","name":"Extract from CSV","type":"n8n-nodes-base.extractFromFile","position":[1328,752],"parameters":{"options":{}},"typeVersion":1},{"id":"ad4d4750-c19a-40ab-92d9-c68b48a6d60b","name":"Normalize CSV","type":"n8n-nodes-base.code","position":[1568,752],"parameters":{"jsCode":"const rows = $input.all().map(item => item.json);\nconst content = JSON.stringify(rows, null, 2);\nreturn [{\n  json: {\n    content,\n    fileType: 'csv',\n    fileName: $('Normalize Input').first().json.fileName,\n    chatId: $('Normalize Input').first().json.chatId,\n    messageId: $('Normalize Input').first().json.messageId,\n    sourceType: 'google_drive_csv',\n    runId: $('Normalize Input').first().json.runId\n  }\n}];"},"typeVersion":2},{"id":"f54a8128-9e91-4d2d-b4bf-aed3f7ed5613","name":"Normalize Raw Text","type":"n8n-nodes-base.code","position":[832,912],"parameters":{"jsCode":"return [{\n  json: {\n    content: $('Normalize Input').first().json.rawText,\n    fileType: 'raw_text',\n    fileName: 'telegram-message',\n    chatId: $('Normalize Input').first().json.chatId,\n    messageId: $('Normalize Input').first().json.messageId,\n    sourceType: 'google_drive_text',\n    runId: $('Normalize Input').first().json.runId\n  }\n}];"},"typeVersion":2},{"id":"105c960a-a06c-43bb-bb85-3944fac89225","name":"Send Unsupported Message","type":"n8n-nodes-base.telegram","position":[832,1088],"webhookId":"765654a4-9569-4e4c-bff3-2082d2c2e761","parameters":{"text":"=Unsupported Google Drive file.\n\nSupported types: PDF, image, Google Docs, text file, and CSV.","chatId":"={{ $('Normalize Input').first().json.chatId }}","additionalFields":{"appendAttribution":false}},"typeVersion":1.2},{"id":"c727e5de-c8ba-4d1c-9ee8-1be0794719ae","name":"Build Structuring Payload","type":"n8n-nodes-base.code","position":[1904,432],"parameters":{"jsCode":"const input = $input.first().json;\nconst rawContent = (input.content || '').toString().trim();\nconst trimmedContent = rawContent.slice(0, 12000);\n\nconst schema = {\n  type: \"object\",\n  properties: {\n    title: { type: \"string\" },\n    summary: { type: \"string\" },\n    category: { type: \"string\" },\n    language: { type: \"string\" },\n    key_points: {\n      type: \"array\",\n      items: { type: \"string\" }\n    },\n    confidence_notes: { type: \"string\" }\n  },\n  required: [\"title\", \"summary\", \"category\", \"language\", \"key_points\", \"confidence_notes\"]\n};\n\nconst system = [\n  'You are a document extraction and structuring assistant.',\n  'Structure the already extracted text.',\n  'Return only the schema fields.',\n  'No reasoning.',\n  'No commentary.',\n  'No <think> tags.',\n  'No markdown fences.',\n  'Do not hallucinate missing facts.',\n  'If unknown, use empty string or empty array.'\n].join('\\n');\n\nconst user = [\n  `Source type: ${input.fileType}`,\n  `File name: ${input.fileName}`,\n  '',\n  'Text to structure:',\n  trimmedContent\n].join('\\n');\n\nconst payload = {\n  model: 'nvidia/llama-3.3-nemotron-super-49b-v1.5',\n  messages: [\n    { role: 'system', content: system },\n    { role: 'user', content: user }\n  ],\n  temperature: 0,\n  top_p: 1,\n  max_tokens: 600,\n  stream: false,\n  guided_json: schema\n};\n\nreturn [{\n  json: {\n    nimPayload: JSON.stringify(payload),\n    originalContent: rawContent,\n    fileType: input.fileType,\n    fileName: input.fileName,\n    chatId: input.chatId,\n    messageId: input.messageId,\n    sourceType: input.sourceType,\n    runId: input.runId\n  }\n}];"},"typeVersion":2},{"id":"9aa50389-31c1-467a-b494-9739001b3b12","name":"Structure Output with NVIDIA","type":"n8n-nodes-base.httpRequest","position":[2208,432],"parameters":{"url":"https://integrate.api.nvidia.com/v1/chat/completions","body":"={{ $json.nimPayload }}","method":"POST","options":{},"sendBody":true,"contentType":"raw","sendHeaders":true,"authentication":"genericCredentialType","rawContentType":"application/json","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"zTXjSj3yvDcbHHfG","name":"Header Auth account"}},"typeVersion":4.2,"continueOnFail":true},{"id":"9ae98693-24ea-4bee-8cfc-7f47a174f299","name":"Parse Structured Output","type":"n8n-nodes-base.code","position":[2464,432],"parameters":{"jsCode":"function safeParse(text) {\n  if (!text) return null;\n  try {\n    return JSON.parse(text);\n  } catch (e) {}\n  const match = text.match(/\\{[\\s\\S]*\\}/);\n  if (match) {\n    try {\n      return JSON.parse(match[0]);\n    } catch (e) {}\n  }\n  return null;\n}\n\nconst raw = $json.choices?.[0]?.message?.content?.trim() || '';\nconst cleanedRaw = raw.replace(/<think>[\\s\\S]*?<\\/think>/g, '').trim();\nconst parsed = safeParse(cleanedRaw) || {};\nconst original = $('Build Structuring Payload').first().json.originalContent || '';\n\nreturn [{\n  json: {\n    title: parsed.title || $('Build Structuring Payload').first().json.fileName || 'Untitled',\n    summary: parsed.summary || original.slice(0, 300),\n    category: parsed.category || '',\n    language: parsed.language || '',\n    key_points: Array.isArray(parsed.key_points) ? parsed.key_points : [],\n    confidence_notes: parsed.confidence_notes || '',\n    extracted_text: original,\n    sourceType: $('Build Structuring Payload').first().json.sourceType,\n    fileType: $('Build Structuring Payload').first().json.fileType,\n    fileName: $('Build Structuring Payload').first().json.fileName,\n    chatId: $('Build Structuring Payload').first().json.chatId,\n    messageId: $('Build Structuring Payload').first().json.messageId,\n    runId: $('Build Structuring Payload').first().json.runId\n  }\n}];"},"typeVersion":2},{"id":"c9c31b49-b926-46a8-a258-513b99098928","name":"Append Row in Sheet","type":"n8n-nodes-base.googleSheets","position":[2768,336],"parameters":{"columns":{"value":{"Title":"={{ $json.title }}","Run ID":"={{ $json.runId }}","Summary":"={{ $json.summary }}","Category":"={{ $json.category }}","Language":"={{ $json.language }}","File Name":"={{ $json.fileName }}","File Type":"={{ $json.fileType }}","Timestamp":"={{ new Date().toISOString() }}","Key Points":"={{ ($json.key_points || []).join(' | ') }}","Source Type":"={{ $json.sourceType }}","Extracted Text":"={{ $json.extracted_text }}","Confidence Notes":"={{ $json.confidence_notes }}"},"schema":[{"id":"Timestamp","type":"string","display":true,"required":false,"displayName":"Timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Source Type","type":"string","display":true,"required":false,"displayName":"Source Type","defaultMatch":false,"canBeUsedToMatch":true},{"id":"File Type","type":"string","display":true,"required":false,"displayName":"File Type","defaultMatch":false,"canBeUsedToMatch":true},{"id":"File Name","type":"string","display":true,"required":false,"displayName":"File Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Title","type":"string","display":true,"required":false,"displayName":"Title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Category","type":"string","display":true,"required":false,"displayName":"Category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Language","type":"string","display":true,"required":false,"displayName":"Language","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Key Points","type":"string","display":true,"required":false,"displayName":"Key Points","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Confidence Notes","type":"string","display":true,"required":false,"displayName":"Confidence Notes","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Extracted Text","type":"string","display":true,"required":false,"displayName":"Extracted Text","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Run ID","type":"string","display":true,"required":false,"displayName":"Run ID","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Extract_Log"},"documentId":{"__rl":true,"mode":"id","value":"REPLACE_WITH_GOOGLE_SHEET_ID"}},"credentials":{"googleSheetsOAuth2Api":{"id":"5wSSJPXqx8bpRfJW","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"20cbfebd-8602-40f4-8b79-307a7f9d9dbd","name":"Build Telegram Reply","type":"n8n-nodes-base.code","position":[2768,528],"parameters":{"jsCode":"let text = [\n  'FILE PROCESSED',\n  '',\n  `Name: ${$json.fileName || ''}`,\n  `Type: ${$json.fileType || ''}`,\n  `Title: ${$json.title || ''}`,\n  `Category: ${$json.category || ''}`,\n  '',\n  'Status: Extracted and logged to Google Sheets.'\n].filter(Boolean).join('\\n');\n\nif (text.length > 3500) {\n  text = text.slice(0, 3490) + '\\n…';\n}\n\nreturn [{\n  json: {\n    replyText: text,\n    chatId: $json.chatId,\n    messageId: ''\n  }\n}];"},"typeVersion":2},{"id":"e447d8ab-4e99-4e47-8add-5a6ae9003a55","name":"Send Reply","type":"n8n-nodes-base.telegram","position":[2992,528],"webhookId":"faeb1684-95ae-492f-a296-5aeb2130a4f7","parameters":{"text":"={{ $json.replyText }}","chatId":"={{ $json.chatId }}","additionalFields":{"appendAttribution":false}},"credentials":{"telegramApi":{"id":"Wy9S6YX86ycdzOuK","name":"Telegram account"}},"typeVersion":1.2},{"id":"a714101a-c2c2-4ab8-a231-f7d7231217c5","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[64,640],"parameters":{"color":7,"width":608,"height":336,"content":"## Step 2 — Credentials\n\nCreate and connect these credentials before testing:\n\n- Google Drive OAuth2 account — used by `Google Drive Trigger` and `Download Drive File`\n- Google Docs OAuth2 account — used by `Get Google Doc`\n- Google Sheets OAuth2 account — used by `Append Row in Sheet`\n- Telegram credential — used by `Send Reply` and `Send Unsupported Message`\n- HTTP Header Auth credential for NVIDIA NIM — set `Authorization: Bearer YOUR_API_KEY` and apply it to both NVIDIA HTTP Request nodes\n\nAfter connecting credentials, re-open each node once and confirm the correct account is selected."},"typeVersion":1},{"id":"44bc95df-dcdc-404a-8ac6-08172e47e46e","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[2720,800],"parameters":{"color":7,"width":512,"height":448,"content":"## Step 4 — Activate\n\nBefore activating the workflow, test one file at a time in this order:\n\n- PDF\n- text file\n- CSV\n- image\n- Google Doc\n\nFor each test, confirm:\n- the correct branch ran\n- extracted text was produced\n- structured output was returned\n- a row was appended to `Extract_Log`\n- the Telegram reply was sent successfully\n\nActivate the workflow only after all supported file paths pass at least one full end-to-end test."},"typeVersion":1}],"pinData":{},"connections":{"Route Input":{"main":[[{"node":"Download Drive File","type":"main","index":0}],[{"node":"Download Drive File","type":"main","index":0}],[{"node":"Get Google Doc","type":"main","index":0}],[{"node":"Download Drive File","type":"main","index":0}],[{"node":"Download Drive File","type":"main","index":0}],[{"node":"Send Unsupported Message","type":"main","index":0}]]},"Normalize CSV":{"main":[[{"node":"Build Structuring Payload","type":"main","index":0}]]},"Normalize PDF":{"main":[[{"node":"Build Structuring Payload","type":"main","index":0}]]},"Get Google Doc":{"main":[[{"node":"Normalize Google Doc","type":"main","index":0}]]},"Normalize Image":{"main":[[{"node":"Build Structuring Payload","type":"main","index":0}]]},"Normalize Input":{"main":[[{"node":"Route Input","type":"main","index":0}]]},"Extract from CSV":{"main":[[{"node":"Normalize CSV","type":"main","index":0}]]},"Extract from PDF":{"main":[[{"node":"Normalize PDF","type":"main","index":0}]]},"Normalize Raw Text":{"main":[[{"node":"Build Structuring Payload","type":"main","index":0}]]},"Build Image Payload":{"main":[[{"node":"Analyze Image with NVIDIA","type":"main","index":0}]]},"Download Drive File":{"main":[[{"node":"Route Downloaded File","type":"main","index":0}]]},"Normalize Text File":{"main":[[{"node":"Build Structuring Payload","type":"main","index":0}]]},"Build Telegram Reply":{"main":[[{"node":"Send Reply","type":"main","index":0}]]},"Google Drive Trigger":{"main":[[{"node":"Normalize Input","type":"main","index":0}]]},"Normalize Google Doc":{"main":[[{"node":"Build Structuring Payload","type":"main","index":0}]]},"Route Downloaded File":{"main":[[{"node":"Extract from PDF","type":"main","index":0}],[{"node":"Prepare Image Data URL","type":"main","index":0}],[{"node":"Extract from Text File","type":"main","index":0}],[{"node":"Extract from CSV","type":"main","index":0}]]},"Extract from Text File":{"main":[[{"node":"Normalize Text File","type":"main","index":0}]]},"Prepare Image Data URL":{"main":[[{"node":"Build Image Payload","type":"main","index":0}]]},"Parse Structured Output":{"main":[[{"node":"Append Row in Sheet","type":"main","index":0},{"node":"Build Telegram Reply","type":"main","index":0}]]},"Analyze Image with NVIDIA":{"main":[[{"node":"Normalize Image","type":"main","index":0}]]},"Build Structuring Payload":{"main":[[{"node":"Structure Output with NVIDIA","type":"main","index":0}]]},"Structure Output with NVIDIA":{"main":[[{"node":"Parse Structured Output","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":34,"nodeTypes":{"n8n-nodes-base.code":{"count":12},"n8n-nodes-base.switch":{"count":2},"n8n-nodes-base.telegram":{"count":2},"n8n-nodes-base.googleDocs":{"count":1},"n8n-nodes-base.stickyNote":{"count":9},"n8n-nodes-base.googleDrive":{"count":1},"n8n-nodes-base.httpRequest":{"count":2},"n8n-nodes-base.googleSheets":{"count":1},"n8n-nodes-base.extractFromFile":{"count":3},"n8n-nodes-base.googleDriveTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Cordexa Technologies ","username":"cordexa","bio":"We build smarter systems for small businesses. We help local businesses and growing teams, run on systems that actually work. We do business process automation, done-for-you consulting, and SaaS development, just what gets the job done. The workflows we publish are the same ones we build for clients.","verified":false,"links":["https://www.cordexa.tech/"],"avatar":"https://gravatar.com/avatar/fad43dfd269df2832803af8b62f13bfa84fa336f3e288b29799ec859fc297f8c?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"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-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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"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/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"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/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"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-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/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"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":49,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegram","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"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/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/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"},{"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/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"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/app-nodes/n8n-nodes-base.telegram/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Telegram"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":58,"icon":"file:googleDrive.svg","name":"n8n-nodes-base.googleDrive","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"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/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Drive"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Drive","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"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/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/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"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":495,"icon":"file:googleDocs.svg","name":"n8n-nodes-base.googleDocs","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledocs/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Miscellaneous"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Docs"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSItMTggMCA5MCA4MCI+PHVzZSB4bGluazpocmVmPSIjYSIgeD0iLjUiIHk9Ii41Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzU0OGRmNiIgZD0ibTM2IDAgMjIgMjJ2NTNhNC45OSA0Ljk5IDAgMCAxLTUgNUg1YTQuOTkgNC45OSAwIDAgMS01LTVWNWE0Ljk5IDQuOTkgMCAwIDEgNS01eiIvPjxwYXRoIGQ9Ik0xNCA0MGgzMHYzSDE0em0wIDdoMzB2M0gxNHptMCA4aDMwdjNIMTR6bTAgN2gyMXYzSDE0eiIvPjxwYXRoIGZpbGw9IiNhYmQwZmIiIGQ9Im0zNiAwIDIyIDIySDQxYy0yLjc3IDAtNS0yLjQ4LTUtNS4yNXoiLz48cGF0aCBmaWxsPSIjM2U1YmI5IiBkPSJNNDAuNzUgMjIgNTggMjkuMTI1VjIyeiIvPjwvZz48L3N5bWJvbD48L3N2Zz4="},"displayName":"Google Docs","typeVersion":2,"nodeCategories":[{"id":11,"name":"Miscellaneous"}]},{"id":531,"icon":"file:googleDrive.svg","name":"n8n-nodes-base.googleDriveTrigger","codex":{"data":{"resources":{"generic":[{"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/trigger-nodes/n8n-nodes-base.googledrivetrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Google Drive Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Drive Trigger","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"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":1235,"icon":"file:extractFromFile.svg","name":"n8n-nodes-base.extractFromFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","decode","decoding","Move Binary Data","Binary","File","PDF","JSON","HTML","ICS","iCal","txt","Text","RTF","XML","64","Base64","Convert"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Extract from File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuOTM3NSAyQzAuNDE5NzMzIDIgMCAyLjQxOTczIDAgMi45Mzc1VjM3LjMyMjFDMCAzNy44Mzk5IDAuNDE5NzMzIDM4LjI1OTYgMC45Mzc1IDM4LjI1OTZIMjYuMjE1NEMyNi43MzMyIDM4LjI1OTYgMjcuMTUyOSAzNy44Mzk5IDI3LjE1MjkgMzcuMzIyMUwyNy4xNTI5IDMwLjY3MTlMMTYuNzk2OSAzMC42NzE5QzE0Ljg5ODQgMzAuNjcxOSAxMy4zNTk0IDI5LjEzMjkgMTMuMzU5NCAyNy4yMzQ0VjI1LjM1OTRDMTMuMzU5NCAyMy40NjA5IDE0Ljg5ODQgMjEuOTIxOSAxNi43OTY5IDIxLjkyMTlIMjcuMTUyOUwyNy4xNTI5IDE1Ljc4MjFIMTQuMzA4M0MxMy43OTA2IDE1Ljc4MjEgMTMuMzcwOCAxNS4zNjI0IDEzLjM3MDggMTQuODQ0NlYySDAuOTM3NVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTE2LjAyNzEgMkMxNS45NDA4IDIgMTUuODcwOCAyLjA2OTk2IDE1Ljg3MDggMi4xNTYyNVYxMi44MTM0QzE1Ljg3MDggMTMuMDcyMyAxNi4wODA3IDEzLjI4MjEgMTYuMzM5NiAxMy4yODIxSDI2Ljk5NjdDMjcuMDgzIDEzLjI4MjEgMjcuMTUyOSAxMy4yMTIyIDI3LjE1MjkgMTMuMTI1OUwyNy4xNTI5IDEyLjYxNzFDMjcuMTUyOSAxMi4zNjg4IDI3LjA1NDUgMTIuMTMwNyAyNi44NzkxIDExLjk1NUwxNy4yMjI1IDIuMjc1MzhDMTcuMDQ2NiAyLjA5OTA4IDE2LjgwNzkgMiAxNi41NTg4IDJIMTYuMDI3MVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTI5Ljc2NDIgMzQuNjUwM0MyOS4wMzQgMzMuOTE2IDI5LjAzNzQgMzIuNzI4OCAyOS43NzE2IDMxLjk5ODZMMzMuNjE5NyAyOC4xNzE5TDE2Ljc5NjkgMjguMTcxOUMxNi4yNzkxIDI4LjE3MTkgMTUuODU5NCAyNy43NTIxIDE1Ljg1OTQgMjcuMjM0NFYyNS4zNTk0QzE1Ljg1OTQgMjQuODQxNiAxNi4yNzkxIDI0LjQyMTkgMTYuNzk2OSAyNC40MjE5TDMzLjU0MTIgMjQuNDIxOUwyOS43NzE2IDIwLjY3MzNDMjkuMDM3NCAxOS45NDMxIDI5LjAzNCAxOC43NTU5IDI5Ljc2NDIgMTguMDIxNkMzMC40OTQ0IDE3LjI4NzQgMzEuNjgxNiAxNy4yODQgMzIuNDE1OSAxOC4wMTQyTDM5LjQ0NzEgMjUuMDA2NEMzOS44MDEgMjUuMzU4MyA0MCAyNS44MzY4IDQwIDI2LjMzNTlDNDAgMjYuODM1IDM5LjgwMSAyNy4zMTM1IDM5LjQ0NzEgMjcuNjY1NUwzMi40MTU5IDM0LjY1NzZDMzEuNjgxNiAzNS4zODc4IDMwLjQ5NDQgMzUuMzg0NSAyOS43NjQyIDM0LjY1MDNaIiBmaWxsPSIjMzUzRjZFIi8+Cjwvc3ZnPgo="},"displayName":"Extract from File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":49,"name":"AI Summarization"}],"image":[]}}