This workflow corresponds to n8n.io template #10054 — we link there as the canonical source.
This workflow follows the Gmail → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "4e4487e4-6e43-4115-9c74-28b7d60c60f1",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-2960,
64
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "92209b78-9e1d-4b7f-957d-063f43d3977e",
"name": "Get All Bug Bounty Domains",
"type": "n8n-nodes-base.httpRequest",
"position": [
-2768,
64
],
"parameters": {
"url": "https://raw.githubusercontent.com/arkadiyt/bounty-targets-data/refs/heads/main/data/domains.txt",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "7c0f9b01-e947-476d-b628-97b86789fead",
"name": "Create domains.txt",
"type": "n8n-nodes-base.convertToFile",
"position": [
-2576,
64
],
"parameters": {
"options": {
"fileName": "domains.txt"
},
"operation": "toText",
"sourceProperty": "data"
},
"typeVersion": 1.1
},
{
"id": "4a90e70b-c48d-413a-a122-c56cbff7fb94",
"name": "Upload domains.txt",
"type": "n8n-nodes-base.ssh",
"position": [
-2400,
64
],
"parameters": {
"path": "/tmp/nuclei",
"options": {},
"resource": "file"
},
"credentials": {
"sshPassword": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "988543c5-94e0-44f8-ab9f-8d3ebfd55026",
"name": "Loop Over CVEs",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-1808,
64
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "4a279535-cdc3-4971-b3f1-669dab7c1807",
"name": "Split CVEs",
"type": "n8n-nodes-base.splitOut",
"position": [
-2016,
64
],
"parameters": {
"options": {},
"fieldToSplitOut": "results"
},
"typeVersion": 1
},
{
"id": "c327f6d6-7a46-4452-8533-1bc5efbdd413",
"name": "GET Last CVEs (PROJECT DISCOVERY)",
"type": "n8n-nodes-base.httpRequest",
"position": [
-2208,
64
],
"parameters": {
"url": "https://api.projectdiscovery.io/v2/template/search",
"options": {
"response": {
"response": {}
},
"allowUnauthorizedCerts": false
},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "scope",
"value": "public"
},
{
"name": "facet_size",
"value": "40"
},
{
"name": "offset",
"value": "0"
},
{
"name": "limit",
"value": "40"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "394d12ed-f7fa-4fa4-9153-792362557fd0",
"name": "Template Exists Filter",
"type": "n8n-nodes-base.filter",
"position": [
-1456,
48
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f5ec37ec-884b-4f2b-a862-8f635c3f4787",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.Template }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ded932c1-4860-4e1a-8097-d20e344d452c",
"name": "Date Filter",
"type": "n8n-nodes-base.if",
"position": [
-1632,
160
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "b8383900-9ea9-433a-99eb-186bace80963",
"operator": {
"type": "dateTime",
"operation": "afterOrEquals"
},
"leftValue": "={{ $json.created_at.match(/^\\d{4}-\\d{2}-\\d{2}/)[0] }}",
"rightValue": "={{ new Date(new Date($('Schedule Trigger').item.json.timestamp).setDate(new Date($('Schedule Trigger').item.json.timestamp).getDate() - 1)).toISOString().slice(0,10) }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "683c4a53-bcc1-4120-ae08-7d85d75d8ad1",
"name": "Set Variables",
"type": "n8n-nodes-base.set",
"position": [
-1456,
176
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2dbb3955-d2ac-436d-afbd-115a1b9ca77d",
"name": "CVE",
"type": "string",
"value": "={{ $json.classification[\"cve-id\"][0] }}"
},
{
"id": "6fb84c49-bc10-49cc-9fd1-bdaaa43ee26f",
"name": "CVSS-Score",
"type": "string",
"value": "={{ $json.classification[\"cvss-score\"] }}"
},
{
"id": "77c7d2d4-f191-426e-b421-746046007736",
"name": "Template",
"type": "string",
"value": "={{ $json.raw }}"
},
{
"id": "43e39cd1-426f-4d8d-855d-b2b5094b2c3d",
"name": "References",
"type": "string",
"value": "={{ $json.references }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "7ce8eaf8-781d-4a57-8130-bee18c2cbbc7",
"name": "Set Null Variable",
"type": "n8n-nodes-base.set",
"position": [
-1456,
304
],
"parameters": {
"options": {}
},
"typeVersion": 3.4
},
{
"id": "6971ed83-ae0b-4b0a-b507-4272811706df",
"name": "Loop Over Templates",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-1264,
48
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "8e5d9676-868b-4509-99ad-842ac105083a",
"name": "Create Template",
"type": "n8n-nodes-base.convertToFile",
"position": [
-976,
176
],
"parameters": {
"options": {
"fileName": "={{ $json.CVE }}.txt"
},
"operation": "toText",
"sourceProperty": "Template"
},
"typeVersion": 1.1
},
{
"id": "8aa01e8f-c4ae-4670-94e7-e680aecdec31",
"name": "Upload Template",
"type": "n8n-nodes-base.ssh",
"position": [
-768,
176
],
"parameters": {
"path": "/tmp/nuclei-templates",
"options": {},
"resource": "file"
},
"credentials": {
"sshPassword": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "50e4400a-ab7b-479b-b5d1-6887b20dc4f0",
"name": "Convert Template to .yaml",
"type": "n8n-nodes-base.ssh",
"position": [
-768,
304
],
"parameters": {
"cwd": "=/",
"command": "=mv /tmp/nuclei-templates/{{ $('Loop Over Templates').item.json.CVE }}.txt /tmp/nuclei-templates/{{ $('Loop Over Templates').item.json.CVE }}.yaml"
},
"credentials": {
"sshPassword": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "dcbe9551-2a4e-4886-ac28-1d33c46fb6d1",
"name": "Execute Nuclei",
"type": "n8n-nodes-base.ssh",
"position": [
-768,
32
],
"parameters": {
"command": "=nuclei -l /tmp/nuclei/domains.txt -t /tmp/nuclei-templates -ss host-spray -c 10 -bs 50 -rl 100 -timeout 10 -retries 1 -silent -etags info,low"
},
"credentials": {
"sshPassword": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "01f22d27-44e2-4485-814e-947521b1c941",
"name": "Remove Templates",
"type": "n8n-nodes-base.ssh",
"position": [
-560,
32
],
"parameters": {
"command": "rm /tmp/nuclei-templates/*"
},
"credentials": {
"sshPassword": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "bc950e9f-e3b5-40da-848d-70c6632c2736",
"name": "Set Results Variable",
"type": "n8n-nodes-base.set",
"position": [
-368,
32
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "d81d0c46-ef3f-4f6d-b888-753aa5bf5cee",
"name": "Nuclei Results",
"type": "string",
"value": "={{ $('Execute Nuclei').item.json.stdout }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "7f6b1ae1-a704-424e-9772-b2aecacc138b",
"name": "Check Results",
"type": "n8n-nodes-base.if",
"position": [
-192,
32
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "031ad40a-049e-4439-867f-9a753d298de7",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json[\"Nuclei Results\"] }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "bf01310b-f018-47de-ae60-b4e050c36b4a",
"name": "Send a message",
"type": "n8n-nodes-base.gmail",
"position": [
0,
16
],
"parameters": {
"sendTo": "user@example.com",
"message": "={{ $json[\"Nuclei Results\"] }}",
"options": {},
"subject": "=CVE Hunter"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "61d4021c-f16b-4c23-b799-e2a65e24500c",
"name": "Remove Items",
"type": "n8n-nodes-base.summarize",
"position": [
-976,
32
],
"parameters": {
"options": {},
"fieldsToSummarize": {
"values": [
{
"field": "code",
"aggregation": "append"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "b92df5a1-5d5f-4bd9-8c91-3e96660986c6",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3024,
-512
],
"parameters": {
"color": 7,
"width": 3232,
"height": 1104,
"content": ""
},
"typeVersion": 1
},
{
"id": "c9f2beaa-b483-4643-882e-120708f10d37",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2992,
-176
],
"parameters": {
"color": 4,
"width": 720,
"height": 736,
"content": "## Step 1 - Get All Bug Bounty Programs Domains"
},
"typeVersion": 1
},
{
"id": "7b03b271-d5e0-493d-a4a0-839184bd78a9",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2272,
-176
],
"parameters": {
"color": 5,
"width": 960,
"height": 736,
"content": "## Step 2 - Get New CVEs Templates"
},
"typeVersion": 1
},
{
"id": "d0dcba98-60e0-43a8-a3bc-9cff15a64125",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1312,
-176
],
"parameters": {
"color": 5,
"width": 896,
"height": 736,
"content": "## Step 3 - Create & Execute Templates"
},
"typeVersion": 1
},
{
"id": "8ca8d864-bde4-4c64-8e32-cfbf7f995a14",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-416,
-176
],
"parameters": {
"color": 3,
"width": 592,
"height": 736,
"content": "## Step 4 - Send Results via Gmail"
},
"typeVersion": 1
},
{
"id": "3dfceb2f-bd32-40b8-9521-1beba8d75a58",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3648,
-512
],
"parameters": {
"width": 624,
"height": 1104,
"content": "# SET UP\n\n### 1. Set Up SSH Enviroment\n#### VPS SSH\n##### 1. VPS Options (Linux):\n- [Hostinger](https://www.hostinger.com/vps-hosting)\n- [DigitalOcean](https://www.digitalocean.com/pricing)\n- [Hapi Host](https://www.hapihhost.in/vps-hosting/self-managed-vps-hosting/)\n- [WebDedis](https://webdedis.com/cheap-vps-hosting/)\n##### 2. Install Tools\n- [Nuclei](https://docs.projectdiscovery.io/opensource/nuclei/install)\n##### 3. Create new SSH Password (root user) in n8n:\n- With Password\n- With Private Key\n\n#### Local SSH\n##### 1. Configure OpenSSH Server\n- [Install OpenSSH](https://www.tecmint.com/install-openssh-server-in-linux/)\n- [Enable Root Login](https://linuxconfig.org/allow-ssh-root-login-on-ubuntu-20-04-focal-fossa-linux)\n##### 2. Install Tools\n- [Nuclei](https://docs.projectdiscovery.io/opensource/nuclei/install)\n##### 3. Create new SSH Password (root user) in n8n:\n- With Password\n- With Private Key\n\n### 2. Set Up OpenAI Connection\n#### Get Your API Key\n1. Visit the [OpenAI API Keys](https://platform.openai.com/api-keys) page.\n2. Go to [OpenAI Billing](https://platform.openai.com/settings/organization/billing/overview).\n3. Add funds to your billing account.\n4. Copy your API key into your **OpenAI credentials** in n8n (or your chosen platform).\n\n### 3. Set Up Gmail Connection\n#### Get Your Gmail Credentials\n1. Go to the [Google Cloud Console](https://console.cloud.google.com/).\n2. Create a new project or select an existing one.\n3. Navigate to **APIs & Services \u2192 Library** and enable the **Gmail API**.\n4. Go to **APIs & Services \u2192 Credentials** and click **Create Credentials \u2192 OAuth Client ID**.\n5. Configure the consent screen (set \u201cExternal\u201d if needed) and complete the required fields.\n6. Choose **Application type \u2192 Web application** (or the one matching your setup).\n7. Add your redirect URI (for n8n, use the one shown in your Gmail credentials node).\n8. Click **Create** and copy your **Client ID** and **Client Secret**.\n9. Paste both into your **Gmail credentials** in n8n (or your chosen platform).\n"
},
"typeVersion": 1
},
{
"id": "17a5ebd6-d0a3-4f3f-88ed-65e5841a7038",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1088,
-448
],
"parameters": {
"color": 7,
"width": 720,
"height": 192,
"content": "# \ud83d\udcec Need Help or Want to Customize This?\n## **Contact me for consulting and support:** [LinkedIn](https://www.linkedin.com/in/javier-rieiro-2900b5354/) / [Email](mailto:pyus3r@gmail.com)"
},
"typeVersion": 1
},
{
"id": "f9e0f384-8dcf-4225-ab88-677fe44f9cd1",
"name": "Sticky Note13",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2512,
-448
],
"parameters": {
"color": 7,
"width": 720,
"height": 192,
"content": "# Objective of the workflow\n\n#### This flow runs the new templates released by Project Discovery, using a scope that includes all domains from HackerOne, Bugcrowd, Intigriti, and YesWeHack."
},
"typeVersion": 1
},
{
"id": "23380fed-ecc8-407e-88ec-85b8ac6727e6",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1664,
-400
],
"parameters": {
"color": 4,
"width": 150,
"height": 80,
"content": "## INPUT"
},
"typeVersion": 1
},
{
"id": "ce26775a-83cf-49db-85c6-c6fbf163c320",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1520,
-400
],
"parameters": {
"color": 5,
"width": 150,
"height": 80,
"content": "## CORE"
},
"typeVersion": 1
},
{
"id": "363a6f51-ba61-437c-a3de-5fbee5df0f96",
"name": "Sticky Note12",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1376,
-400
],
"parameters": {
"color": 3,
"width": 150,
"height": 80,
"content": "## OUTPUT"
},
"typeVersion": 1
}
],
"connections": {
"Split CVEs": {
"main": [
[
{
"node": "Loop Over CVEs",
"type": "main",
"index": 0
}
]
]
},
"Date Filter": {
"main": [
[
{
"node": "Set Variables",
"type": "main",
"index": 0
}
],
[
{
"node": "Set Null Variable",
"type": "main",
"index": 0
}
]
]
},
"Remove Items": {
"main": [
[
{
"node": "Execute Nuclei",
"type": "main",
"index": 0
}
]
]
},
"Check Results": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"Set Variables": {
"main": [
[
{
"node": "Loop Over CVEs",
"type": "main",
"index": 0
}
]
]
},
"Execute Nuclei": {
"main": [
[
{
"node": "Remove Templates",
"type": "main",
"index": 0
}
]
]
},
"Loop Over CVEs": {
"main": [
[
{
"node": "Template Exists Filter",
"type": "main",
"index": 0
}
],
[
{
"node": "Date Filter",
"type": "main",
"index": 0
}
]
]
},
"Create Template": {
"main": [
[
{
"node": "Upload Template",
"type": "main",
"index": 0
}
]
]
},
"Upload Template": {
"main": [
[
{
"node": "Convert Template to .yaml",
"type": "main",
"index": 0
}
]
]
},
"Remove Templates": {
"main": [
[
{
"node": "Set Results Variable",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get All Bug Bounty Domains",
"type": "main",
"index": 0
}
]
]
},
"Set Null Variable": {
"main": [
[
{
"node": "Loop Over CVEs",
"type": "main",
"index": 0
}
]
]
},
"Create domains.txt": {
"main": [
[
{
"node": "Upload domains.txt",
"type": "main",
"index": 0
}
]
]
},
"Upload domains.txt": {
"main": [
[
{
"node": "GET Last CVEs (PROJECT DISCOVERY)",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Templates": {
"main": [
[
{
"node": "Remove Items",
"type": "main",
"index": 0
}
],
[
{
"node": "Create Template",
"type": "main",
"index": 0
}
]
]
},
"Set Results Variable": {
"main": [
[
{
"node": "Check Results",
"type": "main",
"index": 0
}
]
]
},
"Template Exists Filter": {
"main": [
[
{
"node": "Loop Over Templates",
"type": "main",
"index": 0
}
]
]
},
"Convert Template to .yaml": {
"main": [
[
{
"node": "Loop Over Templates",
"type": "main",
"index": 0
}
]
]
},
"Get All Bug Bounty Domains": {
"main": [
[
{
"node": "Create domains.txt",
"type": "main",
"index": 0
}
]
]
},
"GET Last CVEs (PROJECT DISCOVERY)": {
"main": [
[
{
"node": "Split CVEs",
"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.
gmailOAuth2sshPassword
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automates daily CVE-driven scanning against bug bounty scopes. It fetches bug-bounty domains, pulls newly published Project Discovery templates, converts them to Nuclei rules, runs targeted scans, and emails findings.
Source: https://n8n.io/workflows/10054/ — 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.
YOUR_ID 4. Uses gmail, googleDrive, googleSheets, httpRequest. Scheduled trigger; 53 nodes.
Development teams using Claude Code who want a chat-ops interface for project management. Instead of SSH-ing into a server to run Claude, your whole team interacts with it through a Matrix chat room —
Instead of providing a routine check, it focuses on significant movements by: Sending a Slack alert only if a query crosses a defined movement threshold. Emailing a structured report with the Top 25 i
Looking for a way to track GitHub bounty issues automatically and get notified in real time? This GitHub Bounty Tracker workflow monitors repositories for issues labeled 💎 Bounty, logs them in Google
This workflow automatically sends a beautifully designed HTML newsletter every Sunday at 8 AM, featuring products currently on sale from your Algolia-powered e-commerce store.