{"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."}],"connections":{"BULK DROPCONTACT REQUESTS":{"main":[[],[],[],[],[],[],[],[],[]]},"BULK DROPCONTACT DOWNLOAD":{"main":[[],[],[],[],[],[],[],[],[]]},"Slack":{"main":[[]]}},"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.","notes":"Excellent quality workflow: Stickynote Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}