{"workflow":{"id":13259,"name":"Send subscription renewal reminders with Email and ClickUp","views":51,"recentViews":0,"totalViews":51,"createdAt":"2026-02-08T15:09:59.228Z","description":"# Subscription Renewal Reminder – Email & ClickUp\n\nAutomate the tracking of customer subscription expiry dates, create renewal tasks in ClickUp, and dispatch friendly email reminders before the due date. The workflow listens for incoming subscription data, schedules reminder sequences, and updates ClickUp so your support or sales team never misses a renewal opportunity.\n\n&gt; **Community Template Disclaimer**  \n&gt; This workflow is provided by the n8n community for educational and demonstration purposes. Review, test, and adapt it to your own requirements before using in production.\n\n\n## Pre-conditions/Requirements\n\n### Prerequisites\n- n8n instance (self-hosted or n8n.cloud)\n- Active ClickUp workspace & ClickUp API token\n- SMTP credentials or n8n Email node configured (e.g., Gmail, SendGrid, SES)\n- (Optional) Publicly reachable URL for the Webhook trigger\n\n### Required Credentials\n- **ClickUp API** – Create renewal tasks and update task status\n- **Email / SMTP** – Send renewal reminder emails to end-users\n\n### Specific Setup Requirements\n| Item                     | Recommendation                                    | Notes                                                    |\n|--------------------------|---------------------------------------------------|----------------------------------------------------------|\n| ClickUp Folder/Space     | `Subscriptions`                                   | Tasks will be created here                               |\n| Email “From” Address     | `renewals@yourdomain.com`                         | Ensure DMARC/SPF alignment                               |\n| Webhook Security         | Signature header or basic authentication (opt.)   | Protects against unauthorized calls                      |\n\n## How it works\n\nAutomate the tracking of customer subscription expiry dates, create renewal tasks in ClickUp, and dispatch friendly email reminders before the due date. The workflow listens for incoming subscription data, schedules reminder sequences, and updates ClickUp so your support or sales team never misses a renewal opportunity.\n\n## Key Steps:\n- **Webhook Trigger**: Receives subscription information (email, plan, renewal date).\n- **Set Node**: Formats incoming data and calculates reminder dates (e.g., T-30, T-7, T-1).\n- **ClickUp Task Creation**: Generates a task with custom fields for each customer subscription.\n- **Split In Batches**: Processes large subscription lists in manageable chunks.\n- **Wait Node(s)**: Pauses until the calculated reminder timestamp is reached.\n- **Email Send**: Sends renewal reminder to the customer using a branded template.\n- **If Node**: Determines whether the customer renewed and, if so, closes the ClickUp task.\n- **Code Node**: Optional JS logic for dynamic email content or additional API calls.\n\n## Set up steps\n\n**Setup Time: 15–25 minutes**\n\n1. **Import Workflow**: In n8n, choose “Import” → paste the JSON or select the `.json` file.\n2. **Configure Webhook**:  \n   a. Open the Webhook node → set HTTP Method to `POST`.  \n   b. Copy the Test URL and integrate it with your billing platform or form.  \n3. **Add ClickUp Credentials**:  \n   a. Create a personal ClickUp token (`Settings → Apps → API`).  \n   b. In n8n, Credentials → “ClickUp API”, paste the token.  \n4. **Create ClickUp Folder**: Inside your Workspace create a folder or list called `Subscriptions` with optional custom fields: `Plan`, `Renewal Date`, `Status`.  \n5. **Configure Email Node**:  \n   a. Select SMTP or a pre-configured Email credential.  \n   b. Set “From” address and default subject (`Your Subscription is Renewing Soon`).  \n6. **Edit Wait Durations**: Open each Wait node and set “Wait Until” to `{{$json[\"reminderDate\"]}}` (already pre-mapped). Adjust offsets if needed.  \n7. **Activate Workflow**: Switch the workflow to “Active”. Live URL replaces test URL automatically—update your external integration if required.  \n8. **Test**: Send a sample POST payload to confirm task creation and email delivery.\n\n## Node Descriptions\n\n### Core Workflow Nodes:\n- **Webhook** – Initial trigger that captures subscription data sent from an external service.\n- **Set (Prepare Data)** – Normalizes fields, converts dates, and pre-calculates reminder times.\n- **ClickUp (Create Task)** – Adds a renewal task in the designated ClickUp list.\n- **Split In Batches** – Handles multiple subscriptions to prevent hitting ClickUp rate limits.\n- **Wait (Reminder Schedule)** – Delays execution until each reminder date.\n- **Email Send** – Dispatches the reminder email to the customer.\n- **If (Renewal Check)** – Determines if the subscription was renewed and marks the task “Done”.\n- **Code (Helpers)** – Optional JavaScript for advanced customization.\n\n### Data Flow:\n1. **Webhook** → **Set** → **ClickUp Task**  \n2. **ClickUp Task** → **Split In Batches** → **Wait**  \n3. **Wait** → **Email Send** → **If** → **ClickUp Task Update**\n\n## Customization Examples\n\n### Change Reminder Offsets\n```javascript\n// inside the Set node\nconst renewalDate = new Date($json.renewalDate);\nitem.firstReminder = new Date(renewalDate.getTime() - 30*24*3600*1000); // 30 days before\nitem.secondReminder = new Date(renewalDate.getTime() - 7*24*3600*1000);  // 7 days before\nreturn item;\n```\n\n### Dynamic Email Template Based on Plan\n```javascript\n// Code node before Email Send\nconst plan = $json.plan.toLowerCase();\nif (plan === 'premium') {\n  item.subject = '⏰ Premium Plan Renewal';\n  item.body = 'Thanks for being a Premium member...';\n} else {\n  item.subject = 'Your Subscription is Expiring';\n  item.body = 'Hi there! Your plan will renew soon...';\n}\nreturn item;\n```\n\n## Data Output Format\n\nThe workflow outputs structured JSON data:\n\n```json\n{\n  \"customerEmail\": \"user@example.com\",\n  \"plan\": \"Pro Monthly\",\n  \"renewalDate\": \"2024-12-31\",\n  \"reminderSent\": true,\n  \"clickUpTaskId\": \"9012abcd\",\n  \"status\": \"Pending Renewal\"\n}\n```\n\n## Troubleshooting\n\n### Common Issues\n1. **Emails not sending** – Verify SMTP credentials and allow-list the server IP with your mail provider.\n2. **ClickUp task not created** – Check that the API token has write permission and the list/folder ID is correct.\n3. **Workflow not triggering in production** – Ensure you replaced the test Webhook URL with the production URL in your external system.\n\n### Performance Tips\n- Batch process subscriptions (e.g., 20 per batch) to respect ClickUp’s API rate limits.\n- Use “Execute Node” during testing instead of running the full workflow each time.\n\n**Pro Tips:**\n- Add an additional Wait & Email chain for a post-expiration “We Miss You” message.  \n- Store subscription data in a database (e.g., Postgres) to make the workflow idempotent.  \n- Use environment variables for API keys and email addresses to simplify migration across environments.","workflow":{"id":"JZ8C3IFRtHrntshw","meta":{"instanceId":"99f4e9e67f2a926c174453b6675a71cc5fb71c1fb19cfc06d50531053c661324","templateCredsSetupCompleted":true},"name":"Subscription Renewal Reminder – Email & ClickUp","tags":[],"nodes":[{"id":"6528965f-aa90-4b6c-ac4c-60bfeeb1ef9f","name":"📒 Workflow Overview","type":"n8n-nodes-base.stickyNote","position":[-672,-80],"parameters":{"width":566,"height":706,"content":"## How it works\nThis workflow listens for a Webhook call and immediately queries a ClickUp list that stores all active customer subscriptions. It calculates how many days remain until each subscription’s due date, automatically filtering out any that are not approaching renewal. For every record that is due within your chosen threshold (default = 7 days), it personalises and throttles renewal-reminder emails to the customer. Once the batch is processed, the workflow sends a concise admin summary if at least one reminder went out—or a quick \"nothing due\" note when there are none.\n\n## Setup steps\n1. Create a ClickUp List with tasks that include **due_date** and a custom field called **Email** for the customer address.\n2. Copy the List-ID and paste it into the *Set Defaults* node.\n3. Configure your SMTP credentials in n8n and reference them in both Email nodes.\n4. Add your sender address and admin address in the *Set Defaults* node.\n5. Deploy the workflow and copy the Webhook URL.\n6. Call that URL (POST/GET) from any scheduler, external app, or simply run manually to test.\n7. Verify that customer reminders and the admin summary arrive as expected."},"typeVersion":1},{"id":"648c1471-7fd3-48bb-a739-a9663af369e3","name":"Trigger & Data Fetch","type":"n8n-nodes-base.stickyNote","position":[-64,-80],"parameters":{"color":7,"width":530,"height":718,"content":"## Trigger & Data Fetch\nThis section starts the automation every time the webhook is hit. After optional default parameters are set, the ClickUp node pulls every task in the configured list—effectively giving us every active subscription on record. The list-ID is kept in the *Set Defaults* node so non-technical users can adjust it without digging into other nodes. The ClickUp node returns one item per task, including the built-in **due_date** plus any custom fields. No filtering happens yet; we simply retrieve the raw records that downstream nodes will process."},"typeVersion":1},{"id":"df975e2a-82ab-486e-9a02-68ce6f385e94","name":"Processing & Filtering","type":"n8n-nodes-base.stickyNote","position":[464,-80],"parameters":{"color":7,"width":722,"height":718,"content":"## Processing & Filtering\nThe *Filter Expiring & Build Data* code node converts UNIX due-dates into ISO strings, calculates **daysLeft**, and emits two separate outputs: ➀ a list of subscriptions that will expire within the configured threshold and ➁ a single summary item containing statistics for admin reporting. Output 0 is then batched and each item moves through personalised email preparation, a small throttling delay, and an actual send. Output 1 feeds the decision logic that chooses between sending an admin summary or a simple \"nothing due\" notification."},"typeVersion":1},{"id":"441bceb5-9fb8-44f1-999f-62e1403bec80","name":"Notifications & Reporting","type":"n8n-nodes-base.stickyNote","position":[1184,-80],"parameters":{"color":7,"width":1250,"height":718,"content":"## Notifications & Reporting\nIf at least one renewal reminder went out, the workflow builds an HTML summary listing each customer, days left, and due date, then emails that report to your admin address. When **no** reminders are necessary, it instead fires a lightweight note so the operations team knows the run completed successfully. A final cleanup node marks the execution as complete; you can expand it for logging or archiving as needed."},"typeVersion":1},{"id":"01fbe124-54ef-43a6-a681-020854625e06","name":"Incoming Request","type":"n8n-nodes-base.webhook","position":[-16,320],"webhookId":"93518a99-0f6a-42df-b67f-3a2de7f7299c","parameters":{"path":"subscription-renewal","options":{},"httpMethod":"POST"},"typeVersion":1},{"id":"4be4bfce-c8a2-44a3-9103-2fdccd49e412","name":"Set Defaults","type":"n8n-nodes-base.set","position":[208,304],"parameters":{"options":{}},"typeVersion":3},{"id":"8c62cf19-72d0-4f71-9c99-76869162fee2","name":"Filter Expiring & Build Data","type":"n8n-nodes-base.code","position":[544,288],"parameters":{"jsCode":"// Output 0: reminders, Output 1: summary\nconst threshold = $json[0].daysThreshold || 7;\nconst adminEmail = $json[0].adminEmail;\nconst now = Date.now();\nconst MS_IN_DAY = 86400000;\n\nconst reminders = [];\n\nitems.forEach(item => {\n  const task = item.json;\n  if (!task.due_date) return; // Skip tasks without due date\n  const dueTs = Number(task.due_date);\n  const daysLeft = Math.ceil((dueTs - now) / MS_IN_DAY);\n  if (daysLeft <= threshold) {\n    // Try to locate a custom field named \"Email\"\n    const emailField = (task.custom_fields || []).find(f => f.name === 'Email');\n    const customerEmail = emailField ? emailField.value : 'user@example.com';\n\n    reminders.push({\n      json: {\n        taskId: task.id,\n        subscriptionName: task.name,\n        dueDateISO: new Date(dueTs).toISOString(),\n        daysLeft,\n        customerEmail,\n        fromEmail: item.json.fromEmail,\n        adminEmail,\n        threshold\n      }\n    });\n  }\n});\n\nconst summary = [{\n  json: {\n    runAt: new Date().toISOString(),\n    totalReminders: reminders.length,\n    adminEmail,\n    threshold\n  }\n}];\n\nreturn [reminders, summary];"},"typeVersion":2},{"id":"5209eeca-53a5-4eae-a5c5-d1a772ec0595","name":"Split per Subscription","type":"n8n-nodes-base.splitInBatches","position":[784,160],"parameters":{"options":{}},"typeVersion":3},{"id":"3d4ac165-d2f1-4cdd-9720-917d7e790a18","name":"Prepare Reminder Email","type":"n8n-nodes-base.set","position":[1264,80],"parameters":{"options":{}},"typeVersion":3},{"id":"91761b47-e3b5-41fa-8471-7e622500b5b6","name":"Throttle Reminders","type":"n8n-nodes-base.wait","position":[1552,48],"webhookId":"4681281d-2f2e-4717-a597-8b13a9e700ed","parameters":{"unit":"seconds"},"typeVersion":1},{"id":"fb104676-0af7-4fc0-8d9d-3b1b28d1d8c9","name":"Send Reminder Email","type":"n8n-nodes-base.emailSend","position":[1792,80],"webhookId":"e2c76bb9-984e-4d4f-8f42-4e8e457dec56","parameters":{"options":{},"subject":"={{ $json.subject }}","toEmail":"={{ $json.toEmail }}","fromEmail":"={{ $json.fromEmail }}"},"typeVersion":2},{"id":"4eb2cc81-0567-4b6d-a99c-a6043f2018b2","name":"Log Reminder Status","type":"n8n-nodes-base.set","position":[1968,80],"parameters":{"options":{}},"typeVersion":3},{"id":"c62f5422-acc7-4bc5-8c51-6e12d9334c0a","name":"Any Reminders Sent?","type":"n8n-nodes-base.if","position":[1008,288],"parameters":{"options":{},"conditions":{"number":[{"value1":"={{ $json.totalReminders }}","value2":0,"operation":"larger"}]}},"typeVersion":2},{"id":"b837f97e-e59f-46aa-8a69-460f76bf95a9","name":"Build Admin Summary","type":"n8n-nodes-base.code","position":[1680,256],"parameters":{"jsCode":"const total = $json.totalReminders;\nconst threshold = $json.threshold;\nconst runAt = $json.runAt;\n\nconst html = `<p>Hi Team,</p>\n<p>${total} renewal reminder(s) were sent during the latest run (threshold: ${threshold} days).</p>\n<p>Run time: ${runAt}</p>\n<p>Regards,<br>n8n Bot</p>`;\n\nreturn [{\n  json: {\n    adminEmail: $json.adminEmail,\n    fromEmail: $json.fromEmail || 'user@example.com',\n    summarySubject: `${total} subscription reminder(s) sent`,\n    summaryHtml: html\n  }\n}];"},"typeVersion":2},{"id":"4db7aa08-fd1d-4c55-acd4-85c859506034","name":"Send Admin Summary","type":"n8n-nodes-base.emailSend","position":[1872,256],"webhookId":"0890b8ff-0e19-4c55-8f61-e8d8f6cbe490","parameters":{"options":{},"subject":"={{ $json.summarySubject }}","toEmail":"={{ $json.adminEmail }}","fromEmail":"={{ $json.fromEmail }}"},"typeVersion":2},{"id":"35aec01b-9358-4693-a672-b51aceb93913","name":"Prepare No-Expiry Email","type":"n8n-nodes-base.set","position":[1392,480],"parameters":{"options":{}},"typeVersion":3},{"id":"21fbcd30-05d8-417f-a113-d46ded6a395a","name":"Send No-Expiry Email","type":"n8n-nodes-base.emailSend","position":[1632,480],"webhookId":"aa5bd14d-2699-45ba-b691-74c97cc48bfe","parameters":{"options":{},"subject":"={{ $json.subject }}","toEmail":"={{ $json.toEmail }}","fromEmail":"={{ $json.fromEmail }}"},"typeVersion":2},{"id":"001c98f6-ecfc-4596-9302-a76a67ed1a9a","name":"Cleanup Execution","type":"n8n-nodes-base.code","position":[2160,320],"parameters":{"jsCode":"return [{json:{status:'completed',finishedAt:new Date().toISOString()}}];"},"typeVersion":2}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"f724815a-3620-4e25-9ed2-17edbec9e902","connections":{"Set Defaults":{"main":[[{"node":"Filter Expiring & Build Data","type":"main","index":0}]]},"Incoming Request":{"main":[[{"node":"Set Defaults","type":"main","index":0}]]},"Send Admin Summary":{"main":[[{"node":"Cleanup Execution","type":"main","index":0}]]},"Throttle Reminders":{"main":[[{"node":"Send Reminder Email","type":"main","index":0}]]},"Any Reminders Sent?":{"main":[[{"node":"Build Admin Summary","type":"main","index":0}],[{"node":"Prepare No-Expiry Email","type":"main","index":0}]]},"Build Admin Summary":{"main":[[{"node":"Send Admin Summary","type":"main","index":0}]]},"Send Reminder Email":{"main":[[{"node":"Log Reminder Status","type":"main","index":0}]]},"Send No-Expiry Email":{"main":[[{"node":"Cleanup Execution","type":"main","index":0}]]},"Prepare Reminder Email":{"main":[[{"node":"Throttle Reminders","type":"main","index":0}]]},"Split per Subscription":{"main":[[{"node":"Prepare Reminder Email","type":"main","index":0}],[{"node":"Any Reminders Sent?","type":"main","index":0}]]},"Prepare No-Expiry Email":{"main":[[{"node":"Send No-Expiry Email","type":"main","index":0}]]},"Filter Expiring & Build Data":{"main":[[{"node":"Split per Subscription","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":18,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":4},"n8n-nodes-base.code":{"count":3},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.emailSend":{"count":3},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.splitInBatches":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"vinci-king-01","username":"vinci-king-01","bio":"","verified":true,"links":["https://www.linkedin.com/in/marco-vinciguerra-7ba365242/"],"avatar":"https://gravatar.com/avatar/d939eeef03a5fcb5df08bee8196f12ccb248c38209487414e419032004f0c014?r=pg&d=retro&size=200"},"nodes":[{"id":11,"icon":"fa:envelope","name":"n8n-nodes-base.emailSend","codex":{"data":{"alias":["SMTP","email","human","form","wait","hitl","approval"],"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/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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/sendemail/"}]},"categories":["Communication","HITL","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Send Email","color":"#00bb88"},"iconData":{"icon":"envelope","type":"icon"},"displayName":"Send Email","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"},{"id":28,"name":"HITL"}]},{"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":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"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/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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"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/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.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"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"}]}],"categories":[{"id":39,"name":"CRM"}],"image":[]}}