Bulk Email Verification with Icypeas and Google Sheets
Automate bulk email verification by connecting Google Sheets to the Icypeas API. This workflow reads a list of emails from your sheet and sends them for validation.
Overview
Automates sending a list of emails from Google Sheets to the Icypeas service for bulk verification, streamlining data cleaning and validation tasks.
🧠 Description & Use Case
This workflow automates the process of verifying a large list of emails in bulk. It reads emails from a Google Sheet, authenticates with the Icypeas email verification service, and submits the list for batch processing. The results are then delivered to you through the Icypeas platform and by email.
⚙️ How It Works:
- Trigger: The workflow is initiated manually when you click "Execute Workflow".
- Read Emails from Google Sheets: The
Reads lastname,firstname and company from your sheetnode connects to your Google Account and reads a list of emails from a specified spreadsheet. The sheet must have a column with the headeremail. - Authenticate with Icypeas: The
Authenticates to your Icypeas accountCode node prepares the authentication credentials. It generates a unique signature using your Icypeas API Key and Secret, which is required to securely communicate with the API. You must input your Icypeas credentials in this node. - Submit for Verification: The
Run bulk search (email-verif)HTTP Request node sends the list of emails and your authentication details to the Icypeas API to start the bulk verification job. - Retrieve Results: The workflow's job is to submit the data. The verification results will be made available for download in your Icypeas account dashboard and sent to your registered email address.
✅ Real-World Use Cases:
- Lead List Cleaning: Before launching an email marketing campaign, validate your lead list to remove invalid or inactive email addresses, reducing bounce rates.
- Improving Email Deliverability: Regularly clean your mailing lists to maintain a good sender reputation and ensure your emails reach the inbox.
- User Data Validation: Verify user email addresses during or after signup to reduce fraud and ensure you can communicate with your users.
- Data Enrichment Preparation: Ensure your email list is accurate before sending it to a data enrichment service.
Instructions
Basic steps
- Download workflow JSON
- Import into n8n
- Configure node parameters as needed
- Test and enable the workflow
💡 Tips
After importing, verify all connectors and credentials match your environment.
Preview
Workflow Visualization
Nodes
When clicking "Execute Workflow"
manualTrigger
Sticky Note
stickyNote
Authenticates to your Icypeas account
code
Sticky Note1
stickyNote
Sticky Note3
stickyNote
Sticky Note4
stickyNote
Reads lastname,firstname and company from your sheet
googleSheets
Run bulk search (email-verif)
httpRequest
Statistics
View full JSON structure
{
"nodes": [
{
"id": "8e31498a-d004-4d55-8952-b07e4e49f75f",
"name": "When clicking \"Execute Workflow\"",
"type": "n8n-nodes-base.manualTrigger",
"position": [
800,
1320
],
"parameters": {},
"typeVersion": 1
},
{
"id": "56e1351c-804d-41d4-9651-d2ca2020c4ce",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
660,
1020
],
"parameters": {
"height": 292.0581548177272,
"content": "## Perform Batch Processing of Email verifications with Icypeas \n\n\nThis workflow demonstrates how to perform email verifications (bulk search) using Icypeas. Visit https://icypeas.com to create your account."
},
"typeVersion": 1
},
{
"id": "0bd19032-2894-4e0e-b66f-00718bd389a7",
"name": "Authenticates to your Icypeas account",
"type": "n8n-nodes-base.code",
"position": [
1300,
1320
],
"parameters": {
"jsCode": "const API_BASE_URL = \"https://app.icypeas.com/api\";\nconst API_PATH = \"/bulk-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 url,\n method,\n secret,\n timestamp = new Date().toISOString()\n) => {\n const Crypto = require('crypto');\n const payload = `${method}${url}${timestamp}`.toLowerCase();\n const sign = Crypto.createHmac(\"sha1\", secret).update(payload).digest(\"hex\");\n\n return sign;\n};\n\nconst apiUrl = `${API_BASE_URL}${API_PATH}`;\n\nconst data = $input.all().map((x) => [ x.json.email]);\n$input.first().json.data = data;\n$input.first().json.api = {\n timestamp: new Date().toISOString(),\n secret: API_SECRET,\n key: API_KEY,\n userId: USER_ID,\n url: apiUrl,\n};\n\n$input.first().json.api.signature = genSignature(apiUrl, METHOD, API_SECRET, $input.first().json.api.timestamp);\nreturn $input.first();"
},
"typeVersion": 1
},
{
"id": "df9bc762-c680-447f-a4f3-eba1ba13cb3d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
940,
1168.931421377993
],
"parameters": {
"height": 523.2083276562503,
"content": "## Read your Google sheet file\n\nThis node reads a Google Sheet. You need to create a sheet with :\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**The first column** :\nHeader : email\n\n\n\n\nDon't forget to specify the path of your file in the node and your credentials."
},
"typeVersion": 1
},
{
"id": "c542f720-7c21-4161-a643-4e67983ad090",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1181.009231449947,
1078.51011235955
],
"parameters": {
"width": 392.0593078758952,
"height": 1203.329049904803,
"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\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 https://app.icypeas.com/bo/profile. 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: http://your-n8n-instance.com.\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"
},
"typeVersion": 1
},
{
"id": "26602f88-789e-4f9e-8df0-2f7f498f242c",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1573,
1080
],
"parameters": {
"width": 328.8456933308303,
"height": 869.114109302513,
"content": "## Performs email verifications (bulk).\n\n\nThis node executes an HTTP request (POST) to verify the emails.\n\n\n\n\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➔ In the Credential for Header Auth, click on - Create new Credential -.\n➔ In the Name section, write “Authorization”\n➔ 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➔ Then click on “Save” to save the changes.\n\n### To retrieve the results :\n\nAfter some time, the results, which are downloadable, will be available in the Icypeas application in this section : https://app.icypeas.com/bo/bulksearch?task=email-verification, and you will receive the verification results via email from [email protected], providing you with the results of your email verifications.\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "96128999-d7e1-44cd-b9d3-7550e4333414",
"name": "Reads lastname,firstname and company from your sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1000,
1320
],
"parameters": {
"sheetName": {
"__rl": true,
"mode": "list",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 4.1
},
{
"id": "bc548060-6e09-493b-9e74-fc7ef6a9b88f",
"name": "Run bulk search (email-verif)",
"type": "n8n-nodes-base.httpRequest",
"position": [
1640,
1320
],
"parameters": {
"url": "={{ $json.api.url }}",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "task",
"value": "=email-verification"
},
{
"name": "name",
"value": "dernierTsfg"
},
{
"name": "user",
"value": "={{ $json.api.userId }}"
},
{
"name": "data",
"value": "={{ $json.data }}"
}
]
},
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "X-ROCK-TIMESTAMP",
"value": "={{ $json.api.timestamp }}"
}
]
}
},
"typeVersion": 4.1
}
],
"connections": {
"When clicking \"Execute Workflow\"": {
"main": [
[
{
"node": "Reads lastname,firstname and company from your sheet",
"type": "main",
"index": 0
}
]
]
},
"Authenticates to your Icypeas account": {
"main": [
[
{
"node": "Run bulk search (email-verif)",
"type": "main",
"index": 0
}
]
]
},
"Reads lastname,firstname and company from your sheet": {
"main": [
[
{
"node": "Authenticates to your Icypeas account",
"type": "main",
"index": 0
}
]
]
}
}
}Actions
Technical Specs
Compatibility
License
This workflow template follows MIT license, you can freely use, modify and distribute.
Please comply with relevant third-party service terms when using.