← All Developer Tools Workflows
BillionVerifyBrave Search

Build Gmail contact database with GPT-5 Nano, Brave Search & Google Sheets

Pull contacts, verify each address with BillionVerify, and continue to Brave Search — only deliverable addresses get through.

Why verify before the send

Sending to invalid, risky, catch-all, or disposable addresses spikes your bounce rate and erodes sender reputation. A verification gate before the Brave Search step removes that risk automatically — only deliverable addresses continue, the rest are flagged.

The workflow

BillionVerify — verification sits right before the send.

Node by node

  1. 1
    When clicking ‘Execute workflow’Trigger· n8n

    Starts the workflow — on a schedule, a webhook, or manually while you test.

  2. 2
    OpenAI Chat ModelSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  3. 3
    Verify Email (BillionVerify) 2Verify· billionverify

    The BillionVerify node verifies the address — status (valid / invalid / risky / catch-all / role / disposable), is_deliverable, and a confidence score — before anything is sent.

  4. 4
    IF deliverable 2Logic· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  5. 5
    LoadSentMessagesSend· n8n

    Sends only to verified, deliverable addresses. Swap in your own provider node if you send elsewhere.

  6. 6
    SelectTo&CCSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  7. 7
    Remove DuplicatesSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  8. 8
    Loop Over ItemsSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  9. 9
    No Operation, do nothingSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  10. 10
    3sSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  11. 11
    Verify Email (BillionVerify)Verify· billionverify

    The BillionVerify node verifies the address — status (valid / invalid / risky / catch-all / role / disposable), is_deliverable, and a confidence score — before anything is sent.

  12. 12
    IF deliverableLogic· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  13. 13
    GetInboxMessagesSend· n8n

    Sends only to verified, deliverable addresses. Swap in your own provider node if you send elsewhere.

  14. 14
    InboxMessages?Logic· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  15. 15
    SelectImportantFieldsSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  16. 16
    MailParserSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  17. 17
    Information ExtractorSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  18. 18
    ValidDomain?Logic· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  19. 19
    MergeSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  20. 20
    SearchWebsiteSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  21. 21
    No Operation, do nothing1Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  22. 22
    WriteToDBSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  23. 23
    GetClusters1Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  24. 24
    HaveClustersLogic· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  25. 25
    Loop Over Items1Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  26. 26
    ReturnContactFromMailParserSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  27. 27
    HTMLParserSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  28. 28
    GetHTMLSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  29. 29
    AggregateSource· n8n

    Provides or transforms the contact data flowing through the workflow.

Workflow JSON

Copy or download this workflow, then import it in n8n (Workflows → Import from File / Paste). Install the BillionVerify community node first, then add your API key credential.

