AutomationFlowsMarketing & Ads › Batch Verify Email Leads From Google Sheets with Rapid Email Verifier

Batch Verify Email Leads From Google Sheets with Rapid Email Verifier

ByArnav Tiwary @arnavtwry77 on n8n.io

Teams and solo founders who keep lead lists in Google Sheets and want a fast, free and repeatable way to validate email deliverability before outreach. Ideal for sales, growth, recruiting, and ops teams who want to reduce bounces and protect sender reputation. Reads emails from…

Event trigger★★★★☆ complexity14 nodesGoogle SheetsHTTP Request
Marketing & Ads Trigger: Event Nodes: 14 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #8465 — 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": "mKV1i8hp6RBm16kg",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Email Leads Verifier",
  "tags": [],
  "nodes": [
    {
      "id": "03bf0d66-4dd1-497d-bc0d-4627840d7a1c",
      "name": "Filter",
      "type": "n8n-nodes-base.filter",
      "position": [
        720,
        -100
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "feb6c5ec-97cb-4c73-bc4c-e6f34ff1e1b8",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.results[0].score }}",
              "rightValue": 75
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "fc358c77-3639-4b8b-95e3-d5f4ef85cbe4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -520,
        -360
      ],
      "parameters": {
        "width": 420,
        "height": 760,
        "content": "## Email Leads Verifier: Batch Validation Workflow\n\nThis automation verifies large batches of email leads using Rapid Email Verifier, applying rate limits and score thresholds for optimal quality. Emails are fetched from Google Sheets, processed in batches (<= 100 per API limits), filtered by verification score, and appended to a results sheet with validation metadata. Ideal for sales, marketing, or event teams needing fast, automated lead cleanup.\n\n**Who is this for?**\n- Event planners, sales teams, marketers needing bulk email verification.\n\n**Features & Steps:**\n- Fetch emails from Google Sheets\n- Batch verify via Rapid Email Verifier API, respecting API limits\n- Wait node for rate limiting\n- Filter by score (>75), with configurable batch size\n- Append full verification details to output sheet\n\n**Setup:**\n- Configure Google Sheets connection\n- Specify input/output sheet names in 'Set' node\n- Ensure Rapid Email Verifier API URL and auth (if any) are set up\n\n**Customizing:**\n- Adjust batch size, filtering threshold, API endpoint, and output schema as needed.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c3fb433d-6856-4feb-99a4-1d1632e06be0",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        140,
        -160
      ],
      "parameters": {
        "width": 220,
        "height": 120,
        "content": "### Step 1:\n Google Sheets node for fetching the emails to be verified."
      },
      "typeVersion": 1
    },
    {
      "id": "a892d566-9789-42b8-aab0-3bc556500e2e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        -240
      ],
      "parameters": {
        "height": 200,
        "content": "### Step 2:\nThe loop node is needed as Rapid Email Verifier can verify a 100 emails at a time for free.\n\nHence, we set a batch of less than 100 emails at once to be forwarded."
      },
      "typeVersion": 1
    },
    {
      "id": "7f222128-5394-4665-9fbc-67dc888e643d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        620,
        280
      ],
      "parameters": {
        "content": "### Step 3:\nThe Wait node waits for 5 seconds before prompting an HTTP request, so that the website does not think it as spam."
      },
      "typeVersion": 1
    },
    {
      "id": "e397415d-93a3-44cf-98d0-cb977f15a46b",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        280
      ],
      "parameters": {
        "height": 200,
        "content": "### Step 4:\nThe HTTP Request node sends a POST request of less than 100 emails at once to be verified.\n\nIt returns verification data about the emails sent."
      },
      "typeVersion": 1
    },
    {
      "id": "f1010f90-1810-4095-a6c7-d4f80409570e",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        660,
        -300
      ],
      "parameters": {
        "height": 180,
        "content": "### Step 5:\nAfter a batch of emails is verified and sent to the 'done' branch of the Loop node, the filter node checks the email score >75 to populate the Google Sheet."
      },
      "typeVersion": 1
    },
    {
      "id": "3353f56a-67cb-4f31-9bc9-2dd3c7bc789f",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        940,
        -320
      ],
      "parameters": {
        "height": 200,
        "content": "### Step 6:\nFinally the Google Sheets node is populated with the verified emails along with more data about each of the emails and their inboxes as well as their 'projected score' out of 100."
      },
      "typeVersion": 1
    },
    {
      "id": "675fe3ac-4e0a-4931-9436-cafba0db48e3",
      "name": "Execute workflow trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -40,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "042e06d0-b054-4168-8512-8d638363ce33",
      "name": "Get emails from sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        200,
        0
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r4z9kppSwx4Xn-QlhoJuPxx0AH5KujB_4I6hbHsZkXw/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1r4z9kppSwx4Xn-QlhoJuPxx0AH5KujB_4I6hbHsZkXw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r4z9kppSwx4Xn-QlhoJuPxx0AH5KujB_4I6hbHsZkXw/edit?usp=drivesdk",
          "cachedResultName": "Event Management Map Leads"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "017efaad-0d24-484a-98eb-627181e3b8bb",
      "name": "Loop",
      "type": "n8n-nodes-base.splitInBatches",
      "onError": "continueRegularOutput",
      "position": [
        440,
        0
      ],
      "parameters": {
        "options": {},
        "batchSize": 20
      },
      "typeVersion": 3
    },
    {
      "id": "c79b5e98-810a-41ef-b5b0-a268e242fb1c",
      "name": "Rate Limiting Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        720,
        80
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "33b412a9-d1f5-4194-b99c-9442c004076b",
      "name": "Append verified emails to sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        960,
        -100
      ],
      "parameters": {
        "columns": {
          "value": {
            "Score": "={{ $json.results[0].score }}",
            "Disposable": "={{ $json.results[0].validations.is_disposable }}",
            "Domain Exists": "={{ $json.results[0].validations.domain_exists }}",
            "Mailbox Exists": "={{ $json.results[0].validations.mailbox_exists }}",
            "Verified Emails": "={{ $json.results[0].email }}"
          },
          "schema": [
            {
              "id": "Verified Emails",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Verified Emails",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Domain Exists",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Domain Exists",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Mailbox Exists",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Mailbox Exists",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Disposable",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Disposable",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Score",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Verified Emails"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1180619104,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r4z9kppSwx4Xn-QlhoJuPxx0AH5KujB_4I6hbHsZkXw/edit#gid=1180619104",
          "cachedResultName": "Sheet2"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1r4z9kppSwx4Xn-QlhoJuPxx0AH5KujB_4I6hbHsZkXw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r4z9kppSwx4Xn-QlhoJuPxx0AH5KujB_4I6hbHsZkXw/edit?usp=drivesdk",
          "cachedResultName": "Event Management Map Leads"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "e2629161-c606-41dc-9709-9d481b281ecf",
      "name": "HTTP Request to Rapid Email Verifier",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        960,
        80
      ],
      "parameters": {
        "url": "https://rapid-email-verifier.fly.dev/api/validate/batch",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"emails\": [\"{{ $json.Emails }}\"]\n} ",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "accept",
              "value": "={{ $json.Emails }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f0cb9107-c566-4764-8123-cf9cfe94fb16",
  "connections": {
    "Loop": {
      "main": [
        [
          {
            "node": "Filter",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Rate Limiting Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter": {
      "main": [
        [
          {
            "node": "Append verified emails to sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rate Limiting Wait": {
      "main": [
        [
          {
            "node": "HTTP Request to Rapid Email Verifier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get emails from sheet": {
      "main": [
        [
          {
            "node": "Loop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute workflow trigger": {
      "main": [
        [
          {
            "node": "Get emails from sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request to Rapid Email Verifier": {
      "main": [
        [
          {
            "node": "Loop",
            "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

Teams and solo founders who keep lead lists in Google Sheets and want a fast, free and repeatable way to validate email deliverability before outreach. Ideal for sales, growth, recruiting, and ops teams who want to reduce bounces and protect sender reputation. Reads emails from…

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

More Marketing & Ads workflows → · Browse all categories →

Related workflows

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

Marketing & Ads

This n8n workflow automates the process of finding ecommerce seller leads, enriching them with product and business details, discovering company websites, and extracting contact information such as em

Google Sheets, N8N Nodes Mrscraper, HTTP Request
Marketing & Ads

This template is for B2B sales teams, SDRs, growth marketers, and founders who maintain a spreadsheet of prospects and need verified contact details -- emails and mobile numbers -- without manual rese

Google Sheets, HTTP Request
Marketing & Ads

This workflow finds local businesses from Google Maps and automatically enriches them with emails, social profiles, AI summaries, and personalized outreach messages — all saved to Google Sheets. Searc

HTTP Request, Google Sheets
Marketing & Ads

This workflow leverages n8n to perform automated Google Maps API queries and manage data efficiently in Google Sheets. It's designed to extract specific location data based on a given list of ZIP code

Execute Workflow Trigger, Stop And Error, HTTP Request +1
Marketing & Ads

This workflow reads LinkedIn profile URLs from Google Sheets, enriches each lead using PhantomBuster profile and company scrapers, finds a work email via Hunter.io with a Dropcontact fallback, writes

Google Sheets, HTTP Request, PhantomBuster +2