Workflow: Perform a domain search (single) with Icypeas
Integrations: code, httpRequest, manualTrigger, stickyNote

{"id": "IwOOVikQC7cn9VTv", "meta": {"instanceId": "workflow-36f9e6f2", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:49.987692", "updatedAt": "2025-09-29T07:07:49.987726", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Perform a domain search (single) with Icypeas", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "a8be94cc-c695-4a24-b045-d6716fe6f043", "name": "When clicking \"Execute Workflow\"", "type": "n8n-nodes-base.manualTrigger", "position": [4360, 1720], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "c636d4ed-6310-4f2a-876e-c24d54dc9349", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [4200, 1460], "parameters": {"height": 243.6494382022472, "content": "## Perform a domain search (single) with Icypeas\n\nThis workflow demonstrates how to perform a domain scan using Icypeas. Visit {{ $env.WEBHOOK_URL }} to create your account.\n\n\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "a6f4dbe2-478d-426c-b544-60cd97c84901", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [4507, 1536], "parameters": {"width": 506, "height": 1041.5303370786517, "content": "## Authenticates to your Icypeas account\n\nThis code node utilizes your API key, API secret, and User ID to establish a connection with your Icypeas account.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nOpen this node and insert your API Key, API secret, and User ID within the quotation marks. You can locate these credentials on your Icypeas profile at {{ $env.WEBHOOK_URL }} Here is the extract of what you have to change :\n\nconst API_KEY = \"**PUT_API_KEY_HERE**\";\nconst API_SECRET = \"**PUT_API_SECRET_HERE**\";\nconst USER_ID = \"**PUT_USER_ID_HERE**\";\n\nDo not change any other line of the code.\n\nIf you are a self-hosted user, follow these steps to activate the crypto module :\n\n1.Access your n8n instance:\nLog in to your n8n instance using your web browser by navigating to the URL of your instance, for example: {{ $env.WEBHOOK_URL }}\n\n2.Go to Settings:\nIn the top-right corner, click on your username, then select \"Settings.\"\n\n3.Select General Settings:\nIn the left menu, click on \"General.\"\n\n4.Enable the Crypto module:\nScroll down to the \"Additional Node Packages\" section. You will see an option called \"crypto\" with a checkbox next to it. Check this box to enable the Crypto module.\n\n5.Save the changes:\nAt the bottom of the page, click \"Save\" to apply the changes.\n\nOnce you've followed these steps, the Crypto module should be activated for your self-hosted n8n instance. Make sure to save your changes and optionally restart your n8n instance for the changes to take effect.\n\n\n\n\n\n\n\n\n\n\n\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "c42e5f50-93dd-48c6-8cfc-c37aefc609a5", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [5013, 1540], "parameters": {"width": 492, "height": 748, "content": "## Performs a domain/company scan on your Icypeas account\n\n\nThis node executes an HTTP request (POST) to scan the domain/company you have provided in the body section, using Icypeas.\n\n\n\n\n\n\n\n\n\n\n\n\n\n### You need to create credentials in the HTTP Request node :\n\n\u2794 In the Credential for Header Auth, click on - Create new Credential -.\n\u2794 In the Name section, write \u201cAuthorization\u201d\n\u2794 In the Value section, select expression (located just above the field on the right when you hover on top of it) and write {{ $json.api.key + ':' + $json.api.signature }} .\n\u2794 Then click on \u201cSave\u201d to save the changes.\n\n### To scan the domain/company :\n\n\u2794 go to the Body Parameters section,\n\u2794 create a new parameter,\n\u2794 enter \"domainOrCompany\" in the Name field.\n\u2794 put the domain/company you want to scan in the Value field.\n\nYou will find the result here : {{ $env.WEBHOOK_URL }}\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "cdee270f-b6c0-4f60-ba41-f2ee9e091eaa", "name": "Run domain scan (single)", "type": "n8n-nodes-base.httpRequest", "position": [5080, 1720], "parameters": {"url": "{{ $env.BASE_URL }}", "method": "POST", "options": {}, "sendBody": true, "sendHeaders": true, "authentication": "{{ $credentials.genericCredentialType }}", "bodyParameters": {"parameters": [{"name": "domainOrCompany", "value": "=google"}]}, "genericAuthType": "httpHeaderAuth", "headerParameters": {"parameters": [{"name": "X-ROCK-TIMESTAMP", "value": "={{ $json.api.timestamp }}"}]}}, "credentials": {"httpHeaderAuth": {"id": "KGXtUrqC6lNLwW2w", "name": "Header Auth account"}}, "typeVersion": 4.1, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "b066f965-a3a7-45cb-96c2-ca3bdf2bb231", "name": "Authenticates to your Icypeas account", "type": "n8n-nodes-base.code", "position": [4700, 1720], "parameters": {"jsCode": "const BASE_URL = \"{{ $env.WEBHOOK_URL }}\";\nconst PATH = \"/api/domain-search\";\nconst METHOD = \"POST\";\n\n// Change here\nconst API_KEY = \"PUT_API_KEY_HERE\";\nconst API_SECRET = \"PUT_API_SECRET_HERE\";\nconst USER_ID = \"PUT_USER_ID_HERE\";\n////////////////\n\nconst genSignature = (\n    path,\n    method,\n    secret,\n    timestamp = new Date().toISOString()\n) => {\n    const Crypto = require('crypto');\n    const payload = `${method}${path}${timestamp}`.toLowerCase();\n    const sign = Crypto.createHmac(\"sha1\", secret).update(payload).digest(\"hex\");\n\n    return sign;\n};\n\nconst fullPath = `${BASE_URL}${PATH}`;\n$input.first().json.api = {\n  timestamp: new Date().toISOString(),\n  secret: API_SECRET,\n  key: API_KEY,\n  userId: USER_ID,\n  url: fullPath,\n};\n$input.first().json.api.signature = genSignature(PATH, METHOD, API_SECRET, $input.first().json.api.timestamp);\nreturn $input.first();"}, "typeVersion": 1, "notes": "This code node performs automated tasks as part of the workflow."}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "499f7092-5891-46cb-9756-0a11f75242f4", "connections": {"cdee270f-b6c0-4f60-ba41-f2ee9e091eaa": {"main": [[{"node": "error-handler-cdee270f-b6c0-4f60-ba41-f2ee9e091eaa", "type": "main", "index": 0}], [{"node": "error-handler-cdee270f-b6c0-4f60-ba41-f2ee9e091eaa-9090fd5d", "type": "main", "index": 0}], [{"node": "error-handler-cdee270f-b6c0-4f60-ba41-f2ee9e091eaa-9d41cfaf", "type": "main", "index": 0}], [{"node": "error-handler-cdee270f-b6c0-4f60-ba41-f2ee9e091eaa-aef255a7", "type": "main", "index": 0}], [{"node": "error-handler-cdee270f-b6c0-4f60-ba41-f2ee9e091eaa-ebc094c1", "type": "main", "index": 0}], [{"node": "error-handler-cdee270f-b6c0-4f60-ba41-f2ee9e091eaa-68925704", "type": "main", "index": 0}], [{"node": "error-handler-cdee270f-b6c0-4f60-ba41-f2ee9e091eaa-35ad7013", "type": "main", "index": 0}], [{"node": "error-handler-cdee270f-b6c0-4f60-ba41-f2ee9e091eaa-9087f64d", "type": "main", "index": 0}], [{"node": "error-handler-cdee270f-b6c0-4f60-ba41-f2ee9e091eaa-1671ec10", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Perform a domain search (single) with Icypeas. This workflow integrates 5 different services: stickyNote, httpRequest, code, stopAndError, manualTrigger. It contains 8 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Perform a domain search (single) with Icypeas. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}