This workflow corresponds to n8n.io template #4797 — we link there as the canonical source.
This workflow follows the Google Sheets → 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 →
{
"id": "YEh1XUHtAwWFvB7z",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Track CVE Details & History from NVD and Sync to Google Sheets",
"tags": [
{
"id": "XuoVybTXeUXuim6G",
"name": "\u2705 Live",
"createdAt": "2025-06-08T07:59:43.586Z",
"updatedAt": "2025-06-08T07:59:43.586Z"
},
{
"id": "MbPHhZHgb39Syuoa",
"name": "\ud83d\udd10 SecOps",
"createdAt": "2025-04-20T05:18:20.689Z",
"updatedAt": "2025-06-08T08:01:56.494Z"
}
],
"nodes": [
{
"id": "b8e39932-0733-465a-a784-469d36374754",
"name": "Webhook: Get CVE Details",
"type": "n8n-nodes-base.webhook",
"position": [
-260,
-160
],
"parameters": {
"path": "3a3e9d6c-fbbf-482c-a6e9-88cdd79d404a",
"options": {}
},
"typeVersion": 2
},
{
"id": "844af868-d326-4d73-85b8-00de22f2e5ca",
"name": "Fetch CVE from NVD API",
"type": "n8n-nodes-base.httpRequest",
"position": [
-40,
-160
],
"parameters": {
"url": "https://services.nvd.nist.gov/rest/json/cves/2.0",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "cveId",
"value": "={{ $json.query.cveId }}"
}
]
}
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
},
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "3ab38c76-33df-44a1-987b-0f668028c4f7",
"name": "Parse CVE JSON \u2192 Flat Format",
"type": "n8n-nodes-base.code",
"position": [
180,
-160
],
"parameters": {
"jsCode": "const results = [];\n\nfor (const item of items) {\n const vulnerabilities = item.json.vulnerabilities || [];\n\n for (const vuln of vulnerabilities) {\n const cve = vuln.cve || {};\n\n const cvss = cve.metrics?.cvssMetricV31?.[0];\n const cvssData = cvss?.cvssData || {};\n\n results.push({\n json: {\n CVE_ID: cve.id || '',\n Source_Identifier: cve.sourceIdentifier || '',\n Published: cve.published || '',\n Last_Modified: cve.lastModified || '',\n Vuln_Status: cve.vulnStatus || '',\n CVE_Tags: (cve.cveTags || []).join(';'),\n\n Description: (cve.descriptions || []).find(d => d.lang === 'en')?.value || '',\n\n CVSS_Version: cvssData.version || '',\n Vector_String: cvssData.vectorString || '',\n Base_Severity: cvssData.baseSeverity || '',\n Base_Score: cvssData.baseScore || '',\n Attack_Vector: cvssData.attackVector || '',\n Attack_Complexity: cvssData.attackComplexity || '',\n Privileges_Required: cvssData.privilegesRequired || '',\n User_Interaction: cvssData.userInteraction || '',\n Scope: cvssData.scope || '',\n Confidentiality_Impact: cvssData.confidentialityImpact || '',\n Integrity_Impact: cvssData.integrityImpact || '',\n Availability_Impact: cvssData.availabilityImpact || '',\n Exploitability_Score: cvss?.exploitabilityScore || '',\n Impact_Score: cvss?.impactScore || '',\n\n CWE_ID: cve.weaknesses?.[0]?.description?.[0]?.value || '',\n Reference_URL: cve.references?.[0]?.url || ''\n }\n });\n }\n}\n\nreturn results;"
},
"typeVersion": 2
},
{
"id": "f96c4bcb-b24e-4e19-9c59-6ed733d0f98b",
"name": "Log CVE Metadata to Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
400,
-160
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "CVE_ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "CVE_ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Raw_CVE_Data",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Raw_CVE_Data",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/abc1234567890/edit#gid=0",
"cachedResultName": "CVE Lookup"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "abc1234567890",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/abc1234567890/edit?usp=drivesdk",
"cachedResultName": "NVD Database"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "11bb7c7e-c7e8-4d1f-98c9-c36d59b9b928",
"name": "Webhook: Get CVE Change History",
"type": "n8n-nodes-base.webhook",
"position": [
-260,
260
],
"parameters": {
"path": "587c86f4-4a3a-4765-b486-4bed8a0ccad3",
"options": {}
},
"typeVersion": 2
},
{
"id": "ac9e845b-4905-43d1-971b-9c93c3ef8f9e",
"name": "Fetch CVE History from NVD API",
"type": "n8n-nodes-base.httpRequest",
"position": [
-40,
260
],
"parameters": {
"url": "https://services.nvd.nist.gov/rest/json/cvehistory/2.0",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "cveId",
"value": "={{ $json.query.cveId }}"
}
]
}
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
},
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "8a78a501-352d-4e4a-9ff1-3752e7723d65",
"name": "Parse CVE History JSON \u2192 Flat Format",
"type": "n8n-nodes-base.code",
"position": [
180,
260
],
"parameters": {
"jsCode": "const results = [];\n\nfor (const item of items) {\n const cveChanges = item.json.cveChanges || [];\n\n for (const changeEntry of cveChanges) {\n const change = changeEntry.change || {};\n\n const cveId = change.cveId || '';\n const changeId = change.cveChangeId || '';\n const event = change.eventName || '';\n const source = change.sourceIdentifier || '';\n const created = change.created || '';\n\n const details = change.details || [];\n\n // If there are details, extract each detail into its own row\n if (details.length > 0) {\n for (const detail of details) {\n results.push({\n json: {\n CVE_ID: cveId,\n Change_ID: changeId,\n Event: event,\n Source: source,\n Timestamp: created,\n Action: detail.action || '',\n Type: detail.type || '',\n Old_Value: detail.oldValue || '',\n New_Value: detail.newValue || ''\n }\n });\n }\n } else {\n // If no details present, still add the change entry\n results.push({\n json: {\n CVE_ID: cveId,\n Change_ID: changeId,\n Event: event,\n Source: source,\n Timestamp: created,\n Action: '',\n Type: '',\n Old_Value: '',\n New_Value: ''\n }\n });\n }\n }\n}\n\nreturn results;"
},
"typeVersion": 2
},
{
"id": "885c9eae-cab8-40ba-8eac-2e920370651f",
"name": "Log CVE History to Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
400,
260
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "CVE_ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "CVE_ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Change_ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Change_ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Event",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Event",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Source",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Source",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Timestamp",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Action",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Action",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Type",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Old_Value",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Old_Value",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "New_Value",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "New_Value",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 185619006,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/abc1234567890/edit#gid=185619006",
"cachedResultName": "CVE History"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "abc1234567890",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/abc1234567890/edit?usp=drivesdk",
"cachedResultName": "NVD Database"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "8d8f4db1-f5fd-499c-ace5-eec99ecb6b9e",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-380,
-340
],
"parameters": {
"width": 1000,
"height": 360,
"content": "## \ud83d\udd0d Lookup CVE vulnerability metadata from NVD and sync to Google Sheet"
},
"typeVersion": 1
},
{
"id": "854a2420-e22f-4630-8b97-bd1e8f484158",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-380,
100
],
"parameters": {
"color": 3,
"width": 1000,
"height": 360,
"content": "## \ud83d\udd53 Track change history for CVEs via NVD and log each update"
},
"typeVersion": 1
},
{
"id": "71f9bf5e-5ccd-4752-a583-6f751071b239",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1140,
-340
],
"parameters": {
"width": 740,
"height": 800,
"content": "# NVD (National Vulnerability Database)\n\n## Setup\n\n- Import this workflow into your n8n instance.\n\n- Set up the following credentials:\n\n-- Google Sheets OAuth2\n\n-- NVD API Key (via HTTP Header Auth)\n\n- The workflow logs data to a Google Sheet titled **NVD Database**, with Sheet 1 named **CVE Lookup** and Sheet 2 named **CVE History**.\n\n- Trigger each workflow using the respective webhook URL, appending ?cveId=CVE-XXXX-XXXX as a query parameter.\n\n## \ud83d\udd0d Sample Test URL\n\nYou can test this workflow with the following example:\n```\nGET https://your-domain.com/webhook/cve-history?cveId=CVE-2023-34362\n```\n"
},
"typeVersion": 1
},
{
"id": "16151bff-6c9d-441e-9ee5-5c73a2d3135a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-60,
-260
],
"parameters": {
"color": 7,
"width": 150,
"height": 80,
"content": "NVD API Key (via HTTP Header Auth) \u2b07\ufe0f"
},
"typeVersion": 1
},
{
"id": "05222357-d84d-4615-9bfd-635ddc7c68b7",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-60,
160
],
"parameters": {
"color": 7,
"width": 150,
"height": 80,
"content": "NVD API Key (via HTTP Header Auth) \u2b07\ufe0f"
},
"typeVersion": 1
}
],
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "8c8d7836-7657-435e-bd05-e2223ddc0c1e",
"connections": {
"Fetch CVE from NVD API": {
"main": [
[
{
"node": "Parse CVE JSON \u2192 Flat Format",
"type": "main",
"index": 0
}
]
]
},
"Webhook: Get CVE Details": {
"main": [
[
{
"node": "Fetch CVE from NVD API",
"type": "main",
"index": 0
}
]
]
},
"Fetch CVE History from NVD API": {
"main": [
[
{
"node": "Parse CVE History JSON \u2192 Flat Format",
"type": "main",
"index": 0
}
]
]
},
"Parse CVE JSON \u2192 Flat Format": {
"main": [
[
{
"node": "Log CVE Metadata to Sheet",
"type": "main",
"index": 0
}
]
]
},
"Webhook: Get CVE Change History": {
"main": [
[
{
"node": "Fetch CVE History from NVD API",
"type": "main",
"index": 0
}
]
]
},
"Parse CVE History JSON \u2192 Flat Format": {
"main": [
[
{
"node": "Log CVE History to Sheet",
"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.
googleSheetsOAuth2ApihttpBasicAuthhttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
NVD (National Vulnerability Database) data is essential for security analysts, vulnerability managers, and DevSecOps professionals who need to perform both CVE lookups and monitor historical change logs. This workflow helps streamline those efforts by providing structured…
Source: https://n8n.io/workflows/4797/ — 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.
BP_check. Uses googleSheets, @n-octo-n/n8n-nodes-json-database, httpRequest, itemLists. Webhook trigger; 99 nodes.
This workflow is designed for software teams, project managers, and developers who manage work across Azure DevOps and GitHub. It helps organizations that use Azure DevOps for work item tracking but r
Receive request via webhook with customer question Analyze sentiment and detect urgency using JavaScript Send urgent alerts to Slack for critical cases Search knowledge base and fetch conversation his
Dialpad to Syncro. Uses httpRequest, googleSheets, noOp. Webhook trigger; 22 nodes.
This comprehensive n8n workflow automates the entire travel business call management process, from initial customer inquiries to trip bookings and marketing outreach. The system handles incoming calls