{"workflow":{"id":13571,"name":"Generate .com brand names with OpenAI and API Ninjas into Google Sheets","views":15,"recentViews":0,"totalViews":15,"createdAt":"2026-02-21T11:14:59.920Z","description":"Use OpenAI to generate short, memorable brand names for your app and automatically check .com availability — results go straight into Google Sheets.\n\n**Categories:** AI, Marketing\n\n---\n\n## Description\n\nThis n8n workflow helps you find an available .com domain for your product. It uses OpenAI to generate batches of creative, on-brand names (e.g. for a digital wardrobe / closet app, inspired by names like Whering, Acloset, Stylebook), then checks each suggestion via API Ninjas. Available domains are appended to a sheet, taken ones to a separate sheet. On each run it reads both sheets so it never suggests or re-checks the same names. The loop runs until you have at least **15 available domains** or hit **10 iterations** (20 names per iteration).\n\n---\n\n## Good to know\n\n- **API Ninjas** free tier supports **.com only**. Under heavy load you may see occasional 502 errors; the workflow uses Continue On Fail and only processes successful responses. Add a **Wait** node (200–500 ms) before \"Check domain (API Ninjas)\" if needed.\n- **OpenAI** usage depends on your plan (tokens and rate limits). Each iteration sends one request for 20 names.\n- State is passed through the pipeline so that newly checked domains are excluded in the next iteration — no duplicates in suggestions or in the sheets.\n\n---\n\n## How it works\n\n1. **Start:** Manual Trigger runs **Read sheet available** and **Read sheet closed** (in sequence). **Build initial state** builds `alreadyChecked` from both sheets and sets `totalFound` from the available count.\n\n2. **Prepare prompt** builds a system and user prompt with your app context and the current `alreadyChecked` list, then **Generate names (OpenAI)** returns 20 new names. **Normalize to domains** cleans and turns them into `.com` domains.\n\n3. **Check domain (API Ninjas)** checks each name. **Merge name and API result** combines normalized names with API results (only items with a valid `available` field).\n\n4. **Filter available only** and **Closed only** split results; **Append to sheet available** and **Append to sheet closed** write to Google Sheets. **State for next run** updates `totalFound`, appends this round’s domains to `alreadyChecked`, and increments the iteration. **Exit or loop** stops when `totalFound &gt;= 15` or `iteration &gt; 10`, otherwise loops back to **Prepare prompt** with the updated state.\n\n---\n\n## How to use\n\n1. Use the **Manual Trigger** to run the workflow.\n2. Configure credentials: **OpenAI** (e.g. OpenAI Vision), **Api ninjas** (Header Auth, `X-Api-Key` from [api-ninjas.com](https://api-ninjas.com)), and **Google Sheets account**.\n3. In one Google spreadsheet create two sheets named **available** and **closed**, each with header row: `domain`, `name`. Set this document and sheet names in the four Google Sheets nodes (Read sheet available, Read sheet closed, Append to sheet available, Append to sheet closed).\n4. If you see repeated 502s, add a **Wait** node (200–500 ms) before **Check domain (API Ninjas)** or enable **Retry On Fail** on that node.\n\n---\n\n## Requirements\n\n- n8n (2.2.3+ recommended)\n- **OpenAI** API key (for name generation)\n- **API Ninjas** API key (for domain availability) or other API\n- **Google Sheets** (one document with two sheets: **available**, **closed**; columns: `domain`, `name`)\n\n---\n\n## Customising this workflow\n\n- **Different niche:** Edit the **Prepare prompt** node to change the app context and style (e.g. another app category, different reference names). The prompt enforces short names (under 14 characters), letters only, and excludes already-checked domains.\n- **Target count and iterations:** In **Exit or loop**, change the conditions (e.g. `totalFound &gt; 15` to another number, or `iteration = 10` to allow more rounds).\n- **Other TLDs:** The free API Ninjas tier is .com only; with a paid plan you could extend the workflow to check other zones.\n","workflow":{"meta":{"instanceId":"b938a02848b1a0d21537d02e7545d7225cce65428f918c7931d4dfd7f8acdde0"},"nodes":[{"id":"9418fcb2-faa2-4b09-a586-0e2407f29bc1","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[2576,144],"parameters":{"color":7,"width":280,"height":148,"content":"## Write to sheets\n\nAppends available domains to sheet \"available\", taken ones to sheet \"closed\"."},"typeVersion":1},{"id":"76f9496b-5028-4289-ad46-638e8eee772d","name":"Manual Trigger","type":"n8n-nodes-base.manualTrigger","position":[368,336],"parameters":{},"typeVersion":1},{"id":"12966170-54f2-4adb-8986-e21a98ecadc2","name":"Read sheet available","type":"n8n-nodes-base.googleSheets","position":[528,336],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"name","value":"available"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID"}},"typeVersion":4.5,"continueOnFail":true},{"id":"0a434fcb-3328-40da-af7a-6c5fb3f6c2e8","name":"Trigger closed read","type":"n8n-nodes-base.code","position":[688,336],"parameters":{"jsCode":"return [{ json: {} }];"},"typeVersion":2},{"id":"939ea07b-1f6a-4d31-928d-2a9cfa70e0ee","name":"Read sheet closed","type":"n8n-nodes-base.googleSheets","position":[848,336],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"name","value":"closed"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID"}},"typeVersion":4.5,"continueOnFail":true},{"id":"1e5e0aca-0d40-4f79-9cc1-78e77055910e","name":"Build initial state","type":"n8n-nodes-base.code","position":[1008,336],"parameters":{"jsCode":"let availableRows = [];\nlet closedRows = [];\ntry { availableRows = $('Read sheet available').all().map(i => i.json || i) || []; } catch (e) { }\ntry { closedRows = $('Read sheet closed').all().map(i => i.json || i) || []; } catch (e) { }\nconst totalFound = Array.isArray(availableRows) ? availableRows.length : 0;\nconst dom = (r) => (r && (r.domain || r.name || r.Domain || r.Name));\nconst fromAv = (Array.isArray(availableRows) ? availableRows : []).map(dom).filter(Boolean);\nconst fromCl = (Array.isArray(closedRows) ? closedRows : []).map(dom).filter(Boolean);\nconst alreadyChecked = [...new Set([...fromAv, ...fromCl])];\nreturn { json: { totalFound, alreadyChecked, iteration: 0 } };"},"typeVersion":2},{"id":"1c6e05de-3a65-4778-99fa-2bc1be51d184","name":"Prepare prompt","type":"n8n-nodes-base.code","position":[1232,336],"parameters":{"jsCode":"const input = $input.first().json;\nconst totalFound = input.totalFound ?? 0;\nconst alreadyChecked = Array.isArray(input.alreadyChecked) ? input.alreadyChecked : [];\nconst iteration = input.iteration ?? 0;\nconst excludeText = alreadyChecked.length > 0\n  ? ` Do NOT suggest these names or domains (already checked, taken or already used): ${alreadyChecked.join(', ')}.`\n  : '';\nconst systemPrompt = `You are a naming expert. Generate short, distinctive, memorable brand names in English for a product or app. Use only letters, no numbers or hyphens. Each name must be under 14 characters. Return a valid JSON object with a single key \"names\" containing an array of exactly 20 strings.${excludeText}`;\nconst userPrompt = `Generate 20 new, unique names for a product or app. Letters only, no numbers or hyphens, under 14 characters per name.${excludeText} Return ONLY valid JSON: { \"names\": [\"Name1\", \"Name2\", ...] }`;\nreturn { json: { systemPrompt, userPrompt, totalFound, alreadyChecked, iteration } };"},"typeVersion":2},{"id":"e04b598d-b421-466f-8371-91c406e2c896","name":"Generate names (OpenAI)","type":"n8n-nodes-base.httpRequest","position":[1392,336],"parameters":{"url":"https://api.openai.com/v1/chat/completions","method":"POST","options":{},"jsonBody":"={{ JSON.stringify({ model: 'gpt-4o', temperature: 0.7, max_tokens: 2000, messages: [{ role: 'system', content: $json.systemPrompt }, { role: 'user', content: $json.userPrompt }], response_format: { type: 'json_object' } }) }}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4},{"id":"114d5465-a2cb-40f0-8166-9bb144f4a7e9","name":"Normalize to domains","type":"n8n-nodes-base.code","position":[1552,336],"parameters":{"jsCode":"const openaiResponse = $json;\nif (!openaiResponse.choices || !openaiResponse.choices[0] || !openaiResponse.choices[0].message || !openaiResponse.choices[0].message.content) {\n  throw new Error('OpenAI returned empty or invalid response');\n}\nconst parsed = JSON.parse(openaiResponse.choices[0].message.content);\nconst names = Array.isArray(parsed.names) ? parsed.names : [];\nif (names.length === 0) throw new Error('AI returned no names');\nconst items = names.map(name => {\n  const clean = String(name).trim().replace(/\\s+/g, '').replace(/[^a-zA-Z]/g, '');\n  if (!clean) return null;\n  const domain = clean.toLowerCase() + '.com';\n  return { json: { name: clean, domain } };\n}).filter(Boolean);\nreturn items;"},"typeVersion":2},{"id":"493049ef-0815-4d22-893f-b45a9d56d61b","name":"Check domain (API Ninjas)","type":"n8n-nodes-base.httpRequest","position":[1760,336],"parameters":{"url":"https://api.api-ninjas.com/v1/domain","options":{"response":{"response":{"neverError":true}}},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","queryParameters":{"parameters":[{"name":"domain","value":"={{ $json.domain }}"}]}},"typeVersion":4.2,"continueOnFail":true},{"id":"0a48d7ba-d5a0-4d2c-92bb-7f198ec317bf","name":"Merge name and API result","type":"n8n-nodes-base.code","position":[1984,336],"parameters":{"jsCode":"const apiItems = $input.all();\nconst normNode = $('Normalize to domains');\nconst normItems = normNode.all();\nconst state = $('Prepare prompt').last().json;\nconst roundState = { totalFound: state.totalFound ?? 0, alreadyChecked: Array.isArray(state.alreadyChecked) ? state.alreadyChecked : [], iteration: state.iteration ?? 0 };\nconst result = [];\nfor (let i = 0; i < apiItems.length; i++) {\n  const item = apiItems[i];\n  const apiJson = item.json || {};\n  if (typeof apiJson.available === 'boolean') {\n    result.push({ json: { ...normItems[i].json, ...apiJson, _roundState: roundState } });\n  }\n}\nreturn result;"},"typeVersion":2},{"id":"edc50197-55e6-49c3-b123-5763435d5ea8","name":"Closed only","type":"n8n-nodes-base.code","position":[1984,720],"parameters":{"jsCode":"const items = $input.all();\nreturn items.filter(i => i.json && i.json.available === false).map(i => ({ json: { domain: i.json.domain, name: i.json.name } }));"},"typeVersion":2},{"id":"ce7811b1-cf8d-45e2-955f-fa248a4d6ec1","name":"State for next run","type":"n8n-nodes-base.code","position":[1984,544],"parameters":{"jsCode":"const mergeItems = $input.all();\nconst first = mergeItems[0] && mergeItems[0].json;\nconst prev = first && first._roundState ? first._roundState : { totalFound: 0, alreadyChecked: [], iteration: 0 };\nconst totalFound = prev.totalFound ?? 0;\nconst alreadyChecked = prev.alreadyChecked ?? [];\nconst iteration = prev.iteration ?? 0;\nconst availableCount = mergeItems.filter(i => i.json && i.json.available === true).length;\nconst domainsThisRound = mergeItems.map(i => i.json && i.json.domain).filter(Boolean);\nconst newAlreadyChecked = [...new Set([...alreadyChecked, ...domainsThisRound])];\nconst newTotalFound = totalFound + availableCount;\nconst newIteration = iteration + 1;\nreturn { json: { totalFound: newTotalFound, alreadyChecked: newAlreadyChecked, iteration: newIteration } };"},"typeVersion":2},{"id":"035d99e3-e056-4909-80a9-f5d81258cc3d","name":"Exit or loop","type":"n8n-nodes-base.if","position":[2208,544],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"id":"cond-exit","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.totalFound >= 15 }}","rightValue":true},{"id":"cond-iter","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.iteration > 10 }}","rightValue":true}]}},"typeVersion":2},{"id":"8ea1d3ca-12f4-42d3-bd4c-ccbb79d0aae9","name":"Filter available only","type":"n8n-nodes-base.filter","position":[2208,336],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"cond-available","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.available }}","rightValue":true}]}},"typeVersion":2},{"id":"fc2c9eca-d842-4b28-afbb-8f456f42ffed","name":"Append to sheet available","type":"n8n-nodes-base.googleSheets","position":[2640,336],"parameters":{"columns":{"value":{},"schema":[{"id":"domain","type":"string","display":true,"required":false,"displayName":"domain","defaultMatch":false,"canBeUsedToMatch":true},{"id":"name","type":"string","display":true,"required":false,"displayName":"name","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"available"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID"}},"typeVersion":4.5},{"id":"319bf54c-7c74-4276-85e1-48fc779bd217","name":"Append to sheet closed","type":"n8n-nodes-base.googleSheets","position":[2208,720],"parameters":{"columns":{"value":{},"schema":[{"id":"domain","type":"string","display":true,"required":false,"displayName":"domain","defaultMatch":false,"canBeUsedToMatch":true},{"id":"name","type":"string","display":true,"required":false,"displayName":"name","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"closed"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID"}},"typeVersion":4.5},{"id":"98e14d9d-acdb-4ded-bd01-a9c7dc1cbde9","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-208,-208],"parameters":{"width":464,"height":448,"content":"## How it works\n\nManual Trigger starts a run. The workflow reads your Google Sheet (tabs \"available\" and \"closed\") to get domains already checked. Build initial state builds the alreadyChecked list and totalFound count.\n\nPrepare prompt builds the prompt with your app context and passes alreadyChecked so the AI does not suggest the same names again. Generate names (OpenAI) returns 20 new names; Normalize to domains turns them into .com domains.\n\nCheck domain (API Ninjas) checks each name. Merge name and API result keeps only items with a valid API response. Filter available only and Closed only split results into available vs taken. Available domains go to Append to sheet available, taken ones to Append to sheet closed. State for next run updates the counters and alreadyChecked list. Exit or loop stops when you have at least 15 available domains or after 10 iterations (20 names per iteration), otherwise it loops back to Prepare prompt.\n"},"typeVersion":1},{"id":"3537e384-9162-44f4-ac92-513c1fab213b","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-208,288],"parameters":{"width":464,"height":288,"content":"## Setup steps\n\n1. Credentials: Add OpenAI API key to the Generate names (OpenAI) node. Add API Ninjas key (header X-Api-Key from api-ninjas.com) to Check domain (API Ninjas). Add Google Sheets OAuth2 to all four Google Sheets nodes.\n2. In one Google spreadsheet create two sheets named \"available\" and \"closed\", each with header row: domain, name. In all four Google Sheets nodes set Document to your sheet ID (replace YOUR_GOOGLE_SHEET_ID in the node settings).\n3. Optional: Edit Prepare prompt to describe your product so the AI suggests fitting names (e.g. app category, style, reference brands)."},"typeVersion":1},{"id":"ff9b747e-9b86-4997-9284-115fce0105ba","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[512,144],"parameters":{"color":7,"content":"## Start & load state\n\nReads sheets \"available\" and \"closed\", builds alreadyChecked and totalFound for the loop."},"typeVersion":1},{"id":"fb7e0fae-f61b-40eb-a991-655691c480cd","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1392,144],"parameters":{"color":7,"content":"## Prompt & names\n\nEdit Prepare prompt for your product; OpenAI returns 20 names; Normalize to domains makes them .com."},"typeVersion":1},{"id":"9fe661d2-b771-4e3f-a674-add5a79c3d1e","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1712,144],"parameters":{"color":7,"content":"## Check & route\n\nAPI Ninjas checks each domain; results split into available/closed; state updated; loop or exit."},"typeVersion":1}],"pinData":{},"connections":{"Closed only":{"main":[[{"node":"Append to sheet closed","type":"main","index":0}]]},"Exit or loop":{"main":[[],[{"node":"Prepare prompt","type":"main","index":0}]]},"Manual Trigger":{"main":[[{"node":"Read sheet available","type":"main","index":0}]]},"Prepare prompt":{"main":[[{"node":"Generate names (OpenAI)","type":"main","index":0}]]},"Read sheet closed":{"main":[[{"node":"Build initial state","type":"main","index":0}]]},"State for next run":{"main":[[{"node":"Exit or loop","type":"main","index":0}]]},"Build initial state":{"main":[[{"node":"Prepare prompt","type":"main","index":0}]]},"Trigger closed read":{"main":[[{"node":"Read sheet closed","type":"main","index":0}]]},"Normalize to domains":{"main":[[{"node":"Check domain (API Ninjas)","type":"main","index":0}]]},"Read sheet available":{"main":[[{"node":"Trigger closed read","type":"main","index":0}]]},"Filter available only":{"main":[[{"node":"Append to sheet available","type":"main","index":0}]]},"Generate names (OpenAI)":{"main":[[{"node":"Normalize to domains","type":"main","index":0}]]},"Check domain (API Ninjas)":{"main":[[{"node":"Merge name and API result","type":"main","index":0}]]},"Merge name and API result":{"main":[[{"node":"Filter available only","type":"main","index":0},{"node":"State for next run","type":"main","index":0},{"node":"Closed only","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":22,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":7},"n8n-nodes-base.filter":{"count":1},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.httpRequest":{"count":2},"n8n-nodes-base.googleSheets":{"count":4},"n8n-nodes-base.manualTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Pavel Zamorev","username":"zamorev","bio":"Product leader with 15+ years in B2B/B2C across Europe and emerging markets.\nSpecialization: Product strategy, platform scaling, data-driven decision-making, and AI innovation.\nExperience: Startups and enterprises (telecom, fintech, banking, digital ecosystems).\nFocus: Delivering measurable value through personalization, ML automation, and process optimization.","verified":false,"links":["https://www.linkedin.com/in/pavelzamorev/"],"avatar":"https://gravatar.com/avatar/e97854666616e6d680e2b97c3ca0654f0921b40707c0e6ce685727206935e930?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":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":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":844,"icon":"fa:filter","name":"n8n-nodes-base.filter","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The Filter node can be used to filter items based on a condition. If the condition is met, the item will be passed on to the next node. If the condition is not met, the item will be omitted. Conditions can be combined together by AND(meet all conditions), or OR(meet at least one condition).","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.filter/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Filter","color":"#229eff"},"iconData":{"icon":"filter","type":"icon"},"displayName":"Filter","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":32,"name":"Market Research"},{"id":51,"name":"Multimodal AI"}],"image":[]}}