{"workflow":{"id":13215,"name":"Extract, validate, and log email invoices from Gmail to Google Sheets with GPT-4","views":74,"recentViews":0,"totalViews":74,"createdAt":"2026-02-04T13:58:08.917Z","description":"Inbox2Ledger is an end-to-end **n8n template** that turns a noisy finance inbox into a clean, structured ledger. It fetches emails, uses AI guardrails to keep only finance-relevant messages, extracts invoice/receipt fields via an OCR-style agent, validates and auto-categorizes each expense, generates a unique case ID, and appends the result to a Google Sheet for accounting or downstream automations.\n\n---\n\n## Key Features\n\n- **Trigger**: Form submission or scheduled fetch (sample *On form submission* node included)\n- **AI Filter**: Guardrail node determines whether an email is finance-related (payments, invoices, receipts)\n- **Keyword Filter**: Filters common invoice/bill/payment subject keywords\n- **Extraction**: Language-model agent returns normalized JSON:\n  - `vendor_name`\n  - `invoice_date` (YYYY-MM-DD)\n  - `invoice_id`\n  - `total_amount`\n  - `tax_amount`\n  - `currency`\n  - `items_summary`\n  - `vendor_tax_id`\n- **Validation**: Code node checks required fields and amount formats; flags extraction errors\n- **Categorization**: Rule-based expense categorizer (software & hosting, subscriptions, travel, payroll, etc.) with MCC/vendor fallbacks\n- **Output**: Appends structured rows to a Google Sheet with mapped columns:\n  - `invoice_id`, `vendor_name`, `invoice_date`, `total_amount`, `currency`,\n    `tax_amount`, `gl_category`, `approval_status`, `timestamp`, `case_id`,\n    `items_summary`, `vendor_tax_id`, `processed_at`\n- **High Accuracy**: Low false-positive rate using combined AI guardrails + subject filtering\n- **Quick Setup**: Example nodes and credentials pre-configured in the template\n\n---\n\n## Included Nodes & Flow Highlights\n\n**On form submission (date picker trigger)**  \n→ **Get Email Content (Gmail)**  \n→ **Guardrail: Is Finance? (LangChain Guardrails)**  \n→ **IF (Guardrail Passed)**  \n→ **Filter Finance Keywords**  \n→ **AI Agent (Email OCR)**  \n→ **Validate Extraction**  \n→ **Check for Errors**  \n→ **Apply Finance Rules**  \n→ **Log to Invoices Sheet (Google Sheets)**  \n\n*(Full node list and configuration included in the template.)*\n\n---\n\n## Requirements & Credentials\n\n- **Gmail OAuth2 (read access)** — for fetching emails  \n- **OpenAI API key (or compatible LLM)** — for guardrails & extraction  \n- **Google Sheets OAuth2** — to append rows to the invoice sheet  \n\n**Recommended**: Use the Google Sheet ID included in the template, or replace it with your own Sheet ID and `gid`.\n\n---\n\n## Quick Setup Guide\n👉 [Demo & Setup Video](https://drive.google.com/file/d/1OeDKjgO0a9yXMMShGTO08JGJDzvc9wl8/view?usp=sharing)\n1. Import the template into **n8n**\n2. Connect and authorize credentials: Gmail, Google Sheets, OpenAI (or preferred LLM)\n3. Update the Google Sheet ID / sheet `gid` if using your own sheet\n4. *(Optional)* Adjust the Guardrail `topicalAlignment` threshold or filter keywords\n5. Test using the form trigger or a single email, then enable the workflow\n\n---\n\n## Configuration Tips\n\n- The extraction agent outputs a **strict JSON schema** — keep it for reliable downstream mapping\n- Use a **low LLM temperature (0.2)** for deterministic extraction\n- For non-USD currencies, ensure your accounting system supports the `currency` field or add a conversion step\n- For high-volume inboxes, enable batching or rate-limit the Gmail node to avoid API quota issues\n\n---\n\n## Privacy & Security\n\n- This template processes real email content and financial data — store credentials securely\n- Restrict access to the n8n instance to authorized users only\n- Review data-retention policies if using a hosted LLM service\n\n---\n\n## Example Use Cases\n\n- Auto-log vendor invoices from email into an accounting Google Sheet\n- Build an audit trail with case IDs for finance teams\n- Preprocess incoming receipts before forwarding to AP tools or ERPs\n\n---\n\n## Tags (Recommended)\n\n`finance`, `invoices`, `email`, `ai`, `ocr`, `google-sheets`, `automation`, `accounting`, `n8n-template`\n","workflow":{"id":"4D3NONV7VkCOx2Rs","meta":{"instanceId":"4764540811cbb8d2e1efff249fe019f120efdfc1d1ad5d0e40382bf91ca0b3dc","templateCredsSetupCompleted":true},"name":"Inbox2Ledger","tags":[{"id":"F4Qszas4M5o8aEXt","name":"Content Creation","createdAt":"2026-01-12T08:09:51.754Z","updatedAt":"2026-01-12T08:09:51.754Z"}],"nodes":[{"id":"3ba62e63-5a3d-4cbc-a110-833bb0199d98","name":"Get Email Content","type":"n8n-nodes-base.gmail","position":[-1472,176],"webhookId":"ff36c712-7602-4705-8c29-250930ae93a7","parameters":{"simple":false,"filters":{"labelIds":["INBOX"],"readStatus":"both","receivedAfter":"={{ (() => {\n  const d = new Date($json['Date till which you want your mails to be summarized']);\n  d.setDate(d.getDate() - 1);\n  return d.toISOString().split('T')[0] + 'T00:00:00';\n})() }}"},"options":{},"operation":"getAll","returnAll":true},"credentials":{"gmailOAuth2":{"id":"VTJzxidDBcNKtWh1","name":"Gmail account 2"}},"typeVersion":2.1},{"id":"44797303-c942-44ac-a083-a02d1ed6b360","name":"Guardrail: Is Finance?","type":"@n8n/n8n-nodes-langchain.guardrails","position":[-1152,176],"parameters":{"text":"={{ $('Get Email Content').item.json.text }} and {{ $json.headers.subject }}","guardrails":{"topicalAlignment":{"value":{"prompt":"=You are a financial controller AI. \n\nSCOPE:\n- The text MUST contain evidence of a financial transaction, invoice, receipt, or bill.\n- It is ON-TOPIC if it mentions payments, amounts owed, subscription renewals with prices, or attached invoices.\n- It is OFF-TOPIC if it is a newsletter, a marketing email without a specific transaction, or a personal conversation.","threshold":0.5}}}},"typeVersion":1},{"id":"143a677b-1c72-4b0f-b5bc-bab4c0c3cd72","name":"IF (Guardrail Passed)","type":"n8n-nodes-base.if","position":[-800,176],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"check-aligned","operator":{"type":"boolean","operation":"false","singleValue":true},"leftValue":"={{ $json.checks.triggered }}","rightValue":""}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"6b7923e4-1b33-4154-8ce5-a93835dfa616","name":"Filter Finance Keywords","type":"n8n-nodes-base.filter","position":[-576,176],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"id":"filter-invoice","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $('Get Email Content').item.json.subject }}","rightValue":"Invoice"},{"id":"filter-receipt","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $('Get Email Content').item.json.subject }}","rightValue":"Receipt"},{"id":"filter-bill","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $('Get Email Content').item.json.subject }}","rightValue":"Bill"},{"id":"filter-payment","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $('Get Email Content').item.json.subject }}","rightValue":"Payment Confirmation"},{"id":"1468776a-505d-4693-a45d-6772b744e9b9","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $('Get Email Content').item.json.subject }}","rightValue":"Payment"}]}},"typeVersion":2.2},{"id":"9ae08dc6-847e-417f-b7f6-2f62675799ce","name":"AI Agent (Email OCR)","type":"@n8n/n8n-nodes-langchain.agent","position":[-240,176],"parameters":{"text":"={{ $('Get Email Content').item.json.text }}","options":{"systemMessage":"=You are a Financial OCR Expert. Extract receipt data from the email body text.\n\nCRITICAL INSTRUCTIONS:\n1. Return ONLY a JSON object.\n2. Normalize dates to YYYY-MM-DD.\n3. Clean currency symbols from amounts (return numbers).\n\nREQUIRED JSON STRUCTURE:\n{\n  \"vendor_name\": \"string\",\n  \"invoice_date\": \"YYYY-MM-DD\",\n  \"invoice_id\": \"string (or 'EMAIL-RECEIPT' if missing)\",\n  \"total_amount\": number,\n  \"tax_amount\": number,\n  \"currency\": \"USD/EUR/GBP\",\n  \"items_summary\": \"string (brief description)\",\n  \"vendor_tax_id\": \"string or null\"\n}"},"promptType":"define","hasOutputParser":true},"typeVersion":1.9,"continueOnFail":true},{"id":"81c5e6d4-a43b-442c-b6f7-f24502830cdc","name":"Validate Extraction","type":"n8n-nodes-base.code","position":[112,176],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Check if AI extraction succeeded\nif ($json.error) {\n\treturn {\n\t\tjson: {\n\t\t\terror_occurred: true,\n\t\t\terror_type: \"AI_EXTRACTION_FAILED\",\n\t\t\terror_message: $json.error.message || \"AI extraction failed\",\n\t\t\ttimestamp: new Date().toISOString()\n\t\t}\n\t};\n}\n\nlet data;\ntry {\n\tdata = typeof $json.output === 'string' ? JSON.parse($json.output) : $json.output;\n} catch (e) {\n\treturn {\n\t\tjson: {\n\t\t\terror_occurred: true,\n\t\t\terror_type: \"JSON_PARSE_ERROR\",\n\t\t\terror_message: e.message,\n\t\t\ttimestamp: new Date().toISOString()\n\t\t}\n\t};\n}\n\n// Validation Logic\nconst required = ['vendor_name', 'total_amount', 'invoice_date'];\nconst missing = required.filter(field => !data[field]);\n\nif (missing.length > 0) {\n\treturn {\n\t\tjson: {\n\t\t\terror_occurred: true,\n\t\t\terror_type: \"MISSING_FIELDS\",\n\t\t\terror_message: `Missing: ${missing.join(', ')}`,\n\t\t\textracted_data: data,\n\t\t\ttimestamp: new Date().toISOString()\n\t\t}\n\t};\n}\n\n// Amount Validation\nif (isNaN(parseFloat(data.total_amount))) {\n\treturn {\n\t\tjson: {\n\t\t\terror_occurred: true,\n\t\t\terror_type: \"INVALID_AMOUNT\",\n\t\t\terror_message: \"Total Amount is not a number\",\n\t\t\textracted_data: data,\n\t\t\ttimestamp: new Date().toISOString()\n\t\t}\n\t};\n}\n\nreturn {\n\tjson: {\n\t\terror_occurred: false,\n\t\tvalidated_data: data\n\t}\n};"},"typeVersion":2},{"id":"dc6ce290-b2d6-4ae9-9c34-1cb962b385a2","name":"Check for Errors","type":"n8n-nodes-base.if","position":[336,176],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"check-error","operator":{"type":"boolean","operation":"false"},"leftValue":"={{ $json.error_occurred }}","rightValue":""}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"4b8ddd2d-2fcd-47c1-aa13-95c1b6c09394","name":"Apply Finance Rules","type":"n8n-nodes-base.code","position":[560,176],"parameters":{"mode":"runOnceForEachItem","jsCode":"const data = $json.validated_data || {};\n\n// Helper: normalize text\nconst norm = txt => (txt || \"\").toString().toLowerCase().trim();\n\n// Combine searchable text fields\nconst combinedText = [\n  norm(data.vendor_name),\n  norm(data.merchant_name),\n  norm(data.description),\n  norm(data.notes),\n  norm(data.expense_type),\n].filter(Boolean).join(\" \");\n\n// Category rules (SIMPLE NAMES)\nconst CATEGORY_MAP = [\n  { keys: [\"aws\", \"amazon\", \"amazon web services\", \"google cloud\", \"gcp\", \"digitalocean\", \"azure\", \"cloudflare\", \"heroku\"], category: \"Software and hosting\" },\n  { keys: [\"stripe\", \"paypal\", \"razorpay\"], category: \"Payment processing fees\" },\n  { keys: [\"uber\", \"ola\", \"lyft\", \"taxi\", \"cab\", \"airline\", \"flight\", \"train\", \"bus\", \"travel\"], category: \"Travel and meals\" },\n  { keys: [\"wework\", \"regus\", \"coworking\", \"office rent\", \"rent\", \"lease\"], category: \"Rent and utilities\" },\n  { keys: [\"electricity\", \"water bill\", \"gas bill\", \"utility\"], category: \"Rent and utilities\" },\n  { keys: [\"stationery\", \"office supplies\", \"pens\", \"paper\"], category: \"Office supplies\" },\n  { keys: [\"consultant\", \"contractor\", \"freelancer\", \"agency\", \"legal\", \"lawyer\", \"accountant\"], category: \"Professional services\" },\n  { keys: [\"google ads\", \"facebook ads\", \"meta ads\", \"marketing\"], category: \"Advertising and marketing\" },\n  { keys: [\"zoom\", \"slack\", \"notion\", \"asana\", \"github\", \"figma\", \"subscription\", \"saas\"], category: \"Subscriptions\" },\n  { keys: [\"phone\", \"telecom\", \"airtel\", \"jio\", \"vodafone\"], category: \"Telecom\" },\n  { keys: [\"laptop\", \"computer\", \"hardware\", \"printer\", \"equipment\"], category: \"Equipment\" },\n  { keys: [\"salary\", \"payroll\", \"wages\"], category: \"Payroll\" },\n  { keys: [\"tax\", \"gst\", \"vat\", \"license\"], category: \"Taxes and licenses\" },\n  { keys: [\"insurance\", \"premium\"], category: \"Insurance\" },\n  { keys: [\"bank fee\", \"bank charges\", \"neft\", \"rtgs\", \"imps\"], category: \"Bank charges\" },\n  { keys: [\"meal\", \"lunch\", \"dinner\", \"restaurant\", \"cafe\"], category: \"Meals and entertainment\" },\n  { keys: [\"training\", \"course\", \"udemy\", \"coursera\", \"workshop\"], category: \"Training and development\" }\n];\n\n// Determine category\nlet category = null;\n\nfor (const map of CATEGORY_MAP) {\n  for (const key of map.keys) {\n    if (combinedText.includes(key)) {\n      category = map.category;\n      break;\n    }\n  }\n  if (category) break;\n}\n\n// MCC fallback\nif (!category && data.mcc) {\n  const mcc = data.mcc.toString();\n  if (mcc.startsWith(\"5\")) category = \"Travel and meals\";\n  else if (mcc.startsWith(\"7\")) category = \"Professional services\";\n}\n\n// Vendor fallback\nif (!category && data.vendor_name) {\n  const vendor = norm(data.vendor_name);\n  if (vendor.includes(\"airbnb\")) category = \"Travel and meals\";\n  else if (vendor.includes(\"amazon\") || vendor.includes(\"flipkart\")) category = \"Office supplies\";\n}\n\n// FINAL fallback — always filled\nif (!category) {\n  category = \"Other expenses\";\n}\n\n// Return result\nreturn {\n  json: {\n    ...data,\n    expense_category: category,\n    case_id: `INV-${Date.now()}-${Math.random().toString(36).slice(2, 8).toUpperCase()}`,\n    processed_at: new Date().toISOString()\n  }\n};\n"},"typeVersion":2},{"id":"22378f77-6fee-40d6-a3f6-c185855106b3","name":"Log to Invoices Sheet","type":"n8n-nodes-base.googleSheets","position":[784,176],"parameters":{"columns":{"value":{},"schema":[{"id":"invoice_id","type":"string","display":true,"required":false,"displayName":"invoice_id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"vendor_name","type":"string","display":true,"required":false,"displayName":"vendor_name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"invoice_date","type":"string","display":true,"required":false,"displayName":"invoice_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"total_amount","type":"string","display":true,"required":false,"displayName":"total_amount","defaultMatch":false,"canBeUsedToMatch":true},{"id":"currency","type":"string","display":true,"required":false,"displayName":"currency","defaultMatch":false,"canBeUsedToMatch":true},{"id":"tax_amount","type":"string","display":true,"required":false,"displayName":"tax_amount","defaultMatch":false,"canBeUsedToMatch":true},{"id":"gl_category","type":"string","display":true,"required":false,"displayName":"gl_category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"approval_status","type":"string","display":true,"required":false,"displayName":"approval_status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"timestamp","type":"string","display":true,"required":false,"displayName":"timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"case_id","type":"string","display":true,"required":false,"displayName":"case_id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"items_summary","type":"string","display":true,"required":false,"displayName":"items_summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"vendor_tax_id","type":"string","display":true,"required":false,"displayName":"vendor_tax_id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"processed_at","type":"string","display":true,"required":false,"displayName":"processed_at","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":1260157166,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1pHyqJsfwCIL-XrsWnE0WZsJPxtrd7DeXEGbrKMU_XJk/edit#gid=1260157166","cachedResultName":"Invoices"},"documentId":{"__rl":true,"mode":"list","value":"1pHyqJsfwCIL-XrsWnE0WZsJPxtrd7DeXEGbrKMU_XJk","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1pHyqJsfwCIL-XrsWnE0WZsJPxtrd7DeXEGbrKMU_XJk/edit?usp=drivesdk","cachedResultName":"Finance OCR"}},"credentials":{"googleSheetsOAuth2Api":{"id":"MSvb9L83H4TkNjgX","name":"Google Sheets account 3"}},"retryOnFail":true,"typeVersion":4.5,"waitBetweenTries":2000},{"id":"c09451c0-a59f-4d60-bd6a-91308d937a33","name":"gpt 4o mini","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-240,336],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{"temperature":0.2,"responseFormat":"json_object"}},"credentials":{"openAiApi":{"id":"9EKNwHHfnhvFtLr7","name":"OpenAi account"}},"notesInFlow":false,"typeVersion":1.2},{"id":"c3d58a12-9d19-4c92-a9d5-845e6b254a38","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1776,-48],"parameters":{"color":6,"width":512,"height":544,"content":"# Get all emails\n## Connect Gmail and fetch incoming messages or selected folders; batch or trigger-based retrieval ensures full inbox coverage for automatic processing."},"typeVersion":1},{"id":"912cd585-df40-42fc-a1f6-5ee0d4fd6c51","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-1136,336],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1","cachedResultName":"gpt-4.1"},"options":{},"responsesApiEnabled":false},"credentials":{"openAiApi":{"id":"9EKNwHHfnhvFtLr7","name":"OpenAi account"}},"retryOnFail":false,"typeVersion":1.3},{"id":"6acc74c6-538f-40de-a356-226cde040aee","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-2544,-48],"parameters":{"width":688,"height":544,"content":"Inbox2Ledger is an end-to-end **n8n template** that turns a noisy finance inbox into a clean, structured ledger. It fetches emails, uses AI guardrails to keep only finance-relevant messages, extracts invoice/receipt fields via an OCR-style agent, validates and auto-categorizes each expense, generates a unique case ID, and appends the result to a Google Sheet for accounting or downstream automations.\n\n\n## How it works\nTriggered by a form submission or scheduled fetch, the workflow pulls emails, applies AI guardrails and keyword filters to isolate invoices and receipts, then runs an LLM-powered extraction to return normalized JSON (vendor, date, invoice_id, amounts, currency, items). A validation step checks formats and required fields; categorization rules assign GL categories and generate a unique case ID. Validated records are appended to a Google Sheet and are ready for downstream processes.\n\n\n## Quick Setup Guide\n👉 [Demo & Setup Video](https://drive.google.com/file/d/1OeDKjgO0a9yXMMShGTO08JGJDzvc9wl8/view?usp=sharing)\n1. Import the template into **n8n**\n2. Connect and authorize credentials: Gmail, Google Sheets, OpenAI (or preferred LLM)\n3. Update the Google Sheet ID / sheet `gid` if using your own sheet\n4. *(Optional)* Adjust the Guardrail `topicalAlignment` threshold or filter keywords\n5. Test using the form trigger or a single email, then enable the workflow\n\n---"},"typeVersion":1},{"id":"ad53c100-afae-4642-80d3-a54a7fc6f15b","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-1216,-48],"parameters":{"color":6,"width":848,"height":544,"content":"# Filter finance emails\n## Apply AI guardrails and keyword filters to isolate invoices, receipts, and payments; reduce false positives and route only finance messages."},"typeVersion":1},{"id":"fd07a032-91ce-44c4-9bb3-dc59595368bf","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-320,-48],"parameters":{"color":6,"width":1360,"height":544,"content":"# Extract details and log\n## Use LLM/OCR agent to extract vendor, date, invoice_id, amounts; validate entries, categorize expenses, and append structured rows to Google Sheets."},"typeVersion":1},{"id":"15ad6c48-520c-41e0-9ad0-1c9da8bce60f","name":"Enter Date till which you want email to be fetched","type":"n8n-nodes-base.formTrigger","position":[-1680,176],"webhookId":"331d6746-150c-4865-b15a-b93a7927f63a","parameters":{"options":{},"formTitle":"AI Financial Mail Detector and Summarizer","formFields":{"values":[{"fieldType":"date","fieldLabel":"Date till which you want your mails to be summarized","requiredField":true}]}},"typeVersion":2.3}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"0dea5173-ae7c-4e85-b9b6-57b8a861e051","connections":{"gpt 4o mini":{"ai_languageModel":[[{"node":"AI Agent (Email OCR)","type":"ai_languageModel","index":0}]]},"Check for Errors":{"main":[[{"node":"Apply Finance Rules","type":"main","index":0}]]},"Get Email Content":{"main":[[{"node":"Guardrail: Is Finance?","type":"main","index":0}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"Guardrail: Is Finance?","type":"ai_languageModel","index":0}]]},"Apply Finance Rules":{"main":[[{"node":"Log to Invoices Sheet","type":"main","index":0}]]},"Validate Extraction":{"main":[[{"node":"Check for Errors","type":"main","index":0}]]},"AI Agent (Email OCR)":{"main":[[{"node":"Validate Extraction","type":"main","index":0}]]},"IF (Guardrail Passed)":{"main":[[{"node":"Filter Finance Keywords","type":"main","index":0}]]},"Guardrail: Is Finance?":{"main":[[{"node":"IF (Guardrail Passed)","type":"main","index":0}]]},"Filter Finance Keywords":{"main":[[{"node":"AI Agent (Email OCR)","type":"main","index":0}]]},"Enter Date till which you want email to be fetched":{"main":[[{"node":"Get Email Content","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":16,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.gmail":{"count":1},"n8n-nodes-base.filter":{"count":1},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.formTrigger":{"count":1},"n8n-nodes-base.googleSheets":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"@n8n/n8n-nodes-langchain.guardrails":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Pratyush Kumar Jha","username":"pratyush","bio":"Automation consultant specialising in n8n workflows. I help teams automate operations, integrate APIs, and deploy AI-powered automations. ","verified":true,"links":["https://www.linkedin.com/in/pratyush-kumar-jha-b37a57235/"],"avatar":"https://gravatar.com/avatar/079121acb8b4fe22d234072b32960dff812a5e5d787de1a0ca16a3ba04d3b77e?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":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":356,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmail","codex":{"data":{"alias":["email","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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with 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-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/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/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"transform\"]","defaults":{"name":"Gmail"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"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":844,"icon":"fa:filter","name":"n8n-nodes-base.filter","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The Filter node can be used to filter items based on a condition. If the condition is met, the item will be passed on to the next node. If the condition is not met, the item will be omitted. Conditions can be combined together by AND(meet all conditions), or OR(meet at least one condition).","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.filter/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Filter","color":"#229eff"},"iconData":{"icon":"filter","type":"icon"},"displayName":"Filter","typeVersion":2,"nodeCategories":[{"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":1153,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1225,"icon":"file:form.svg","name":"n8n-nodes-base.formTrigger","codex":{"data":{"alias":["table","submit","post"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Other Trigger Nodes"]}}},"group":"[\"trigger\"]","defaults":{"name":"On form submission"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwQjdCQyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzQuOTc4IDM3LjczMmExLjU2IDEuNTYgMCAwIDEtMS41NjIgMS41NjNINi4yNmExLjU2IDEuNTYgMCAwIDEtMS41NjMtMS41NjNWOS42MDdjMC0uNDA1LjE1Ny0uNzk0LjQzOC0xLjA4Nmw2LjMwNC02LjUzMXY1LjM0NEg4LjIxM2ExLjE3MiAxLjE3MiAwIDEgMCAwIDIuMzQzaDQuNDNhMS4xNyAxLjE3IDAgMCAwIDEuMTcxLTEuMTcxVi4yMzJoMTkuNjAyYTEuNTYgMS41NiAwIDAgMSAxLjU2MiAxLjU2M3YxMC4zMjdsLTIuODYgMi44Ni04LjI1MiA4LjI3NmE0MTMuMDA2IDQxMy4wMDYgMCAwIDEtMS42NTQgMS42NjJsLS4zMzcuMzM3YTIgMiAwIDAgMC0uNTU3IDEuMDhMMjAuMyAzMS45MjJjLS4xMDguNjM4LS4yMTUgMS4wNzkuMjExIDEuNDE4LjQwMy4zMi45LjE3NCAxLjU0LjA2Nmw1LjQwOC0uOTI4YTIgMiAwIDAgMCAxLjA4LS41NTZsNi40NC02LjQyOXptLTI0LjAzLTIxLjI2NWExLjE4IDEuMTggMCAwIDAgMS4xNzEgMS4xNzJoMTMuMTYzYTEuMTcyIDEuMTcyIDAgMSAwIDAtMi4zNDRIMTIuMTE5YTEuMTcgMS4xNyAwIDAgMC0xLjE3MiAxLjE3Mm03LjI5NCAxNC43NjZhMS4xNyAxLjE3IDAgMCAwLTEuMTcyLTEuMTcySDEyLjEyYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNC45NTFhMS4xNyAxLjE3IDAgMCAwIDEuMTcyLTEuMTcybS44Ni03LjM5MWExLjE3IDEuMTcgMCAwIDAtMS4xNzItMS4xNzJoLTUuODExYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNS44MWExLjE2NCAxLjE2NCAwIDAgMCAxLjE3My0xLjE3MSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzAwQjdCQyIgZD0ibTMzLjUzMiAxNi4zOTcgNC4yODktNC4yODkgMy43NTggMy43MSAxLjYxNy0xLjYxNiAyLjI1OCAyLjI1N2MuMjE4LjIxOC4zNC41MTMuMzQzLjgyLS4wMDIuMzExLS4xMjUuNjA4LS4zNDQuODNsLTYuODA0IDYuNzk2YTEuMTMgMS4xMyAwIDAgMS0uODI4LjM0MyAxLjE1IDEuMTUgMCAwIDEtLjgyOC0uMzQzIDEuMTggMS4xOCAwIDAgMSAwLTEuNjU3bDUuOTc2LTUuOTY4LTEuMzEyLTEuMzEzLTEuMzgzIDEuNDE0LTEzLjE0OSAxMy4xMjUtNC42MTcuNzgyLjc4Mi00LjYxNy4zMzYtLjMzNyAyLjU2MiAyLjU1NWExLjEgMS4xIDAgMCAwIC44MjguMzQ0Yy4zMTIuMDA1LjYxMi0uMTIuODI4LS4zNDRhMS4xOCAxLjE4IDAgMCAwIDAtMS42NTZsLTIuNTYyLTIuNTYyek00NC43MzYgMTIuMjRjMCAuNDE0LS4xNjMuODEtLjQ1NCAxLjEwMmwtLjkyMi45MTQtMy44NTItMy44MjguOTMtLjkzYTEuNTYzIDEuNTYzIDAgMCAxIDIuMjAzIDBsMS42NCAxLjY0MWMuMjkxLjI5My40NTUuNjkuNDU1IDEuMTAyIi8+PC9zdmc+"},"displayName":"n8n Form Trigger","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1322,"icon":"file:guardrails.svg","name":"@n8n/n8n-nodes-langchain.guardrails","codex":{"data":{"alias":["LangChain","Guardrails","PII","Secret","Injection","Sanitize"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.guardrails/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Miscellaneous","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Guardrails"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzc2Ml8xNjg4MCkiPgo8cGF0aCBkPSJNMzUgMjEuODk5NEMzNSAzMS4zOTc4IDI4LjQzNzUgMzYuMTQ3IDIwLjYzNzUgMzguOTAxNkMyMC4yMjkxIDM5LjA0MTggMTkuNzg1NCAzOS4wMzUxIDE5LjM4MTMgMzguODgyNkMxMS41NjI1IDM2LjE0NyA1IDMxLjM5NzggNSAyMS44OTk0VjguNjAxNjNDNSA4LjA5NzggNS4xOTc1NCA3LjYxNDYxIDUuNTQ5MTggNy4yNTgzNUM1LjkwMDgxIDYuOTAyMDkgNi4zNzc3MiA2LjcwMTk0IDYuODc1IDYuNzAxOTRDMTAuNjI1IDYuNzAxOTQgMTUuMzEyNSA0LjQyMjMzIDE4LjU3NSAxLjUzNDgxQzE4Ljk3MjIgMS4xOTA5NiAxOS40Nzc1IDEuMDAyMDQgMjAgMS4wMDIwNEMyMC41MjI1IDEuMDAyMDQgMjEuMDI3OCAxLjE5MDk2IDIxLjQyNSAxLjUzNDgxQzI0LjcwNjMgNC40NDEzMiAyOS4zNzUgNi43MDE5NCAzMy4xMjUgNi43MDE5NEMzMy42MjIzIDYuNzAxOTQgMzQuMDk5MiA2LjkwMjA5IDM0LjQ1MDggNy4yNTgzNUMzNC44MDI1IDcuNjE0NjEgMzUgOC4wOTc4IDM1IDguNjAxNjNWMjEuODk5NFoiIHN0cm9rZT0iIzU2OTlGRiIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTIwIDM5LjAwMlYxLjAwMjA0IiBzdHJva2U9IiM1Njk5RkYiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfNzYyXzE2ODgwIj4KPHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Guardrails","typeVersion":2,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":34,"name":"Invoice Processing"},{"id":49,"name":"AI Summarization"}],"image":[]}}