← All Analytics Workflows
BillionVerifyMention

Monitor brand mentions with GPT-5 Nano, Brave Search, Gmail and Google Sheets

Pull contacts, verify each address with BillionVerify, and continue to Mention — 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 Mention step removes that risk automatically — only deliverable addresses continue, the rest are flagged.

The workflow

BillionVerify — verification sits right before the send.

+13
n8n steps
+15
n8n steps

Node by node

  1. 1
    Every DayTrigger· n8n

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

  2. 2
    Set keyword and descriptionSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  3. 3
    Check & Log to SheetSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  4. 4
    Set ConfigSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  5. 5
    MergeSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  6. 6
    Split DorkySource· n8n

    Provides or transforms the contact data flowing through the workflow.

  7. 7
    NewURL?Logic· n8n

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

  8. 8
    URL_Is_NOT_emptyLogic· n8n

    Routes items based on the workflow logic.

  9. 9
    5sSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  10. 10
    Format EmailSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  11. 11
    No New ResultsSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  12. 12
    Remove DuplicatesSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  13. 13
    Loop SetupSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  14. 14
    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.

  15. 15
    RelevancyVerificationSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  16. 16
    Brave SearchSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  17. 17
    IF deliverableLogic· n8n

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

  18. 18
    FilterRelevantOnlyLogic· n8n

    Routes items based on the workflow logic.

  19. 19
    Message a modelSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  20. 20
    HasResult?Logic· n8n

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

  21. 21
    Send EmailSend· n8n

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

  22. 22
    AnyRelevantResults?Logic· n8n

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

  23. 23
    MergeOutput&InputSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  24. 24
    Split ResultsSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  25. 25
    Continue LoopSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  26. 26
    InsertSentRowsSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  27. 27
    No Relevant ResultsSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  28. 28
    Extract DataSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  29. 29
    FilterBannedDomainsLogic· n8n

    Routes items based on the workflow logic.

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-mention.json
{
  "name": "Monitor brand mentions with GPT-5 Nano, Brave Search, Gmail and Google Sheets + BillionVerify",
  "nodes": [
    {
      "id": "efea64ae-8882-4b1f-b510-220425347f03",
      "name": "Loop Setup",
      "type": "n8n-nodes-base.set",
      "position": [
        -2560,
        336
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "loop1",
              "name": "currentDork",
              "type": "string",
              "value": "={{ $json.currentDork }}"
            },
            {
              "id": "loop2",
              "name": "keyword",
              "type": "string",
              "value": "={{ $json.keyword }}"
            },
            {
              "id": "loop3",
              "name": "bannedDomains",
              "type": "array",
              "value": "={{ $json.bannedDomains }}"
            },
            {
              "id": "loop4",
              "name": "timeRange",
              "type": "string",
              "value": "={{ $json.timeRange }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "bdf1a944-7c81-4b13-93ad-8e20cdd589cc",
      "name": "Split Dorky",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -2864,
        112
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "1c106d24-67fa-4158-b5a7-954d8622796f",
      "name": "Split Results",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -2080,
        272
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "web.results"
      },
      "typeVersion": 1
    },
    {
      "id": "a482ff88-e998-4c99-92cf-37f9ffa3fff4",
      "name": "Extract Data",
      "type": "n8n-nodes-base.set",
      "position": [
        -1936,
        272
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "url",
              "type": "string",
              "value": "={{ $json.url }}"
            },
            {
              "id": "a2",
              "name": "title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "a3",
              "name": "source",
              "type": "string",
              "value": "={{ $json.meta_url.hostname }}"
            },
            {
              "id": "a4",
              "name": "published",
              "type": "string",
              "value": "={{ $json.page_age }}"
            },
            {
              "id": "a5",
              "name": "snippet",
              "type": "string",
              "value": "={{ $json.description }}"
            },
            {
              "id": "a6",
              "name": "domain",
              "type": "string",
              "value": "={{ $json.profile.long_name }}"
            },
            {
              "id": "a7",
              "name": "bannedDomains",
              "type": "array",
              "value": "={{ $('Loop Setup').item.json.bannedDomains }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "507e1597-a630-4a2a-a60f-05e6d21191a1",
      "name": "Continue Loop",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1600,
        352
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d28025b9-2ed7-4b99-b166-fc06f36c793f",
      "name": "Check & Log to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -3200,
        -352
      ],
      "parameters": {
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "credential-id",
          "name": "TEMPLATE"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "214ecac2-ca55-4346-8d8b-d6ffc80270be",
      "name": "Format Email",
      "type": "n8n-nodes-base.code",
      "position": [
        -1456,
        -352
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\n\nif (items.length === 0) {\n  return [];\n}\n\nlet emailBody = `\n<div style=\"font-family: Arial, sans-serif; max-width: 600px;\">\n  <h2 style=\"color: #1DB954;\">🎸 ${items.length} nová zmínka${items.length > 1 ? 'y' : ''} o ${$('Set Config').item.json.keyword} !</h2>\n  <p style=\"color: #666;\">I found these new mentions in the last 24 hours:</p>\n`;\n\nfor (const item of items) {\n  emailBody += `\n    <div style=\"margin: 20px 0; padding: 15px; border-left: 4px solid #1DB954; background: #f9f9f9;\">\n      <h3 style=\"margin: 0 0 10px 0; color: #333;\">${item.json.title}</h3>\n      <p style=\"margin: 5px 0;\"><strong>📰 Zdroj:</strong> ${item.json.source} (${item.json.domain})</p>\n      <p style=\"margin: 5px 0;\"><strong>📅 Published:</strong> ${item.json.published}</p>\n      <p style=\"margin: 5px 0;\"><strong>🔗 Link:</strong> <a href=\"${item.json.url}\" style=\"color: #1DB954;\">${item.json.url}</a></p>\n      <p style=\"margin: 10px 0 0 0; color: #666; font-style: italic;\">${item.json.snippet}</p>\n    </div>\n  `;\n}\n\nemailBody += `\n  <hr style=\"margin: 30px 0; border: none; border-top: 1px solid #ddd;\">\n  <p style=\"color: #999; font-size: 12px;\">You can find all mentions in Google Sheets. This email was generated automatically by n8n workflow.</p>\n</div>\n`;\n\nreturn [{\n  json: {\n    subject: `🎸 ${items.length} new mention${items.length > 1 ? 'y' : ''} about ${$('Set Config').item.json.keyword} !`,\n    body: emailBody,\n    count: items.length\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "20511f36-e3f6-4e42-83f8-59241a0c5080",
      "name": "Send Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -1296,
        -352
      ],
      "webhookId": "6bb914b3-d626-414a-9912-fb9f1e46e910",
      "parameters": {
        "sendTo": "user@example.com",
        "message": "={{$json.body}}",
        "options": {},
        "subject": "={{$json.subject}}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "credential-id",
          "name": "TEMPLATE"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "6d3679ab-f01f-455a-8588-2783fe249821",
      "name": "No New Results",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1456,
        -208
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "dfc84274-2458-4a4a-b0c9-8e34c921e4c1",
      "name": "Every Day",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -3392,
        -32
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 6
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "48167150-df48-4708-ade8-f0acd3de9738",
      "name": "Brave Search",
      "type": "@brave/n8n-nodes-brave-search.braveSearch",
      "position": [
        -2416,
        336
      ],
      "parameters": {
        "count": 3,
        "query": "={{ $json.currentDork }}",
        "additionalParameters": {
          "freshness": "pd"
        }
      },
      "credentials": {
        "braveSearchApi": {
          "id": "credential-id",
          "name": "TEMPLATE"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8b7eaf91-cf0b-4d09-8e78-787cc54d566a",
      "name": "Set Config",
      "type": "n8n-nodes-base.code",
      "position": [
        -3056,
        -32
      ],
      "parameters": {
        "jsCode": "const keyword = $input.first().json.keyword;\nconst description = $input.first().json.description;\n\nconst dorky = [\n  `\"${keyword}\" music`,\n  `\"${keyword}\" concert`,\n  `\"${keyword}\" festival`,\n  `\"${keyword}\" album`,\n  `\"${keyword}\" band`,\n  `(\"${keyword}\" OR \"${keyword.replace(' ', '')}\") AND (music OR concert OR festival OR release)`\n];\n\nconst bannedDomains = [\n  'spotify.com',\n  'open.spotify.com',\n  'music.apple.com',\n  'bandcamp.com',\n  'soundcloud.com',\n  'youtube.com',\n  'youtu.be',\n  'instagram.com',\n  'facebook.com',\n  'twitter.com',\n  'x.com',\n  'tiktok.com',\n  'linktr.ee'\n];\n\n// Vrať array - každý dork jako samostatný item\nreturn dorky.map(dork => ({\n  json: {\n    currentDork: dork,\n    keyword: keyword,\n    description: description,\n    bannedDomains: bannedDomains,\n    timeRange: 'pd'  // past day pro Brave API\n  }\n}));"
      },
      "typeVersion": 2
    },
    {
      "id": "2961b163-3967-405c-81a8-5904970fd717",
      "name": "HasResult?",
      "type": "n8n-nodes-base.if",
      "position": [
        -2272,
        336
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a842e0db-94c6-4bce-9f9e-bf18221ba016",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.web.results.length }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "18bfc460-da2c-45a0-bb9b-8701f1cb7142",
      "name": "FilterBannedDomains",
      "type": "n8n-nodes-base.filter",
      "position": [
        -1792,
        272
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "9529f246-48e2-4c62-80bd-5a8edd821f4d",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ !$json.bannedDomains.some(d => $json.domain.includes(d)) }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.3,
      "alwaysOutputData": true
    },
    {
      "id": "f205a15e-a0a0-4f53-9f6c-16c47c43326d",
      "name": "Remove Duplicates",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        -2592,
        -224
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {},
        "fieldsToCompare": "url"
      },
      "typeVersion": 2
    },
    {
      "id": "f31f7bcc-8e68-4f8c-a32e-68995b33692c",
      "name": "Message a model",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -2272,
        -128
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-nano",
          "cachedResultName": "GPT-5-NANO"
        },
        "options": {
          "textFormat": {
            "textOptions": {
              "type": "json_object",
              "verbosity": "low"
            }
          }
        },
        "responses": {
          "values": [
            {
              "content": "=Web details:\nTitle: {{ $json.title }}\nSnippet: {{ $json.snippet }}\nURL: {{ $json.url }}\n\nBrand details:\nKeyword: {{ $('Set Config').item.json.keyword }}\nDescription: {{ $('Set Config').item.json.description }}\n\nAccording to the provided context, is this article?"
            },
            {
              "role": "system",
              "content": "You are a brand mention verification system. Your job is to determine if an article is about a specific brand.\n\nYou will receive:\n- keyword: brand name\n- description: description of the brand\n- title: article title  \n- snippet: article excerpt\n- url: article URL\n\nReturn ONLY a JSON object with this structure:\n{\n  \"isRelevant\": true/false,\n  \"confidence\": \"high/medium/low\",\n  \"reason\": \"brief explanation\"\n}\n\nRules:\n- If the article is about the music artist/band with that name → isRelevant: true\n- If it's about something else (different topic, different person, unrelated) → isRelevant: false\n- Be strict: only mark as relevant if it's clearly about the brand"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "credential-id",
          "name": "TEMPLATE"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "010c4f11-e1d1-4130-8696-381e22e2f339",
      "name": "5s",
      "type": "n8n-nodes-base.wait",
      "position": [
        -2736,
        336
      ],
      "webhookId": "4883a8b3-d9ce-4ceb-993d-09f871c25446",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "0913b368-da12-479a-b6b1-fa4f33948af5",
      "name": "URL_Is_NOT_empty",
      "type": "n8n-nodes-base.filter",
      "position": [
        -2752,
        -224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "20aef9d4-6807-484c-9da5-c087df9a6794",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.url }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "0a1b72ac-2d70-4450-b66b-c2e0eadc8b77",
      "name": "RelevancyVerification",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -2432,
        -224
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "2ca0ce23-9203-4a07-81c8-65bd410ace9c",
      "name": "MergeOutput&Input",
      "type": "n8n-nodes-base.code",
      "position": [
        -2016,
        -128
      ],
      "parameters": {
        "jsCode": "// Get the AI output\nconst aiData = $input.first().json;\nlet aiResult;\n\ntry {\n  // Extract the text object from the nested structure\n  aiResult = aiData.output[0].content[0].text;\n} catch (e) {\n  // Fallback if structure is different\n  aiResult = {\n    isRelevant: false,\n    confidence: 'low',\n    reason: 'Failed to parse AI response'\n  };\n}\n\n// Get the original data from Extract Data node\nconst originalData = $('Extract Data').item.json;\n\n// Merge everything together\nreturn [{\n  json: {\n    url: originalData.url,\n    title: originalData.title,\n    source: originalData.source,\n    domain: originalData.domain,\n    published: originalData.published,\n    snippet: originalData.snippet,\n    isRelevant: aiResult.isRelevant,\n    verificationConfidence: aiResult.confidence,\n    verificationReason: aiResult.reason\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "f3794ee9-f9f6-4047-a3d1-73eace15b0c6",
      "name": "FilterRelevantOnly",
      "type": "n8n-nodes-base.filter",
      "position": [
        -2240,
        -272
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "5c180f1c-0a75-46b3-b9f4-850f4722468d",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.isRelevant }}",
              "rightValue": false
            }
          ]
        }
      },
      "typeVersion": 2.3,
      "alwaysOutputData": true
    },
    {
      "id": "0a48c33e-9051-414e-ad53-da11440b32be",
      "name": "No Relevant Results",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1216,
        -48
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "cd1d7732-5c82-48d2-ad92-eef043098d72",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        -1808,
        -336
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "advanced": true,
        "joinMode": "keepNonMatches",
        "mergeByFields": {
          "values": [
            {
              "field1": "URL",
              "field2": "url"
            }
          ]
        },
        "outputDataFrom": "input2"
      },
      "typeVersion": 3.2
    },
    {
      "id": "e54e072d-d123-41fe-800b-0a213ba1860f",
      "name": "NewURL?",
      "type": "n8n-nodes-base.if",
      "position": [
        -1648,
        -336
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e2393571-e002-4c92-9c1f-3b2b92e2ffb9",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ Object.keys($json).length }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "b4b11e13-c3db-44ec-bf4a-2e27d83f250b",
      "name": "AnyRelevantResults?",
      "type": "n8n-nodes-base.if",
      "position": [
        -2048,
        -272
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "2ad314b3-034b-494a-b3ba-343d299010dc",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ Object.keys($json).length }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "450e7974-34ae-460c-b068-f6d2cc214332",
      "name": "InsertSentRows",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1104,
        -352
      ],
      "parameters": {
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "credential-id",
          "name": "TEMPLATE"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "553ed547-d78a-4d8c-a089-878ed3136bba",
      "name": "Set keyword and description",
      "type": "n8n-nodes-base.set",
      "position": [
        -3216,
        -32
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "993b1670-77b6-4e1c-9643-35dad41b3f2c",
              "name": "keyword",
              "type": "string",
              "value": "Goofy Cow"
            },
            {
              "id": "7c9c0c63-8d5f-4856-a454-00af86d4f27a",
              "name": "description",
              "type": "string",
              "value": "Goofy Cow is a czech music band. "
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "695460b4-5357-4412-9b85-6ea6ec02553b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3680,
        -528
      ],
      "parameters": {
        "width": 272,
        "height": 912,
        "content": "# How it works\n\nTrigger fires once per day\nBrave Search API executes searches for the past 24 hours using configured dorky.\n\nResults are filtered against banned domains\nRemaining results go through GPT-5 Nano verification.\n\nVerified mentions are cross-matched against historical results (loaded from Google Sheet).\n\nNew mentions are sent via email and appended to the tracking sheet\n\n## Configuration Requirements:\n\n* Keyword (brand name)\n* .Keyword description (optional context for AI)\n* Dorky (array of search query variations)\n* Banned domains (list of domains to exclude)"
      },
      "typeVersion": 1
    },
    {
      "id": "1e8b6386-1540-40b5-a13a-3e2cf811261c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3392,
        -48
      ],
      "parameters": {
        "color": 5,
        "width": 528,
        "height": 512,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## 1. Setup your brand :\nThis section contains the configuration node where you define your monitoring parameters.\n\n## Configuration Fields:\n* Keyword: The exact name of brand\n* Keyword Description \n* Dorky\n* Banned Domains\n"
      },
      "typeVersion": 1
    },
    {
      "id": "69b23f7c-0b3c-4af1-8f72-568331ee356e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2864,
        -528
      ],
      "parameters": {
        "color": 5,
        "width": 992,
        "height": 608,
        "content": "## 4. Verification\nThis section handles data cleanup and AI-powered relevance verification.\nProcess Flow:\n\n* Filter URL Exists: Removes any results without valid URLs\n* Deduplicate: Eliminates duplicate URLs found across multiple dorky\n* AI Verification: Each unique result is sent to GPT-5 Nano for relevance check"
      },
      "typeVersion": 1
    },
    {
      "id": "c113b1f8-f934-44e7-9923-be1c101709ad",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3392,
        -528
      ],
      "parameters": {
        "color": 5,
        "width": 528,
        "height": 480,
        "content": "## 2. Load File with previous results\nThis section loads historical data from your Google Sheet to enable duplicate detection."
      },
      "typeVersion": 1
    },
    {
      "id": "f65e8129-16e5-43e8-a868-9d3693504630",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2704,
        112
      ],
      "parameters": {
        "color": 5,
        "width": 576,
        "height": 208,
        "content": "##  3. Split Dorky Section\nThis section executes the core search loop, processing each dork sequentially.\nProcess:\n\n* Each search query (dork) is executed individually via Brave Search API\n* Results are filtered against banned domains\n* Valid results proceed to the next stage"
      },
      "typeVersion": 1
    },
    {
      "id": "c25dd165-96ef-4fa5-a5b2-8e12e6ef8be1",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1856,
        -64
      ],
      "parameters": {
        "color": 4,
        "width": 400,
        "height": 208,
        "content": "## Prompt Note\n* **System Prompt:** Defines the verification task. The AI acts as a brand mention verification system, determining if an article is genuinely about your music artist/band (not a different person with the same name, unrelated topic, etc.).\n\n* **User Prompt:** Provides the article context (keyword, title, snippet, URL) and asks for verification."
      },
      "typeVersion": 1
    },
    {
      "id": "eaf1ab50-2fe5-4b44-be3e-59afd7dddcde",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1872,
        -528
      ],
      "parameters": {
        "color": 5,
        "width": 896,
        "height": 448,
        "content": "## 5. Merge & Send\nThis section finalizes results and delivers notifications."
      },
      "typeVersion": 1
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $json.email || $json.Email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        -1656,
        -352
      ],
      "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": [
        -1476,
        -352
      ],
      "name": "IF deliverable"
    }
  ],
  "connections": {
    "5s": {
      "main": [
        [
          {
            "node": "Loop Setup",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "NewURL?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "NewURL?": {
      "main": [
        [
          {
            "node": "Format Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No New Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Every Day": {
      "main": [
        [
          {
            "node": "Set keyword and description",
            "type": "main",
            "index": 0
          },
          {
            "node": "Check & Log to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HasResult?": {
      "main": [
        [
          {
            "node": "Split Results",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Continue Loop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Setup": {
      "main": [
        [
          {
            "node": "Brave Search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email": {
      "main": [
        [
          {
            "node": "InsertSentRows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Config": {
      "main": [
        [
          {
            "node": "Split Dorky",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Dorky": {
      "main": [
        [
          {
            "node": "URL_Is_NOT_empty",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "5s",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Brave Search": {
      "main": [
        [
          {
            "node": "HasResult?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Data": {
      "main": [
        [
          {
            "node": "FilterBannedDomains",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Email": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Continue Loop": {
      "main": [
        [
          {
            "node": "Split Dorky",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Results": {
      "main": [
        [
          {
            "node": "Extract Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message a model": {
      "main": [
        [
          {
            "node": "MergeOutput&Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "URL_Is_NOT_empty": {
      "main": [
        [
          {
            "node": "Remove Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MergeOutput&Input": {
      "main": [
        [
          {
            "node": "RelevancyVerification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates": {
      "main": [
        [
          {
            "node": "RelevancyVerification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "FilterRelevantOnly": {
      "main": [
        [
          {
            "node": "AnyRelevantResults?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AnyRelevantResults?": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ],
        [
          {
            "node": "No Relevant Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "FilterBannedDomains": {
      "main": [
        [
          {
            "node": "Continue Loop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check & Log to Sheet": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RelevancyVerification": {
      "main": [
        [
          {
            "node": "FilterRelevantOnly",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Message a model",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set keyword and description": {
      "main": [
        [
          {
            "node": "Set Config",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Email (BillionVerify)": {
      "main": [
        [
          {
            "node": "IF deliverable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  },
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  }
}

When to use this

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

FAQ

Why verify before sending in Mention?

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