This workflow corresponds to n8n.io template #12772 — we link there as the canonical source.
This workflow follows the Gmail → Google Sheets 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 →
{
"id": "PNx02Wqkn6Ge0EQn",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Easy Brand Monitoring TEMPLATE",
"tags": [
{
"id": "5WzUYUnG7iVDJG7q",
"name": "TEMPLATE",
"createdAt": "2025-10-13T19:43:42.665Z",
"updatedAt": "2025-10-13T19:43:42.665Z"
}
],
"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": {
"name": "<your credential>"
}
},
"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;\">\ud83c\udfb8 ${items.length} nov\u00e1 zm\u00ednka${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>\ud83d\udcf0 Zdroj:</strong> ${item.json.source} (${item.json.domain})</p>\n <p style=\"margin: 5px 0;\"><strong>\ud83d\udcc5 Published:</strong> ${item.json.published}</p>\n <p style=\"margin: 5px 0;\"><strong>\ud83d\udd17 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: `\ud83c\udfb8 ${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
],
"parameters": {
"sendTo": "user@example.com",
"message": "={{$json.body}}",
"options": {},
"subject": "={{$json.subject}}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"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": {
"name": "<your credential>"
}
},
"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\u0165 array - ka\u017ed\u00fd dork jako samostatn\u00fd 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 \u2192 isRelevant: true\n- If it's about something else (different topic, different person, unrelated) \u2192 isRelevant: false\n- Be strict: only mark as relevant if it's clearly about the brand"
}
]
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "010c4f11-e1d1-4130-8696-381e22e2f339",
"name": "5s",
"type": "n8n-nodes-base.wait",
"position": [
-2736,
336
],
"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": {
"name": "<your credential>"
}
},
"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
}
],
"active": false,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "8bc98532-2d0b-4e03-bfe6-43db32aa5c65",
"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": "Send Email",
"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
}
]
]
}
}
}
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.
braveSearchApigmailOAuth2googleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This advanced workflow automates brand monitoring and media coverage tracking for musicians, bands, and music labels. The system uses multiple search queries (dorky) to discover mentions across the web, verifies relevance using AI, and delivers clean, actionable reports via…
Source: https://n8n.io/workflows/12772/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Personalized Outreach & Follow-Up - Phase 2. Uses googleSheets, openAi, gmail, gmailTrigger. Scheduled trigger; 59 nodes.
Stop wasting billable hours on manual time-tracking. AutoTimesheet Pro uses AI to collect emails, meetings, and GitHub work, then writes a clean timesheet straight into Google Sheets. Perfect for deve
This workflow finds local business leads on Google Maps, enriches them with website and AI analysis, and sends personalized cold emails to qualified prospects automatically.
Imagine a dedicated financial expert tirelessly working behind the scenes, sifting through every transaction, every investment move, and every accounting entry. That's exactly what this automated syst
Who is this for? AI creators, marketers, agencies, and researchers tracking YouTube trends who need weekly high-signal insights without 4+ hours manual research.