{"workflow":{"id":13722,"name":"Turn WhatsApp into an AI shopping and price comparison assistant using Wati, OpenAI, Serper, and Google Sheets","views":53,"recentViews":0,"totalViews":53,"createdAt":"2026-02-26T08:01:02.781Z","description":"Elevate your shopping experience with an AI-driven personal assistant that lives right in your WhatsApp. This template automates the entire lifecycle of a shopping list—from intelligent intake and live web price comparisons to proactive daily deal alerts—by combining WATI, OpenAI, Serper (Google Search), and Google Sheets.\n\n---\n\n## 🎯 What This Workflow Does\n\nTurns WhatsApp into a high-powered price engine across three independent pipelines:\n\n### 📥 Pipeline A: Intelligent Intake\nWhen a user sends a list (e.g., `list: milk 2L, eggs 12`), OpenAI parses every item into structured categories, quantities, and units before saving them to the Google Sheets master list.\n\n### 🔍 Pipeline B: Live Price Engine\nWhen a user types `compare`, the bot triggers a real-time web search via Serper. OpenAI then analyzes the search results to pick the absolute best deal and alternative stores, sending back a formatted \"Comparison Card\" with links.\n\n### 📬 Pipeline C: Proactive Deal Alerts\nA scheduled trigger runs daily at 8 AM, scanning your saved items for price drops. If it finds a saving of ≥ 10%, it automatically pings the user with a personalized deal alert.\n\n---\n\n## ✨ Key Features\n\n- **Semantic Parsing:** OpenAI understands natural language lists, so you don't have to follow strict formatting.\n- **Live Search Integration:** Uses the Serper API to fetch actual live prices from major Indian retailers in seconds.\n- **Automated UI:** Uses custom emojis and visual bar charts to group items by category (e.g., 🥦 Produce, 🥛 Dairy) for easy mobile viewing.\n- **Duplicate Prevention:** The \"Savings Tracker\" logic de-duplicates items so you only ever see the latest, most relevant price for any product.\n- **Maintenance Commands:** Simple keywords like `clear` allow users to reset their list and start fresh.\n\n---\n\n## 💼 Perfect For\n\n- **Savvy Shoppers:** Finding the lowest prices on groceries and electronics without manual searching.\n- **Budget-Conscious Households:** Tracking long-term price trends for recurring household purchases.\n- **E-commerce Researchers:** Monitoring competitor pricing and deals automatically.\n- **Teams:** Sharing a centralized shopping list that updates with live market data.\n\n---\n\n## 🔧 What You'll Need\n\n### Required Integrations\n\n- **WATI** – To handle all WhatsApp triggers and message delivery.\n- **OpenAI API** – For item classification and deal extraction.\n- **Serper.dev** – To perform high-speed Google Shopping searches.\n- **Google Sheets** – As your primary database for lists and deals.\n\n---\n\n## 🚀 Quick Start\n\n1. **Import Template** – Copy the JSON and import it into your n8n instance.\n2. **Set Credentials** – Connect your WATI, OpenAI, Serper, and Google Sheets accounts.\n3. **Configure Sheets** – Ensure your Google Sheet has two tabs:\n\n   **Shopping List:**  \n   `phone`, `item`, `qty`, `unit`, `category`, `addedAt`, `listid`, `username`, `Status`\n\n   **Deals:**  \n   `listid`, `phone`, `item`, `price`, `originalPrice`, `storeName`, `savingPct`, `Currency`, `url`, `summary`, `confidence`, `alternatives`, `foundAt`, `alertSent`\n\n4. **Test the Flow** – Send `list: 1kg rice, milk 2L` to your WATI number.\n5. **Run Comparison** – Reply `compare` to see the AI find the best deals live!\n\n---\n\n## 📈 Expected Results\n\n- 15–25% savings on monthly groceries by consistently identifying the cheapest reputable retailer.\n- Zero search time: The AI searches the entire web for you in the background.\n- Automated alerts: Never miss a price drop on items you actually need.\n- Centralized organization: A tidy, categorized list that replaces messy paper notes or fragmented chat messages.\n\n---\n\nReady to shop smarter? Import this template and connect your Serper account to start saving today!","workflow":{"meta":{"instanceId":"277842713620d9f5554de3b1518b865a152c8c4db680008bd8aec536fc18b4a8","templateCredsSetupCompleted":true},"nodes":[{"id":"ac1011ce-6d22-4dd7-89b1-4ed4e48fab02","name":"🗺️ Architecture Overview","type":"n8n-nodes-base.stickyNote","position":[-2800,2848],"parameters":{"width":680,"height":788,"content":"## 🛒 Smart Shopping Assistant – WhatsApp Price Comparison Bot\n\n**3 independent pipelines — each does one job cleanly:**\n\n📥 **PIPELINE A · Intake**\nUser sends a list → OpenAI parses every item with qty/unit/category → saved to Google Sheets → confirmation sent\n\n🔍 **PIPELINE B · Price Engine**\nUser sends *compare* → for each item: Serper searches live web prices → OpenAI picks best deal → full comparison card sent back\n\n📬 **PIPELINE C · Alerts**\nSchedule runs daily 8AM → checks saved deals → sends personalised alert to any user with savings ≥ 10%\n\n---\n**Credentials:** WATI · OpenAI Header Auth · Serper Header Auth · Google Sheets OAuth2\n**Serper:** free tier at serper.dev – 2500 searches/month"},"typeVersion":1},{"id":"aca804c2-dea9-4191-9aa3-74385356d50d","name":"Pipeline A Note1","type":"n8n-nodes-base.stickyNote","position":[-1840,4000],"parameters":{"color":7,"width":444,"height":760,"content":"Node: Wati Trigger1 & Intent Router1\nFunction: Captures incoming WhatsApp messages via Wati.Logic: The Switch node parses the {{ $json.text }} to determine what the user wants.\ncompare (Price check)\ndeals (View saved bargains)\nmylist (View shopping list)\nclear (Reset list)"},"typeVersion":1},{"id":"1f7a04e3-de69-44bc-9121-582d38630b56","name":"Pipeline B Note1","type":"n8n-nodes-base.stickyNote","position":[-1264,4048],"parameters":{"color":7,"width":1972,"height":480,"content":"### 🔍 Pipeline B · Price Engine\n**Flow per item:**\n`Read List for Compare` → `Prepare Search Queries.`Serper – Search Prices`.`OpenAI – Extract Best Deal`.`Process Deal Result`.`Google Sheets – Save Deals`*(appends one row per item to Deals tab)*.`Aggregate Comparison Card`*(collects ALL items, calculates total, builds full card)*↓`Send a text message`\n*(sends full comparison card to user)*\n\n---\n⚠️ **Important:** n8n runs each item through the chain sequentially. The `Aggregate` node uses `$input.all()` to collect every item result before sending the final message."},"typeVersion":1},{"id":"9ececa7a-15f6-45a6-9d1a-e9a5eea9ba0a","name":"Pipeline C Note1","type":"n8n-nodes-base.stickyNote","position":[1104,4352],"parameters":{"color":7,"width":1108,"height":468,"content":"### 📬 Pipeline C · Daily Deal Alerts\nRuns automatically every day at 8:00 AM\n**Flow:**\nSchedule Trigger – Daily 8AM Alerts`.`Google Sheets – Read Deals for Alert`*(reads entire Deals tab)*.`Build Alert Messages`*(filters: alertSent = No AND savingPct ≥ 10)**(groups by phone, picks top 5 deals per user)**(returns one output item per user)*.`WATI – Send Deal Alert`*(sends personalised message to each user's phone)*\n---\n⚠️ **To-do after import:**\n- `alertSent` is not automatically updated to `Yes` after sending.\nAdd a `Google Sheets – Update` node after `Send Deal Alert` to set `alertSent = Yes` matching on `listId + item` to prevent duplicate alerts."},"typeVersion":1},{"id":"275698cd-4f25-4c48-84e1-7a231a53186d","name":"Intent Router1","type":"n8n-nodes-base.switch","position":[-1616,4256],"parameters":{"rules":{"values":[{"outputKey":"New List","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"6517a435-aca0-4bfe-8c65-3e259a7e379c","operator":{"type":"string","operation":"startsWith"},"leftValue":"={{ $json.text }}","rightValue":"list:"}]},"renameOutput":true},{"outputKey":"Compare","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"49d5cdc0-9e0a-48fe-8635-0b5d2b42ef86","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.text.toLowerCase().trim() }}","rightValue":"compare"}]},"renameOutput":true},{"outputKey":"View Deals","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"a8d35ab2-6b29-4024-80d9-77cff7e1bc91","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.text.toLowerCase().trim() }}","rightValue":"deals"}]},"renameOutput":true},{"outputKey":"My List","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f23b8525-5f8a-49e2-a7a8-baabf56293c4","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.text.toLowerCase().trim() }}","rightValue":"mylist"}]},"renameOutput":true},{"outputKey":"Clear","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"282145b9-9654-4268-bc42-a7d37bcd6805","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.text.toLowerCase().trim() }}","rightValue":"clear"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra"}},"typeVersion":3},{"id":"601d3afa-c9a2-439e-b735-6daf0875c582","name":"OpenAI – Parse List1","type":"n8n-nodes-base.httpRequest","position":[-1184,3696],"parameters":{"url":"https://api.openai.com/v1/chat/completions","method":"POST","options":{},"jsonBody":"={\n  \"model\": \"gpt-4o-mini\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"You are a shopping assistant. Extract items from the user's text into a JSON array of objects with these keys: item, qty, unit, category. Categories: Grocery, Dairy, Produce, Meat, Beverages, Household, Personal Care, Electronics, Other. Return ONLY the JSON array.\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"{{ $('Wati Trigger').item.json.text }}\"\n    }\n  ],\n  \"temperature\": 0\n} ","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"openAiApi"},"credentials":{"openAiApi":{"id":"8IkhtT3EbXygnvcr","name":"Mediajade"},"httpHeaderAuth":{"id":"GKgCj9WxmYpiz70D","name":"Stripe Header Auth"}},"typeVersion":4.2},{"id":"8b36382e-cb67-458f-99cf-dbda4b432b69","name":"Structure List Items1","type":"n8n-nodes-base.code","position":[-960,3696],"parameters":{"jsCode":"// Structure Parsed Items → flat rows for Sheets\nconst phone    = $('Wati Trigger').first().json.waId || $('Wati Trigger1').item.json.from || 'unknown';\nconst userName = $('Wati Trigger').first().json.senderName || 'Shopper';\nconst now      = new Date();\nconst dateStr  = now.toISOString().split('T')[0].replace(/-/g, '');\nconst rand     = Math.random().toString(36).substring(2, 6).toUpperCase();\nconst listId   = `LST-${dateStr}-${rand}`;\n\nconst raw = $json?.choices?.[0]?.message?.content || '[]';\nlet items = [];\ntry { items = JSON.parse(raw); } catch(e) {\n  const m = raw.match(/\\[[\\s\\S]*\\]/);\n  if (m) { try { items = JSON.parse(m[0]); } catch(e2) {} }\n}\n\nif (!items || items.length === 0) {\n  return [{ json: {\n    phone, userName, listId, itemCount: 0, rows: [], isFirst: true,\n    ackMessage: `⚠️ Could not parse your list. Please try:\\n*list: milk 2L, eggs 12, bread, rice 5kg*`\n  }}];\n}\n\nconst rows = items.map(it => ({\n  listId, phone, userName,\n  item:     (it.item     || 'item').toLowerCase(),\n  qty:       it.qty      || 1,\n  unit:      it.unit     || 'pcs',\n  category:  it.category || 'Other',\n  addedAt:   now.toISOString(),\n  status:   'Active'\n}));\n\nconst catEmoji = { Grocery:'🛒️', Dairy:'🥛', Produce:'🥦', Meat:'🥩', Beverages:'🥤', Household:'🏠', 'Personal Care':'🧴', Electronics:'📱', Other:'📦' };\n\nconst itemLines = items.map((it, i) =>\n  `  ${i+1}. ${catEmoji[it.category]||'📦'} ${it.item} — ${it.qty} ${it.unit}`\n);\n\nconst ackMessage = [\n  `✅ *Shopping List Saved!*`,\n  `🗂️ List ID: \\`${listId}\\``,\n  '',\n  `📦 *${items.length} item${items.length > 1 ? 's' : ''} added:*`,\n  ...itemLines,\n  '',\n  '━━━━━━━━━━━━━━━━━━',\n  '🔍 Send *compare* → AI finds best prices now',\n  '💰 Send *deals* → view saved deals',\n  '📋 Send *mylist* → view current list'\n].join('\\n');\n\nreturn rows.map((row, i) => ({ json: { ...row, ackMessage: i === 0 ? ackMessage : null, isFirst: i === 0, phone, listId, itemCount: items.length } }));"},"typeVersion":2},{"id":"e439642e-23db-4956-95ee-a1018058bb7a","name":"Google Sheets – Save Shopping List1","type":"n8n-nodes-base.googleSheets","position":[-752,3696],"parameters":{"columns":{"value":{"qty":"={{ $json.qty }}","item":"={{ $json.item }}","unit":"={{ $json.unit }}","phone":"={{ $json.phone }}","Status":"={{ $json.status }}","listid":"={{ $json.listId }}","addedAt":"={{ $json.addedAt }}","category":"={{ $json.category }}","username":"={{ $json.userName }}"},"schema":[{"id":"listid","type":"string","display":true,"removed":false,"required":false,"displayName":"listid","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone","type":"string","display":true,"required":false,"displayName":"phone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"username","type":"string","display":true,"removed":false,"required":false,"displayName":"username","defaultMatch":false,"canBeUsedToMatch":true},{"id":"item","type":"string","display":true,"required":false,"displayName":"item","defaultMatch":false,"canBeUsedToMatch":true},{"id":"qty","type":"string","display":true,"required":false,"displayName":"qty","defaultMatch":false,"canBeUsedToMatch":true},{"id":"unit","type":"string","display":true,"required":false,"displayName":"unit","defaultMatch":false,"canBeUsedToMatch":true},{"id":"category","type":"string","display":true,"required":false,"displayName":"category","defaultMatch":false,"canBeUsedToMatch":true},{"id":"addedAt","type":"string","display":true,"required":false,"displayName":"addedAt","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Status","type":"string","display":true,"removed":false,"required":false,"displayName":"Status","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/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit#gid=0","cachedResultName":"Shopping List"},"documentId":{"__rl":true,"mode":"list","value":"1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit?usp=drivesdk","cachedResultName":"Untitled spreadsheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"Kz2DdSp11rxqwlFt","name":"Google Sheets account - Deepanshi"}},"typeVersion":4.5},{"id":"6f312e5e-4cc3-4e8a-85c7-f442635645a2","name":"Google Sheets – Read My List1","type":"n8n-nodes-base.googleSheets","position":[-1168,4704],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit#gid=0","cachedResultName":"Shopping List"},"documentId":{"__rl":true,"mode":"list","value":"1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit?usp=drivesdk","cachedResultName":"Untitled spreadsheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"Kz2DdSp11rxqwlFt","name":"Google Sheets account - Deepanshi"}},"typeVersion":4.5},{"id":"0bad7b13-b2e6-4c18-8e76-d719c78b1ee9","name":"Build My List View1","type":"n8n-nodes-base.code","position":[-912,4704],"parameters":{"jsCode":"const phone    = $('Wati Trigger').first().json.waId || $('Wati Trigger1').item.json.from;\nconst userName =  $('Wati Trigger').first().json.senderName|| 'Shopper';\nconst items    = $input.all().filter(r => r.json.phone === phone && (r.json.status||'').toLowerCase() === 'active');\n\nif (items.length === 0) {\n  return [{ json: { phone, msg: `📋 *Your list is empty, ${userName}!*\\n\\nAdd items with:\\n*list: milk 2L, eggs 12, bread, rice 5kg*` } }];\n}\n\nconst catEmoji = { Grocery:'🛒️', Dairy:'🥛', Produce:'🥦', Meat:'🥩', Beverages:'🥤', Household:'🏠', 'Personal Care':'🦺', Electronics:'📱', Other:'📦' };\nconst byCategory = {};\nfor (const r of items) {\n  const c = r.json.category || 'Other';\n  if (!byCategory[c]) byCategory[c] = [];\n  byCategory[c].push(r.json);\n}\n\nconst lines = [`📋 *Your Shopping List*`, `👤 ${userName}`, ''];\nfor (const [cat, rows] of Object.entries(byCategory)) {\n  lines.push(`${catEmoji[cat]||'📦'} *${cat}*`);\n  for (const it of rows) lines.push(`  • ${it.item} — ${it.qty} ${it.unit}`);\n  lines.push('');\n}\nlines.push(`📦 *Total: ${items.length} items*`);\nlines.push('━━━━━━━━━━━━━━━━━━');\nlines.push('Send *compare* to find best prices 🔍');\n\nreturn [{ json: { phone, msg: lines.join('\\n') } }];"},"typeVersion":2},{"id":"9c6454b9-afda-4888-a666-130b2d9fbc3a","name":"Google Sheets – Read Saved Deals1","type":"n8n-nodes-base.googleSheets","position":[-1184,5104],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":1354101119,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit#gid=1354101119","cachedResultName":"Deals"},"documentId":{"__rl":true,"mode":"list","value":"1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit?usp=drivesdk","cachedResultName":"Untitled spreadsheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"Kz2DdSp11rxqwlFt","name":"Google Sheets account - Deepanshi"}},"typeVersion":4.5},{"id":"b1a21a36-3c98-467a-b991-c96146670369","name":"Build Deals View1","type":"n8n-nodes-base.code","position":[-864,5104],"parameters":{"jsCode":"const phone    = $('Wati Trigger').first().json.waId || $('Wati Trigger1').item.json.from;\nconst userName = $('Wati Trigger').first().json.senderName || 'Shopper';\nconst allRows  = $input.all();\n\nconst myDeals = allRows.filter(r => r.json.phone === phone).sort((a,b)=>new Date(b.json.foundAt)-new Date(a.json.foundAt));\nconst seen = new Set();\nconst latest = myDeals.filter(r => { if (seen.has(r.json.item)) return false; seen.add(r.json.item); return true; });\n\nif (latest.length === 0) {\n  return [{ json: { phone, msg: `💰 *No saved deals yet, ${userName}!*\\n\\nSend *compare* to find the best prices for your list.` } }];\n}\n\nconst lines = [`💰 *Your Saved Deals*`, `👤 ${userName}`, ''];\nfor (const r of latest) {\n  const saving = parseFloat($input.first().json.savingPct) > 0 ? ` 🏷️ Save ${r.json.savingPct}%` : '';\n  const dt = r.json.foundAt ? new Date(r.json.foundAt).toLocaleDateString('en-IN',{day:'numeric',month:'short'}) : '';\n  lines.push(`🛒 *${r.json.item}*`);\n  lines.push(`  ✅ ${r.json.storeName} — ₹${r.json.price}${saving}`);\n  if (r.json.url) lines.push(`  🔗 ${r.json.url}`);\n  lines.push(`  📅 Found: ${dt}`);\n  lines.push('');\n}\nlines.push('━━━━━━━━━━━━━━━━━━');\nlines.push('Send *compare* to refresh prices 🔄');\nreturn [{ json: { phone, msg: lines.join('\\n') } }];"},"typeVersion":2},{"id":"0da98dbc-8018-4c14-be6d-3091268a61be","name":"Process Clear1","type":"n8n-nodes-base.code","position":[-1136,5504],"parameters":{"jsCode":"const phone = $json.waId || $json.from;\nconst name  = $json.senderName || 'Shopper';\nreturn [{ json: { phone, msg: `🗑️ *List cleared, ${name}!*\\n\\nStart fresh anytime:\\n*list: item1, item2, item3*` } }];"},"typeVersion":2},{"id":"e7d9692b-f8bb-4eac-98c6-5edc140c3961","name":"Google Sheets – Read List for Compare1","type":"n8n-nodes-base.googleSheets","position":[-1200,4352],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit#gid=0","cachedResultName":"Shopping List"},"documentId":{"__rl":true,"mode":"list","value":"1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit?usp=drivesdk","cachedResultName":"Untitled spreadsheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"Kz2DdSp11rxqwlFt","name":"Google Sheets account - Deepanshi"}},"typeVersion":4.5},{"id":"9508c89f-bc70-43b3-b576-7832139fb32a","name":"Prepare Search Queries1","type":"n8n-nodes-base.code","position":[-928,4352],"parameters":{"jsCode":"// Prepare one search query per item for this user\nconst phone =  $('Intent Router1').first().json.waId|| $('Wati Trigger1').item.json.from;\nconst rows  = $input.all().filter(r => r.json.phone === phone && (r.json.status||'').toLowerCase() === 'active');\n\nif (rows.length === 0) {\n  return [{ json: { phone, noItems: true, searchQuery: null,\n    errMsg: `📋 *Your list is empty!*\\n\\nAdd items first with: *list: milk 2L, eggs*`\n  }}];\n}\n\nreturn rows.map(r => ({\n  json: {\n    phone,\n    userName:    r.json.userName,\n    listId:      r.json.listId,\n    item:        r.json.item,\n    qty:         r.json.qty,\n    unit:        r.json.unit,\n    category:    r.json.category,\n    searchQuery: `best price ${r.json.item} ${r.json.qty}${r.json.unit} buy online India`,\n    noItems:     false\n  }\n}));"},"typeVersion":2},{"id":"9648270c-dc21-4ed1-9478-2d917ed38297","name":"Serper – Search Prices1","type":"n8n-nodes-base.httpRequest","position":[-688,4352],"parameters":{"url":"https://api.openai.com/v1/chat/completions","method":"POST","options":{},"jsonBody":"={\n  \"model\": \"gpt-4o-mini\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"You are a price comparison expert. Analyze the Google Shopping search results provided. 1. Identify the 'bestDeal' (lowest price from a reputable store). 2. Find up to 2 'alternatives'. 3. Calculate 'savingPct' if an original price is visible. 4. Return ONLY a JSON object with these keys: bestDeal (storeName, price, originalPrice, savingPct, url, currency), alternatives (array of storeName and price), confidence (high/low), and summary.\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"Search results for {{ $('Prepare Search Queries1').item.json.item }}: {{ JSON.stringify($json.shopping) }}\"\n    }\n  ],\n  \"response_format\": { \"type\": \"json_object\" },\n  \"temperature\": 0\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"openAiApi"},"credentials":{"openAiApi":{"id":"8IkhtT3EbXygnvcr","name":"Mediajade"},"httpHeaderAuth":{"id":"GKgCj9WxmYpiz70D","name":"Stripe Header Auth"}},"typeVersion":4.2},{"id":"169321ed-6956-4fb7-8519-038878488530","name":"OpenAI – Extract Best Deal1","type":"n8n-nodes-base.httpRequest","position":[-464,4352],"parameters":{"url":"https://api.openai.com/v1/chat/completions","method":"POST","options":{},"jsonBody":"={\n  \"model\": \"gpt-4o-mini\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"Analyze the shopping search results. Identify the best deal (lowest price from a reputable store). Return a JSON object with: 'bestDeal' (object with storeName, price, originalPrice, savingPct, url, currency), 'alternatives' (array of up to 2 other stores/prices), 'confidence' (high/low), and 'summary' (brief explanation).\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"={{ JSON.stringify($json.shopping) }}\"\n    }\n  ],\n  \"response_format\": { \"type\": \"json_object\" },\n  \"temperature\": 0\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"openAiApi"},"credentials":{"openAiApi":{"id":"8IkhtT3EbXygnvcr","name":"Mediajade"},"httpHeaderAuth":{"id":"GKgCj9WxmYpiz70D","name":"Stripe Header Auth"}},"typeVersion":4.2},{"id":"af99be87-074e-45e2-a491-b0bb268e0478","name":"Process Deal Result1","type":"n8n-nodes-base.code","position":[-240,4352],"parameters":{"jsCode":"// Parse deal, build item card, prepare Sheets row\nconst raw = $json?.choices?.[0]?.message?.content || '{}';\nlet d = {};\ntry { d = JSON.parse(raw); } catch(e) { const m = raw.match(/\\{[\\s\\S]*\\}/); if(m){try{d=JSON.parse(m[0]);}catch(e2){}} }\n\nconst src  = $('Prepare Search Queries1').item.json;\nconst best = d.bestDeal   || {};\nconst alts = d.alternatives || [];\nconst now  = new Date();\n\nconst saveBadge = (best.savingPct||0) > 0 ? ` 🏷️ -${best.savingPct}%` : '';\nconst altLines  = alts.slice(0,2).map(a => `    • ${a.storeName}: ₹${a.price}`).join('\\n');\n\nconst itemCard = [\n  `\\n🛒 *${src.item}* (${src.qty} ${src.unit})`,\n  `  ✅ *${best.storeName||'Unknown'}* — ₹${best.price||'N/A'}${saveBadge}`,\n  altLines ? `  Others:\\n${altLines}` : '',\n  best.url ? `  🔗 ${best.url}` : ''\n].filter(Boolean).join('\\n');\n\nreturn [{ json: {\n  listId:        src.listId,\n  phone:         src.phone,\n  userName:      src.userName,\n  item:          src.item,\n  qty:           src.qty,\n  unit:          src.unit,\n  storeName:     best.storeName     || 'Unknown',\n  price:         best.price         || 0,\n  originalPrice: best.originalPrice || best.price || 0,\n  savingPct:     best.savingPct     || 0,\n  currency:      best.currency      || 'INR',\n  url:           best.url           || '',\n  summary:       d.summary          || '',\n  confidence:    d.confidence        || 'low',\n  alternatives:  JSON.stringify(alts),\n  foundAt:       now.toISOString(),\n  alertSent:     'No',\n  itemCard\n}}];"},"typeVersion":2},{"id":"c2e8e927-2812-45e5-a71d-40b934f38b84","name":"Google Sheets – Save Deals1","type":"n8n-nodes-base.googleSheets","position":[16,4352],"parameters":{"columns":{"value":{"url":"={{ $json.url }}","item":"={{ $node['Google Sheets – Read List for Compare1'].json.item }}","phone":"={{ $node['Google Sheets – Read List for Compare1'].json.phone }}","price":"={{ $json.price }}","listid":"={{ $node[\"Google Sheets – Read List for Compare1\"].json.listid }}","foundAt":"={{ $json.foundAt }}","summary":"={{ $json.summary }}","Currency":"={{ $json.currency }}","alertSent":"={{ $json.alertSent }}","savingPct":"={{ $json.savingPct }}","storeName":"={{ $json.storeName }}","confidence":"={{ $json.confidence }}","alternatives":"={{ $json.alternatives }}","originalPrice":"={{ $json.originalPrice }}"},"schema":[{"id":"listid","type":"string","display":true,"required":false,"displayName":"listid","defaultMatch":false,"canBeUsedToMatch":true},{"id":"phone","type":"string","display":true,"required":false,"displayName":"phone","defaultMatch":false,"canBeUsedToMatch":true},{"id":"item","type":"string","display":true,"required":false,"displayName":"item","defaultMatch":false,"canBeUsedToMatch":true},{"id":"storeName","type":"string","display":true,"required":false,"displayName":"storeName","defaultMatch":false,"canBeUsedToMatch":true},{"id":"price","type":"string","display":true,"required":false,"displayName":"price","defaultMatch":false,"canBeUsedToMatch":true},{"id":"originalPrice","type":"string","display":true,"required":false,"displayName":"originalPrice","defaultMatch":false,"canBeUsedToMatch":true},{"id":"savingPct","type":"string","display":true,"required":false,"displayName":"savingPct","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Currency","type":"string","display":true,"required":false,"displayName":"Currency","defaultMatch":false,"canBeUsedToMatch":true},{"id":"url","type":"string","display":true,"required":false,"displayName":"url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"summary","type":"string","display":true,"required":false,"displayName":"summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"confidence","type":"string","display":true,"required":false,"displayName":"confidence","defaultMatch":false,"canBeUsedToMatch":true},{"id":"alternatives","type":"string","display":true,"required":false,"displayName":"alternatives","defaultMatch":false,"canBeUsedToMatch":true},{"id":"foundAt","type":"string","display":true,"required":false,"displayName":"foundAt","defaultMatch":false,"canBeUsedToMatch":true},{"id":"alertSent","type":"string","display":true,"required":false,"displayName":"alertSent","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":1354101119,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit#gid=1354101119","cachedResultName":"Deals"},"documentId":{"__rl":true,"mode":"list","value":"1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1nLiq8cy7O-qfdDLtpzzAmDNDhIpR4-HCLS6c-y8v5-0/edit?usp=drivesdk","cachedResultName":"Untitled spreadsheet"}},"credentials":{"googleSheetsOAuth2Api":{"id":"Kz2DdSp11rxqwlFt","name":"Google Sheets account - Deepanshi"}},"typeVersion":4.5},{"id":"580a8a1e-2d20-4b59-8d66-26fa883c3251","name":"Aggregate Comparison Card1","type":"n8n-nodes-base.code","position":[256,4352],"parameters":{"jsCode":"// Aggregate all processed deal items into one comparison card\nconst all = $input.all();\nif (!all || all.length === 0) return [{ json: { phone:'', card:'No deals found.' } }];\n\nconst phone    = all[0].json.phone;\nconst userName = all[0].json.userName;\nconst now      = new Date();\n\nlet totalBest = 0, totalOrig = 0;\nconst cards = all.map(r => { totalBest += parseFloat(r.json.price||0); totalOrig += parseFloat(r.json.originalPrice||r.json.price||0); return r.json.itemCard; }).join('\\n');\n\nconst saved   = totalOrig - totalBest;\nconst savePct = totalOrig > 0 ? Math.round((saved / totalOrig) * 100) : 0;\nconst hiConf  = all.filter(r => r.json.confidence === 'high').length;\n\nconst lines = [\n  `🔍 *Price Comparison Report*`,\n  `👤 ${userName} · ${now.toLocaleDateString('en-IN',{day:'numeric',month:'short'})}`,\n  cards,\n  '━━━━━━━━━━━━━━━━━━',\n  `💰 *Estimated Total: ₹${totalBest.toFixed(0)}*`,\n  saved > 0 ? `🏷️ *You could save: ₹${saved.toFixed(0)} (${savePct}%)*` : '',\n  `ℹ️ ${hiConf}/${all.length} prices high-confidence`,\n  '',\n  'Prices are live estimates — verify before purchase.',\n  'Send *deals* anytime to review saved deals.'\n].filter(l => l !== '').join('\\n');\n\nreturn [{ json: { phone, card: lines } }];"},"typeVersion":2},{"id":"fa355182-765f-4690-8290-fcce9a7f4750","name":"Schedule Trigger – Daily 8AM Alerts1","type":"n8n-nodes-base.scheduleTrigger","position":[1280,4672],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 8 * * *"}]}},"typeVersion":1.2},{"id":"0b0341cf-7ad4-4cbf-88fa-ecc9095bddde","name":"Google Sheets – Read Deals for Alert1","type":"n8n-nodes-base.googleSheets","position":[1520,4672],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"name","value":"Deals"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID"}},"credentials":{"googleSheetsOAuth2Api":{"id":"Kz2DdSp11rxqwlFt","name":"Google Sheets account - Deepanshi"}},"typeVersion":4.5},{"id":"10b9c976-1234-4533-aad3-e7f959280019","name":"Build Alert Messages1","type":"n8n-nodes-base.code","position":[1760,4672],"parameters":{"jsCode":"// Build personalised daily deal alerts\nconst allRows = $input.all();\n\nconst alertable = allRows.filter(r => r.json.alertSent === 'No' && parseFloat(r.json.savingPct||0) >= 10);\nif (alertable.length === 0) return [{ json: { message: 'No deals to alert today', count: 0 } }];\n\nconst byPhone = {};\nfor (const r of alertable) {\n  const p = r.json.phone;\n  if (!byPhone[p]) byPhone[p] = { phone: p, userName: r.json.userName, deals: [] };\n  byPhone[p].deals.push(r.json);\n}\n\nreturn Object.values(byPhone).map(user => {\n  const top = user.deals.sort((a,b)=>parseFloat(b.savingPct)-parseFloat(a.savingPct)).slice(0,5);\n  const lines = [\n    `🔥 *Daily Deal Alert!*`,\n    `👋 Hi *${user.userName}!* Best prices found for your list:`,\n    ''\n  ];\n  for (const d of top) {\n    lines.push(`🛒 *${d.item}* — ₹${d.price} at *${d.storeName}*`);\n    lines.push(`   🏷️ Save ${d.savingPct}% vs original price`);\n    if (d.url) lines.push(`   🔗 ${d.url}`);\n    lines.push('');\n  }\n  lines.push('━━━━━━━━━━━━━━━━━━');\n  lines.push('Send *compare* to refresh prices anytime 🔄');\n  return { json: { phone: user.phone, alertMessage: lines.join('\\n'), dealCount: top.length } };\n});"},"typeVersion":2},{"id":"9698ad3b-7ab1-4675-8665-b6cc8fb755cf","name":"Send a text message5","type":"n8n-nodes-wati.wati","onError":"continueRegularOutput","position":[-528,3696],"parameters":{"target":"={{ $('Wati Trigger').item.json.waId }}","messageText":"={{ $('Structure List Items1').item.json.ackMessage }}"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"8c745c6c-06f2-41ac-8362-bd7b444947e2","name":"Send a text message6","type":"n8n-nodes-wati.wati","position":[464,4352],"parameters":{"target":"={{ $node['Wati Trigger'].json.waId }}","messageText":"={{ $json.card }}"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"b55e03ed-b5bb-4aa2-88b9-3305323a86e3","name":"Send a text message7","type":"n8n-nodes-wati.wati","position":[-656,4704],"parameters":{"target":"={{ $node['Wati Trigger'].json.waId }}","messageText":"={{ $json.msg }}"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"bba952b7-599a-478c-8f1e-b47f3f6f0541","name":"Send a text message8","type":"n8n-nodes-wati.wati","position":[-576,5104],"parameters":{"target":"={{ $('Wati Trigger').item.json.waId }}","messageText":"={{ $json.msg }}"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"e5422e68-f0a6-4a59-affb-b50814add91c","name":"Send a text message9","type":"n8n-nodes-wati.wati","position":[-832,5504],"parameters":{"target":"={{ $json.phone }}","messageText":"={{ $json.msg }}"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1},{"id":"5eb4b0e0-5bf2-46e7-b64e-8d764b6b3dd2","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-1248,3552],"parameters":{"color":7,"width":1136,"height":384,"content":"**New List path:**\n`OpenAI – Parse List` → `Structure List Items` (generates one row per item + ackMessage) → `Google Sheets – Save Shopping List` → `Send a text message` (confirm to user)"},"typeVersion":1},{"id":"0216abdb-cd4d-4b44-8b3c-e9b6047c0296","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1264,5376],"parameters":{"color":7,"width":1040,"height":272,"content":"\nSticky Note Title: 🧹 MAINTENANCE\nFunction: Handles the \"Clear\" intent.\nNote: This node currently prepares the \"Success\" message.\nTip: Ensure you have a Google Sheets node following this (or a specific script) if you want to physically delete rows or update status to 'inactive' in your database."},"typeVersion":1},{"id":"bb3d20d1-6036-47d5-9fcb-031850a92415","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-1280,4992],"parameters":{"color":7,"width":1056,"height":320,"content":"Sticky Note Title: 💰 SAVINGS TRACKER\nFunction: Fetches the latest price data from the Deals sheet. Key Features:* Sorts by date to show the most recent prices first.De-duplicates items so the user only sees the latest deal per product.Calculates and displays Saving % and store links."},"typeVersion":1},{"id":"7368a5fa-05c3-4b23-b627-8b68aa4468cd","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-1264,4576],"parameters":{"color":7,"width":928,"height":320,"content":"Nodes: Google Sheets – Read My List1 & Build My List View1\n\nFunction: Pulls active shopping items from the ShoppingList sheet.Groups items by Category (Dairy, Produce, etc.).Adds specific emojis based on the category for a better mobile UI.Output: Formatted WhatsApp message with a summary and total count."},"typeVersion":1},{"id":"00eea83e-1f55-40cd-8202-90793c3efa32","name":"Wati Trigger","type":"n8n-nodes-wati.watiTrigger","position":[-1824,4320],"webhookId":"ceb8d7d4-0ea8-4491-9bec-89f94a3feb35","parameters":{"event":"messageReceived"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1,"alwaysOutputData":true},{"id":"38f7f040-5864-4d76-b050-bb5325bdca4e","name":"Send a text message","type":"n8n-nodes-wati.wati","position":[2048,4672],"parameters":{"target":"78523","messageText":"t"},"credentials":{"watiApi":{"id":"LeAm3lDk4hC1D2Qy","name":"wati - templates"}},"typeVersion":1}],"pinData":{"Wati Trigger":[{"id":"699ffc4a6937fbd7b4bd6dc2","data":null,"text":"clear","type":"text","waId":"917024935915","owner":false,"created":"2026-02-26T07:54:50.2565267Z","sourceId":null,"ticketId":"699d5bece335b461449f4b91","avatarUrl":null,"eventType":"message","forwarded":false,"listReply":null,"sourceUrl":null,"timestamp":"1772092488","assignedId":null,"senderName":"Deepanshi Singhal","sourceType":7,"buttonReply":null,"operatorName":null,"statusString":"SENT","operatorEmail":null,"conversationId":"699d5becb12153808a3300f0","messageContact":null,"replyContextId":"","whatsappMessageId":"wamid.HBgMOTE3MDI0OTM1OTE1FQIAEhggQUMyQTdGNEExQkVFNzlEQTMyQzU5NUVDMUU3NENCQzgA","frequentlyForwarded":false,"interactiveButtonReply":null}]},"connections":{"Wati Trigger":{"main":[[{"node":"Intent Router1","type":"main","index":0}]]},"Intent Router1":{"main":[[{"node":"OpenAI – Parse List1","type":"main","index":0}],[{"node":"Google Sheets – Read List for Compare1","type":"main","index":0}],[{"node":"Google Sheets – Read Saved Deals1","type":"main","index":0}],[{"node":"Google Sheets – Read My List1","type":"main","index":0}],[{"node":"Process Clear1","type":"main","index":0}]]},"Process Clear1":{"main":[[{"node":"Send a text message9","type":"main","index":0}]]},"Build Deals View1":{"main":[[{"node":"Send a text message8","type":"main","index":0}]]},"Build My List View1":{"main":[[{"node":"Send a text message7","type":"main","index":0}]]},"Process Deal Result1":{"main":[[{"node":"Google Sheets – Save Deals1","type":"main","index":0}]]},"Build Alert Messages1":{"main":[[{"node":"Send a text message","type":"main","index":0}]]},"Structure List Items1":{"main":[[{"node":"Google Sheets – Save Shopping List1","type":"main","index":0}]]},"OpenAI – Parse List1":{"main":[[{"node":"Structure List Items1","type":"main","index":0}]]},"Prepare Search Queries1":{"main":[[{"node":"Serper – Search Prices1","type":"main","index":0}]]},"Serper – Search Prices1":{"main":[[{"node":"OpenAI – Extract Best Deal1","type":"main","index":0}]]},"Aggregate Comparison Card1":{"main":[[{"node":"Send a text message6","type":"main","index":0}]]},"Google Sheets – Save Deals1":{"main":[[{"node":"Aggregate Comparison Card1","type":"main","index":0}]]},"OpenAI – Extract Best Deal1":{"main":[[{"node":"Process Deal Result1","type":"main","index":0}]]},"Google Sheets – Read My List1":{"main":[[{"node":"Build My List View1","type":"main","index":0}]]},"Google Sheets – Read Saved Deals1":{"main":[[{"node":"Build Deals View1","type":"main","index":0}]]},"Google Sheets – Save Shopping List1":{"main":[[{"node":"Send a text message5","type":"main","index":0}]]},"Schedule Trigger – Daily 8AM Alerts1":{"main":[[{"node":"Google Sheets – Read Deals for Alert1","type":"main","index":0}]]},"Google Sheets – Read Deals for Alert1":{"main":[[{"node":"Build Alert Messages1","type":"main","index":0}]]},"Google Sheets – Read List for Compare1":{"main":[[{"node":"Prepare Search Queries1","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":34,"nodeTypes":{"n8n-nodes-base.code":{"count":8},"n8n-nodes-wati.wati":{"count":6},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.stickyNote":{"count":8},"n8n-nodes-base.httpRequest":{"count":3},"n8n-nodes-wati.watiTrigger":{"count":1},"n8n-nodes-base.googleSheets":{"count":6},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Jitesh Dugar","username":"jiteshdugar","bio":"AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.","verified":true,"links":["https://www.linkedin.com/in/jiteshdugar"],"avatar":"https://gravatar.com/avatar/edaa3abb99806b0586dced559d0a5417f24a507e7c4464a63960f0638a4b1b90?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":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":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"}]}],"categories":[{"id":43,"name":"Personal Productivity"},{"id":47,"name":"AI Chatbot"}],"image":[]}}