{"workflow":{"id":11761,"name":"Categorize Airtable invoices with OpenAI and TOON token optimization","views":10,"recentViews":0,"totalViews":10,"createdAt":"2025-12-13T12:57:02.072Z","description":"\n&gt; ⚠️ **Notice:**  \n&gt; This workflow uses the **CustomJS JSON to TOON node** from [CustomJS](https://www.customjs.space/integration/n8n/json-toon-converter), which requires a self-hosted n8n instance and a CustomJS API key.\n\n---\n![Categorizing Invoices With TOON.png](fileId:4012)\n\nThis workflow demonstrates how to **automatically categorize invoices from Airtable using OpenAI**, while **significantly reducing token usage** by converting structured data into **TOON (Token-Optimized Object Notation)** before sending it to the LLM.\n\nInstead of passing large, nested JSON payloads (clients, invoices, invoice items) directly to OpenAI, the workflow converts the data into TOON, lets the AI focus purely on **semantic classification**, and then converts the result back into clean JSON that can safely be written back to Airtable.\n\nThe result is a **reliable, cost-efficient, and production-ready invoice categorization pipeline**.\n\n---\n\n## Why This Workflow?\n\nCategorizing invoices based on free-text invoice items is a perfect AI use case — but sending raw JSON to LLMs is:\n\n- expensive  \n- slow  \n- error-prone (broken JSON, hallucinated fields)\n\nThis workflow applies the **TOON pattern**, reducing token usage by **40–60%**, while ensuring the AI only returns **exactly the data you expect**.\n\nThe LLM never sees raw JSON syntax — only a compact, schema-preserving representation.\n\n---\n\n## What This Workflow Does\n\n- Fetches **Invoices**, **Invoice Items**, and **Clients** from Airtable  \n- Aggregates invoice items per invoice  \n- Converts the structured data into **TOON**  \n- Uses OpenAI to **assign exactly one category per invoice**  \n- Converts the AI result back into JSON  \n- Writes the category back to Airtable  \n\nAll without manual intervention.\n\n---\n\n## Key Features\n\n- **AI-based Invoice Categorization**  \n  Automatically classify invoices (e.g. `web_development`, `system_administration`)\n\n- **TOON Token Optimization**  \n  Reduce OpenAI token usage by **40–60%**\n\n- **Schema Safety**  \n  AI never breaks your JSON structure\n\n- **Deterministic Output**  \n  One category per invoice, enforced by prompt design\n\n- **Airtable-Native**  \n  Reads from and writes directly back to Airtable\n\n---\n\n## How It Works\n\n1. **Manual Trigger**  \n   Run the workflow on demand\n\n2. **Load Data from Airtable**  \n   - Fetch ready invoices  \n   - Resolve related clients  \n   - Fetch and aggregate invoice items  \n\n3. **Prepare Structured Context**  \n   Group client, invoice, and invoice items into a single object\n\n4. **JSON → TOON**  \n   Convert structured data into token-efficient TOON\n\n5. **AI Categorization**  \n   - OpenAI receives TOON data  \n   - Assigns exactly one category per invoice  \n   - Returns only TOON (no JSON, no prose)\n\n6. **TOON → JSON**  \n   Convert AI output back into valid JSON\n\n7. **Persist Result**  \n   Update the invoice category field in Airtable","workflow":{"id":"zlC4TinZxwU0uRNb","meta":{"instanceId":"148ba950667ef04d0c16951c0250998ce6284ec0fd24f99df14953aba6dd4949","templateCredsSetupCompleted":true},"name":"TPL","tags":[],"nodes":[{"id":"babf989a-7fd3-4dd1-b451-f3c849722a07","name":"OpenAI Enhancement","type":"@n8n/n8n-nodes-langchain.openAi","position":[2144,1440],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"chatgpt-4o-latest"},"options":{},"responses":{"values":[{"content":"=You are an AI assistant that categorizes invoice items.\n\nTask:\n- Look at the Invoice-Items from the following TOON data:\n{{ $json.toon }}\n\n- Review all invoices and consider the appropriate categories. Assign exactly one category to each invoice item:\n\n- First, structure the result as a JSON array like this:\n[\n  { \"category\": \"web_development\" },\n  { \"category\": \"system_administration\" }\n]\n\n- Then, **convert this JSON array into TOON notation**.\n- Return **only the TOON notation**, do not include quotes, JSON braces, escaped characters, or explanations.\n"}]},"builtInTools":{}},"credentials":{"openAiApi":{"id":"y8U20KUSPQnTowdu","name":"OpenAi account"}},"typeVersion":2.1},{"id":"7f537c67-d5b8-40e5-8212-844ea91c13a7","name":"JSON to TOON","type":"@custom-js/n8n-nodes-pdf-toolkit.jsonToToon","position":[1984,1440],"parameters":{"jsonData":"={{ $json }}"},"credentials":{"customJsApi":{"id":"d0EHxiyZak4WWRfy","name":"CustomJS account"}},"typeVersion":1},{"id":"baf16dab-4b75-4c13-bae6-bb9bd59d802c","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[384,1456],"parameters":{},"typeVersion":1},{"id":"4dd1d8ee-d620-4095-9d3b-5b962f7a17d1","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-912,848],"parameters":{"width":1120,"height":1776,"content":"# Categorizing invoices with TOON optimization\n\nHere is an example of how you can categorize all \nyour invoices in Airtable, from our [invoice creation example](https://n8n.io/workflows/9772-automatic-invoice-generation-and-email-with-airtable-and-customjs-pdf-generator/):\n\nTo save OpenAI tokens, we convert them into [TOON](https://github.com/toon-format/toon) and back again.\n\n### Setup \n-  This workflow uses the CustomJS JSON to TOON node from [CustomJS](https://www.customjs.space), which requires a self-hosted n8n instance and a CustomJS API key.\n- You will also need an API key for an Airtable table, which you can clone if you like. [Public Airtable Example](https://airtable.com/apphyDa3uYAq0VOMW/shrSe39NZYrqm4gtE)\n![Airtable Screenshot](https://www.beta.customjs.space/images/integration/n8n/InvoiceGeneratorWorkflow.png)\n\n### How it works \n1. **Manual Trigger**  \n   Run the workflow on demand\n\n2. **Load Data from Airtable**  \n   - Fetch ready invoices  \n   - Resolve related clients  \n   - Fetch and aggregate invoice items  \n\n3. **Prepare Structured Context**  \n   Group client, invoice, and invoice items into a single object\n\n4. **JSON → TOON**  \n   Convert structured data into token-efficient TOON\n\n5. **AI Categorization**  \n   - OpenAI receives TOON data  \n   - Assigns exactly one category per invoice  \n   - Returns only TOON (no JSON, no prose)\n\n6. **TOON → JSON**  \n   Convert AI output back into valid JSON\n\n7. **Persist Result**  \n   Update the invoice category field in Airtable\n\n@[youtube](QX6ffaf-uvA)"},"typeVersion":1},{"id":"db143ee8-cab9-49af-97d3-a1b839499058","name":"Get Ready Invoices","type":"n8n-nodes-base.airtable","position":[592,1456],"parameters":{"base":{"__rl":true,"mode":"list","value":"apphyDa3uYAq0VOMW","cachedResultUrl":"https://airtable.com/apphyDa3uYAq0VOMW","cachedResultName":"Custom JS - Invoicing Template"},"table":{"__rl":true,"mode":"list","value":"tblW46vfkwOFQJLMs","cachedResultUrl":"https://airtable.com/apphyDa3uYAq0VOMW/tblW46vfkwOFQJLMs","cachedResultName":"Invoices"},"options":{},"operation":"search"},"credentials":{"airtableTokenApi":{"id":"oaf8jRSVb1u0q72u","name":"Airtable"}},"typeVersion":2.1},{"id":"cc0fabf3-3634-4799-acab-b50a9c0f1459","name":"Get Clients","type":"n8n-nodes-base.airtable","position":[1472,1440],"parameters":{"id":"={{ $('Get Ready Invoices').item.json['Client ID'][0] }}","base":{"__rl":true,"mode":"list","value":"apphyDa3uYAq0VOMW","cachedResultUrl":"https://airtable.com/apphyDa3uYAq0VOMW","cachedResultName":"Custom JS - Invoicing Template"},"table":{"__rl":true,"mode":"list","value":"tblQdiFVsZ9w3sahJ","cachedResultUrl":"https://airtable.com/apphyDa3uYAq0VOMW/tblQdiFVsZ9w3sahJ","cachedResultName":"Clients"},"options":{}},"credentials":{"airtableTokenApi":{"id":"oaf8jRSVb1u0q72u","name":"Airtable"}},"typeVersion":2.1},{"id":"fc2f2761-8bc4-4151-b508-f0be45e40eae","name":"Get Invoice Items","type":"n8n-nodes-base.airtable","position":[976,1568],"parameters":{"base":{"__rl":true,"mode":"list","value":"apphyDa3uYAq0VOMW","cachedResultUrl":"https://airtable.com/apphyDa3uYAq0VOMW","cachedResultName":"Custom JS - Invoicing Template"},"table":{"__rl":true,"mode":"list","value":"tblASYLVpsnrUoKt5","cachedResultUrl":"https://airtable.com/apphyDa3uYAq0VOMW/tblASYLVpsnrUoKt5","cachedResultName":"Invoice-Items"},"options":{},"operation":"search","filterByFormula":"=FIND(\"{{ $json.ID }}\", ARRAYJOIN({Invoice}))"},"credentials":{"airtableTokenApi":{"id":"oaf8jRSVb1u0q72u","name":"Airtable"}},"typeVersion":2.1},{"id":"c4a6c493-dbee-4ef3-8c02-74a5609f2f4f","name":"Aggregate","type":"n8n-nodes-base.aggregate","position":[1296,1568],"parameters":{"options":{},"aggregate":"aggregateAllItemData","destinationFieldName":"items"},"typeVersion":1},{"id":"9a8696bd-459d-49a9-b848-e68a0c0a6e9c","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[800,1456],"parameters":{"options":{}},"typeVersion":3},{"id":"3bbef89f-1f29-4cc9-9bbf-a2cb64022b37","name":"Update record","type":"n8n-nodes-base.airtable","position":[2720,1440],"parameters":{"base":{"__rl":true,"mode":"list","value":"apphyDa3uYAq0VOMW","cachedResultUrl":"https://airtable.com/apphyDa3uYAq0VOMW","cachedResultName":"Custom JS - Invoicing Template"},"table":{"__rl":true,"mode":"list","value":"tblW46vfkwOFQJLMs","cachedResultUrl":"https://airtable.com/apphyDa3uYAq0VOMW/tblW46vfkwOFQJLMs","cachedResultName":"Invoices"},"columns":{"value":{"id":"={{ $('Get Ready Invoices').item.json.id }}","Category":"={{ $json.json.category }}"},"schema":[{"id":"id","type":"string","display":true,"readOnly":true,"required":false,"displayName":"id","defaultMatch":true},{"id":"ID","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Client ID","type":"array","display":true,"removed":true,"readOnly":false,"required":false,"displayName":"Client ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Client Name","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Client Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Description (from Invoice-Items)","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Description (from Invoice-Items)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Total","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Invoicedate","type":"dateTime","display":true,"removed":true,"readOnly":false,"required":false,"displayName":"Invoicedate","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Status","type":"options","display":true,"options":[{"name":"Delayed","value":"Delayed"},{"name":"Sent","value":"Sent"},{"name":"Paid","value":"Paid"},{"name":"Ready","value":"Ready"}],"removed":true,"readOnly":false,"required":false,"displayName":"Status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Category","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Create Invoice (Airtable API)","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Create Invoice (Airtable API)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Create Invoice (Get Parameters)","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Create Invoice (Get Parameters)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Invoice-Items","type":"array","display":true,"removed":true,"readOnly":false,"required":false,"displayName":"Invoice-Items","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Prices (from Invoice-Items)","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Prices (from Invoice-Items)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Default Hourly Rate (from Client ID)","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Default Hourly Rate (from Client ID)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total (from Invoice-Items)","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Total (from Invoice-Items)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ClientAddressField1","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"ClientAddressField1","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ClientAddressField2","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"ClientAddressField2","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ClientTax","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"ClientTax","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update"},"credentials":{"airtableTokenApi":{"id":"oaf8jRSVb1u0q72u","name":"Airtable"}},"typeVersion":2.1},{"id":"70a430e2-932f-41e3-a431-ce3b0e70ef0e","name":"Map Fields","type":"n8n-nodes-base.set","position":[1136,1568],"parameters":{"options":{},"assignments":{"assignments":[{"id":"a95b61df-c10d-43f1-b005-d6d84c6fec47","name":"description","type":"string","value":"={{ $json.Description }}"},{"id":"f290e440-dd5b-46f9-a23b-be419443685b","name":"quantity","type":"string","value":"={{ $json.Hours }}"},{"id":"09688f5f-0461-4c04-988a-2b92da3e595e","name":"unitPrice","type":"string","value":"={{ $json['Custom Hourly Rate'] || $json['Default Hourly Rate'][0]}}"},{"id":"bcdadef7-0f5b-48a3-851b-f7fe5f401fa7","name":"invoiceId","type":"string","value":"={{ $json.ID }}"}]}},"typeVersion":3.4},{"id":"7689029a-47eb-4aa3-b296-cfe4ae9e0d7b","name":"GroupClientAndInvoice","type":"n8n-nodes-base.set","position":[1776,1440],"parameters":{"options":{},"assignments":{"assignments":[{"id":"44c69f01-7e87-4fb9-8ab6-31fc966073a6","name":"clientAndInvoiceData","type":"object","value":"={   \n  \"client\": {{ JSON.stringify($json) }},   \n  \"invoice\": {{ JSON.stringify($('Get Ready Invoices').item.json) }} \n}"}]}},"typeVersion":3.4},{"id":"68528c43-c25e-4941-9e47-e12c65550214","name":"TOON to JSON","type":"@custom-js/n8n-nodes-pdf-toolkit.toonToJson","position":[2432,1440],"parameters":{"toonData":"={{ $json.output[0].content[0].text }}"},"credentials":{"customJsApi":{"id":"d0EHxiyZak4WWRfy","name":"CustomJS account"}},"typeVersion":1},{"id":"0a0c52fb-2716-4a13-a2a7-bf5457744edc","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[320,1376],"parameters":{"color":7,"width":1296,"height":416,"content":"## Collect invoice data from Airtable"},"typeVersion":1},{"id":"f1346b90-3f73-4b36-a52a-06139c7ee7d0","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1744,1376],"parameters":{"color":7,"width":832,"height":416,"content":"## Categorizing Invoices"},"typeVersion":1},{"id":"e3650253-bfd2-4307-af75-66015c69e265","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[2672,1376],"parameters":{"color":7,"width":432,"height":416,"content":"## Save categories back to Airtable"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"b0be609b-1d3d-4916-a554-d6c1827c73bd","connections":{"Aggregate":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Map Fields":{"main":[[{"node":"Aggregate","type":"main","index":0}]]},"Get Clients":{"main":[[{"node":"GroupClientAndInvoice","type":"main","index":0}]]},"JSON to TOON":{"main":[[{"node":"OpenAI Enhancement","type":"main","index":0}]]},"TOON to JSON":{"main":[[{"node":"Update record","type":"main","index":0}]]},"Loop Over Items":{"main":[[{"node":"Get Clients","type":"main","index":0}],[{"node":"Get Invoice Items","type":"main","index":0}]]},"Get Invoice Items":{"main":[[{"node":"Map Fields","type":"main","index":0}]]},"Get Ready Invoices":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"OpenAI Enhancement":{"main":[[{"node":"TOON to JSON","type":"main","index":0}]]},"GroupClientAndInvoice":{"main":[[{"node":"JSON to TOON","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Get Ready Invoices","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":16,"nodeTypes":{"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.airtable":{"count":4},"n8n-nodes-base.aggregate":{"count":1},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.manualTrigger":{"count":1},"n8n-nodes-base.splitInBatches":{"count":1},"@n8n/n8n-nodes-langchain.openAi":{"count":1},"@custom-js/n8n-nodes-pdf-toolkit.jsonToToon":{"count":1},"@custom-js/n8n-nodes-pdf-toolkit.toonToJson":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"CustomJS","username":"customjs","bio":"","verified":true,"links":["https://www.customjs.space"],"avatar":"https://gravatar.com/avatar/942ecdadf17761bc7f516b67fb0f3617809720caf8912cfd1815ed2a9f8b9ad3?r=pg&d=retro&size=200"},"nodes":[{"id":2,"icon":"file:airtable.svg","name":"n8n-nodes-base.airtable","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/2021-goals-level-up-your-vocabulary-with-vonage-and-n8n/","icon":"🎯","label":"2021 Goals: Level Up Your Vocabulary With Vonage and n8n"},{"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-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/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/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"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/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/sending-sms-the-low-code-way-with-airtable-twilio-programmable-sms-and-n8n/","icon":"📱","label":"Sending SMS the Low-Code Way with Airtable, Twilio Programmable SMS, and n8n"},{"url":"https://n8n.io/blog/automating-conference-organization-processes-with-n8n/","icon":"🙋‍♀️","label":"Automating Conference Organization Processes with n8n"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/airtable/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Airtable"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMTcwIj48cGF0aCBmaWxsPSIjZmNiNDAwIiBkPSJNODkgNC44IDE2LjIgMzQuOWMtNC4xIDEuNy00IDcuNC4xIDkuMWw3My4yIDI5YzYuNCAyLjYgMTMuNiAyLjYgMjAgMGw3My4yLTI5YzQuMS0xLjYgNC4xLTcuNC4xLTkuMWwtNzMtMzAuMUMxMDMuMiAyIDk1LjcgMiA4OSA0LjgiLz48cGF0aCBmaWxsPSIjMThiZmZmIiBkPSJNMTA1LjkgODguOXY3Mi41YzAgMy40IDMuNSA1LjggNi43IDQuNWw4MS42LTMxLjdjMS45LS43IDMuMS0yLjUgMy4xLTQuNVY1Ny4yYzAtMy40LTMuNS01LjgtNi43LTQuNUwxMDkgODQuM2MtMS45LjgtMy4xIDIuNi0zLjEgNC42Ii8+PHBhdGggZmlsbD0iI2Y4MmI2MCIgZD0ibTg2LjkgOTIuNi0yNC4yIDExLjctMi41IDEuMkw5LjEgMTMwYy0zLjIgMS42LTcuNC0uOC03LjQtNC40VjU3LjVjMC0xLjMuNy0yLjQgMS42LTMuM3EuNi0uNiAxLjItLjljMS4yLS43IDMtLjkgNC40LS4zbDc3LjUgMzAuN2M0IDEuNSA0LjMgNy4xLjUgOC45Ii8+PHBhdGggZmlsbD0iI2JhMWU0NSIgZD0ibTg2LjkgOTIuNi0yNC4yIDExLjctNTkuNC01MHEuNi0uNiAxLjItLjljMS4yLS43IDMtLjkgNC40LS4zbDc3LjUgMzAuN2M0IDEuNCA0LjMgNyAuNSA4LjgiLz48L3N2Zz4="},"displayName":"Airtable","typeVersion":2,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":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":838,"icon":"fa:mouse-pointer","name":"n8n-nodes-base.manualTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"When clicking ‘Execute workflow’","color":"#909298"},"iconData":{"icon":"mouse-pointer","type":"icon"},"displayName":"Manual Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1236,"icon":"file:aggregate.svg","name":"n8n-nodes-base.aggregate","codex":{"data":{"alias":["Aggregate","Combine","Flatten","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Aggregate"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="},"displayName":"Aggregate","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1250,"icon":"file:openAi.svg","name":"@n8n/n8n-nodes-langchain.openAi","codex":{"data":{"alias":["LangChain","ChatGPT","Sora","DallE","whisper","audio","transcribe","tts","assistant"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Miscellaneous","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg1IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NiAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MSA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K"},"displayName":"OpenAI","typeVersion":2,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":34,"name":"Invoice Processing"},{"id":49,"name":"AI Summarization"}],"image":[{"id":4012,"url":"https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/Categorizing_Invoices_With_TOON_8fda25a955.png"}]}}