AutomationFlowsEmail & Gmail › Validate and Score Email Addresses with Zerobounce AI

Validate and Score Email Addresses with Zerobounce AI

ByZeroBounce @zerobounce on n8n.io

This template uses the ZeroBounce node to validate and score email addresses. It is designed to first check if an email is deliverable and then uses A.I. Scoring to assess the sender's deliverability confidence.

Event trigger★★★★☆ complexity28 nodes@Zerobounce/N8N Nodes Zerobounce
Email & Gmail Trigger: Event Nodes: 28 Complexity: ★★★★☆ Added:

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

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
{
  "nodes": [
    {
      "id": "22153003-c046-4703-84b7-89cfb0b5e5d8",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        512,
        80
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e1db2aa9-8bd2-420b-a8f1-2a2512281f05",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1648,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 560,
        "content": "## 3. ZeroBounce Validation\n**Validate** an email address with ZeroBounce.\n\nThis uses the ZeroBounce API to validate a single email address and optional IP address.\n\nDetails can be found here [Single Email Validator](https://www.zerobounce.net/docs/email-validation-api-quickstart/v2-validate-emails).\n\nThis returns the status of the email address along with other useful information about the address and domain."
      },
      "typeVersion": 1
    },
    {
      "id": "817634e1-750b-45ef-a55d-23fa1685cf53",
      "name": "Check credits for validation",
      "type": "@zerobounce/n8n-nodes-zerobounce.zeroBounce",
      "position": [
        1232,
        144
      ],
      "parameters": {
        "resource": "account",
        "addOptions": {
          "creditsRequired": "={{ $input.all().length }}"
        }
      },
      "credentials": {
        "zeroBounceApi": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 1
    },
    {
      "id": "fd94c5ad-abfa-459d-b52f-2c4b2ea1c334",
      "name": "Check credits for scoring",
      "type": "@zerobounce/n8n-nodes-zerobounce.zeroBounce",
      "position": [
        2432,
        144
      ],
      "parameters": {
        "resource": "account",
        "addOptions": {}
      },
      "credentials": {
        "zeroBounceApi": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 1
    },
    {
      "id": "6644c283-406f-4c14-bafd-dde1cdf213e7",
      "name": "Low score",
      "type": "n8n-nodes-base.noOp",
      "position": [
        3632,
        464
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "1bf8b4f3-4df6-480c-88f8-ad1c44a3b45b",
      "name": "Not valid",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1952,
        464
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "6f6059f7-e27d-40ec-82c7-eb6d4d620fdd",
      "name": "Wait for scoring credits check",
      "type": "n8n-nodes-base.merge",
      "position": [
        2672,
        80
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2
    },
    {
      "id": "468e17b7-e5a2-4dc6-b1de-f19c3dd8c5d8",
      "name": "Wait for validation credits check",
      "type": "n8n-nodes-base.merge",
      "position": [
        1472,
        80
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2
    },
    {
      "id": "f8e0a28f-ca7c-4c7b-84c8-08ba6e6ea7db",
      "name": "Not scored",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2912,
        464
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "49a7d0f6-eece-46b5-9e44-d80c5440b551",
      "name": "Merge validation and scoring results",
      "type": "n8n-nodes-base.merge",
      "position": [
        3392,
        80
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "advanced": true,
        "joinMode": "enrichInput1",
        "mergeByFields": {
          "values": [
            {
              "field1": "address",
              "field2": "email"
            }
          ]
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "5b77fe7c-8fab-4a99-8bae-2e3a3162f522",
      "name": "Skip scoring?",
      "type": "n8n-nodes-base.switch",
      "position": [
        2912,
        80
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "score",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "loose"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "761a0147-a4d3-47bd-8c0a-2a325d0879fa",
                    "operator": {
                      "type": "array",
                      "operation": "lengthLte",
                      "rightType": "number"
                    },
                    "leftValue": "={{ $input.all() }}",
                    "rightValue": "={{ $json.Credits }}"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "skip",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "loose"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "da3f8ab3-1606-497a-b0a8-e958d317d68c",
                    "operator": {
                      "type": "array",
                      "operation": "lengthGt",
                      "rightType": "number"
                    },
                    "leftValue": "={{ $input.all() }}",
                    "rightValue": "={{ $json.Credits }}"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {},
        "looseTypeValidation": true
      },
      "typeVersion": 3.3
    },
    {
      "id": "c2ed393f-0561-4beb-b0d0-b33d55a7962a",
      "name": "Is valid?",
      "type": "n8n-nodes-base.switch",
      "position": [
        1952,
        80
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "valid",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "958a508a-4388-42e0-b9a7-f7ed5e974343",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "valid"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "other",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "63d83f43-0d54-413c-aa9e-6c4bc920d345",
                    "operator": {
                      "type": "string",
                      "operation": "notEquals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "valid"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.3
    },
    {
      "id": "b479bc31-3297-46d4-aed9-0e6c03a906bb",
      "name": "Split into items",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        992,
        80
      ],
      "parameters": {
        "include": "allOtherFields",
        "options": {
          "destinationFieldName": "email"
        },
        "fieldToSplitOut": "emails"
      },
      "typeVersion": 1
    },
    {
      "id": "b2f95213-3b77-4291-b131-08f04e46dcf2",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1168,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 560,
        "content": "## 2. Check ZeroBounce account credits balance (optional)\nCheck if your ZeroBounce account has enough credits to perform validation for all of the input items.\n\nThis step is optional, although checking before starting the workflow can prevent issues part way through.\n\nThe [Get Credits](https://www.zerobounce.net/docs/email-validation-api-quickstart#get_balance__v2__) node can optionally compare the returned credits balance against a value and throw an error if there aren't enough.\n\nThe \"Merge\" node allows us to use \"Execute Once\" for the \"Get Credits\" node and wait for the result without altering the 30 input items."
      },
      "typeVersion": 1
    },
    {
      "id": "bde06e64-fae1-4d6e-8c22-14faf68ceffe",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 560,
        "content": "## 1. Input data\nHere we are using [Sandbox](https://www.zerobounce.net/docs/email-validation-api-quickstart/v2-sandbox-mode) email addresses which don't use any ZeroBounce credits.\n\nThese can be used for testing and proving your workflows before connecting production data.\n\nIn a real workflow, the input data will usually be provided by the trigger, e.g. new contact added.\n\nThe split step converts the data from a single array into 30 individual email address items. "
      },
      "typeVersion": 1
    },
    {
      "id": "14cddc36-882d-46da-bd52-0b08f044db10",
      "name": "Sandbox emails",
      "type": "n8n-nodes-base.set",
      "position": [
        752,
        80
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "{\n  \"emails\": [\n    \"disposable@example.com\",\n    \"invalid@example.com\",\n    \"valid@example.com\",\n    \"toxic@example.com\",\n    \"donotmail@example.com\",\n    \"spamtrap@example.com\",\n    \"abuse@example.com\",\n    \"unknown@example.com\",\n    \"catch_all@example.com\",\n    \"antispam_system@example.com\",\n    \"does_not_accept_mail@example.com\",\n    \"exception_occurred@example.com\",\n    \"failed_smtp_connection@example.com\",\n    \"failed_syntax_check@example.com\",\n    \"forcible_disconnect@example.com\",\n    \"global_suppression@example.com\",\n    \"greylisted@example.com\",\n    \"leading_period_removed@example.com\",\n    \"mail_server_did_not_respond@example.com\",\n    \"mail_server_temporary_error@example.com\",\n    \"mailbox_quota_exceeded@example.com\",\n    \"mailbox_not_found@example.com\",\n    \"no_dns_entries@example.com\",\n    \"possible_trap@example.com\",\n    \"possible_typo@example.com\",\n    \"role_based@example.com\",\n    \"timeout_exceeded@example.com\",\n    \"unroutable_ip_address@example.com\",\n    \"free_email@example.com\",\n    \"role_based_catch_all@example.com\"\n  ]\n}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "f51f6d3c-9753-449c-b816-249fcbc60bfc",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2128,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 560,
        "content": "## 4. Check ZeroBounce account credits balance (optional)\nCheck if your ZeroBounce account has enough credits to perform scoring for all of the input items.\n\nThe optional \"Credits required\" parameter is not set. This allows us to check the result and skip scoring  if there aren't enough credits.\n\nA 5 second wait is added to allow time for the credits balance to update after the validations."
      },
      "typeVersion": 1
    },
    {
      "id": "74fc0dbe-815a-43da-b6a0-23ce569fdd95",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        336
      ],
      "parameters": {
        "color": 7,
        "width": 3344,
        "height": 272,
        "content": "## Filtered outputs\nThese are the output branches which have been filtered by their validation status and score.\n\nFurther actions could be taken with these filtered results, e.g. followed up using [Email Finder](https://www.zerobounce.net/docs/email-finder-api) or [Domain Search](https://www.zerobounce.net/docs/domain-search-api) using our n8n node. "
      },
      "typeVersion": 1
    },
    {
      "id": "dacd88cd-db68-4819-a8f4-bd5afc56f608",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3568,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 560,
        "content": "## 7. Split results by score\nHere is your output, this refined list can now be used with a high confidence that it will reach your intended recipient."
      },
      "typeVersion": 1
    },
    {
      "id": "0e77fbbb-81fa-4d60-a4d7-7c49bc1e773e",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3088,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 560,
        "content": "## 6. ZeroBounce A.I. Scoring\n**A.I. Score** an email address with ZeroBounce.\n\nThis uses the ZeroBounce API to score a single email address.\n\nDetails can be found here [Single Email Scoring](https://www.zerobounce.net/docs/ai-scoring-api/single-email-scoring).\n\nThis returns the score for the email address.\n\nThe merge node is used to merge the scoring result with the validation result."
      },
      "typeVersion": 1
    },
    {
      "id": "99d5b954-003d-4167-86fa-68f9715e8730",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        2192,
        144
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "d1448267-8fa5-4161-8916-c935e9383954",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2608,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 560,
        "content": "## 5. Score emails or finish\nThis checks if there are enough credits to score the remaining emails.\n\nThis allows the validation results to be used even if scoring can't be performed."
      },
      "typeVersion": 1
    },
    {
      "id": "c7aeca49-69ce-402a-a642-bc953ce659f6",
      "name": "Filter by score",
      "type": "n8n-nodes-base.switch",
      "position": [
        3632,
        64
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "high",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "loose"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "47aa6c56-2c5a-41ac-8f5c-5b7f183d898b",
                    "operator": {
                      "type": "number",
                      "operation": "gte"
                    },
                    "leftValue": "={{ $json.score }}",
                    "rightValue": 9
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "medium",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "loose"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "b1bdb574-a04c-4086-86a3-899e53ccda07",
                    "operator": {
                      "type": "number",
                      "operation": "gte"
                    },
                    "leftValue": "={{ $json.score }}",
                    "rightValue": 3
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "low",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "loose"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "5c624f71-1acc-4ce8-92d3-821fe2d4f83b",
                    "operator": {
                      "type": "number",
                      "operation": "lt"
                    },
                    "leftValue": "={{ $json.score }}",
                    "rightValue": 3
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "fallbackOutput": 2
        },
        "looseTypeValidation": true
      },
      "typeVersion": 3.3
    },
    {
      "id": "105b986d-84b0-48f6-b44c-e1c219ff471a",
      "name": "Medium score",
      "type": "n8n-nodes-base.noOp",
      "position": [
        3872,
        144
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "95a3bca3-f9e8-4227-a577-16251e5e061c",
      "name": "High score",
      "type": "n8n-nodes-base.noOp",
      "position": [
        3872,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "3bdb5066-93a5-42fa-86ca-c0a3de914015",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 912,
        "height": 848,
        "content": "## ZeroBounce Email Validation and Scoring\n\nThis template uses the [ZeroBounce](https://www.zerobounce.net) node to validate and score email addresses. It is designed to first check if an email is deliverable and then uses A.I. Scoring to assess the sender's deliverability confidence.\n\nThis is an example template to demonstrate ways to use the ZeroBounce node and how to manipulate the data with core n8n nodes.\n\nA ZeroBounce API key is needed to use this template. Generate one [here](https://www.zerobounce.net/members/API).\n\n\n\n\n![ZeroBounce Logo](https://raw.githubusercontent.com/zerobounce/n8n-nodes-zerobounce/main/icons/zerobounce-logo.svg)\n\n### 1. Email Validation\nThe **`Validate email`** node sends the email address to the ZeroBounce API to determine its status (e.g., **`'valid', 'invalid', 'spam trap'`**).\n* **Function:** Checks the email address against ZeroBounce's Email Validation API\n\n\n### 2. A.I. Scoring\nFor emails confirmed as valid, the workflow proceeds to the **`Score email`** node.\n* **Function:** Applies ZeroBounce's proprietary A.I. model to assess the quality of the email, returning a numerical score (**0 to 10**).\n\n\n### 3. Output\nThe workflow concludes with the **`Filter by score` Switch Node**, which uses the ZeroBounce score to categorize the email into three confidence tiers:\n* **High Score:** Indicates high confidence in deliverability and is ready for immediate campaigns.\n* **Medium Score:** Suggests moderate risk; these might be suitable for re-engagement or specialized campaigns.\n* **Low Score:** Indicates high risk, even if the status was technically `valid`. These should be suppressed to protect sender reputation."
      },
      "typeVersion": 1
    },
    {
      "id": "f245ff49-9fda-45fb-b724-394f3533ab07",
      "name": "Validate email",
      "type": "@zerobounce/n8n-nodes-zerobounce.zeroBounce",
      "position": [
        1712,
        80
      ],
      "parameters": {
        "email": "={{ $json.email }}",
        "addOptions": {
          "timeout": 10,
          "verifyPlus": true,
          "activityData": true
        }
      },
      "credentials": {
        "zeroBounceApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a2c894ad-25bf-44d7-8080-2c95760e3398",
      "name": "Score email",
      "type": "@zerobounce/n8n-nodes-zerobounce.zeroBounce",
      "position": [
        3152,
        144
      ],
      "parameters": {
        "email": "={{ $json.address }}",
        "resource": "scoring"
      },
      "credentials": {
        "zeroBounceApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Check credits for scoring",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is valid?": {
      "main": [
        [
          {
            "node": "Wait for scoring credits check",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Not valid",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Score email": {
      "main": [
        [
          {
            "node": "Merge validation and scoring results",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Skip scoring?": {
      "main": [
        [
          {
            "node": "Score email",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge validation and scoring results",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Not scored",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sandbox emails": {
      "main": [
        [
          {
            "node": "Split into items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate email": {
      "main": [
        [
          {
            "node": "Is valid?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter by score": {
      "main": [
        [
          {
            "node": "High score",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Medium score",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Low score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split into items": {
      "main": [
        [
          {
            "node": "Check credits for validation",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait for validation credits check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check credits for scoring": {
      "main": [
        [
          {
            "node": "Wait for scoring credits check",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Check credits for validation": {
      "main": [
        [
          {
            "node": "Wait for validation credits check",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Wait for scoring credits check": {
      "main": [
        [
          {
            "node": "Skip scoring?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for validation credits check": {
      "main": [
        [
          {
            "node": "Validate email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge validation and scoring results": {
      "main": [
        [
          {
            "node": "Filter by score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Sandbox emails",
            "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 template uses the ZeroBounce node to validate and score email addresses. It is designed to first check if an email is deliverable and then uses A.I. Scoring to assess the sender's deliverability confidence.

Source: https://n8n.io/workflows/11498/ — 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

Loan eligibility workflow. Uses formTrigger, googleSheets, gmail. Event-driven trigger; 53 nodes.

Form Trigger, Google Sheets, Gmail
Email & Gmail

spy tool. Uses gmailTool, httpRequest, formTrigger, stopAndError. Event-driven trigger; 52 nodes.

Gmail Tool, HTTP Request, Form Trigger +1
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

This workflow is ideal for security teams, IT Ops professionals, and managed service providers (MSPs) responsible for monitoring and validating email traffic. It’s especially useful for organizations

Microsoft Outlook Trigger, HTTP Request