verify-emails-in-brave-search.json
{
  "name": "Build Gmail contact database with GPT-5 Nano, Brave Search & Google Sheets + BillionVerify",
  "nodes": [
    {
      "id": "6496a003-58aa-48ee-aab6-fe3f66518070",
      "name": "When clicking ‘Execute workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -2016,
        -144
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c01e946f-a80f-438c-b967-07b466dd9ab9",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1312,
        -144
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "6cb6cd5f-6b12-4881-bdbc-22618814284a",
      "name": "Remove Duplicates",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        -1504,
        -144
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "5c1f7978-d638-42c6-9a93-f4c3e49189ae",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1312,
        -480
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "71db1984-814a-4cda-a3c8-6550a50ae094",
      "name": "3s",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1120,
        -80
      ],
      "webhookId": "419094fc-8654-49d6-8455-0355b5ef5bc9",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "9da7b0fd-57f4-44d9-87d9-61087d660b0f",
      "name": "GetHTML",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        480,
        32
      ],
      "parameters": {},
      "typeVersion": 4.3
    },
    {
      "id": "39fdafbb-2669-4dbe-b30d-596d960e5338",
      "name": "MailParser",
      "type": "n8n-nodes-base.code",
      "position": [
        -624,
        336
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "90310a89-c904-4f0b-8459-a8936289b573",
      "name": "HTMLParser",
      "type": "n8n-nodes-base.code",
      "position": [
        848,
        -64
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "37e7b272-b040-48ad-988c-fae2d699124b",
      "name": "SearchWebsite",
      "type": "@brave/n8n-nodes-brave-search.braveSearch",
      "position": [
        -288,
        48
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c2be9ffd-5e4a-4973-ba62-2fed3d3814cd",
      "name": "Loop Over Items1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        272,
        16
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "1030fb06-7742-4f91-9181-6ce03192be9e",
      "name": "No Operation, do nothing1",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -112,
        352
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "016004af-0c29-42ab-b4c7-00d5b0e41939",
      "name": "InboxMessages?",
      "type": "n8n-nodes-base.if",
      "position": [
        -784,
        -80
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "94f0a766-e322-4c48-bfb1-f0bb1e720b16",
      "name": "ValidDomain?",
      "type": "n8n-nodes-base.if",
      "position": [
        -448,
        336
      ],
      "parameters": {},
      "typeVersion": 2.2,
      "alwaysOutputData": false
    },
    {
      "id": "7e1e609c-f4f1-4513-a408-a28de29939bc",
      "name": "GetInboxMessages",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -944,
        -80
      ],
      "webhookId": "db1c75f3-4d7a-49c1-96a9-7d3c9e42f624",
      "parameters": {},
      "typeVersion": 2.1,
      "alwaysOutputData": true
    },
    {
      "id": "5d6ace50-de7f-46f0-95c6-6bdfd37c387f",
      "name": "SelectTo&CC",
      "type": "n8n-nodes-base.set",
      "position": [
        -1664,
        -144
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "c410c068-c1ba-4624-83e4-da282f05aa1d",
      "name": "LoadSentMessages",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -1840,
        -144
      ],
      "webhookId": "6d61edf0-07e0-42a8-bb68-af95ade93b3d",
      "parameters": {},
      "retryOnFail": true,
      "typeVersion": 2.1,
      "waitBetweenTries": 5000
    },
    {
      "id": "31188212-380d-4aeb-8746-ff568e2a939e",
      "name": "WriteToDB",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1072,
        368
      ],
      "parameters": {},
      "typeVersion": 4.7
    },
    {
      "id": "cfdc0dc5-f981-408f-895e-83807d8779fd",
      "name": "SelectImportantFields",
      "type": "n8n-nodes-base.set",
      "position": [
        -560,
        -416
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "1d80e46a-3af8-4d90-bdd5-b04dac6d0e94",
      "name": "Information Extractor",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        -352,
        -416
      ],
      "parameters": {},
      "typeVersion": 1.2
    },
    {
      "id": "e4aca200-2256-4de4-8a73-2474d30cff27",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -432,
        -256
      ],
      "parameters": {},
      "typeVersion": 1.2
    },
    {
      "id": "9d8cbfad-b81c-498f-b80f-826061ffda22",
      "name": "Merge",
      "type": "n8n-nodes-base.code",
      "position": [
        848,
        -224
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "9bc210e5-7292-490c-a06c-b60787c847f0",
      "name": "HaveClusters",
      "type": "n8n-nodes-base.if",
      "position": [
        32,
        48
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "f06aa3f9-3814-4c0e-864f-715930ed4c54",
      "name": "ReturnContactFromMailParser",
      "type": "n8n-nodes-base.code",
      "position": [
        160,
        256
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "8075ed4e-2c33-42dc-a043-f8a26497ed1c",
      "name": "GetClusters1",
      "type": "n8n-nodes-base.code",
      "position": [
        -128,
        48
      ],
      "parameters": {},
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "a4010343-622e-4fe1-8ead-ab6c0f4d0fc4",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        656,
        32
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "2ed4d613-42e9-48c2-9e9c-fcc4c931ee98",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2048,
        -304
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "a2b6ae22-af1f-4c73-a06e-2d5229ac7b7d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        -144
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "d5e9e02f-9f68-44b1-9aa9-4898c2366483",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        -96
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "5b809cf6-fe1e-455b-ad02-7214123c14a2",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -624,
        -576
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "d9a75660-6028-41f5-b2e8-f2e85a46ceb2",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2432,
        -512
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "cd90fc19-4899-4c4f-9a65-252a5690494e",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1328,
        -336
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "ab87283e-ce39-4ed1-9659-ca9c2a613d5e",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -656,
        192
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $json.email || $json.Email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        -1304,
        -80
      ],
      "name": "Verify Email (BillionVerify)",
      "credentials": {
        "billionVerifyApi": {
          "id": "",
          "name": "BillionVerify account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "is-deliverable",
              "leftValue": "={{ $json.is_deliverable }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ]
        }
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        -1124,
        -80
      ],
      "name": "IF deliverable"
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $json.email || $json.Email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        -2200,
        -144
      ],
      "name": "Verify Email (BillionVerify) 2",
      "credentials": {
        "billionVerifyApi": {
          "id": "",
          "name": "BillionVerify account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "is-deliverable",
              "leftValue": "={{ $json.is_deliverable }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ]
        }
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        -2020,
        -144
      ],
      "name": "IF deliverable 2"
    }
  ],
  "connections": {
    "3s": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "WriteToDB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetHTML": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "WriteToDB": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTMLParser": {
      "main": [
        [
          {
            "node": "WriteToDB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MailParser": {
      "main": [
        [
          {
            "node": "ValidDomain?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SelectTo&CC": {
      "main": [
        [
          {
            "node": "Remove Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetClusters1": {
      "main": [
        [
          {
            "node": "HaveClusters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HaveClusters": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "ReturnContactFromMailParser",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ValidDomain?": {
      "main": [
        [
          {
            "node": "SearchWebsite",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SearchWebsite": {
      "main": [
        [
          {
            "node": "GetClusters1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "InboxMessages?": {
      "main": [
        [
          {
            "node": "SelectImportantFields",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "MailParser",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "3s",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetInboxMessages": {
      "main": [
        [
          {
            "node": "InboxMessages?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LoadSentMessages": {
      "main": [
        [
          {
            "node": "SelectTo&CC",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items1": {
      "main": [
        [
          {
            "node": "HTMLParser",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "GetHTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Information Extractor",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Information Extractor": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SelectImportantFields": {
      "main": [
        [
          {
            "node": "Information Extractor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Operation, do nothing1": {
      "main": [
        [
          {
            "node": "WriteToDB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ReturnContactFromMailParser": {
      "main": [
        [
          {
            "node": "WriteToDB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify) 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Email (BillionVerify)": {
      "main": [
        [
          {
            "node": "IF deliverable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable": {
      "main": [
        [
          {
            "node": "GetInboxMessages",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Verify Email (BillionVerify) 2": {
      "main": [
        [
          {
            "node": "IF deliverable 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable 2": {
      "main": [
        [
          {
            "node": "LoadSentMessages",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

When to use this

  • Cleaning a list before a Brave Search send or sync.
  • Protecting Brave Search deliverability and sender reputation.
  • Keeping bounce rates low so your sending is never throttled.

FAQ

Why verify before sending in Brave Search?

Verifying first keeps your bounce rate low, which protects your sender reputation and your results.

How do I import this workflow?

Download the JSON, then in n8n go to Workflows → Import from File (or paste it). Install the BillionVerify community node and add your API key credential.

What happens to risky or catch-all addresses?

They are routed to the false branch and excluded from the send. You decide whether to retry, review, or drop them.

Add verification to your workflow

Create a free account, grab your API key, and stop bounces before they happen.

Get started free