{"workflow":{"id":12638,"name":"Manage supplier quote requests and follow-ups with Gmail, Sheets, GPT-4o-mini and WhatsApp","views":107,"recentViews":0,"totalViews":107,"createdAt":"2026-01-11T12:30:51.146Z","description":"Eliminate 90% of manual work in procurement by automating quote requests, response tracking, price extraction, and supplier follow-ups. This complete automation handles everything from sending personalized emails to extracting pricing data with AI and sending WhatsApp reminders—so you can focus on decision-making, not data entry.\nThis all-in-one workflow transforms a 5-hour manual process into a 10-minute review task, saving 15-20 hours per month while improving supplier response rates by 30%.\n\nHow it works\nThis workflow contains 4 independent automation modules running on separate schedules:\n\nQuote Request Sender (Manual trigger)\n\nReads supplier list from Google Sheets\nSends personalized emails via Gmail with category and deadline\nLogs all requests with timestamps to tracking sheet\n\nResponse Monitor (Hourly schedule)\n\nAutomatically checks Gmail for supplier replies with attachments\nUpdates tracking sheet status to \"Quote Received\"\nZero manual email monitoring required\n\nAI Price Extraction (Manual trigger)\n\nDownloads PDF/Excel attachments from emails\nExtracts text using n8n's built-in parser\nSends to OpenAI GPT-4o-mini to identify products, prices, quantities, currencies\nSaves structured data to Price Comparison sheet\n\nWhatsApp Follow-ups (Daily at 9 AM)\n\nChecks for non-responsive suppliers\nSends smart reminders at Day 3, 5, and 7 with escalating urgency\nFalls back to email if no phone number\nLogs all follow-up history\n\nEach module shares data through Google Sheets while running independently.\nSet up steps\nTime to set up: 20-30 minutes\n\nCreate two Google Sheets: \"Quote Tracking\" (with columns: supplier_name, supplier_email, category, request_date, status, quote_received, phone_number, last_follow_up, follow_up_count) and \"Price Comparison\" (with columns: supplier_name, supplier_email, product_name, price, currency, quantity, extracted_date, source_file)\n\nConnect credentials: Gmail OAuth, Google Sheets OAuth (same account), OpenAI API key, Twilio Account SID + Auth Token\nUpdate all Google Sheet IDs in every Google Sheets node (8 nodes total across all modules)\n\nConfigure Twilio WhatsApp sandbox: Go to Twilio Console → Messaging → WhatsApp → Send join code from your phone → Update \"From\" number in Send WhatsApp node\nAdd 2-3 test suppliers to Tracking Sheet with your email addresses using + trick (yourname+supplier1@gmail.com) and phone numbers in international format\nTest each module: Execute Quote Sender → Reply to test email with PDF → Execute AI Extraction → Set supplier date to 3 days ago → Test Follow-ups\nActivate schedules for Response Monitor (hourly) and Follow-ups (daily at 9 AM)\n\nDetailed node configurations and troubleshooting tips are included in sticky notes throughout the workflow canvas.\n\nRequirements\n\nGmail account with API access\nGoogle Sheets (2 sheets)\nOpenAI API account (~$5-15/month)\nTwilio account with WhatsApp (~$10-20/month)\nn8n (any version supporting HTTP Request node)\n\nWho is this for\n\nProcurement teams managing multiple supplier quotes\nSmall businesses comparing vendor prices\nOperations managers handling RFQs\nPurchasing departments drowning in email attachments\nAnyone collecting and tracking supplier pricing at scale\n\nTime savings: From 5 hours to 10 minutes per quote cycle (90% reduction)\nResponse rate improvement: 50% → 80% with automated follow-ups\nAccuracy: 95%+ AI extraction accuracy vs 5-10% manual data entry errors","workflow":{"id":"l1ojAUoUcm8l975s","meta":{"instanceId":"3d22ada45908e4f4f81780810af06268958a84213c7095cd8d329adee74ded51"},"name":"Request and manage supplier quotes with automation","tags":[],"nodes":[{"id":"8884e1ed-76a1-46b6-936c-e3e28da125a3","name":"No Operation, do nothing1","type":"n8n-nodes-base.noOp","position":[400,-80],"parameters":{},"typeVersion":1},{"id":"3592e269-6faf-4d02-b08c-7477fcebff7c","name":"No Operation, do nothing","type":"n8n-nodes-base.noOp","position":[-80,672],"parameters":{},"typeVersion":1},{"id":"f02df9a1-5d0c-47d4-88ce-44937c8cee54","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1344,-672],"parameters":{"color":3,"width":400,"height":80,"content":"### WORKFLOW 2: RESPONSE MONITORING"},"typeVersion":1},{"id":"0d656144-eeb2-4ac8-a412-61f5f92da354","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-1360,-272],"parameters":{"color":2,"width":336,"height":80,"content":"### WORKFLOW 3: AI PRICE EXTRACTION"},"typeVersion":1},{"id":"e8cbd10e-a3c4-4788-bf76-bd5c20f8aa77","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-1408,416],"parameters":{"color":4,"width":416,"height":80,"content":"### WORKFLOW 4: WHATSAPP FOLLOW-UPS"},"typeVersion":1},{"id":"fd47901f-4c62-4289-b8e9-98fd38bbdd95","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-2800,-576],"parameters":{"width":928,"height":688,"content":"### Overview\nEliminate 90% of manual work in procurement by automating quote requests, response tracking, price extraction, and supplier follow-ups. \n\n### How it works\nThis workflow contains 4 independent automation modules that work together:\n Workflow 1: Quote Request Sender\nWorkflow 2: Response Monitor \nWorkflow 3: AI Price Extraction\nWorkflow 4: WhatsApp Follow-ups\n\n### How to set up\n#### 1. Create Google Sheets\nCreate \"Supplier_list\" sheet with columns: supplier_name | supplier_email | category | request_date | status | quote_received | phone_number | last_follow_up | follow_up_count\nCreate \"Price Comparison\" sheet with columns: supplier_name | supplier_email | product_name | price | currency | quantity | extracted_date | source_file\nShare both sheets or enable API access\n\n#### 2. Connect API Credentials\nGmail OAuth: For sending/receiving emails (both Quote Sender and Response Monitor modules)\nGoogle Sheets OAuth: Use same account as Gmail (all modules)\nOpenAI API key: For AI price extraction (Module 3)\nTwilio Account: SID + Auth Token for WhatsApp (Module 4)\n\n#### 3. Configure Workflow\nUpdate all Google Sheet IDs in every Google Sheets node\nConfigure Gmail credentials on all Gmail nodes \nAdd OpenAI API key to HTTP Request node or Information Extractor\nConfigure Twilio credentials and join WhatsApp sandbox\n"},"typeVersion":1},{"id":"d6143e93-6ac1-4c9e-8991-6bec49c53640","name":"Reach out to suppliers","type":"n8n-nodes-base.gmail","position":[-1008,-944],"webhookId":"90158b16-28b1-4f77-a9aa-31ff81e7ad93","parameters":{"sendTo":"={{ $json.email }}","message":"=<html>\n<body>\n<p>Dear {{ $json.name }},</p>\n\n<p>We hope this email finds you well.</p>\n\n<p>We would like to request a price quote for the following category: <strong>{{ $json.category }}</strong></p>\n\n<p><strong>Required Information:</strong></p>\n<ul>\n  <li>Current price list</li>\n  <li>Bulk pricing discounts (if applicable)</li>\n  <li>Lead time</li>\n  <li>Payment terms</li>\n</ul>\n\n<p>Please send your quote by <strong>{{ $now.plus(7, 'days').toFormat('yyyy-MM-dd') }}</strong></p>\n\n<p>You can reply to this email with your price list attached (PDF or Excel format).</p>\n\n<p>Best regards,<br>\nProcurement Team</p>\n</body>\n</html>","options":{"appendAttribution":false},"subject":"=Price Quote Request - {{ $json.category }}"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Gmail account"}},"typeVersion":2.1},{"id":"c48717c0-b4d1-4eed-a325-a06749505667","name":"Save to Price Sheet","type":"n8n-nodes-base.googleSheets","position":[48,-208],"parameters":{"columns":{"value":{"notes":"={{ $json.notes }}","price":"={{ $json.price }}","category":"={{ $json.category }}","currency":"={{ $json.currency }}","quantity":"={{ $json.quantity }}","source_file":"={{ $json.source_file }}","product_name":"={{ $json.product_name }}","supplier_name":"={{ $json.supplier_name }}","extracted_date":"={{ $json.extracted_date }}","supplier_email":"={{ $json.supplier_email }}"},"schema":[{"id":"supplier_name","type":"string","display":true,"required":false,"displayName":"supplier_name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"supplier_email","type":"string","display":true,"required":false,"displayName":"supplier_email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"product_name","type":"string","display":true,"required":false,"displayName":"product_name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"price","type":"string","display":true,"required":false,"displayName":"price","defaultMatch":false,"canBeUsedToMatch":true},{"id":"currency","type":"string","display":true,"required":false,"displayName":"currency","defaultMatch":false,"canBeUsedToMatch":true},{"id":"quantity","type":"string","display":true,"required":false,"displayName":"quantity","defaultMatch":false,"canBeUsedToMatch":true},{"id":"notes","type":"string","display":true,"required":false,"displayName":"notes","defaultMatch":false,"canBeUsedToMatch":true},{"id":"extracted_date","type":"string","display":true,"required":false,"displayName":"extracted_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"category","type":"string","display":true,"removed":false,"required":false,"displayName":"category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"source_file","type":"string","display":true,"removed":false,"required":false,"displayName":"source_file","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xHbz1EZQlnhjqP0sZFXEIVjo_Jqs4_PHbBMeeyjPVyk/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1xHbz1EZQlnhjqP0sZFXEIVjo_Jqs4_PHbBMeeyjPVyk","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xHbz1EZQlnhjqP0sZFXEIVjo_Jqs4_PHbBMeeyjPVyk/edit?usp=drivesdk","cachedResultName":"Price Comparison Sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4},{"id":"66cdab4d-7126-4865-a6bc-a26dae655e7b","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-560,240],"parameters":{"color":5,"width":256,"height":432,"content":"#### Configure Twilio WhatsApp Sandbox\n\nGo to Twilio Console → Messaging → Try it out → WhatsApp\nSend the join code from your phone (e.g., \"join happy-elephant\")\nCopy your sandbox number (e.g., +1 415 523 8886)\nUpdate \"From\" number in Send WhatsApp node\n"},"typeVersion":1},{"id":"47bd8e53-a970-4d0f-a350-64d7b36c2197","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-560,-240],"parameters":{"color":4,"width":320,"height":464,"content":"### Extract information from downloaded Pdf attachment\n\nObtain your API from https://platform.openai.com and connect your credentials"},"typeVersion":1},{"id":"c4a6eb32-9b12-4db7-b982-f790ee1a30b7","name":"Information Extractor","type":"@n8n/n8n-nodes-langchain.informationExtractor","position":[-512,-80],"parameters":{"text":"={{ $json.document_text }}","options":{"systemPromptTemplate":"You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute's value."},"attributes":{"attributes":[{"name":"Invoice Number","required":true,"description":"The Number of the Invoice"},{"name":"Client Name","required":true,"description":"Name of the client"},{"name":"Client Email","required":true,"description":"Email address of the client"},{"name":"Total Amount","required":true,"description":"Total Amount Due in the Invoice"},{"name":"Invoice Date","required":true,"description":"Date of the Invoice"},{"name":"Due Date","description":"Date with the invoice is due"},{"name":"Products List","required":true,"description":"Extract ALL products as a JSON string. Format: [{\"product_name\": \"name\", \"price\": 100, \"quantity\": \"1 unit\", \"currency\": \"NGN\"}]"},{"name":"supplier_phone","required":true,"description":"Extract the supplier's phone number from the document. Look for phone, mobile, or contact number"}]}},"typeVersion":1},{"id":"37a01b6c-1040-4e55-b5e9-6f457e50ccf0","name":"Execute workflow","type":"n8n-nodes-base.manualTrigger","position":[-1584,-944],"parameters":{},"typeVersion":1},{"id":"e38ca5d0-59a7-40c6-9275-ee134c237c63","name":"Trigger workflow every hour","type":"n8n-nodes-base.scheduleTrigger","position":[-1712,-432],"parameters":{"rule":{"interval":[{"field":"hours"}]}},"typeVersion":1.2},{"id":"a8ae81e6-f54c-4a21-b72c-1cb4c76cc1f3","name":"Trigger workflow daily","type":"n8n-nodes-base.scheduleTrigger","position":[-1760,-80],"parameters":{"rule":{"interval":[{"field":"hours"}]}},"typeVersion":1.3},{"id":"158cd842-3cc3-4422-9221-ae67195ecb84","name":"Trigger workflow daily1","type":"n8n-nodes-base.scheduleTrigger","position":[-1760,720],"parameters":{"rule":{"interval":[{}]}},"typeVersion":1.2},{"id":"7dc4af35-2112-4499-a9fb-ba760329f1e7","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1408,-1088],"parameters":{"width":288,"height":352,"content":"\nCode in JavaScript hardcodes the details of the suppliers. This can however be customized by changing the node to fetch the details from different sources."},"typeVersion":1},{"id":"2820ea83-a045-4f41-a675-6d3e387e1661","name":"Hardcode suppliers details","type":"n8n-nodes-base.code","position":[-1344,-944],"parameters":{"jsCode":"const suppliers = [\n  { name: \"ABC Electronics\", email: \"user@example.com\", category: \"Electronics\" },\n  { name: \"XYZ Hardware\", email: \"user@example.com\", category: \"Hardware\" },\n  { name: \"Tech Solutions\", email: \"user@example.com\", category: \"Software\" }\n];\n\nreturn suppliers.map(s => ({ json: s }));"},"typeVersion":2},{"id":"5e86a720-a02d-4fb7-9ef2-5d2b2e706eb8","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[-1024,-1056],"parameters":{"color":4,"width":368,"height":320,"content":"Reach out to suppliers and log details of suppliers to supplier_list sheet."},"typeVersion":1},{"id":"6b4e3235-f004-4cfc-91c8-eef21ce76112","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[-1520,-528],"parameters":{"color":2,"width":544,"content":"Searches mail for responses from suppliers ever hour, if there is a response, node 2 extracts the response, parses the mail and looks out for an attachment."},"typeVersion":1},{"id":"675416b6-adc4-4152-be2d-ec28d44986db","name":"Sticky Note10","type":"n8n-nodes-base.stickyNote","position":[-928,-544],"parameters":{"color":7,"width":400,"content":"If mail has attachment, the true branch returns an out put which is then used to update the quotes_received, follow-up needed and status columns in the supplier sheet."},"typeVersion":1},{"id":"554eacd4-e42b-4c35-8e26-c19ef85150e3","name":"Log to suppliers sheet","type":"n8n-nodes-base.googleSheets","position":[-752,-944],"parameters":{"columns":{"value":{"category":"={{ $('Hardcode suppliers details').item.json.category }}","request_date":"={{ $now.toFormat('yyyy-MM-dd') }}","supplier_name":"={{ $('Hardcode suppliers details').item.json.name }}","supplier_email":"={{ $('Hardcode suppliers details').item.json.email }}","follow_up_needed":"Yes"},"schema":[{"id":"supplier_name","type":"string","display":true,"required":false,"displayName":"supplier_name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"supplier_email","type":"string","display":true,"required":false,"displayName":"supplier_email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"category","type":"string","display":true,"required":false,"displayName":"category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"request_date","type":"string","display":true,"required":false,"displayName":"request_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"removed":false,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"quote_received","type":"string","display":true,"removed":false,"required":false,"displayName":"quote_received","defaultMatch":false,"canBeUsedToMatch":true},{"id":"follow_up_needed","type":"string","display":true,"removed":false,"required":false,"displayName":"follow_up_needed","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone_number","type":"string","display":true,"removed":false,"required":false,"displayName":"phone_number","defaultMatch":false,"canBeUsedToMatch":true},{"id":"last_follow_up","type":"string","display":true,"removed":false,"required":false,"displayName":"last_follow_up","defaultMatch":false,"canBeUsedToMatch":true},{"id":"follow_up_count","type":"string","display":true,"removed":false,"required":false,"displayName":"follow_up_count","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit?usp=drivesdk","cachedResultName":"Supplier_sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.4},{"id":"87bca557-d7df-4aa0-8647-e80980130330","name":"Search for quote replies","type":"n8n-nodes-base.gmail","position":[-1504,-432],"webhookId":"5bcf1820-e8c9-4aba-aa97-b6af378e9aba","parameters":{"filters":{"q":"subject:(Price Quote Request OR Re: Price Quote Request) newer_than:7d has:attachment","labelIds":["INBOX"]},"operation":"getAll"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Gmail account"}},"typeVersion":2.1},{"id":"68fd9337-3979-4c75-9e99-f6d55816f6a9","name":"Get email details","type":"n8n-nodes-base.gmail","position":[-1312,-432],"webhookId":"a82f9fac-4f46-4ae2-ad0d-c824048defdb","parameters":{"simple":false,"options":{"downloadAttachments":false},"messageId":"={{ $json.id }}","operation":"get"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Gmail account"}},"typeVersion":2.1},{"id":"45bed9fe-964f-48bc-9f56-5566da53e353","name":"Parse email data","type":"n8n-nodes-base.code","position":[-1104,-432],"parameters":{"jsCode":"// Gmail already parsed the data for us!\nconst fromEmail = $json.from?.value?.[0]?.address || 'user@example.com';\nconst toEmail = $json.to?.value?.[0]?.address || '';\nconst subject = $json.subject || 'No Subject';\n\n// Check if this is a reply to our supplier email (the +supplier emails)\nconst supplierEmail = toEmail.includes('+supplier') ? toEmail : fromEmail;\n\n// Attachments are in binary data (we'll handle in next node)\n// For now, just check if email likely has attachments\nconst hasAttachments = $json.text?.includes('attached') || $json.html?.includes('attached');\n\nreturn [{\n  json: {\n    messageId: $json.id,\n    supplierEmail: supplierEmail,\n    fromEmail: fromEmail,\n    subject: subject,\n    receivedDate: new Date().toISOString().split('T')[0],\n    emailText: $json.text,\n    hasAttachments: hasAttachments\n  }\n}];"},"typeVersion":2},{"id":"1fb50326-40a3-4595-a690-f50e442a02f6","name":"Has attachments?","type":"n8n-nodes-base.if","position":[-912,-432],"parameters":{"options":{},"conditions":{"boolean":[{"value1":"={{ $json.hasAttachments }}","value2":true}]}},"typeVersion":2},{"id":"64e6f57b-2b93-420f-9fb0-aed4bd1a1d00","name":"Update supplier sheet","type":"n8n-nodes-base.googleSheets","position":[-640,-448],"parameters":{"columns":{"value":{"status":"Quote Received","quote_received":"Yes","supplier_email":"={{$json.supplierEmail }}","follow_up_needed":"No"},"schema":[{"id":"supplier_name","type":"string","display":true,"required":false,"displayName":"supplier_name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"supplier_email","type":"string","display":true,"removed":false,"required":false,"displayName":"supplier_email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"category","type":"string","display":true,"required":false,"displayName":"category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"request_date","type":"string","display":true,"required":false,"displayName":"request_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"quote_received","type":"string","display":true,"removed":false,"required":false,"displayName":"quote_received","defaultMatch":false,"canBeUsedToMatch":true},{"id":"follow_up_needed","type":"string","display":true,"removed":false,"required":false,"displayName":"follow_up_needed","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone_number","type":"string","display":true,"removed":false,"required":false,"displayName":"phone_number","defaultMatch":false,"canBeUsedToMatch":true},{"id":"last_follow_up","type":"string","display":true,"removed":false,"required":false,"displayName":"last_follow_up","defaultMatch":false,"canBeUsedToMatch":true},{"id":"follow_up_count","type":"string","display":true,"removed":false,"required":false,"displayName":"follow_up_count","defaultMatch":false,"canBeUsedToMatch":true},{"id":"row_number","type":"number","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["supplier_email"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit?usp=drivesdk","cachedResultName":"Supplier_sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4},{"id":"ac3e5c25-5512-498f-9b05-1c4f324f2616","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-1632,-176],"parameters":{"width":624,"content":"This reads the 'quote received' column of the supplier_list sheet, and outputs the row(s) of the suppliers who has sent their quotes. the Get Supplier node then gets the email using the mail of the supplier gotten from the previous node, and the next node proceeds to download the attachment from that mail."},"typeVersion":1},{"id":"afac5d7c-7381-4d7f-afdf-b2f4fde2eef4","name":"Get quotes to process","type":"n8n-nodes-base.googleSheets","position":[-1552,-80],"parameters":{"options":{},"filtersUI":{"values":[{"lookupValue":"Yes","lookupColumn":"quote_received"}]},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit?usp=drivesdk","cachedResultName":"Supplier_sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4},{"id":"95704505-e499-488c-8e4e-8e36af32a19f","name":"Get supplier email","type":"n8n-nodes-base.gmail","position":[-1344,-80],"webhookId":"86e73dd0-35ad-4a6b-a0ce-f0a62e321a39","parameters":{"limit":10,"filters":{"q":"subject:\"Price Quote Request\" has:attachment newer_than:7d"},"operation":"getAll"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Gmail account"}},"typeVersion":2.1},{"id":"ec168287-7299-4aea-bb5d-d32c6f75dc44","name":"Download all attachments","type":"n8n-nodes-base.gmail","position":[-1136,-80],"webhookId":"ba9fdbef-fdda-46c4-a031-42a36a7e75a9","parameters":{"simple":false,"options":{"downloadAttachments":true},"messageId":"={{ $json.id }}","operation":"get"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Gmail account"}},"typeVersion":2.1},{"id":"05bea877-4305-48f7-8429-ee78c94723c1","name":"Extract from file","type":"n8n-nodes-base.extractFromFile","position":[-928,-80],"parameters":{"options":{},"operation":"pdf","binaryPropertyName":"={{ Object.keys($binary)[0] }}"},"typeVersion":1.1},{"id":"f418f63b-9653-45ea-877b-5db38c7db85c","name":"Prepare for openAI","type":"n8n-nodes-base.code","position":[-720,-80],"parameters":{"jsCode":"// Collect extracted text from all PDF items\nconst items = $input.all();\n\nconst extractedText = items\n  .map(item => item.json.text || item.json.data || '')\n  .filter(t => t.trim() !== '')\n  .join('\\n\\n---\\n\\n');\n\n// Get supplier info safely\nconst quotesData = $('Get quotes to process').all();\nconst supplierData = quotesData.length > 0 ? quotesData[0].json : {};\n\nif (!extractedText) {\n  return [{\n    json: {\n      error: 'No extracted text found',\n      debug_sample: items[0]?.json || {}\n    }\n  }];\n}\n\nreturn [{\n  json: {\n    supplier_name: supplierData.supplier_name || 'Unknown Supplier',\n    supplier_email: supplierData.supplier_email || 'user@example.com',\n    category: supplierData.category || 'Unknown',\n    document_text: extractedText\n  }\n}];\n"},"typeVersion":2},{"id":"e4b02c68-6592-4bb4-b8cb-e6d6e95dc896","name":"Extract key information from invoice","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-416,112],"parameters":{"options":{}},"credentials":{"openAiApi":{"id":"credential-id","name":"OpenAi account"}},"typeVersion":1.1},{"id":"bc888fa7-17f3-496c-8030-17d0e6c19260","name":"Parse model output ","type":"n8n-nodes-base.code","position":[-160,-80],"parameters":{"jsCode":"// Get the products string from Information Extractor\nconst productsString = $input.first().json.output['Products List'] || '[]';\n\n// Parse the JSON string\nlet products = [];\ntry {\n  products = JSON.parse(productsString);\n} catch (error) {\n  return [{\n    json: {\n      error: 'Failed to parse products',\n      raw_string: productsString\n    }\n  }];\n}\n\n// Get supplier info\nconst supplierData = $('Prepare for openAI').first().json;\n\n\n\n// Create one row per product\nreturn products.map(product => ({\n  json: {\n    supplier_name: supplierData.supplier_name,\n    supplier_email: supplierData.supplier_email,\n    category: supplierData.category,\n    product_name: product.product_name,\n    price: parseFloat(product.price) || 0,\n    currency: product.currency || 'NGN',\n    quantity: product.quantity || '1',\n    notes: product.notes || '',\n    source_file: supplierData.file_name || 'unknown',\n    supplier_phone: $input.first().json.output['supplier_phone'] || '',\n    extracted_date: new Date().toISOString().split('T')[0],\n\n  }\n}));\n\n"},"typeVersion":2},{"id":"66c358cf-5a26-4dfc-b829-7c4f17d1d66e","name":"Sticky Note12","type":"n8n-nodes-base.stickyNote","position":[-192,-320],"parameters":{"width":448,"height":560,"content":"Parses extracted output to a valid json format, then updates the 'price comparison' sheet. \n\nAlso updates the supplier_list sheet with the phone number extracted from invoice for record keeping"},"typeVersion":1},{"id":"35e26efe-8357-4905-bafc-247be7fe50de","name":"Update supplier sheet with phone number","type":"n8n-nodes-base.googleSheets","position":[64,64],"parameters":{"columns":{"value":{"phone_number":"={{ $json.supplier_phone }}","supplier_email":"={{ $json.supplier_email }}"},"schema":[{"id":"supplier_name","type":"string","display":true,"required":false,"displayName":"supplier_name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"supplier_email","type":"string","display":true,"removed":false,"required":false,"displayName":"supplier_email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"category","type":"string","display":true,"required":false,"displayName":"category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"request_date","type":"string","display":true,"required":false,"displayName":"request_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"quote_received","type":"string","display":true,"removed":false,"required":false,"displayName":"quote_received","defaultMatch":false,"canBeUsedToMatch":true},{"id":"follow_up_needed","type":"string","display":true,"removed":false,"required":false,"displayName":"follow_up_needed","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone_number","type":"string","display":true,"removed":false,"required":false,"displayName":"phone_number","defaultMatch":false,"canBeUsedToMatch":true},{"id":"last_follow_up","type":"string","display":true,"removed":false,"required":false,"displayName":"last_follow_up","defaultMatch":false,"canBeUsedToMatch":true},{"id":"follow_up_count","type":"string","display":true,"removed":false,"required":false,"displayName":"follow_up_count","defaultMatch":false,"canBeUsedToMatch":true},{"id":"row_number","type":"number","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["supplier_email"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit?usp=drivesdk","cachedResultName":"Supplier_sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4},{"id":"f15c3136-0a6a-4f35-ba5d-e98e1274ef04","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[-1600,592],"parameters":{"color":5,"width":624,"height":208,"content":"Searches the supplier_list sheet to get a list of suppliers who needs a reminder to send their quote. If a follow up is needed, the true branch of the follow up node returns an output."},"typeVersion":1},{"id":"38db00a6-6879-457a-add8-454c0922ff52","name":"Sticky Note13","type":"n8n-nodes-base.stickyNote","position":[-912,512],"parameters":{"color":7,"width":320,"height":336,"content":"A customized message is prepared and sent to suppliers through to phone numbers or their email address if no phone number."},"typeVersion":1},{"id":"9953a097-591d-4969-aea8-a4b3230bdaf0","name":"Prepare message","type":"n8n-nodes-base.code","position":[-896,704],"parameters":{"jsCode":"// Process ALL suppliers that need follow-up\nconst suppliers = $input.all().map(item => item.json);\n\nreturn suppliers.map(supplier => {\n  const requestDate = new Date(supplier.request_date || supplier.request_sent_date);\n  const daysSince = Math.floor((new Date() - requestDate) / (1000 * 60 * 60 * 24));\n  \n  // Create personalized message\n  let message = `Hi ${supplier.supplier_name},\\n\\n`;\n  \n  if (daysSince === 3) {\n    message += `This is a friendly reminder about the price quote we requested ${daysSince} days ago for ${supplier.category}.\\n\\n`;\n    message += `Could you please send us your pricing when you get a chance?\\n\\n`;\n  } else if (daysSince === 5) {\n    message += `Following up on our price quote request from ${daysSince} days ago.\\n\\n`;\n    message += `We'd appreciate receiving your quote soon as we're comparing options.\\n\\n`;\n  } else if (daysSince >= 7) {\n    message += `Final reminder: We requested a quote ${daysSince} days ago for ${supplier.category}.\\n\\n`;\n    message += `Please let us know if you're able to provide pricing.\\n\\n`;\n  }\n  \n  message += `Category: ${supplier.category}\\n`;\n  message += `Original Request: ${requestDate.toLocaleDateString()}\\n\\n`;\n  message += `Thank you!\\nProcurement Team`;\n  \n  // Format phone number\n  let phoneNumber = supplier.phone_number || '';\n  if (phoneNumber && !phoneNumber.startsWith('+')) {\n    phoneNumber = '+' + phoneNumber;\n  }\n  \n  return {\n    json: {\n      supplier_name: supplier.supplier_name,\n      supplier_email: supplier.supplier_email,\n      phone_number: phoneNumber,\n      message: message,\n      days_since_request: daysSince,\n      follow_up_type: daysSince === 3 ? 'First Reminder' : daysSince === 5 ? 'Second Reminder' : 'Final Reminder',\n      follow_up_count: supplier.follow_up_count || 0\n    }\n  };\n});"},"typeVersion":2},{"id":"48088f7d-6ffa-427e-9703-13af427a2e5a","name":"Has phone number?","type":"n8n-nodes-base.if","position":[-720,656],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"a8108698-d4d2-4c1d-81b1-f12c3000e36c","operator":{"type":"string","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.phone_number }}","rightValue":""}]}},"typeVersion":2},{"id":"34154208-d4f2-411f-bac9-91927d5b4822","name":"Send follow-up mail","type":"n8n-nodes-base.gmail","position":[-496,816],"webhookId":"6311f060-b715-464c-b56d-42af078a0512","parameters":{"sendTo":"={{ $json.supplier_email }}","message":"={{ $json.message }}","options":{"appendAttribution":false},"subject":"=Follow-up: Price Quote Request -  {{ $json.supplier_name }}","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Gmail account"}},"typeVersion":2.1},{"id":"f0cffc9e-8fd1-4d49-a008-3d6a82b3b97c","name":"Update follow up count in supplier sheet","type":"n8n-nodes-base.googleSheets","position":[-288,672],"parameters":{"columns":{"value":{"last_follow_up":"={{ $now.toFormat('yyyy-MM-dd') }}","supplier_email":"={{ $('Prepare message').item.json.supplier_email }}","follow_up_count":"={{ parseInt($json.follow_up_count || 0) + 1 }}","follow_up_needed":"No"},"schema":[{"id":"supplier_name","type":"string","display":true,"removed":false,"required":false,"displayName":"supplier_name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"supplier_email","type":"string","display":true,"removed":false,"required":false,"displayName":"supplier_email","defaultMatch":false,"canBeUsedToMatch":true},{"id":"category","type":"string","display":true,"required":false,"displayName":"category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"request_date","type":"string","display":true,"required":false,"displayName":"request_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"status","type":"string","display":true,"required":false,"displayName":"status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"quote_received","type":"string","display":true,"required":false,"displayName":"quote_received","defaultMatch":false,"canBeUsedToMatch":true},{"id":"follow_up_needed","type":"string","display":true,"required":false,"displayName":"follow_up_needed","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone_number","type":"string","display":true,"required":false,"displayName":"phone_number","defaultMatch":false,"canBeUsedToMatch":true},{"id":"last_follow_up","type":"string","display":true,"required":false,"displayName":"last_follow_up","defaultMatch":false,"canBeUsedToMatch":true},{"id":"follow_up_count","type":"string","display":true,"required":false,"displayName":"follow_up_count","defaultMatch":false,"canBeUsedToMatch":true},{"id":"row_number","type":"number","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["supplier_email"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit?usp=drivesdk","cachedResultName":"Supplier_sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4},{"id":"99933e9c-5b6c-43a3-a487-5d67e086573b","name":"Any follow-ups needed?","type":"n8n-nodes-base.if","position":[-1120,720],"parameters":{"options":{},"conditions":{"number":[{"value1":"={{ $json.length }}","value2":0,"operation":"larger"}]}},"typeVersion":2},{"id":"df549c40-cced-411d-923e-4d34b0bbc765","name":"Filter pending quotes","type":"n8n-nodes-base.code","position":[-1328,720],"parameters":{"jsCode":"// Check which quotes need follow-up\nconst today = new Date();\nconst quotes = $input.all().map(item => item.json);\n\nconst needFollowUp = quotes.filter(quote => {\n  // Skip if already received\n  if (quote.quote_received === 'Yes') {\n    return false;\n  }\n  \n  // Calculate days since request\n  const requestDate = new Date(quote.request_date || quote.request_sent_date);\n  const daysSince = Math.floor((today - requestDate) / (1000 * 60 * 60 * 24));\n  \n  // Follow up after 3 days, then 5 days, then 7 days\n  const shouldFollowUp = daysSince === 3 || daysSince === 5 || daysSince === 7;\n  \n  return shouldFollowUp;\n});\n\nreturn needFollowUp.map(quote => ({ json: quote }));"},"typeVersion":2},{"id":"0b0e3c85-e225-4480-b327-297e9c269e54","name":"Get all quotes","type":"n8n-nodes-base.googleSheets","position":[-1536,720],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit#gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"list","value":"1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1xrurRmmG-RRXdDLVuVjE3T_7l1xP1CFq10t2E5uIwF8/edit?usp=drivesdk","cachedResultName":"Supplier_sheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4},{"id":"95d43639-452f-4ab6-9b0b-bea44864acfe","name":"Send WhatsApp follow-up message","type":"n8n-nodes-base.twilio","position":[-496,496],"parameters":{"to":"={{ $json.phone_number }}","from":"+1234567890","message":"={{ $json.message }}","options":{},"toWhatsapp":true},"credentials":{"twilioApi":{"id":"credential-id","name":"Twilio account"}},"typeVersion":1}],"active":false,"pinData":{},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"d95bbeb3-ab89-4fb1-8ff0-0972e6458e8f","connections":{"Get all quotes":{"main":[[{"node":"Filter pending quotes","type":"main","index":0}]]},"Prepare message":{"main":[[{"node":"Has phone number?","type":"main","index":0}]]},"Execute workflow":{"main":[[{"node":"Hardcode suppliers details","type":"main","index":0}]]},"Has attachments?":{"main":[[{"node":"Update supplier sheet","type":"main","index":0}]]},"Parse email data":{"main":[[{"node":"Has attachments?","type":"main","index":0}]]},"Extract from file":{"main":[[{"node":"Prepare for openAI","type":"main","index":0}]]},"Get email details":{"main":[[{"node":"Parse email data","type":"main","index":0}]]},"Has phone number?":{"main":[[{"node":"Send WhatsApp follow-up message","type":"main","index":0}],[{"node":"Send follow-up mail","type":"main","index":0}]]},"Get supplier email":{"main":[[{"node":"Download all attachments","type":"main","index":0}]]},"Prepare for openAI":{"main":[[{"node":"Information Extractor","type":"main","index":0}]]},"Parse model output ":{"main":[[{"node":"Update supplier sheet with phone number","type":"main","index":0},{"node":"Save to Price Sheet","type":"main","index":0}]]},"Save to Price Sheet":{"main":[[{"node":"No Operation, do nothing1","type":"main","index":0}]]},"Send follow-up mail":{"main":[[{"node":"Update follow up count in supplier sheet","type":"main","index":0}]]},"Filter pending quotes":{"main":[[{"node":"Any follow-ups needed?","type":"main","index":0}]]},"Get quotes to process":{"main":[[{"node":"Get supplier email","type":"main","index":0}]]},"Information Extractor":{"main":[[{"node":"Parse model output ","type":"main","index":0}]]},"Any follow-ups needed?":{"main":[[{"node":"Prepare message","type":"main","index":0}]]},"Reach out to suppliers":{"main":[[{"node":"Log to suppliers sheet","type":"main","index":0}]]},"Trigger workflow daily":{"main":[[{"node":"Get quotes to process","type":"main","index":0}]]},"Trigger workflow daily1":{"main":[[{"node":"Get all quotes","type":"main","index":0}]]},"Download all attachments":{"main":[[{"node":"Extract from file","type":"main","index":0}]]},"Search for quote replies":{"main":[[{"node":"Get email details","type":"main","index":0}]]},"Hardcode suppliers details":{"main":[[{"node":"Reach out to suppliers","type":"main","index":0}]]},"Trigger workflow every hour":{"main":[[{"node":"Search for quote replies","type":"main","index":0}]]},"Send WhatsApp follow-up message":{"main":[[{"node":"Update follow up count in supplier sheet","type":"main","index":0}]]},"Extract key information from invoice":{"ai_languageModel":[[{"node":"Information Extractor","type":"ai_languageModel","index":0}]]},"Update follow up count in supplier sheet":{"main":[[{"node":"No Operation, do nothing","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":46,"nodeTypes":{"n8n-nodes-base.if":{"count":3},"n8n-nodes-base.code":{"count":6},"n8n-nodes-base.noOp":{"count":2},"n8n-nodes-base.gmail":{"count":6},"n8n-nodes-base.twilio":{"count":1},"n8n-nodes-base.stickyNote":{"count":14},"n8n-nodes-base.googleSheets":{"count":7},"n8n-nodes-base.manualTrigger":{"count":1},"n8n-nodes-base.extractFromFile":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":3},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":1},"@n8n/n8n-nodes-langchain.informationExtractor":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Ruth Olatunji","username":"ruthie-oe","bio":"Automation Consultant with over 3 years of experience automation revenue pipelines for business.","verified":false,"links":["https://www.linkedin.com/in/ruth-olatunji/"],"avatar":"https://gravatar.com/avatar/4864f66ed0d9f7e63f97f87ecadf6ae4779f977cdbe95bbc8b258bb2201f82a4?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":26,"icon":"fa:arrow-right","name":"n8n-nodes-base.noOp","codex":{"data":{"alias":["nothing"],"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/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/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/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/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.noop/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"organization\"]","defaults":{"name":"No Operation, do nothing","color":"#b0b0b0"},"iconData":{"icon":"arrow-right","type":"icon"},"displayName":"No Operation, do nothing","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":45,"icon":"file:twilio.svg","name":"n8n-nodes-base.twilio","codex":{"data":{"alias":["SMS","Phone","Voice"],"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/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/tracking-time-spent-in-meetings-with-google-calendar-twilio-and-n8n/","icon":"🗓","label":"Tracking Time Spent in Meetings With Google Calendar, Twilio, and n8n"},{"url":"https://n8n.io/blog/creating-error-workflows-in-n8n/","icon":"🌪","label":"Creating Error Workflows in 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/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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.twilio/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/twilio/"}]},"categories":["Communication","Development"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"transform\"]","defaults":{"name":"Twilio"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjUgNjUiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsPSIjZTMxZTI2IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZD0iTTMxLjk1MyAwQzE0LjMzNyAwIDAgMTQuMzM3IDAgMzEuOTUzczE0LjMzNyAzMS45NTMgMzEuOTUzIDMxLjk1M0M0OS42NjMgNjQgNjQgNDkuNjYzIDY0IDMxLjk1M1M0OS42NjMgMCAzMS45NTMgMG0wIDU1LjU2N2MtMTIuOTMxIDAtMjMuNTItMTAuNTg5LTIzLjUyLTIzLjYxNCAwLTEyLjkzMSAxMC41ODktMjMuNTIgMjMuNTItMjMuNTIgMTMuMDI1IDAgMjMuNjE0IDEwLjU4OSAyMy42MTQgMjMuNTIgMCAxMy4wMjUtMTAuNTg5IDIzLjYxNC0yMy42MTQgMjMuNjE0Ii8+PHVzZSB4bGluazpocmVmPSIjYiIvPjx1c2UgeGxpbms6aHJlZj0iI2IiIHk9IjE1LjkzIi8+PHBhdGggZD0iTTE3LjMzNSAzOS45MThhNi42NCA2LjY0IDAgMCAxIDYuNjUzLTYuNjUzIDYuNjUzIDYuNjUzIDAgMSAxIDAgMTMuMzA2IDYuNjQgNi42NCAwIDAgMS02LjY1My02LjY1M20wLTE1LjkzYTYuNjQgNi42NCAwIDAgMSA2LjY1My02LjY1MyA2LjY0IDYuNjQgMCAwIDEgNi42NTMgNi42NTMgNi42NCA2LjY0IDAgMCAxLTYuNjUzIDYuNjUzIDYuNjQgNi42NCAwIDAgMS02LjY1My02LjY1MyIvPjwvZz48L3N5bWJvbD48ZGVmcz48cGF0aCBpZD0iYiIgZD0iTTMzLjI2NSAyMy45ODhhNi42NCA2LjY0IDAgMSAxIDEzLjMwNiAwIDYuNjQgNi42NCAwIDEgMS0xMy4zMDYgMCIvPjwvZGVmcz48L3N2Zz4="},"displayName":"Twilio","typeVersion":1,"nodeCategories":[{"id":5,"name":"Development"},{"id":6,"name":"Communication"}]},{"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":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":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"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":1235,"icon":"file:extractFromFile.svg","name":"n8n-nodes-base.extractFromFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","decode","decoding","Move Binary Data","Binary","File","PDF","JSON","HTML","ICS","iCal","txt","Text","RTF","XML","64","Base64","Convert"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Extract from File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuOTM3NSAyQzAuNDE5NzMzIDIgMCAyLjQxOTczIDAgMi45Mzc1VjM3LjMyMjFDMCAzNy44Mzk5IDAuNDE5NzMzIDM4LjI1OTYgMC45Mzc1IDM4LjI1OTZIMjYuMjE1NEMyNi43MzMyIDM4LjI1OTYgMjcuMTUyOSAzNy44Mzk5IDI3LjE1MjkgMzcuMzIyMUwyNy4xNTI5IDMwLjY3MTlMMTYuNzk2OSAzMC42NzE5QzE0Ljg5ODQgMzAuNjcxOSAxMy4zNTk0IDI5LjEzMjkgMTMuMzU5NCAyNy4yMzQ0VjI1LjM1OTRDMTMuMzU5NCAyMy40NjA5IDE0Ljg5ODQgMjEuOTIxOSAxNi43OTY5IDIxLjkyMTlIMjcuMTUyOUwyNy4xNTI5IDE1Ljc4MjFIMTQuMzA4M0MxMy43OTA2IDE1Ljc4MjEgMTMuMzcwOCAxNS4zNjI0IDEzLjM3MDggMTQuODQ0NlYySDAuOTM3NVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTE2LjAyNzEgMkMxNS45NDA4IDIgMTUuODcwOCAyLjA2OTk2IDE1Ljg3MDggMi4xNTYyNVYxMi44MTM0QzE1Ljg3MDggMTMuMDcyMyAxNi4wODA3IDEzLjI4MjEgMTYuMzM5NiAxMy4yODIxSDI2Ljk5NjdDMjcuMDgzIDEzLjI4MjEgMjcuMTUyOSAxMy4yMTIyIDI3LjE1MjkgMTMuMTI1OUwyNy4xNTI5IDEyLjYxNzFDMjcuMTUyOSAxMi4zNjg4IDI3LjA1NDUgMTIuMTMwNyAyNi44NzkxIDExLjk1NUwxNy4yMjI1IDIuMjc1MzhDMTcuMDQ2NiAyLjA5OTA4IDE2LjgwNzkgMiAxNi41NTg4IDJIMTYuMDI3MVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTI5Ljc2NDIgMzQuNjUwM0MyOS4wMzQgMzMuOTE2IDI5LjAzNzQgMzIuNzI4OCAyOS43NzE2IDMxLjk5ODZMMzMuNjE5NyAyOC4xNzE5TDE2Ljc5NjkgMjguMTcxOUMxNi4yNzkxIDI4LjE3MTkgMTUuODU5NCAyNy43NTIxIDE1Ljg1OTQgMjcuMjM0NFYyNS4zNTk0QzE1Ljg1OTQgMjQuODQxNiAxNi4yNzkxIDI0LjQyMTkgMTYuNzk2OSAyNC40MjE5TDMzLjU0MTIgMjQuNDIxOUwyOS43NzE2IDIwLjY3MzNDMjkuMDM3NCAxOS45NDMxIDI5LjAzNCAxOC43NTU5IDI5Ljc2NDIgMTguMDIxNkMzMC40OTQ0IDE3LjI4NzQgMzEuNjgxNiAxNy4yODQgMzIuNDE1OSAxOC4wMTQyTDM5LjQ0NzEgMjUuMDA2NEMzOS44MDEgMjUuMzU4MyA0MCAyNS44MzY4IDQwIDI2LjMzNTlDNDAgMjYuODM1IDM5LjgwMSAyNy4zMTM1IDM5LjQ0NzEgMjcuNjY1NUwzMi40MTU5IDM0LjY1NzZDMzEuNjgxNiAzNS4zODc4IDMwLjQ5NDQgMzUuMzg0NSAyOS43NjQyIDM0LjY1MDNaIiBmaWxsPSIjMzUzRjZFIi8+Cjwvc3ZnPgo="},"displayName":"Extract from File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1273,"icon":"fa:project-diagram","name":"@n8n/n8n-nodes-langchain.informationExtractor","codex":{"data":{"alias":["NER","parse","parsing","JSON","data extraction","structured"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.information-extractor/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Chains","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Information Extractor"},"iconData":{"icon":"project-diagram","type":"icon"},"displayName":"Information Extractor","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":39,"name":"CRM"},{"id":49,"name":"AI Summarization"}],"image":[]}}