Automatische Bereinigung inaktiver Deals von GoHighLevel zu Slack und Sheets
Dies ist ein CRM-Bereich Automatisierungsworkflow mit 15 Nodes. Hauptsächlich werden Code, Slack, Filter, HighLevel, GoogleSheets und andere Nodes verwendet. Automatisches Aufräumen inaktiver Transaktionen in GoHighLevel an Slack und Sheets
- •Slack Bot Token oder Webhook URL
- •Google Sheets API-Anmeldedaten
Verwendete Nodes (15)
Kategorie
{
"id": "FpblHtpWHqFmqzwu",
"meta": {
"instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
"templateCredsSetupCompleted": true
},
"name": "Automate Inactive Deal Cleanup from GoHighLevel to Slack and Sheets",
"tags": [],
"nodes": [
{
"id": "a30f842e-09db-4524-bb2a-f6fb696cd818",
"name": "Workflow-Beschreibung",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1408,
-96
],
"parameters": {
"color": 4,
"width": 386,
"height": 400,
"content": "## 🎯 Workflow Overview\n\nThis workflow automatically identifies and archives inactive deals in HighLevel CRM pipelines.\n\n**What it does:**\n- Runs daily to check all opportunities\n- Filters deals with no activity for 10+ days\n- Archives inactive deals automatically\n- Logs all actions to Google Sheets\n- Sends summary report to Slack\n\n**Business Value:**\n- Keeps pipelines clean and focused\n- Prevents lost opportunities from cluttering views\n- Maintains audit trail in Google Sheets\n- Team visibility via Slack notifications"
},
"typeVersion": 1
},
{
"id": "0558197c-899a-470f-93b0-131da334b0f7",
"name": "Zeitplan-Einrichtung",
"type": "n8n-nodes-base.stickyNote",
"position": [
-992,
-400
],
"parameters": {
"width": 282,
"height": 311,
"content": "## ⏰ Schedule Configuration\n\n**Current:** Runs daily at 9 AM\n\n**To modify:**\n1. Click this node\n2. Adjust cron expression\n3. Common patterns:\n - Every 6 hours: `0 */6 * * *`\n - Twice daily: `0 9,17 * * *`\n - Weekdays only: `0 9 * * 1-5`"
},
"typeVersion": 1
},
{
"id": "86b8ca02-40c9-4f1d-8192-8c076eb62bc6",
"name": "Täglich um 9 Uhr",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-800,
-64
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "860e1aca-04f7-4001-a58b-d2fa695da3e1",
"name": "HighLevel-Konfiguration",
"type": "n8n-nodes-base.stickyNote",
"position": [
-688,
112
],
"parameters": {
"width": 264,
"height": 274,
"content": "## 📊 HighLevel Setup\n\n**Required:**\n- OAuth2 credentials configured\n- Location ID in credential settings\n\n**This fetches:**\n- All opportunities from your account\n- Includes contact data\n- No pagination limit issues"
},
"typeVersion": 1
},
{
"id": "9d54a579-e7b9-4d02-a1cd-58f76ebf4c73",
"name": "Alle Opportunities abrufen",
"type": "n8n-nodes-base.highLevel",
"position": [
-576,
-64
],
"parameters": {
"filters": {},
"resource": "opportunity",
"operation": "getAll",
"requestOptions": {}
},
"credentials": {
"highLevelOAuth2Api": {
"id": "5QWHSi134dLIBEsC",
"name": "HighLevel account"
}
},
"typeVersion": 2
},
{
"id": "6f31695d-a18d-46c1-aa00-3ce68013db10",
"name": "Filterlogik",
"type": "n8n-nodes-base.stickyNote",
"position": [
-496,
-384
],
"parameters": {
"width": 262,
"height": 296,
"content": "## 🔍 Inactivity Filter\n\n**Logic:**\n- Calculates days since last activity\n- Uses `last_activity_at` or `updatedAt`\n- Threshold: **10 days**\n\n**To adjust threshold:**\nChange `10` in the rightValue field\n- 7 days = more aggressive\n- 14 days = more lenient"
},
"typeVersion": 1
},
{
"id": "09134267-b553-4979-9be3-d3e74e263b74",
"name": "Deals filtern (inaktiv 10+ Tage)",
"type": "n8n-nodes-base.filter",
"position": [
-352,
-64
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ Math.floor((new Date() - new Date($json.lastActionDate || $json.updatedAt)) / (1000 * 60 * 60 * 24)) }}",
"rightValue": 10
}
]
}
},
"typeVersion": 2
},
{
"id": "b9dd983f-bbba-4956-85fd-d3813997f27b",
"name": "Archiv-Konfiguration",
"type": "n8n-nodes-base.stickyNote",
"position": [
-192,
112
],
"parameters": {
"width": 254,
"height": 264,
"content": "## 📦 Archive Action\n\n**What happens:**\n- Updates opportunity status\n- Marks as archived/closed\n- Preserves all deal data\n\n**Note:** Configure the `status` field in updateFields to match your HighLevel setup (e.g., \"archived\", \"lost\", \"closed\")"
},
"typeVersion": 1
},
{
"id": "dc7991c7-79ad-48a3-b79d-d8359afa4d8c",
"name": "Inaktiven Deal archivieren",
"type": "n8n-nodes-base.highLevel",
"position": [
-128,
-64
],
"parameters": {
"resource": "opportunity",
"operation": "update",
"updateFields": {
"status": "archived"
},
"opportunityId": "={{ $json.id }}",
"requestOptions": {}
},
"credentials": {
"highLevelOAuth2Api": {
"id": "5QWHSi134dLIBEsC",
"name": "HighLevel account"
}
},
"typeVersion": 2
},
{
"id": "7f905180-3a1a-4b6f-b049-438b49d50929",
"name": "Verarbeitungslogik",
"type": "n8n-nodes-base.stickyNote",
"position": [
48,
-288
],
"parameters": {
"width": 256,
"height": 296,
"content": "## 🧮 Data Processing\n\n**Transforms deal data:**\n- Calculates days inactive\n- Extracts contact info\n- Formats for Google Sheets\n- Adds metadata fields\n\n**Output fields:**\nid, name, contactName, daysSinceActivity, monetaryValue, source, tags"
},
"typeVersion": 1
},
{
"id": "7fe4471f-287d-4319-8ab0-02f245d9c8f2",
"name": "Deal-Daten formatieren",
"type": "n8n-nodes-base.code",
"position": [
112,
32
],
"parameters": {
"jsCode": "// Process and format inactive deal data for logging\nconst formattedData = $input.all().map(item => {\n const opp = item.json;\n const lastActivity = new Date(opp.lastActionDate || opp.updatedAt);\n const daysSinceActivity = Math.floor((Date.now() - lastActivity) / (1000 * 60 * 60 * 24));\n \n return {\n json: {\n id: opp.id,\n name: opp.name,\n pipelineId: opp.pipelineId,\n pipelineStageId: opp.pipelineStageId,\n contactId: opp.contactId,\n contactName: opp.contact?.name || 'N/A',\n lastActionDate: opp.lastActionDate,\n updatedAt: opp.updatedAt,\n daysSinceActivity: daysSinceActivity,\n isInactive: daysSinceActivity > 10,\n monetaryValue: opp.monetaryValue || 0,\n source: opp.source || 'Unknown',\n tags: Array.isArray(opp.contact?.tags) ? opp.contact.tags.join(', ') : '',\n archivedAt: new Date().toISOString()\n }\n };\n});\n\nreturn formattedData;"
},
"typeVersion": 2
},
{
"id": "909dfef7-0703-4893-9465-e806445e492e",
"name": "Sheets-Konfiguration",
"type": "n8n-nodes-base.stickyNote",
"position": [
368,
224
],
"parameters": {
"width": 278,
"height": 346,
"content": "## 📋 Google Sheets Setup\n\n**Required:**\n1. Create Google Sheet\n2. Add sheet named \"Inactive Pipeliner\"\n3. Connect OAuth2 credential\n4. Replace documentId below\n\n**Columns auto-created:**\nid, name, contactName, daysSinceActivity, monetaryValue, source, tags, archivedAt"
},
"typeVersion": 1
},
{
"id": "046731cb-c515-4430-ba58-f75b46797401",
"name": "In Google Sheets protokollieren",
"type": "n8n-nodes-base.googleSheets",
"position": [
400,
64
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "name",
"type": "string",
"display": true,
"required": false,
"displayName": "name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "contactName",
"type": "string",
"display": true,
"required": false,
"displayName": "contactName",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "daysSinceActivity",
"type": "string",
"display": true,
"required": false,
"displayName": "daysSinceActivity",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "monetaryValue",
"type": "string",
"display": true,
"required": false,
"displayName": "monetaryValue",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "source",
"type": "string",
"display": true,
"required": false,
"displayName": "source",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tags",
"type": "string",
"display": true,
"required": false,
"displayName": "tags",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "archivedAt",
"type": "string",
"display": true,
"required": false,
"displayName": "archivedAt",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"id"
]
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "Inactive Pipeliner"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Description').item.json.sheetId }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "kpPEOLCGn963qpoh",
"name": "automations@techdome.ai"
}
},
"typeVersion": 4.7
},
{
"id": "3a9b90d5-901f-4dd8-a118-cf76b3da61f5",
"name": "Slack Einrichtung",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
-304
],
"parameters": {
"width": 246,
"height": 328,
"content": "## 💬 Slack Notification\n\n**Setup:**\n1. Connect Slack OAuth2\n2. Select your channel\n3. Remove hardcoded channel ID\n\n**Message includes:**\n- Total archived count\n- Sum of monetary values\n- List of deal names"
},
"typeVersion": 1
},
{
"id": "e1acc249-b80a-4d7d-aa63-b6265b641170",
"name": "Slack Bericht senden",
"type": "n8n-nodes-base.slack",
"position": [
432,
-128
],
"webhookId": "2ee869d2-6132-4bfe-8cd3-53415ad11fce",
"parameters": {
"text": "=:bookmark_tabs: *Inactive Pipeline Cleaner Report*\n\n*Date:* {{ $now.format('MMMM dd, yyyy') }}\n*Total Deals Archived:* {{ $json.count }}\n*Total Monetary Value:* ${{ $json.totalValue.toLocaleString() }}\n\n*Archived Deals:*\n{{ $json.dealsList.split(',').map((deal, idx) => `${idx + 1}. ${deal.trim()}`).join('\\n') }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Description').item.json.slackChannel }}"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "rNqvWj9TfChPVRYY",
"name": "Slack account vivek"
}
},
"typeVersion": 2.1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "5d204940-94de-4c34-8521-884e2f4345f8",
"connections": {
"86b8ca02-40c9-4f1d-8192-8c076eb62bc6": {
"main": [
[
{
"node": "9d54a579-e7b9-4d02-a1cd-58f76ebf4c73",
"type": "main",
"index": 0
}
]
]
},
"7fe4471f-287d-4319-8ab0-02f245d9c8f2": {
"main": [
[
{
"node": "046731cb-c515-4430-ba58-f75b46797401",
"type": "main",
"index": 0
},
{
"node": "e1acc249-b80a-4d7d-aa63-b6265b641170",
"type": "main",
"index": 0
}
]
]
},
"dc7991c7-79ad-48a3-b79d-d8359afa4d8c": {
"main": [
[
{
"node": "7fe4471f-287d-4319-8ab0-02f245d9c8f2",
"type": "main",
"index": 0
}
]
]
},
"9d54a579-e7b9-4d02-a1cd-58f76ebf4c73": {
"main": [
[
{
"node": "09134267-b553-4979-9be3-d3e74e263b74",
"type": "main",
"index": 0
}
]
]
},
"09134267-b553-4979-9be3-d3e74e263b74": {
"main": [
[
{
"node": "dc7991c7-79ad-48a3-b79d-d8359afa4d8c",
"type": "main",
"index": 0
}
]
]
}
}
}Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Fortgeschritten - Kundenbeziehungsmanagement
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
Rahul Joshi
@rahul08Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.
Diesen Workflow teilen