Workflow: Stickynote Workflow
Integrations: aggregate, code, httpRequest, postgres, scheduleTrigger, slack, splitInBatches, splitOut, stickyNote, wait

{"meta": {"instanceId": "workflow-28287b69", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:58.397525", "updatedAt": "2025-09-29T07:07:58.397538", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "nodes": [{"id": "5fa5ccd8-81be-45a2-ac00-7ef28148c0c7", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [700, 460], "parameters": {"width": 1767.817629414989, "height": 470.03830555074103, "content": "## DROPCONTACT 250 BATCH ASYNCHRONOUSLY \n## 1500/HOUR REQUESTS\n**Double click** to edit me. [Guide]({{ $env.WEBHOOK_URL }}"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "9c6826a3-ec94-4ff4-92a6-0ff7fa22349e", "name": "Aggregate", "type": "n8n-nodes-base.aggregate", "position": [1000, 620], "parameters": {"options": {}, "fieldsToAggregate": {"fieldToAggregate": [{"fieldToAggregate": "first_name"}, {"fieldToAggregate": "last_name"}, {"fieldToAggregate": "domain"}, {"fieldToAggregate": "phantom_linkedin"}, {"fieldToAggregate": "full_name"}]}}, "typeVersion": 1, "notes": "This aggregate node performs automated tasks as part of the workflow."}, {"id": "c0d5b884-de58-42f3-bc50-0c7e6ca5e576", "name": "PROFILES QUERY", "type": "n8n-nodes-base.postgres", "position": [560, 600], "parameters": {"query": "select first_name, last_name, domain, full_name\nfrom accounts a \nleft join profiles p on a.company_id = p.company_id \nwhere title = 'Bestuurder' and p.email is null and a.domain != ''\nand domain NOT IN ('gmail.com', 'hotmail.com', 'hotmail.be', 'hotmail%','outlook.com','telenet.be', 'live.be', 'skynet.be','SKYNET%', 'yahoo.com' , 'yahoo%', 'msn%', 'hotmail', 'belgacom%') and dropcontact_found is null \nlimit 1000\n", "options": {}, "operation": "executeQuery"}, "credentials": {"postgres": {"id": "pYryZTyzA44MBOiN", "name": "Postgres account"}}, "typeVersion": 2.3, "notes": "This postgres node performs automated tasks as part of the workflow."}, {"id": "ddf11e8d-f1db-406c-9c2a-ab5a510fee47", "name": "BULK DROPCONTACT REQUESTS", "type": "n8n-nodes-base.httpRequest", "onError": "continueRegularOutput", "maxTries": 3, "position": [1360, 620], "parameters": {"url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={{ $json.toJsonString()}}\n", "sendBody": true, "sendHeaders": true, "specifyBody": "json", "authentication": "{{ $credentials.predefinedCredentialType }}", "headerParameters": {"parameters": [{"name": "X-Access-Token", "value": "apiKey"}]}, "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"dropcontactApi": {"id": "kUzEc345AiEZDjK7", "name": "Dropcontact Willow account"}}, "retryOnFail": true, "typeVersion": 4.2, "waitBetweenTries": 600, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "606e2898-eb44-46c2-9576-8e3cc1bd2578", "name": "Loop Over Items2", "type": "n8n-nodes-base.splitInBatches", "position": [780, 600], "parameters": {"options": {}, "batchSize": 250}, "typeVersion": 3, "notes": "This splitInBatches node performs automated tasks as part of the workflow."}, {"id": "ace20caa-3c9b-432a-a572-6bad48181347", "name": "Split Out", "type": "n8n-nodes-base.splitOut", "onError": "continueRegularOutput", "position": [1940, 600], "parameters": {"options": {}, "fieldToSplitOut": "data"}, "typeVersion": 1, "notes": "This splitOut node performs automated tasks as part of the workflow."}, {"id": "2c581721-a399-4d48-98a1-cee82246c4f4", "name": "Postgres", "type": "n8n-nodes-base.postgres", "onError": "continueErrorOutput", "maxTries": 2, "position": [2100, 600], "parameters": {"table": {"__rl": true, "mode": "list", "value": "profiles", "cachedResultName": "profiles"}, "schema": {"__rl": true, "mode": "list", "value": "public"}, "columns": {"value": {"email": "={{ $json.email[0].email }}", "phone": "={{ $json.phone }}", "full_name": "={{ $json.custom_fields.full_name }}", "dropcontact_found": "={{ true }}", "email_qualification": "={{ $json.email[0].qualification }}"}, "schema": [{"id": "company_id", "type": "number", "display": true, "removed": true, "required": false, "displayName": "company_id", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "create_date", "type": "dateTime", "display": true, "removed": true, "required": false, "displayName": "create_date", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "phone", "type": "string", "display": true, "required": false, "displayName": "phone", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "first_name", "type": "string", "display": true, "removed": true, "required": false, "displayName": "first_name", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "last_name", "type": "string", "display": true, "removed": true, "required": false, "displayName": "last_name", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "title", "type": "string", "display": true, "removed": true, "required": false, "displayName": "title", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "start_date_raw", "type": "string", "display": true, "removed": true, "required": false, "displayName": "start_date_raw", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "full_name", "type": "string", "display": true, "removed": false, "required": false, "displayName": "full_name", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "seniority", "type": "string", "display": true, "removed": true, "required": false, "displayName": "seniority", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "email", "type": "string", "display": true, "required": false, "displayName": "email", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "email_qualification", "type": "string", "display": true, "required": false, "displayName": "email_qualification", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "dropcontact_found", "type": "boolean", "display": true, "required": false, "displayName": "dropcontact_found", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["full_name"]}, "options": {"replaceEmptyStrings": true}, "operation": "update"}, "credentials": {"postgres": {"id": "pYryZTyzA44MBOiN", "name": "Postgres account"}}, "retryOnFail": true, "typeVersion": 2.3, "alwaysOutputData": true, "notes": "This postgres node performs automated tasks as part of the workflow."}, {"id": "7e94c87d-3f83-4fd1-877d-3463dce3cdd1", "name": "BULK DROPCONTACT DOWNLOAD", "type": "n8n-nodes-base.httpRequest", "onError": "continueErrorOutput", "position": [1740, 620], "parameters": {"url": "{{ $env.BASE_URL }}", "options": {}, "authentication": "{{ $credentials.predefinedCredentialType }}", "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"dropcontactApi": {"id": "kUzEc345AiEZDjK7", "name": "Dropcontact Willow account"}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "17aab456-72dc-482d-b5e3-b3dfb3a3b3f7", "name": "Wait2", "type": "n8n-nodes-base.wait", "position": [1540, 620], "webhookId": "de669d58-95c5-480e-9acc-17c396859fcf", "parameters": {"amount": 600}, "typeVersion": 1.1, "notes": "This wait node performs automated tasks as part of the workflow."}, {"id": "148cec0c-985b-4c82-8835-fff8eacf6e38", "name": "DATA TRANSFORMATION", "type": "n8n-nodes-base.code", "position": [1180, 620], "parameters": {"mode": "runOnceForEachItem", "language": "python", "pythonCode": "import json\n\n## Load & access the existing JSON data\nfor item in _input.all():\n  data = item.json \n\n  # Define the output data structure\n  output_data = {\"data\": [], \"siren\": True}\n\n  # Unpack data from the single element list\n  first_names = data[\"first_name\"]\n  last_names = data[\"last_name\"]\n  domain = data[\"domain\"]\n  full_name = data[\"full_name\"]\n\n    # Combine data into a list of dictionaries\n  transformed_data = []\n  for i, (first_name, last_name, domain_name, full_name_value) in enumerate(zip(first_names, last_names, domain, full_name)):\n    transformed_data.append({\n      \"first_name\": first_name,\n      \"last_name\": last_name,\n      \"website\": domain_name,\n      \"custom_fields\": {\n        \"full_name\": full_name_value}\n    })\n\n  output_data[\"data\"] = transformed_data\n\n  return output_data \n\n"}, "typeVersion": 2, "alwaysOutputData": true, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "b233abfe-cfae-474a-b86d-29e56e1f3ac7", "name": "Slack", "type": "n8n-nodes-base.slack", "position": [1740, 820], "parameters": {"text": "Dropcontact Credits issue: url ", "user": {"__rl": true, "mode": "list", "value": ""}, "select": "user", "otherOptions": {}}, "typeVersion": 2.1, "notes": "This slack node performs automated tasks as part of the workflow."}, {"id": "d4e90677-89c9-418b-b618-f751b797d395", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "position": [380, 600], "parameters": {"rule": {"interval": [{}]}}, "typeVersion": 1.1, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}], "pinData": {}, "connections": {"ddf11e8d-f1db-406c-9c2a-ab5a510fee47": {"main": [[{"node": "error-handler-ddf11e8d-f1db-406c-9c2a-ab5a510fee47", "type": "main", "index": 0}], [{"node": "error-handler-ddf11e8d-f1db-406c-9c2a-ab5a510fee47-4713676e", "type": "main", "index": 0}], [{"node": "error-handler-ddf11e8d-f1db-406c-9c2a-ab5a510fee47-b64408ce", "type": "main", "index": 0}], [{"node": "error-handler-ddf11e8d-f1db-406c-9c2a-ab5a510fee47-7e61ae59", "type": "main", "index": 0}], [{"node": "error-handler-ddf11e8d-f1db-406c-9c2a-ab5a510fee47-18f0dc24", "type": "main", "index": 0}], [{"node": "error-handler-ddf11e8d-f1db-406c-9c2a-ab5a510fee47-d7e30dcb", "type": "main", "index": 0}], [{"node": "error-handler-ddf11e8d-f1db-406c-9c2a-ab5a510fee47-7d6afdf6", "type": "main", "index": 0}], [{"node": "error-handler-ddf11e8d-f1db-406c-9c2a-ab5a510fee47-dd80d25c", "type": "main", "index": 0}], [{"node": "error-handler-ddf11e8d-f1db-406c-9c2a-ab5a510fee47-f224cd53", "type": "main", "index": 0}]]}, "7e94c87d-3f83-4fd1-877d-3463dce3cdd1": {"main": [[{"node": "error-handler-7e94c87d-3f83-4fd1-877d-3463dce3cdd1", "type": "main", "index": 0}], [{"node": "error-handler-7e94c87d-3f83-4fd1-877d-3463dce3cdd1-164c8f69", "type": "main", "index": 0}], [{"node": "error-handler-7e94c87d-3f83-4fd1-877d-3463dce3cdd1-d34b3d99", "type": "main", "index": 0}], [{"node": "error-handler-7e94c87d-3f83-4fd1-877d-3463dce3cdd1-953ad70a", "type": "main", "index": 0}], [{"node": "error-handler-7e94c87d-3f83-4fd1-877d-3463dce3cdd1-a345dfb3", "type": "main", "index": 0}], [{"node": "error-handler-7e94c87d-3f83-4fd1-877d-3463dce3cdd1-f5a232c4", "type": "main", "index": 0}], [{"node": "error-handler-7e94c87d-3f83-4fd1-877d-3463dce3cdd1-4c5ff447", "type": "main", "index": 0}], [{"node": "error-handler-7e94c87d-3f83-4fd1-877d-3463dce3cdd1-c8e232f7", "type": "main", "index": 0}], [{"node": "error-handler-7e94c87d-3f83-4fd1-877d-3463dce3cdd1-c94cd60b", "type": "main", "index": 0}]]}, "b233abfe-cfae-474a-b86d-29e56e1f3ac7": {"main": [[{"node": "error-handler-b233abfe-cfae-474a-b86d-29e56e1f3ac7-b13abf50", "type": "main", "index": 0}]]}}, "name": "Stickynote Workflow", "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "description": "Automated workflow: Stickynote Workflow. This workflow integrates 11 different services: stickyNote, httpRequest, wait, code, scheduleTrigger. It contains 17 nodes and follows best practices for error handling and security.", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "notes": "Excellent quality workflow: Stickynote Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}