AutomationFlowsEmail & Gmail › Extract Email Addresses From Websites with Emaillistverify API and Google Sheets

Extract Email Addresses From Websites with Emaillistverify API and Google Sheets

ByEmailListVerify @emaillistverify on n8n.io

This workflow will : Try to find emails by scraping the website via http request If no result is found, it will use EmailListVerify email finder API to guess an email address

Event trigger★★★★☆ complexity20 nodesHTTP RequestGoogle Sheets
Email & Gmail Trigger: Event Nodes: 20 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #7948 — we link there as the canonical source.

This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "KnV10oDIARtVSmw7",
  "meta": {
    "templateId": "2134",
    "templateCredsSetupCompleted": true
  },
  "name": "ELV Extract emails from website",
  "tags": [],
  "nodes": [
    {
      "id": "466cf9ce-4baf-45f9-bd70-d2041c20605e",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1168,
        80
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 598,
        "content": "\n* Scraping emails from websites using an html"
      },
      "typeVersion": 1
    },
    {
      "id": "ea95c9a3-b7c8-4288-8fdf-6504caee46f4",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        368,
        240
      ],
      "parameters": {
        "width": 728.4741979436378,
        "height": 430.0825742795921,
        "content": "# How to get emails from websites\n\nThis workflow will :\n- Try to find emails by scraping the website\n- If no result is found, it will use EmailListVerify to guess an email address\n\n\nPay attention that this workflow will usually return only generic emails like \"contact@\". Those generic emails are useful when you target small businesses; the owner usually monitors those emails. However, I don't advise this workflow to target enterprise customers.\n\nIn order to use this workflow, you will need:\n- To copy this Google sheet : https://docs.google.com/spreadsheets/d/1VOTFM8UeWHhJbtBM7SRca6vsVJlRUXzX71kjJ8n2jUY/edit?gid=1538095319#gid=1538095319\n- Get an API key for [EmailListVerify](https://emaillistverify.com/)\n\n\nYou then need to edit the setup of the 3 stages highlighted with a yellow sticky notes, and you will be good to go.\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "555c8f81-25ea-4be5-b260-7b6039c705a8",
      "name": "Get the website data",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        2096,
        464
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {}
      },
      "retryOnFail": true,
      "typeVersion": 4.1
    },
    {
      "id": "e83b38b8-dc13-49eb-9482-1dbd8a9ef583",
      "name": "Extract the emails found",
      "type": "n8n-nodes-base.set",
      "position": [
        2272,
        464
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "80a8a8ec-9ac7-4545-beab-390732218548",
              "name": "Email",
              "type": "array",
              "value": "={{$json.data.match(/(?:[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,})/g)}}"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "3f9230c9-e46d-42e7-9020-82715ff197bb",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        1296,
        464
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a8a3a8f7-7cb5-4d82-bc30-df9f9927636e",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3408,
        320
      ],
      "parameters": {
        "height": 535.9388810024284,
        "content": "## Add your ELV API Key\n\nStart a free trial at EmailListVerify.com and get your API key."
      },
      "typeVersion": 1
    },
    {
      "id": "cbe22fca-9469-48b7-8c13-e1307a107b9c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3184,
        160
      ],
      "parameters": {
        "color": 3,
        "width": 664,
        "height": 780,
        "content": "## Find email address with EmailListVerify\nFind generic email address with EmailListVerify API if the website is known\n"
      },
      "typeVersion": 1
    },
    {
      "id": "cec669b5-83d6-4251-983a-7e66732dec1a",
      "name": "Use EmailListVerify API to find generic emails",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3472,
        608
      ],
      "parameters": {
        "url": "https://api.emaillistverify.com/api/findContact",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"domain\": \"{{ $json.domain }}\"\n} ",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpQueryAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a39406fd-f126-418b-ba16-652bd0944f8a",
      "name": "Transform website into domain name1",
      "type": "n8n-nodes-base.code",
      "position": [
        3264,
        608
      ],
      "parameters": {
        "jsCode": "console.log($input.all())\n\n\nconst data = $input.all()\n\nconsole.log(\"start filter\")\nconsole.log(data)\n\nlet merged = []\nfor (let line of data){\n  console.log(line)\n  try{\n  let lineObject = line[\"json\"]  \n  let url = lineObject[\"website\"];\n\n  let domainStart = url.indexOf(\"/\");\n  let domainEnd = url.indexOf(\"/\" ,domainStart + 2 );\n  let domain = url.slice(domainStart + 2, domainEnd);\n\n  // exception if the domain doesnet containt /\n  if(domainStart < 0){\n    domain = url\n  }\n    \n  if(domain.slice(0,4)==\"www.\"){\n    domain = domain.slice(4,domain.length)\n  }\n    \n  console.log(domain)\n  lineObject[\"domain\"] = domain;\n  merged.push(lineObject);\n  } catch (e) {\n    console.log(\"error\")\n    console.log(e)\n  }\n  \n}\n\n\n\nconsole.log(merged);\n\n\nreturn merged;"
      },
      "typeVersion": 2
    },
    {
      "id": "7ab9c843-05c3-4a66-8de4-8c22fcc95c1b",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        2672,
        160
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "2f9a325d-433c-45e4-a092-80b35db39820",
      "name": "Get input Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1488,
        464
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Input"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1VOTFM8UeWHhJbtBM7SRca6vsVJlRUXzX71kjJ8n2jUY/edit?gid=0#"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "83d24421-73aa-428e-801f-b7f8607e6fb1",
      "name": "Add http to url if missing",
      "type": "n8n-nodes-base.code",
      "position": [
        1808,
        464
      ],
      "parameters": {
        "jsCode": "console.log($input.all())\n\n\nconst data = $input.all()\n\nconsole.log(\"start filter\")\nconsole.log(data)\n\nlet merged = []\n\nfor (let line of data){\n  console.log(line)\n  try{\n  let lineObject = line[\"json\"]  \n  let url = lineObject[\"website\"];\n  \n  let domainStart = url.indexOf(\"http\");\n\n  let domain \n  if(domainStart > -1 ){\n    domain = url\n  } else {\n   domain = \"http://\" + url\n  }\n    \n  console.log(domain)\n\n  \n \n  merged.push({\"url\": domain});\n  } catch (e) {\n    console.log(\"error\")\n    console.log(e)\n  }\n  \n}\n\n\n\n//console.log(merged);\n\n\nreturn merged;"
      },
      "typeVersion": 2
    },
    {
      "id": "f66d0652-5776-4121-8e97-0f9c1b387236",
      "name": "Email found?",
      "type": "n8n-nodes-base.if",
      "position": [
        2896,
        160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "9cf8bf40-c610-4c63-bc0e-becf32c5998f",
              "operator": {
                "type": "array",
                "operation": "lengthGt",
                "rightType": "number"
              },
              "leftValue": "={{ $json.Email }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "fc2df885-4756-4aee-bb2e-23fae5b7cf9e",
      "name": "Transform website into domain name",
      "type": "n8n-nodes-base.code",
      "position": [
        3712,
        608
      ],
      "parameters": {
        "jsCode": "console.log($input.all())\n\n\nconst data = $input.all()\n\nconsole.log(\"start filter\")\nconsole.log(data)\n\nlet merged = []\nfor (let line of data){\n  console.log(line)\n  try{\n  let lineObject = line[\"json\"]  \n  let url = lineObject[\"email\"];\n\n  let domainStart = url.indexOf(\"@\");\n\n  let domain = url.slice( domainStart + 1, url.length);\n\n \n  console.log(domain)\n  lineObject[\"website\"] = domain;\n  merged.push(lineObject);\n  } catch (e) {\n    console.log(\"error\")\n    console.log(e)\n  }\n  \n}\n\n\n\nconsole.log(merged);\n\n\nreturn merged;"
      },
      "typeVersion": 2
    },
    {
      "id": "37ea428a-51c3-4742-aca3-01278386353c",
      "name": "Add result to google",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        4112,
        -288
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "website",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "confidence",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "confidence",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Output"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1VOTFM8UeWHhJbtBM7SRca6vsVJlRUXzX71kjJ8n2jUY/edit?gid=1538095319#gid=1538095319"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4702a725-fd91-431b-ab24-795ed562c35e",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        3888,
        -288
      ],
      "parameters": {
        "include": "selectedOtherFields",
        "options": {
          "destinationFieldName": "email"
        },
        "fieldToSplitOut": "Email",
        "fieldsToInclude": "website"
      },
      "typeVersion": 1
    },
    {
      "id": "c9f2e12f-2e7e-42cd-9206-98fb7ddc4af7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2592,
        64
      ],
      "parameters": {
        "color": 4,
        "width": 500,
        "height": 310,
        "content": "\n* Check if email was found"
      },
      "typeVersion": 1
    },
    {
      "id": "eb9f6294-e50f-4290-a394-e76fbf59d170",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3840,
        -656
      ],
      "parameters": {
        "color": 4,
        "width": 500,
        "height": 774,
        "content": "\n* Add result to google sheet"
      },
      "typeVersion": 1
    },
    {
      "id": "05b8a70e-afd2-4dda-ac63-f435c0ed400f",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4048,
        -576
      ],
      "parameters": {
        "height": 535.9388810024284,
        "content": "## copy template\n\nhttps://docs.google.com/spreadsheets/d/1VOTFM8UeWHhJbtBM7SRca6vsVJlRUXzX71kjJ8n2jUY/edit?gid=1538095319#gid=1538095319\n\nFile need to include column email, website \u00e9 confidence"
      },
      "typeVersion": 1
    },
    {
      "id": "1f6a17b8-a8bf-4e8c-8ea3-ebaeac9a1605",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1440,
        192
      ],
      "parameters": {
        "height": 472,
        "content": "## copy template\n\nhttps://docs.google.com/spreadsheets/d/1VOTFM8UeWHhJbtBM7SRca6vsVJlRUXzX71kjJ8n2jUY/edit?gid=1538095319#gid=1538095319\n\nAdd target url in Input sheet"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "e5805dcf-b757-4c3e-9ea2-575f012ac5b6",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Email found?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Add result to google",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email found?": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Transform website into domain name1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get input Data": {
      "main": [
        [
          {
            "node": "Add http to url if missing",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get the website data": {
      "main": [
        [
          {
            "node": "Extract the emails found",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract the emails found": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add http to url if missing": {
      "main": [
        [
          {
            "node": "Get the website data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transform website into domain name": {
      "main": [
        [
          {
            "node": "Add result to google",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transform website into domain name1": {
      "main": [
        [
          {
            "node": "Use EmailListVerify API to find generic emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Get input Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Use EmailListVerify API to find generic emails": {
      "main": [
        [
          {
            "node": "Transform website into domain name",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow will : Try to find emails by scraping the website via http request If no result is found, it will use EmailListVerify email finder API to guess an email address

Source: https://n8n.io/workflows/7948/ — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

Splitout Code. Uses manualTrigger, httpRequest, stickyNote, splitOut. Event-driven trigger; 46 nodes.

HTTP Request, Execute Workflow Trigger, Gmail +1
Email & Gmail

Automate CSV imports into HubSpot without the mess. Powered by n8n. Supercharged by Pollup AI.

HTTP Request, Execute Workflow Trigger, Gmail +1
Email & Gmail

AICARE Email Blast System. Uses googleDrive, httpRequest, googleSheets, gmail. Event-driven trigger; 39 nodes.

Google Drive, HTTP Request, Google Sheets +2
Email & Gmail

Get notified if the actual data release is positive or negative for the relevant currency. Use the Telegram chat message about the news release as a trigger to open a trading position in MetaTrader 4.

Google Calendar Trigger, Airtop, Telegram +2
Email & Gmail

Automatically processes new orders added to Google Sheets. Small orders are approved instantly; large orders trigger an HTML email with one-click Approve / Reject links — each handled by an independen

Google Sheets Trigger, Google Sheets, Gmail +1