This workflow follows the Gmail → Google Drive 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 →
{
"name": "YOUR_ID 4",
"nodes": [
{
"parameters": {
"operation": "getAll",
"limit": 10,
"filters": {
"q": "has:attachment newer_than:1d"
}
},
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.1,
"position": [
-1344,
-288
],
"id": "YOUR_ID",
"name": "Gmail \u2014 Get many messages",
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "get",
"messageId": "={{$json.id}}",
"simple": false,
"options": {
"downloadAttachments": true
}
},
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.1,
"position": [
-1120,
-288
],
"id": "YOUR_ID",
"name": "Gmail \u2014 (Get Message + Download Attachments)",
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"inputDataFieldName": "={{ Object.keys($binary)[0] }}",
"name": "={{ $binary[Object.keys($binary)[0]].fileName }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"mode": "id"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
-336,
-384
],
"id": "YOUR_ID",
"name": "Google Drive \u2014 Upload file to RAW folder",
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "YOUR_ID",
"leftValue": "={{ Object.keys($binary ?? {}).length }}",
"rightValue": 0,
"operator": {
"type": "number",
"operation": "gt"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
-624,
-288
],
"id": "YOUR_ID",
"name": "IF Node \u2014 Condition: Item has $binary"
},
{
"parameters": {
"fieldToSplitOut": "$binary",
"include": "allOtherFields",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
-864,
-288
],
"id": "YOUR_ID",
"name": "Split Out \u2014 (1 attachment = 1 item)"
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "list",
"cachedResultName": "AI_Factory_Control",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "YOUR_SHEET_ID",
"mode": "list",
"cachedResultName": "DATA_CATALOG",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"source": "gmail",
"status": "raw",
"added_at": "={{$now}}",
"filename": "={{ $json[\"originalFilename\"] }}",
"mime": "={{ $json[\"mimeType\"] }}",
"raw_path": "={{ $node[\"Google Drive \u2014 Upload file to RAW folder\"].json[\"webViewLink\"] }}",
"size": "={{ (Number($json[\"size\"]) / 1024).toFixed(2) }} KB",
"email_id": "={{ $node[\"Split Out \u2014 (1 attachment = 1 item)\"].json[\"messageId\"] }}",
"id": "={{ $json[\"id\"] }}"
},
"matchingColumns": [
"id"
],
"schema": [
{
"id": "id",
"displayName": "id",
"required": false,
"defaultMatch": true,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "source",
"displayName": "source",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "email_id",
"displayName": "email_id",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "filename",
"displayName": "filename",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "mime",
"displayName": "mime",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "size",
"displayName": "size",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "raw_path",
"displayName": "raw_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "clean_path",
"displayName": "clean_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "gold_path",
"displayName": "gold_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "status",
"displayName": "status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "added_at",
"displayName": "added_at",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
-112,
-384
],
"id": "YOUR_ID",
"name": "Google Sheets \u2014 Append (DATA_CATALOG)",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "list",
"cachedResultName": "AI_Factory_Control",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "YOUR_SHEET_ID",
"mode": "list",
"cachedResultName": "EVENT_LOG",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit#gid=2072862873"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"ts": "={{ $now }}",
"agent": "ingest",
"action": "save_to_raw_folder",
"notes": "Attachment saved to RAW folder",
"input": "={{ $node[\"Split Out \u2014 (1 attachment = 1 item)\"].json[\"messageId\"] }}",
"output": "={{ $node[\"Google Drive \u2014 Upload file to RAW folder\"].json[\"webViewLink\"] }}",
"status": "={{ $node[\"Google Sheets \u2014 Append (DATA_CATALOG)\"].json ? \"success\" : \"error\" }}"
},
"matchingColumns": [],
"schema": [
{
"id": "ts",
"displayName": "ts",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "agent",
"displayName": "agent",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "action",
"displayName": "action",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "output",
"displayName": "output",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "status",
"displayName": "status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "notes",
"displayName": "notes",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
112,
-384
],
"id": "YOUR_ID",
"name": "Google Sheets \u2014 Append (EVENT_LOG)",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "download",
"fileId": {
"__rl": true,
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"mode": "id"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
1120,
-208
],
"id": "YOUR_ID",
"name": "Google Drive \u2014 Download RAW file",
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "list",
"cachedResultName": "AI_Factory_Control",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "YOUR_SHEET_ID",
"mode": "list",
"cachedResultName": "EVENT_LOG",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit#gid=2072862873"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"ts": "={{ $now }}",
"agent": "clean",
"action": "unsupported_file",
"notes": "Unsupported MIME type detected",
"status": "error",
"output": "unsupported",
"input": "={{ $json[\"id\"] || $json[\"name\"] }}"
},
"matchingColumns": [],
"schema": [
{
"id": "ts",
"displayName": "ts",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "agent",
"displayName": "agent",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "action",
"displayName": "action",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "input",
"displayName": "input",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "output",
"displayName": "output",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "status",
"displayName": "status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "notes",
"displayName": "notes",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
1584,
-96
],
"id": "YOUR_ID",
"name": "Google Sheets \u2014 Append (EVENT_LOG) - unsupported_file",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "application/vnd.YOUR_ID.spreadsheetml.sheet",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
},
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "application/vnd.ms-excel",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
},
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "text/csv",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
},
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "application/pdf",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
},
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "text/plain",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
},
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "application/json",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "or"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
1344,
-208
],
"id": "YOUR_ID",
"name": "IF Node \u2014 Check MIME TYPE"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "application/vnd.YOUR_ID.spreadsheetml.sheet",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "YOUR_ID"
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "application/vnd.ms-excel",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "text/csv",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "application/json",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "application/pdf",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "YOUR_ID",
"leftValue": "={{ $binary.data.mimeType }}",
"rightValue": "text/plain",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
}
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.3,
"position": [
1808,
-288
],
"id": "YOUR_ID",
"name": "Switch \u2014 Route MIME TYPE"
},
{
"parameters": {
"operation": "xlsx",
"options": {}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1,
"position": [
2160,
-960
],
"id": "YOUR_ID",
"name": "Extract from XLSX File"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
2496,
-960
],
"id": "YOUR_ID",
"name": "Convert to CSV from XLSX"
},
{
"parameters": {
"operation": "xls",
"options": {}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1,
"position": [
2176,
-768
],
"id": "YOUR_ID",
"name": "Extract from XLS File"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
2480,
-768
],
"id": "YOUR_ID",
"name": "Convert to CSV from XLS"
},
{
"parameters": {
"operation": "toJson",
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
2160,
-576
],
"id": "YOUR_ID",
"name": "Spreadsheet File \u2014 Convert to JSON"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
2640,
-576
],
"id": "YOUR_ID",
"name": "Spreadsheet File \u2014 Convert to CSV"
},
{
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// ===== Smart Normalization (optimized) =====\n\n// Column name mapping rules\nconst columnMap = {\n \"full name\": \"name\",\n \"email address\": \"email\",\n \"phone no\": \"phone\",\n \"amount ($)\": \"amount\",\n};\n\n// Default schema template\nconst defaultSchema = {\n name: null,\n email: null,\n phone: null,\n amount: null,\n source_file: $json.filename || null,\n processed_at: new Date().toISOString(),\n};\n\nlet normalized = {};\n\n// Normalize each key/value\nfor (let [key, value] of Object.entries($json)) {\n\n // Key normalization: trim \u2192 lowercase \u2192 strip symbols \u2192 replace spaces with _\n let cleanKey = key.trim().toLowerCase()\n .replace(/[^a-z0-9 ]/g, \"\")\n .replace(/\\s+/g, \"_\");\n\n // Apply mapping\n cleanKey = columnMap[cleanKey] || cleanKey;\n\n // Value normalization\n value = (value === \"\" || value === undefined || value === null)\n ? null\n : String(value).trim();\n\n normalized[cleanKey] = value;\n}\n\n// Merge with schema defaults\nreturn { ...defaultSchema, ...normalized };\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2400,
-576
],
"id": "YOUR_ID",
"name": "Function Node \u2014 Smart Normalization"
},
{
"parameters": {
"jsCode": "const items = $input.all();\n\nfor (const item of items) {\n let text = item.binary.data.toString('utf8');\n\n text = text.replace(/\\r\\n|\\r/g, \"\\n\");\n text = text.replace(/[ \\t]+/g, \" \");\n text = text.replace(/\\n{3,}/g, \"\\n\\n\");\n text = text.replace(/[\u201c\u201d]/g, '\"').replace(/[\u2018\u2019]/g, \"'\");\n text = text.replace(/[^\\x09\\x0A\\x0D\\x20-\\x7E]/g, \"\");\n text = text.split(\"\\n\").map(line => line.trim()).join(\"\\n\");\n\n item.json = { content: text }; // <-- FIXED field name\n}\n\nreturn items;\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2208,
208
],
"id": "YOUR_ID",
"name": "Function Node \u2014 Smart TXT Normalization"
},
{
"parameters": {
"operation": "toText",
"sourceProperty": "content",
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
2560,
208
],
"id": "YOUR_ID",
"name": "Convert to Text File"
},
{
"parameters": {
"url": "YOUR_VERCEL_OCR_API_ENDPOINT",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={ \"fileURL\": \"https://drive.google.com/uc?export=download&id={{$json[\"id\"]}}\" }",
"options": {
"response": {}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
2176,
-16
],
"id": "YOUR_ID",
"name": "HTTP Request \u2014 Call Vercel OCR endpoint) (/api/ocr-summarize)"
},
{
"parameters": {
"jsCode": "// Smart TXT Normalization for OCR Extracted Text (Personal AI Factory v1)\n\nconst raw = $json.text || \"\";\n\n// Normalize, clean and format text\nconst normalized = raw\n .replace(/\\r\\n/g, \"\\n\") // Convert CRLF to LF\n .replace(/[ \\t]+/g, \" \") // Normalize extra spaces\n .replace(/\\n{3,}/g, \"\\n\\n\") // Reduce >2 blank lines to max 1\n .replace(/[^\\S\\r\\n]+/g, \" \") // Trim odd spacing without removing line breaks\n .replace(/\\u00A0/g, \" \") // Replace non-breaking spaces\n .trim();\n\n// Optional: remove repeating headers/footer patterns if needed\n// Example cleanup for page artifacts:\nconst finalText = normalized\n .replace(/Page \\d+ of \\d+/gi, \"\")\n .replace(/Confidential/gi, \"\")\n .trim();\n\nreturn [\n {\n json: {\n text: finalText\n }\n }\n];\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2432,
-16
],
"id": "YOUR_ID",
"name": "Function \u2014 Smart TXT Normalization from Extracted text"
},
{
"parameters": {
"operation": "toText",
"sourceProperty": "text",
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
2672,
-16
],
"id": "YOUR_ID",
"name": "Convert to Text File (.txt)"
},
{
"parameters": {
"name": "={{ $node[\"Switch \u2014 Route MIME TYPE\"].binary.data.fileName.replace(\".xlsx\", \".csv\") }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"mode": "id"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
2928,
-960
],
"id": "YOUR_ID",
"name": "Google Drive \u2014 Upload file (to CLEAN folder) from XLSX to CSV",
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"name": "={{ $node[\"Switch \u2014 Route MIME TYPE\"].binary.data.fileName.replace(\".xls\", \".csv\") }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"mode": "id"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
2928,
-768
],
"id": "YOUR_ID",
"name": "Google Drive \u2014 Upload file (to CLEAN folder) from XLS to CSV",
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"name": "={{ $node[\"Switch \u2014 Route MIME TYPE\"].binary.data.fileName}}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"mode": "id"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
2928,
-208
],
"id": "YOUR_ID",
"name": "Google Drive \u2014 Upload JSON file (to CLEAN folder)",
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"name": "={{ $node[\"Switch \u2014 Route MIME TYPE\"].binary.data.fileName}}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"mode": "id"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
2928,
-576
],
"id": "YOUR_ID",
"name": "Google Drive \u2014 Upload normalized CSV file (to CLEAN folder)",
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"name": "={{ $node[\"Switch \u2014 Route MIME TYPE\"].binary.data.fileName.replace(\".pdf\", \".txt\") }}",
"driveId": {
"__rl": true,
"value": "My Drive",
"mode": "list",
"cachedResultName": "My Drive",
"cachedResultUrl": "https://drive.google.com/drive/my-drive"
},
"folderId": {
"__rl": true,
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"mode": "id"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
2928,
-16
],
"id": "YOUR_ID",
"name": "Google Drive \u2014 Upload file (to CLEAN folder) from PDF to TXT",
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"name": "={{ $node[\"Switch \u2014 Route MIME TYPE\"].binary.data.fileName }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
"mode": "id"
},
"options": {}
},
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 3,
"position": [
2928,
208
],
"id": "YOUR_ID",
"name": "Google Drive \u2014 Upload normalized TXT file (to CLEAN folder)",
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "list",
"cachedResultName": "AI_Factory_Control",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "YOUR_SHEET_ID",
"mode": "list",
"cachedResultName": "DATA_CATALOG",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"status": "clean_success",
"added_at": "={{$now}}",
"source": "=gdrive",
"email_id": "={{ $json[\"owners\"][0][\"emailAddress\"] }}",
"id": "={{$json.id}}",
"clean_path": "={{$node[\"Google Drive \u2014 Upload file (to CLEAN folder) from XLSX to CSV\"].json[\"webViewLink\"]}}",
"mime": "={{ $json[\"mimeType\"] }}",
"filename": "={{$json[\"name\"]}}",
"size": "={{ (Number($json[\"size\"]) / 1024).toFixed(2) }} KB"
},
"matchingColumns": [
"id"
],
"schema": [
{
"id": "id",
"displayName": "id",
"required": false,
"defaultMatch": true,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "source",
"displayName": "source",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "email_id",
"displayName": "email_id",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "filename",
"displayName": "filename",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "mime",
"displayName": "mime",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "size",
"displayName": "size",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "raw_path",
"displayName": "raw_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "clean_path",
"displayName": "clean_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "gold_path",
"displayName": "gold_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "status",
"displayName": "status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "added_at",
"displayName": "added_at",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
3184,
-960
],
"id": "YOUR_ID",
"name": "Google Sheets \u2014 Append DATA_CATALOG for XLSX (clean_success)",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "list",
"cachedResultName": "AI_Factory_Control",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "YOUR_SHEET_ID",
"mode": "list",
"cachedResultName": "DATA_CATALOG",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"status": "clean_success",
"added_at": "={{$now}}",
"source": "gdrive",
"email_id": "={{ $json[\"owners\"][0][\"emailAddress\"] }}",
"id": "={{$json[\"id\"]}}",
"clean_path": "={{$node[\"Google Drive \u2014 Upload file (to CLEAN folder) from XLS to CSV\"].json[\"webViewLink\"]}}",
"mime": "={{ $json[\"mimeType\"] }}",
"filename": "={{$json[\"name\"]}}",
"size": "={{ (Number($json[\"size\"]) / 1024).toFixed(2) }} KB"
},
"matchingColumns": [
"id"
],
"schema": [
{
"id": "id",
"displayName": "id",
"required": false,
"defaultMatch": true,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "source",
"displayName": "source",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "email_id",
"displayName": "email_id",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "filename",
"displayName": "filename",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "mime",
"displayName": "mime",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "size",
"displayName": "size",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "raw_path",
"displayName": "raw_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "clean_path",
"displayName": "clean_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "gold_path",
"displayName": "gold_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "status",
"displayName": "status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "added_at",
"displayName": "added_at",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
3184,
-768
],
"id": "YOUR_ID",
"name": "Google Sheets \u2014 Append DATA_CATALOG for XLS (clean_success)",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "list",
"cachedResultName": "AI_Factory_Control",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "YOUR_SHEET_ID",
"mode": "list",
"cachedResultName": "DATA_CATALOG",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"status": "clean_success",
"added_at": "={{$now}}",
"source": "gdrive",
"email_id": "={{ $json[\"owners\"][0][\"emailAddress\"] }}",
"id": "={{$json[\"id\"]}}",
"clean_path": "={{$node[\"Google Drive \u2014 Upload normalized CSV file (to CLEAN folder)\"].json[\"webViewLink\"]}}",
"mime": "={{ $json[\"mimeType\"] }}",
"filename": "={{$json[\"name\"]}}",
"size": "={{ (Number($json[\"size\"]) / 1024).toFixed(2) }} KB"
},
"matchingColumns": [
"id"
],
"schema": [
{
"id": "id",
"displayName": "id",
"required": false,
"defaultMatch": true,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "source",
"displayName": "source",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "email_id",
"displayName": "email_id",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "filename",
"displayName": "filename",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "mime",
"displayName": "mime",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "size",
"displayName": "size",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "raw_path",
"displayName": "raw_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "clean_path",
"displayName": "clean_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "gold_path",
"displayName": "gold_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "status",
"displayName": "status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "added_at",
"displayName": "added_at",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
3184,
-576
],
"id": "YOUR_ID",
"name": "Google Sheets \u2014 Append DATA_CATALOG for CSV (clean_success)",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "list",
"cachedResultName": "AI_Factory_Control",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "YOUR_SHEET_ID",
"mode": "list",
"cachedResultName": "DATA_CATALOG",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"status": "clean_success",
"added_at": "={{$now}}",
"source": "gdrive",
"email_id": "={{ $json[\"owners\"][0][\"emailAddress\"] }}",
"id": "={{$json[\"id\"]}}",
"clean_path": "={{$node[\"Google Drive \u2014 Upload JSON file (to CLEAN folder)\"].json[\"webViewLink\"]}}",
"mime": "={{ $json[\"mimeType\"] }}",
"filename": "={{$json[\"name\"]}}",
"size": "={{ (Number($json[\"size\"]) / 1024).toFixed(2) }} KB"
},
"matchingColumns": [
"id"
],
"schema": [
{
"id": "id",
"displayName": "id",
"required": false,
"defaultMatch": true,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "source",
"displayName": "source",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "email_id",
"displayName": "email_id",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "filename",
"displayName": "filename",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "mime",
"displayName": "mime",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "size",
"displayName": "size",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "raw_path",
"displayName": "raw_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "clean_path",
"displayName": "clean_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "gold_path",
"displayName": "gold_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "status",
"displayName": "status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "added_at",
"displayName": "added_at",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
3184,
-208
],
"id": "YOUR_ID",
"name": "Google Sheets \u2014 Append DATA_CATALOG for JSON (clean_success)",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "list",
"cachedResultName": "AI_Factory_Control",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "YOUR_SHEET_ID",
"mode": "list",
"cachedResultName": "DATA_CATALOG",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"status": "clean_success",
"added_at": "={{$now}}",
"source": "gdrive",
"id": "={{$json[\"id\"]}}",
"email_id": "={{ $json[\"owners\"][0][\"emailAddress\"] }}",
"filename": "={{$json[\"name\"]}}",
"mime": "={{ $json[\"mimeType\"] }}",
"size": "={{ (Number($json[\"size\"]) / 1024).toFixed(2) }} KB",
"clean_path": "={{$node[\"Google Drive \u2014 Upload file (to CLEAN folder) from PDF to TXT\"].json[\"webViewLink\"]}}"
},
"matchingColumns": [
"id"
],
"schema": [
{
"id": "id",
"displayName": "id",
"required": false,
"defaultMatch": true,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "source",
"displayName": "source",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "email_id",
"displayName": "email_id",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "filename",
"displayName": "filename",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "mime",
"displayName": "mime",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "size",
"displayName": "size",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "raw_path",
"displayName": "raw_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "clean_path",
"displayName": "clean_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "gold_path",
"displayName": "gold_path",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "status",
"displayName": "status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "added_at",
"displayName": "added_at",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7,
"position": [
3184,
-16
],
"id": "YOUR_ID",
"name": "Google Sheets \u2014 Append DATA_CATALOG for PDF (clean_success)",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "list",
"cachedResultName": "AI_Factory_Control",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "YOUR_SHEET_ID",
"mode": "list",
"cachedResultName": "DATA_CATALOG",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1G4x50V3uHSy-jCFt_pf-ZDpvlJN9HPX018-ju8PHdNY/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"status": "clean_success",
"added_at": "={{$now}}",
"source": "gdrive",
"email_id": "={{ $json[\"owners\"][0][\"emailAddress\"] }}",
"id": "={{$json[\"id\"]}}",
"clean_path": "={{$node[\"Google Drive \u2014 Upload normalized TXT file (to CLEAN folder)\"].json[\"webViewLink\"]}}",
"mime": "={{ $json[\"mimeType\"] }}",
"filename": "={{$json[\"name\"]}}",
"size": "={{ (Number($json[\"size\"]) / 1024).toFixed(2) }} KB"
},
"matchingColumns": [
"id"
],
"schema": [
{
"id": "id",
"displayName": "id",
"required": false,
"defaultMatch": true,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "source",
"displayName": "source",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "email_id",
"displayName": "email_id",
"require
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.
gmailOAuth2googleDriveOAuth2ApigoogleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
Automatically capture and organise email attachments from your inbox, saving hours of manual filing and ensuring important documents are always accessible for your team. Ideal for professionals handling frequent emails with files, such as project managers or sales teams, this workflow fetches messages via Gmail, downloads attachments, and stores them securely in Google Drive before logging details in Google Sheets for easy tracking. The key step involves intelligently splitting multiple attachments into separate items, allowing precise uploads and cataloguing without missing a single file.
Use this workflow when you receive regular emails with attachments needing centralised storage and audit trails, like client reports or invoices, especially on a scheduled basis to keep your systems updated. Avoid it for low-volume inboxes or when real-time processing is essential, as the cron trigger runs at set intervals. Common variations include filtering for specific senders in the Gmail node or adding notifications via email after uploads.
About this workflow
YOUR_ID 4. Uses gmail, googleDrive, googleSheets, httpRequest. Scheduled trigger; 53 nodes.
Source: https://github.com/anshwysmcbel2710/anis-personal-ai-factory-controller/blob/main/workflows/scheduled/ANIS_DAILY_CRON.json — 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.
This n8n template demonstrates how to build a Auto Lead Gen & Outreach System for Local Businesses specifically designed to help businesses that don’t have a website yet.
This workflow automatically monitors the SEO health of websites stored in a Google Sheet. It fetches each website’s HTML, analyzes key SEO metrics (title, meta description, H1 count, canonical, robots
Schedule Removeduplicates. Uses scheduleTrigger, crypto, gmail, markdown. Scheduled trigger; 14 nodes.
Great to keep an eye on and track publicly available documents such as company TOS, government policy or competitor pages. A scheduled trigger is used so we can run everyday to automate this process.
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