{"workflow":{"id":14518,"name":"Sync HubSpot and Linear customers daily using Snowflake data","views":1,"recentViews":1,"totalViews":1,"createdAt":"2026-03-31T08:48:27.327Z","description":"## HubSpot → Linear Customers Sync\n\nKeeps your **Linear Customers** list automatically in sync with HubSpot CRM data, using **Snowflake** as the data warehouse source.\n\nRuns on a daily schedule and handles both **creates** and **updates** — only touching records where ARR or seat count has actually changed. No unnecessary API calls.\n\n## How it works\n\n1. A **Schedule Trigger** fires daily at a configurable time\n2. **Snowflake** is queried to retrieve all customer accounts with aggregated ARR and seat count from your CRM (e.g. Hubspot) product table\n3. All existing **Linear Customers** are fetched via cursor-based pagination (250 records/page)\n4. A **matching step** compares records using HubSpot `COMPANY_ID` as the Linear `externalId`, with a domain-based fallback for re-keyed accounts\n5. Unmatched companies are **created** as new Linear Customers\n6. Changed records (ARR or seats) are **updated** in Linear\n7. A **Slack notification** is sent for every sync action\n\n## Setup\n\n1. Add your **Snowflake** credential and adapt the SQL query to your schema\n2. Connect your **Linear API** credential (requires Customer read + write permissions)\n3. Set up a **Slack Bot** credential and update the target channel in the Slack node\n4. Adjust the **Schedule Trigger** to your preferred sync time\n\n## Notes\n\n- The `Limit Snowflake (Testing)` node is **disabled by default** — enable it during testing to cap the number of Snowflake rows processed\n- Matching uses `externalIds` (HubSpot company ID) first, then falls back to `domains`\n- Only records with changed `revenue` or `size` values trigger a Linear update","workflow":{"id":"HkG9aYueINUTHZ05","meta":{"instanceId":"21b41c2deb1c9e3f543253a0aa6a6e2c7bd7ef6bab90ffd478aa947c17d3b352","templateCredsSetupCompleted":true},"name":"HubSpot → Linear Customers Sync (via Snowflake)","tags":[{"id":"17","name":"snowflake","createdAt":"2023-09-18T17:05:02.756Z","updatedAt":"2023-09-18T17:05:02.756Z"},{"id":"6Ek7V8f4xbM9vWLj","name":"linear","createdAt":"2024-11-08T12:12:15.330Z","updatedAt":"2024-11-08T12:12:15.330Z"}],"nodes":[{"id":"522c2916-0b5c-4445-992a-aa50d34365c4","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-2096,1184],"parameters":{"width":480,"height":848,"content":"## HubSpot → Linear Customers Sync (via Snowflake)\n\n### How it works\n\n1. Scheduled trigger initiates data retrieval from HubSpot via Snowflake.\n2. Data is processed and paginated results are fetched.\n3. Final output is formatted and customers are matched.\n4. Based on the match, the workflow routes to either create or update customers in Linear.\n5. Slack update is sent with the results.\n\n### Setup steps\n\n- [ ] Configure Snowflake credentials for data retrieval.\n- [ ] Set up Linear API credentials for customer management.\n- [ ] Connect Slack account for updates.\n- [ ] Schedule the trigger according to desired frequency.\n"},"typeVersion":1},{"id":"6c668fcf-392b-44e5-82c1-c8c99eb931c4","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1536,1280],"parameters":{"color":7,"width":640,"height":272,"content":"## Trigger and initial data fetch\n\nInitial trigger and data retrieval from HubSpot via Snowflake."},"typeVersion":1},{"id":"f4f8a7ac-10ea-48fc-a447-9f49623a68a9","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-864,1200],"parameters":{"color":7,"width":1104,"height":352,"content":"## Pagination setup and iteration\n\nSet up pagination and iterate through pages of customer data."},"typeVersion":1},{"id":"7b07d5a6-584e-4f32-a51d-579c4338aaf1","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[272,1328],"parameters":{"color":7,"width":240,"height":336,"content":"## Data processing and formatting\n\nProcess fetched data and format the final output."},"typeVersion":1},{"id":"f6c6d0e6-6345-4392-8676-5ab0f314de0b","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[544,1376],"parameters":{"color":7,"width":416,"height":304,"content":"## Customer matching and routing\n\nMatch customers for actions and route to create or update functions."},"typeVersion":1},{"id":"769cecd7-923f-4091-8c9d-de3faa8b6f71","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[992,1184],"parameters":{"color":7,"width":240,"height":592,"content":"## Customer management in Linear\n\nCreate or update customers in Linear based on the routing decision."},"typeVersion":1},{"id":"d99ddc31-d233-4bc8-9527-107ce1e11a1d","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[704,1712],"parameters":{"color":7,"width":240,"height":320,"content":"## Notify via Slack\n\nSend a Slack update with the result of the customer management process."},"typeVersion":1},{"id":"a53566ce-2e8f-4041-9f48-f1ca1ef6c843","name":"Post Update to Linear","type":"n8n-nodes-base.httpRequest","position":[1040,1616],"parameters":{"url":"https://api.linear.app/graphql","method":"POST","options":{},"jsonBody":"={\n  \"query\": \"mutation CustomerUpdate($id: String!, $input: CustomerUpdateInput!) { customerUpdate(id: $id, input: $input) { success customer { id name revenue size status { id name } } } }\",\n  \"variables\": {\n    \"id\": \"{{ $json.linearId }}\",\n    \"input\": {\n      \"revenue\": {{ $json.snowflakeData.arr }},\n      \"size\": {{ $json.snowflakeData.seats }}\n    }\n  }\n}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"linearApi"},"typeVersion":4.2},{"id":"99aed38a-fd51-4909-8c35-55e8bf13e9c0","name":"Post Create to Linear","type":"n8n-nodes-base.httpRequest","position":[1040,1376],"parameters":{"url":"https://api.linear.app/graphql","method":"POST","options":{},"jsonBody":"={\n  \"query\": \"mutation CustomerCreate($input: CustomerCreateInput!) { customerCreate(input: $input) { success customer { id name domains externalIds revenue size status { id name } } } }\",\n  \"variables\": {\n    \"input\": {\n      \"name\": \"{{ $json.snowflakeData.name }}\",\n      \"domains\": [\"{{ $json.snowflakeData.domain }}\"],\n      \"externalIds\": [\"{{ $json.snowflakeData.companyId }}\"],\n      \"revenue\": {{ $json.snowflakeData.arr }},\n      \"size\": {{ $json.snowflakeData.seats }}\n    }\n  }\n}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"linearApi"},"typeVersion":4.2},{"id":"2ba32a25-8b4d-4e17-929d-a06a9a9456ef","name":"Route by Customer Action","type":"n8n-nodes-base.switch","position":[816,1504],"parameters":{"rules":{"values":[{"outputKey":"create","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"is-create","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.action }}","rightValue":"create"}]},"renameOutput":true},{"outputKey":"update","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"is-update","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.action }}","rightValue":"update"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.2},{"id":"a5dad935-c564-41c6-8e24-42ecaafdaf6b","name":"Format Output Data","type":"n8n-nodes-base.code","position":[320,1504],"parameters":{"jsCode":"// Format final output to match expected structure\nconst data = $input.all()[0].json;\nconst allCustomers = data.allCustomers;\n\nconsole.log(`✅ Pagination complete: ${allCustomers.length} total customers`);\n\nreturn [{\n  json: {\n    data: {\n      customers: {\n        nodes: allCustomers\n      }\n    }\n  }\n}];"},"typeVersion":2},{"id":"c3b9602a-dc66-4c39-a30a-6242e76308fb","name":"Set Next Page Parameters","type":"n8n-nodes-base.set","position":[96,1312],"parameters":{"options":{},"assignments":{"assignments":[{"id":"cursor-next","name":"cursor","type":"string","value":"={{ $json.cursor }}"},{"id":"page-next","name":"pageNumber","type":"number","value":"={{ $json.pageNumber }}"},{"id":"all-customers-next","name":"allCustomers","type":"array","value":"={{ $json.allCustomers }}"}]}},"typeVersion":3.4},{"id":"91fe3a62-f8cb-4307-9070-84f5da8a8bf9","name":"If More Pages Exist","type":"n8n-nodes-base.if","position":[-144,1312],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"has-next","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.hasNextPage }}","rightValue":true}]}},"typeVersion":2.3},{"id":"e67f6802-7ac9-41ac-bf83-ee37c80a338c","name":"Process Customer Page","type":"n8n-nodes-base.code","position":[-368,1312],"parameters":{"jsCode":"// Process page results and prepare for next iteration\nconst response = $input.all()[0].json;\nconst customers = response.data.customers.nodes;\nconst pageInfo = response.data.customers.pageInfo;\n\n// Get accumulated data — use Prepare Next Iteration if available (pages 2+),\n// otherwise fall back to Initialize Pagination (first page)\nlet previousData;\ntry {\n  previousData = $('Set Next Page Parameters').all()[0].json;\n} catch (e) {\n  previousData = $('Set Initial Pagination').all()[0].json;\n}\n\nconst allCustomers = [...(previousData.allCustomers || [])];\nconst pageNumber = (previousData.pageNumber || 0) + 1;\n\n// Add new customers to collection\nallCustomers.push(...customers);\n\nconsole.log(`📄 Page ${pageNumber}: Fetched ${customers.length} customers (Total: ${allCustomers.length})`);\n\nreturn [{\n  json: {\n    cursor: pageInfo.endCursor,\n    hasNextPage: pageInfo.hasNextPage,\n    pageNumber: pageNumber,\n    allCustomers: allCustomers,\n    currentPageCustomers: customers\n  }\n}];"},"typeVersion":2},{"id":"f4c8955b-57fe-4473-b2e2-a225a0e1a453","name":"Fetch Customer Data","type":"n8n-nodes-base.httpRequest","position":[-592,1392],"parameters":{"url":"https://api.linear.app/graphql","method":"POST","options":{},"jsonBody":"={\n  \"query\": \"query GetCustomers($after: String) { customers(first: 250, after: $after) { nodes { id name domains externalIds revenue size tier { id name } status { id name } owner { id name email } logoUrl createdAt updatedAt } pageInfo { hasNextPage endCursor } } }\",\n  \"variables\": {{ $json.cursor ? '{\"after\": \"' + $json.cursor + '\"}' : '{}' }}\n}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"linearApi"},"credentials":{"linearApi":{"id":"padLpVlCJRTjwC4o","name":"Linear account Romain Jouhannet"}},"executeOnce":false,"typeVersion":4.2},{"id":"de50b0ee-62be-41bd-bda5-356b3741a408","name":"Set Initial Pagination","type":"n8n-nodes-base.set","position":[-816,1392],"parameters":{"options":{},"assignments":{"assignments":[{"id":"cursor-init","name":"cursor","type":"string","value":""},{"id":"page-init","name":"pageNumber","type":"number","value":"=0"},{"id":"all-customers-init","name":"allCustomers","type":"array","value":"=[]"}]}},"typeVersion":3.4},{"id":"da68e303-94ba-407d-9d8d-0bf5f06b04cc","name":"Limit HubSpot Records","type":"n8n-nodes-base.limit","disabled":true,"position":[-1040,1392],"parameters":{"maxItems":10},"typeVersion":1},{"id":"e903a180-efdf-440b-b37c-9b63e94efe90","name":"When Scheduled at 2 PM","type":"n8n-nodes-base.scheduleTrigger","position":[-1488,1392],"parameters":{"rule":{"interval":[{"triggerAtHour":14}]}},"typeVersion":1.1},{"id":"8e56c48c-f9b0-4009-a96d-952a469162ff","name":"Match and Update Customers","type":"n8n-nodes-base.code","position":[592,1504],"parameters":{"jsCode":"// Customer matching: create and update only\n\n// Get Snowflake customers\nconst snowflakeCustomers = $('Limit HubSpot Records').all().map(item => ({\n  companyId: item.json.COMPANY_ID.toString(),\n  name: item.json.COMPANY_NAME,\n  domain: item.json.DOMAIN,\n  arr: Math.round(item.json.ARR || 0),\n  seats: item.json.SEATS || 0\n}));\n\n// Get Linear customers\nconst linearData = $('Format Output Data').all()[0].json.data.customers.nodes;\n\n// Build lookup maps\n// 1. Index ALL externalIds (not just [0]) — handles multi-ID customers\n//    and cases where Snowflake ID matches a non-primary externalId\nconst linearByExternalId = new Map();\nlinearData.forEach(c => {\n  (c.externalIds || []).forEach(id => {\n    if (!linearByExternalId.has(id)) linearByExternalId.set(id, c);\n  });\n});\n\n// 2. Domain-based fallback — handles cases where HubSpot re-keyed\n//    the company (new COMPANY_ID) but the domain is unchanged\nconst linearByDomain = new Map();\nlinearData.forEach(c => {\n  (c.domains || []).forEach(d => {\n    if (d && !linearByDomain.has(d)) linearByDomain.set(d, c);\n  });\n});\n\n// Resolve a Snowflake customer to its Linear counterpart\nfunction findLinearCustomer(sfCustomer) {\n  return linearByExternalId.get(sfCustomer.companyId)\n    || linearByDomain.get(sfCustomer.domain)\n    || null;\n}\n\nconst toCreate = [];\nconst toUpdate = [];\nconst matchLog = [];\n\nsnowflakeCustomers.forEach(sfCustomer => {\n  const linearCustomer = findLinearCustomer(sfCustomer);\n\n  if (!linearCustomer) {\n    toCreate.push({ action: 'create', snowflakeData: sfCustomer });\n    return;\n  }\n\n  const matchedVia = linearByExternalId.has(sfCustomer.companyId) ? 'externalId' : 'domain';\n  matchLog.push(`  ✓ [${matchedVia}] ${sfCustomer.name}`);\n\n  const revenueChanged = linearCustomer.revenue !== sfCustomer.arr;\n  const sizeChanged = linearCustomer.size !== sfCustomer.seats;\n\n  if (revenueChanged || sizeChanged) {\n    toUpdate.push({\n      action: 'update',\n      linearId: linearCustomer.id,\n      linearData: linearCustomer,\n      snowflakeData: sfCustomer,\n      changes: { revenue: revenueChanged, size: sizeChanged }\n    });\n  }\n});\n\nconsole.log('\\n📈 Action Summary:');\nconsole.log('  🆕 Create: ' + toCreate.length);\nconsole.log('  ✏️ Update: ' + toUpdate.length);\nconsole.log('  📊 Total: ' + (toCreate.length + toUpdate.length));\nif (matchLog.length) {\n  console.log('\\n🔗 Domain fallback matches:');\n  matchLog.filter(l => l.includes('domain')).forEach(l => console.log(l));\n}\n\nreturn [\n  ...toCreate.map(item => ({ json: item })),\n  ...toUpdate.map(item => ({ json: item }))\n];"},"typeVersion":2},{"id":"98ecdb91-fdbe-46b0-a6d9-57e9afe57dff","name":"Post Slack Notification","type":"n8n-nodes-base.slack","onError":"continueRegularOutput","position":[752,1872],"webhookId":"6a600974-b5c7-42df-b3d3-12a5dedcd21e","parameters":{"text":"=Linear Customer Sync — Run Summary","select":"channel","blocksUi":"={\n  \"blocks\": [\n    {\n      \"type\": \"header\",\n      \"text\": { \"type\": \"plain_text\", \"text\": \"🔄 Linear Customer Sync\", \"emoji\": true }\n    },\n    {\n      \"type\": \"section\",\n      \"fields\": [\n        { \"type\": \"mrkdwn\", \"text\": \"*{{ $json.action.toTitleCase() }}*: `{{ $json.snowflakeData.name }}` (`${{ $json.snowflakeData.arr }}`, `{{ $json.snowflakeData.seats }} seats`)\" }\n      ]\n    }\n  ]\n}","channelId":{"__rl":true,"mode":"name","value":"#your-slack-channel"},"messageType":"block","otherOptions":{}},"executeOnce":false,"retryOnFail":false,"typeVersion":2.1},{"id":"cb703602-d451-4ffd-8168-e968fb2f0a79","name":"Retrieve HubSpot Data from Snowflake","type":"n8n-nodes-base.snowflake","position":[-1264,1392],"parameters":{"query":"SELECT\n  comp.COMPANY_ID,\n  comp.NAME AS COMPANY_NAME,\n  comp.DOMAIN,\n  SUM(d.AMOUNT) AS ARR,\n  MAX(d.NUMBER_OF_SEATS) AS SEATS\nFROM\n  \"HUBSPOT\".\"COMPANIES\" comp\nJOIN\n  \"HUBSPOT\".\"ASSOCIATIONS_DEALS_TO_COMPANIES\" assoc\n  ON comp.COMPANY_ID = assoc.COMPANY_ID\nJOIN\n  \"HUBSPOT\".\"DEALS\" d\n  ON assoc.DEAL_ID = d.DEAL_ID\nWHERE\n  d.DEALSTAGE = 'closedwon'\nGROUP BY\n  comp.COMPANY_ID,\n  comp.NAME,\n  comp.DOMAIN\nORDER BY\n  ARR DESC","operation":"executeQuery"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"callerPolicy":"workflowsFromSameOwner","errorWorkflow":"WRas2GJ7w02TmUYO","timeSavedMode":"fixed","availableInMCP":false,"executionOrder":"v1","saveManualExecutions":true,"saveExecutionProgress":true,"timeSavedPerExecution":60,"saveDataErrorExecution":"all","saveDataSuccessExecution":"all"},"versionId":"371569d3-b69a-4bef-a213-e5d2fb9d110d","connections":{"Format Output Data":{"main":[[{"node":"Match and Update Customers","type":"main","index":0}]]},"Fetch Customer Data":{"main":[[{"node":"Process Customer Page","type":"main","index":0}]]},"If More Pages Exist":{"main":[[{"node":"Set Next Page Parameters","type":"main","index":0}],[{"node":"Format Output Data","type":"main","index":0}]]},"Limit HubSpot Records":{"main":[[{"node":"Set Initial Pagination","type":"main","index":0}]]},"Process Customer Page":{"main":[[{"node":"If More Pages Exist","type":"main","index":0}]]},"Set Initial Pagination":{"main":[[{"node":"Fetch Customer Data","type":"main","index":0}]]},"When Scheduled at 2 PM":{"main":[[{"node":"Retrieve HubSpot Data from Snowflake","type":"main","index":0}]]},"Route by Customer Action":{"main":[[{"node":"Post Create to Linear","type":"main","index":0}],[{"node":"Post Update to Linear","type":"main","index":0}]]},"Set Next Page Parameters":{"main":[[{"node":"Fetch Customer Data","type":"main","index":0}]]},"Match and Update Customers":{"main":[[{"node":"Route by Customer Action","type":"main","index":0},{"node":"Post Slack Notification","type":"main","index":0}]]},"Retrieve HubSpot Data from Snowflake":{"main":[[{"node":"Limit HubSpot Records","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":21,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.limit":{"count":1},"n8n-nodes-base.slack":{"count":1},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.snowflake":{"count":1},"n8n-nodes-base.stickyNote":{"count":7},"n8n-nodes-base.httpRequest":{"count":3},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Romain Jouhannet","username":"rjouhann","bio":"Technical Product Manager with a background in software development. Experienced in launching products, leading teams, and creating API-first solutions. Skilled in SaaS, Self-Hosted products, major public clouds, and automation, with a focus on simplifying complex technical concepts for enterprise clients.","verified":true,"links":["https://www.linkedin.com/in/romainj/"],"avatar":"https://gravatar.com/avatar/d85f4c3b78e574e660ecc7f0ad9ffa5151f963e7a2c3d7cbc80c01c2ff01ce30?r=pg&d=retro&size=200"},"nodes":[{"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":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":40,"icon":"file:slack.svg","name":"n8n-nodes-base.slack","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/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/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/slack/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Slack"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Slack","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"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":422,"icon":"file:snowflake.svg","name":"n8n-nodes-base.snowflake","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.snowflake/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/snowflake/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Snowflake"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjMgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48cGF0aCBmaWxsPSIjMjliNWU4IiBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSIgZD0ibTguNjQ1IDE1LjMwNCAxMy4wMDggNy44YTMuNzIgMy43MiAwIDAgMCA0LjU4OS0uNjAxIDQgNCAwIDAgMCAxLjIyNy0yLjkwOFYzLjk2MmEzLjgxIDMuODEgMCAwIDAtMS44NjEtMy40MiAzLjgxIDMuODEgMCAwIDAtMy44OTMgMCAzLjgxIDMuODEgMCAwIDAtMS44NjEgMy40MnY4Ljg5NmwtNy4zODctNC40M2EzLjggMy44IDAgMCAwLTIuOTIyLS40IDMuNyAzLjcgMCAwIDAtMi4zIDEuODQ0IDQuMDUgNC4wNSAwIDAgMCAxLjQgNS40MjJtMzEuMjcgNy44IDEzLjAwOC03LjhhNC4wNTYgNC4wNTYgMCAwIDAgMS40LTUuNDI0IDMuNzUgMy43NSAwIDAgMC01LjIyLTEuNDUybC03LjMgNC4zN3YtOC44NEEzLjgxIDMuODEgMCAwIDAgMzkuOTQuNTM0YTMuODEgMy44MSAwIDAgMC0zLjg4OSAwIDMuODEgMy44MSAwIDAgMC0xLjg2MyAzLjQxNHYxNS4zMjNhNC4xIDQuMSAwIDAgMCAuNDk0IDIuMzY3IDMuNzUgMy43NSAwIDAgMCAyLjMgMS44NDQgMy43IDMuNyAwIDAgMCAyLjkyMi0uNG0tMTEuNTY3IDguODk0Yy4wMTMtLjI1LjEwOC0uNS4yNzItLjY4bDEuNTItMS41OGExLjA2IDEuMDYgMCAwIDEgLjY1OC0uMjgyaC4wNTdhMS4wNSAxLjA1IDAgMCAxIC42NTYuMjgybDEuNTIgMS41OGExLjEyIDEuMTIgMCAwIDEgLjI3Mi42ODF2LjA2YTEuMTMgMS4xMyAwIDAgMS0uMjcyLjY4M0wzMS41IDM0LjNhMS4wNCAxLjA0IDAgMCAxLS42NTYuMjg0aC0uMDU3YTEuMDQgMS4wNCAwIDAgMS0uNjU4LS4yODRsLTEuNTItMS41OGExLjEzIDEuMTMgMCAwIDEtLjI3Mi0uNjgzem0tNC42MDQtLjY1djEuMzY0YTEuNTQgMS41NCAwIDAgMCAuMzcyLjkzbDUuMTYgNS4zNTdhMS40MiAxLjQyIDAgMCAwIC44OTUuMzg2aDEuMzEyYTEuNDIgMS40MiAwIDAgMCAuODk1LS4zODZsNS4xNi01LjM1N2ExLjU0IDEuNTQgMCAwIDAgLjM3Mi0uOTN2LTEuMzY0YTEuNTQgMS41NCAwIDAgMC0uMzcyLS45M2wtNS4xNi01LjM1N2ExLjQyIDEuNDIgMCAwIDAtLjg5NS0uMzg2SDMwLjE2YTEuNDIgMS40MiAwIDAgMC0uODk1LjM4NmwtNS4xNiA1LjM2N2ExLjU1IDEuNTUgMCAwIDAtLjM3Mi45M20tMjEuODE4LTMuNzEgNy4zNjUgNC40MTctNy4zNjUgNC40MTNBNC4wNiA0LjA2IDAgMCAwIC41MTYgNDEuODhhMy43NSAzLjc1IDAgMCAwIDIuMyAxLjg0NCAzLjc1IDMuNzUgMCAwIDAgMi45MjItLjM5MmwxMy4wMDgtNy44YTQuMTEgNC4xMSAwIDAgMCAxLjktMy40OTIgNC4xNiA0LjE2IDAgMCAwLTEuOS0zLjQ5MmwtMTMuMDA4LTcuOGEzLjggMy44IDAgMCAwLTIuOTIyLS40IDMuNyAzLjcgMCAwIDAtMi4zIDEuODQ0IDQuMDUzIDQuMDUzIDAgMCAwIDEuNCA1LjQyMm0zOC45OTUgNC40NDJhNCA0IDAgMCAwIDEuOTEgMy40NzdsMTMgNy44YTMuNzQ1IDMuNzQ1IDAgMCAwIDUuMjItMS40NTEgNC4wNSA0LjA1IDAgMCAwLTEuNC01LjQyNGwtNy4zNTYtNC40MTQgNy4zNjUtNC40MTdhNC4wNTQgNC4wNTQgMCAwIDAgMS40LTUuNDIyIDMuNzQgMy43NCAwIDAgMC0yLjMtMS44NDQgMy43IDMuNyAwIDAgMC0yLjkyLjRsLTEzIDcuOGE0IDQgMCAwIDAtMS45MSAzLjUwN20tMTYuNjU1IDguNDQ2YTMuNyAzLjcgMCAwIDAtMi42MTEuNDY0bC0xMy4wMDggNy44YTQuMDU1IDQuMDU1IDAgMCAwLTEuNCA1LjQyMiAzLjc0IDMuNzQgMCAwIDAgMi4zIDEuODQzIDMuNzUgMy43NSAwIDAgMCAyLjkyMi0uMzkybDcuMzg3LTQuNDN2OC44M2EzLjgxIDMuODEgMCAwIDAgNS43NTUgMy40MjUgMy44MSAzLjgxIDAgMCAwIDEuODU4LTMuNDI1VjQ0LjQwNmEzLjkxIDMuOTEgMCAwIDAtMy4yMDUtMy45MDNtMjguNjYgOC4yNzYtMTMuMDA4LTcuOGEzLjc1IDMuNzUgMCAwIDAtMi45MjItLjM5MiAzLjc0IDMuNzQgMCAwIDAtMi4zIDEuODQzIDQuMSA0LjEgMCAwIDAtLjQ5NCAyLjM3djE1LjI1YTMuODEgMy44MSAwIDAgMCA1Ljc1NSAzLjQyNSAzLjgxIDMuODEgMCAwIDAgMS44NTktMy40MjV2LTguNzY0bDcuMjg3IDQuMzdhMy44IDMuOCAwIDAgMCAyLjkyMi40IDMuNyAzLjcgMCAwIDAgMi4zLTEuODQ0YzEuMDU3LTEuOS40NC00LjI4LTEuNC01LjQyMiIvPjwvc3ltYm9sPjwvc3ZnPg=="},"displayName":"Snowflake","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1237,"icon":"file:limit.svg","name":"n8n-nodes-base.limit","codex":{"data":{"alias":["Limit","Remove","Slice","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.limit/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Limit"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjMkZCNjdDIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcGF0aD0idXJsKCNhKSIgY2xpcC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNTEyIDQ1OGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC02OGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDY4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bS0xNDAgMGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC02OGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDY4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bS0xNDAgMGMwLTYuNjI3LTUuMzczLTEyLTEyLTEyaC02OGMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDY4YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6bS0xNDAgMGMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDEyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNjhjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptMTUyLTIyMmMtNi42MjcgMC0xMi01LjM3My0xMi0xMlYzMGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDI0YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MTk0YzAgNi42MjctNS4zNzMgMTItMTIgMTJ6Ii8+PHBhdGggZD0iTTE0OS41NzcgMTQ2Ljk4MmM5LjM5OC05LjM0NiAyNC41OTQtOS4zMDQgMzMuOTQxLjA5NUwyNTYgMjE5Ljk2NGw3Mi40ODItNzIuODg3YzkuMzQ3LTkuMzk5IDI0LjU0My05LjQ0MSAzMy45NDEtLjA5NXM5LjQ0MSAyNC41NDMuMDk1IDMzLjk0MWwtODkuNSA5MGEyNCAyNCAwIDAgMS0zNC4wMzYgMGwtODkuNS05MGMtOS4zNDYtOS4zOTgtOS4zMDQtMjQuNTk0LjA5NS0zMy45NDFNMCAzNTBjMC02LjYyNyA1LjM3My0xMiAxMi0xMmg0ODhjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDEyYy02LjYyNyAwLTEyLTUuMzczLTEyLTEyeiIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoNTEydjUxMkgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg=="},"displayName":"Limit","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":39,"name":"CRM"}],"image":[]}}