{"workflow":{"id":13071,"name":"Generate PDF invoices with line item support from Airtable using Google Sheets","views":20,"recentViews":0,"totalViews":20,"createdAt":"2026-01-28T18:59:59.515Z","description":"Stop manually copy-pasting client data into Word templates. This workflow automates the entire invoicing process, handling complex line items, VAT calculations, PDF generation, and CRM syncing in under 20 seconds.\n\nIt is designed to solve the **\"Admin Trap\"** by connecting your database (Airtable) to your document generator (Google Drive/Docs) via a Webhook trigger.\n\n#### ⚡ What this workflow does\n**Receives Data:** Listens for a Webhook (compatible with frontends like Lovable, Softr, or standard forms) containing the Client ID and a list of Services.\n\n**Splits Line Items:** Uses a \"Split In Batches\" logic to iterate through multiple services/products, ensuring every line item is recorded individually.\n\n**Database Sync:** Creates a parent \"Invoice\" record and links child \"Service\" records in Airtable.\n\n**Generates PDF:** Populates a Google Doc/Sheet template with dynamic client data and service rows, then exports it as a PDF.\n\n**Files & Links:** Uploads the PDF to a designated Google Drive folder and attaches the file URL back to the specific Invoice record in Airtable.\n\n#### 🛠 Setup Requirements\n##### 1. Airtable Base Structure\n\nYou need three linked tables to make this work:\n\n**Clients:** Stores Address, VAT Number, and Email.\n\n**Invoices:** The master record containing Date, Total Amount, and the Invoice PDF attachment field.\n\n**Services:** Stores individual line items (Value, Units, VAT Amount) linked to the Invoices table.\n\n##### 2. Google Drive Template\n\nCreate a Google Doc or Sheet.\n\nUse *{{variable_name}}* placeholders for Client Name, Address, and Invoice ID.\n\nEnsure you have a section for line items that matches the automation loop.\n\n#### 💡 Use Case\nPerfect for freelancers, agencies, and founders who want to trigger invoices from a dashboard or dropdown menu without manually calculating VAT or typing out addresses.\n\n### 👋 Need help building this? Want to automate & scale your business?\n\nI help founders automate their \"boring work\" so they can focus on sales.\n\n- https://www.linkedin.com/in/sergiomedinah/\n- https://sergio-medina.com/","workflow":{"id":"omGegE9vPd6v03RM","meta":{"instanceId":"bb9fdf79880d1068e166daed9b4c4c1df933f79fcbc807252b304cfdfedc5400"},"name":"Invoice Generation System","tags":[],"nodes":[{"id":"18b67cf7-0177-424a-b834-3dd143d177a8","name":"Webhook","type":"n8n-nodes-base.webhook","position":[112,-384],"webhookId":"d2d27022-731e-4afa-b3c6-411f3ec9b79d","parameters":{"path":"your-webhook-path","options":{},"httpMethod":"POST"},"typeVersion":2.1},{"id":"536218fd-ccb3-465d-9e98-ad4171e464dc","name":"Create a record1","type":"n8n-nodes-base.airtable","position":[112,48],"parameters":{"base":{"__rl":true,"mode":"list","value":"YOUR_AIRTABLE_BASE_ID","cachedResultName":"Your Airtable Base"},"table":{"__rl":true,"mode":"list","value":"YOUR_INVOICE_TABLE_ID","cachedResultName":"Factura"},"columns":{"value":{"Date":"={{ $('Webhook').first().json.body.date }}","Client":"={{ $('Webhook').first().json.body.clientId }}","Service":"={{ $('Formatting Data').first().json.id }}","Invoice #":"={{ $('Generate Invoice #').item.json.nextInvoiceNumber }}"},"schema":[{"id":"Invoice #","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Invoice #","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Date","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Client","type":"array","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Client","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Service","type":"array","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Service","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total_Taxable_Base","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"Total_Taxable_Base","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total VAT","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"Total VAT","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total Retention","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"Total Retention","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Total","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Invoice","type":"array","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Invoice","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total_Taxable_Base (from Servicio)","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"Total_Taxable_Base (from Servicio)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total (from Servicio)","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Total (from Servicio)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Service Description","type":"string","display":true,"removed":true,"readOnly":false,"required":false,"displayName":"Service Description","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total VAT (from Servicio)","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"Total VAT (from Servicio)","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total Retention (from Servicio)","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"Total Retention (from Servicio)","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{"typecast":true},"operation":"create"},"typeVersion":2.1},{"id":"fc3fc580-c2ae-4eaa-9434-18bab1dd1642","name":"Add Service to DB","type":"n8n-nodes-base.airtable","position":[560,-384],"parameters":{"base":{"__rl":true,"mode":"list","value":"YOUR_AIRTABLE_BASE_ID","cachedResultName":"Your Airtable Base"},"table":{"__rl":true,"mode":"list","value":"YOUR_SERVICE_TABLE_ID","cachedResultName":"Servicio"},"columns":{"value":{"VAT":"={{ $json.vat }}","Units":"={{ $json.units }}","Value":"={{ $json.price }}","Retention":"={{ $json.retention }}","Description":"={{ $json.description }}"},"schema":[{"id":"Description","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Description","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Value","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Value","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Units","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Units","defaultMatch":false,"canBeUsedToMatch":true},{"id":"VAT","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"VAT","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Retention","type":"number","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Retention","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Total","type":"string","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"Total","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Factura","type":"array","display":true,"removed":true,"readOnly":false,"required":false,"displayName":"Factura","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"create"},"typeVersion":2.1},{"id":"3e0cc576-d6e4-49ef-ae96-1e72451a0e45","name":"Split Services","type":"n8n-nodes-base.splitOut","position":[336,-384],"parameters":{"options":{},"fieldToSplitOut":"body.services"},"typeVersion":1},{"id":"e1c5aa9f-2687-493f-b719-8250f73ded7a","name":"Formatting Data","type":"n8n-nodes-base.code","position":[784,-384],"parameters":{"jsCode":"// n8n Code Node - Transform Airtable data to array format with formatting\n\nconst items = $input.all();\n\nconst ids = [];\nconst values = [];\n\nfor (const item of items) {\n  const data = item.json;\n  ids.push(data.id);\n\n  const fields = data.fields;\n\n  const formattedValue = fields.Value.toFixed(2) + '€';\n  const formattedUnits = fields.Units;\n  const formattedVAT = fields.VAT + '%';\n  const formattedRetention = fields.Retention === 0 ? '0%' : '-' + fields.Retention + '%';\n  const formattedTotal = fields.Total.toFixed(2) + '€';\n\n  const valueArray = [\n    fields.Description,\n    formattedValue,\n    formattedUnits,\n    formattedVAT,\n    formattedRetention,\n    formattedTotal\n  ];\n\n  values.push(valueArray);\n}\n\nreturn {\n  json: {\n    id: ids,\n    values: {\n      values: values\n    }\n  }\n};"},"typeVersion":2},{"id":"fd0eb607-53b0-4c2c-b4e5-a9a9a9be49fd","name":"Get Previous Invoices","type":"n8n-nodes-base.airtable","position":[1008,-384],"parameters":{"base":{"__rl":true,"mode":"list","value":"YOUR_AIRTABLE_BASE_ID","cachedResultName":"Your Airtable Base"},"table":{"__rl":true,"mode":"list","value":"YOUR_INVOICE_TABLE_ID","cachedResultName":"Factura"},"options":{},"operation":"search"},"typeVersion":2.1,"alwaysOutputData":true},{"id":"061b0353-3969-4111-b3bc-63deb1be87e1","name":"Generate Invoice #","type":"n8n-nodes-base.code","position":[112,-176],"parameters":{"jsCode":"// n8n Code Node - Invoice Number Generator (JavaScript)\n\nconst currentYear = new Date().getFullYear();\nconst invoices = $input.all();\n\nlet maxNumber = 0;\n\nfor (const invoice of invoices) {\n  const invoiceNum = invoice.json['Invoice #'];\n\n  if (invoiceNum) {\n    const parts = invoiceNum.split('-');\n\n    if (parts.length === 2) {\n      const year = parseInt(parts[0]);\n      const number = parseInt(parts[1]);\n\n      if (year === currentYear && !isNaN(number)) {\n        maxNumber = Math.max(maxNumber, number);\n      }\n    }\n  }\n}\n\nconst nextNumber = maxNumber + 1;\nconst paddedNumber = nextNumber.toString().padStart(4, '0');\nconst nextInvoiceNumber = `${currentYear}-${paddedNumber}`;\n\nreturn {\n  json: {\n    nextInvoiceNumber: nextInvoiceNumber,\n    year: currentYear,\n    sequenceNumber: nextNumber,\n    lastInvoiceNumber: maxNumber > 0 ? `${currentYear}-${maxNumber.toString().padStart(4, '0')}` : 'None'\n  }\n};"},"typeVersion":2},{"id":"81ac9e60-1449-4dff-b09a-c8e5e91e1d1c","name":"Copy Invoice Template","type":"n8n-nodes-base.googleDrive","position":[336,-176],"parameters":{"name":"={{ $json.nextInvoiceNumber }}_Factura","fileId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEETS_TEMPLATE_FILE_ID"},"driveId":{"__rl":true,"mode":"list","value":"My Drive","cachedResultName":"My Drive"},"options":{},"folderId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_DRIVE_OUTPUT_FOLDER_ID"},"operation":"copy","sameFolder":false},"typeVersion":3},{"id":"b5f35fce-d2c9-461e-a581-8b3250748d99","name":"Add Services to Invoice","type":"n8n-nodes-base.httpRequest","position":[560,-176],"parameters":{"url":"=https://sheets.googleapis.com/v4/spreadsheets/{{ $json.id }}/values/A19:append","method":"POST","options":{},"jsonBody":"={{ $('Formatting Data').first().json.values }}","sendBody":true,"sendQuery":true,"specifyBody":"json","authentication":"predefinedCredentialType","queryParameters":{"parameters":[{"name":"valueInputOption","value":"USER_ENTERED"},{"name":"insertDataOption","value":"INSERT_ROWS"}]},"nodeCredentialType":"googleSheetsOAuth2Api"},"typeVersion":4.3},{"id":"7aeabe32-d087-424a-a12e-89162500ea68","name":"Get Client Info","type":"n8n-nodes-base.airtable","position":[784,-176],"parameters":{"id":"={{ $('Webhook').first().json.body.clientId }}","base":{"__rl":true,"mode":"list","value":"YOUR_AIRTABLE_BASE_ID","cachedResultName":"Your Airtable Base"},"table":{"__rl":true,"mode":"list","value":"YOUR_CLIENT_TABLE_ID","cachedResultName":"Client"},"options":{}},"typeVersion":2.1},{"id":"4f80ca1f-631e-4cfc-8a12-c433d1b8996c","name":"Add Client Info","type":"n8n-nodes-base.httpRequest","position":[1008,-176],"parameters":{"url":"=https://sheets.googleapis.com/v4/spreadsheets/{{ $('Add Services to Invoice').item.json.spreadsheetId }}:batchUpdate","method":"POST","options":{},"jsonBody":"={\n  \"requests\": [\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"invoice_date\",\n        \"replacement\": \"{{ $('Webhook').first().json.body.date }}\",\n        \"matchEntireCell\": true\n      }\n    },\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"invoice_number\",\n        \"replacement\": \"{{ $('Generate Invoice #').item.json.nextInvoiceNumber }}\",\n        \"matchEntireCell\": true\n      }\n    },\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"billingName\",\n        \"replacement\": \"{{ $json.Name }}\",\n        \"matchEntireCell\": true\n      }\n    },\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"billingId\",\n        \"replacement\": \"{{ $json.ID }}\",\n        \"matchEntireCell\": true\n      }\n    },\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"billingAddress\",\n        \"replacement\": \"{{ $json.Address }}\",\n        \"matchEntireCell\": true\n      }\n    },\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"billingCity\",\n        \"replacement\": \"{{ $json.City }}\",\n        \"matchEntireCell\": true\n      }\n    },\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"billingCountry\",\n        \"replacement\": \"{{ $json.Country }}\",\n        \"matchEntireCell\": true\n      }\n    }\n\n  ]\n} ","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"googleSheetsOAuth2Api"},"typeVersion":4.3},{"id":"c5aa8cf1-76f9-4f3d-8083-58da584563d4","name":"Create a record1 (template)","type":"n8n-nodes-base.airtable","position":[112,48],"parameters":{"base":{"__rl":true,"mode":"list","value":"YOUR_AIRTABLE_BASE_ID","cachedResultName":"Your Airtable Base"},"table":{"__rl":true,"mode":"list","value":"YOUR_INVOICE_TABLE_ID","cachedResultName":"Factura"},"columns":{"value":{"Date":"={{ $('Webhook').first().json.body.date }}","Client":"={{ $('Webhook').first().json.body.clientId }}","Service":"={{ $('Formatting Data').first().json.id }}","Invoice #":"={{ $('Generate Invoice #').item.json.nextInvoiceNumber }}"},"schema":[{"id":"Invoice #","type":"string","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Invoice #","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Date","type":"dateTime","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Client","type":"array","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Client","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Service","type":"array","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Service","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Invoice","type":"array","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Invoice","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{"typecast":true},"operation":"create"},"typeVersion":2.1},{"id":"687a7047-3202-4992-a20f-f4e268e31f2e","name":"Add Invoice Summary Info","type":"n8n-nodes-base.httpRequest","position":[336,48],"parameters":{"url":"=https://sheets.googleapis.com/v4/spreadsheets/{{ $('Add Services to Invoice').item.json.spreadsheetId }}:batchUpdate","method":"POST","options":{},"jsonBody":"={\n  \"requests\": [\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"total_taxable_base\",\n        \"replacement\": \"{{ Number($json.fields.Total_Taxable_Base).toFixed(2) + '€' }}\",\n        \"matchEntireCell\": true\n      }\n    },\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"total_vat\",\n        \"replacement\": \"{{ Number($json.fields['Total VAT']).toFixed(2) + '€' }}\",\n        \"matchEntireCell\": true\n      }\n    },\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"total_retention\",\n        \"replacement\": \"{{'-'+ Number($json.fields['Total Retention']).toFixed(2) + '€' }}\",\n        \"matchEntireCell\": true\n      }\n    },\n    {\n      \"findReplace\": {\n        \"sheetId\": \"0\",\n        \"find\": \"total_total\",\n        \"replacement\": \"{{ Number($json.fields.Total).toFixed(2) + '€' }}\",\n        \"matchEntireCell\": true\n      }\n    }\n\n  ]\n} ","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"googleSheetsOAuth2Api"},"typeVersion":4.3},{"id":"26ba7f66-02c0-4160-8766-fde3e9af4ad6","name":"Share file","type":"n8n-nodes-base.googleDrive","position":[560,48],"parameters":{"fileId":{"__rl":true,"mode":"id","value":"={{ $json.spreadsheetId }}"},"options":{},"operation":"share","permissionsUi":{"permissionsValues":{"role":"reader","type":"anyone"}}},"typeVersion":3},{"id":"d4f2a694-b239-48ed-a1b6-6da33e66c30e","name":"Update record","type":"n8n-nodes-base.airtable","position":[784,48],"parameters":{"base":{"__rl":true,"mode":"list","value":"YOUR_AIRTABLE_BASE_ID","cachedResultName":"Your Airtable Base"},"table":{"__rl":true,"mode":"list","value":"YOUR_INVOICE_TABLE_ID","cachedResultName":"Factura"},"columns":{"value":{"id":"={{ $('Create a record1').item.json.id }}","Invoice":"=[{\"url\":\"https://docs.google.com/spreadsheets/d/{{ $('Add Invoice Summary Info').item.json.spreadsheetId }}/export?format=pdf\"}]"},"schema":[{"id":"id","type":"string","display":true,"removed":false,"readOnly":true,"required":false,"displayName":"id","defaultMatch":true},{"id":"Invoice","type":"array","display":true,"removed":false,"readOnly":false,"required":false,"displayName":"Invoice","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["id"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update"},"typeVersion":2.1},{"id":"c55694e2-5220-4cfd-aceb-36ae2ca08d39","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-912,-368],"parameters":{"width":928,"height":720,"content":"# Automated Invoice Generator (Airtable + Google Sheets)\n\nThis workflow completely automates the invoicing process by turning raw JSON data into a formatted PDF and syncing it with your CRM. It specifically handles **multiple line items**, ensuring detailed breakdowns on your invoices.\n\n### How it works\n1. **Webhook Trigger:** Receives a payload containing a Client ID and a list of Services (items).\n2. **Line Item Processing:** Splits the list of services and creates individual records in your Airtable \"Services\" table.\n3. **Template Generation:** Duplicates a master Google Sheet template, fills in the client details and dynamic service rows, and calculates totals.\n4. **CRM Sync:** Creates a master \"Invoice\" record in Airtable, generates a shareable PDF link from Drive, and attaches the file back to the Airtable record.\n\n### Setup steps\n1. **Airtable:** Create 3 tables (Clients, Invoices, Services) and link them.\nAirtable Template: [https://airtable.com/appUL5P7KN2Kqsgsf/shr5vCMwg2o4Z5wZI](https://airtable.com/appUL5P7KN2Kqsgsf/shr5vCMwg2o4Z5wZI)\n2. **Google Drive:** Create a Google Sheet template with placeholders (e.g., `{{clientName}}`).\nGoogle Sheets Template: [https://docs.google.com/spreadsheets/d/1XF9vcbsgYqDDgQwBn4RNtnzCkBjbk3jmKU7MBgIXtbo/edit?usp=sharing](https://docs.google.com/spreadsheets/d/1XF9vcbsgYqDDgQwBn4RNtnzCkBjbk3jmKU7MBgIXtbo/edit?usp=sharing)\n3. **Credentials:** Connect your Google Drive and Airtable credentials in the respective nodes.\n4. **Webhook:** Ensure your frontend sends a JSON body with `clientId` and an array of `services`.\n\n### 👋 Need help building this? Want to automate & scale your business?\nI help businesses automate their \"boring work\" so they can focus on sales.\n- https://www.linkedin.com/in/sergiomedinah/\n- https://sergio-medina.com/"},"typeVersion":1},{"id":"b0179c1c-51af-48b7-b6c7-af62cae8e6f1","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[1200,-400],"parameters":{"color":7,"width":528,"content":"## Process Line Items\nIterates through the incoming list of services, logging each one into the Airtable \"Services\" table and preparing the data for the invoice."},"typeVersion":1},{"id":"2636e5e0-c08b-4501-842d-35a4026c0806","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1200,-208],"parameters":{"color":7,"width":528,"content":"## Fill Template\nCalculates the new invoice number, duplicates the Google Sheet template, and maps the service rows and client details into the file."},"typeVersion":1},{"id":"1c027410-a3d7-4641-842d-cc25be66df3a","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1200,-16],"parameters":{"color":7,"width":528,"content":"## Finalize & Sync\nCreates the master Invoice record in Airtable, generates a public PDF link from Google Drive, and attaches the final document to the CRM record."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"95422eca-c691-4c4c-b08e-850e118a3b15","connections":{"Webhook":{"main":[[{"node":"Split Services","type":"main","index":0}]]},"Share file":{"main":[[{"node":"Update record","type":"main","index":0}]]},"Split Services":{"main":[[{"node":"Add Service to DB","type":"main","index":0}]]},"Add Client Info":{"main":[[{"node":"Create a record1 (template)","type":"main","index":0}]]},"Formatting Data":{"main":[[{"node":"Get Previous Invoices","type":"main","index":0}]]},"Get Client Info":{"main":[[{"node":"Add Client Info","type":"main","index":0}]]},"Add Service to DB":{"main":[[{"node":"Formatting Data","type":"main","index":0}]]},"Generate Invoice #":{"main":[[{"node":"Copy Invoice Template","type":"main","index":0}]]},"Copy Invoice Template":{"main":[[{"node":"Add Services to Invoice","type":"main","index":0}]]},"Get Previous Invoices":{"main":[[{"node":"Generate Invoice #","type":"main","index":0}]]},"Add Services to Invoice":{"main":[[{"node":"Get Client Info","type":"main","index":0}]]},"Add Invoice Summary Info":{"main":[[{"node":"Share file","type":"main","index":0}]]},"Create a record1 (template)":{"main":[[{"node":"Add Invoice Summary Info","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":19,"nodeTypes":{"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.airtable":{"count":6},"n8n-nodes-base.splitOut":{"count":1},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.googleDrive":{"count":2},"n8n-nodes-base.httpRequest":{"count":3}}},"status":"published","readyToDemo":null,"user":{"name":"Sergio Medina","username":"sergio-medina","bio":"Automation Expert helping B2B companies win more customers, free up hours & focus on growth—all with hands-off automated workflows.","verified":false,"links":["https://sergio-medina.com"],"avatar":"https://gravatar.com/avatar/bf2bdda14ee7b0fe91eafd5238c5fcc48ae4130e8c4570262213553404d14289?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":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":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"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/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"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/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/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/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/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, 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/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/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"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/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-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"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":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":1239,"icon":"file:splitOut.svg","name":"n8n-nodes-base.splitOut","codex":{"data":{"alias":["Split","Nested","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitout/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Split Out"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjOUI2REQ1IiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQ4MCAxNDhjMC02LjYyNy01LjM3My0xMi0xMi0xMkgzMjJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxNDZjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptMCA5NmMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDMyMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDE0NmM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem0wIDk2YzAtNi42MjctNS4zNzMtMTItMTItMTJIMzIyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTQ2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNNDM4IDc2YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMzA5Ljc4M2MtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMydjU2YzAgMjYuOTc4LTEwLjI3MiA1MS41NTctMjcuMTE5IDcwLjAzOS01LjA1NSA1LjU0NS01LjA1NSAxNC4zNzcgMCAxOS45MjIgMTYuODQ3IDE4LjQ4MiAyNy4xMTkgNDMuMDYxIDI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMySDQyNmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMzA5Ljc4M2MtNDQuMTgzIDAtODAtMzUuODE3LTgwLTgwdi01NmMwLTMwLjkyOC0yNS4wNzItNTYtNTYtNTZhNS43ODMgNS43ODMgMCAwIDEtNS43ODMtNS43ODN2LTM2LjQzNGE1Ljc4MyA1Ljc4MyAwIDAgMSA1Ljc4My01Ljc4M2MzMC45MjggMCA1Ni0yNS4wNzIgNTYtNTZ2LTU2YzAtNDQuMTgzIDM1LjgxNy04MCA4MC04MEg0MjZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMzYgMjQ0YzAtNi42MjctNS4zNzMtMTItMTItMTJIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxMTJjNi42MjcgMCAxMi01LjM3MyAxMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik01MTIgMEgwdjUxMmg1MTJ6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+"},"displayName":"Split Out","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":34,"name":"Invoice Processing"}],"image":[]}}