AutomationFlowsSlack & Telegram › Inventory + Waste Tracker — [client Name]

Inventory + Waste Tracker — [client Name]

Inventory + Waste Tracker — [Client Name]. Uses googleSheetsTrigger, slack, googleSheets. Event-driven trigger; 7 nodes.

Event trigger★★☆☆☆ complexity7 nodesGoogle Sheets TriggerSlackGoogle Sheets
Slack & Telegram Trigger: Event Nodes: 7 Complexity: ★★☆☆☆ Added:

This workflow follows the Google Sheets → Googlesheetstrigger 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 →

Download .json
{
  "name": "Inventory + Waste Tracker \u2014 [Client Name]",
  "nodes": [
    {
      "parameters": {
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "documentId": {
          "__rl": true,
          "value": "1ycIzHybAYHTSXukaohnXixtDVA3EjvULIKG0crUFeAs",
          "mode": "list",
          "cachedResultName": "Local-Biz-Inventory-Tracker-Template",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ycIzHybAYHTSXukaohnXixtDVA3EjvULIKG0crUFeAs/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 891874746,
          "mode": "list",
          "cachedResultName": "Inventory Log",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ycIzHybAYHTSXukaohnXixtDVA3EjvULIKG0crUFeAs/edit#gid=891874746"
        },
        "event": "rowAdded",
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ],
      "id": "2f3ca258-11d4-4ee4-af68-a837d88bcc07",
      "name": "Google Sheets Trigger",
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "c71ec8cc-2290-41ef-9161-2c544ffe17a3",
              "leftValue": "={{ $json[\"Below Par?\"] }}",
              "rightValue": "YES",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        240,
        -160
      ],
      "id": "277caccd-6384-4650-bdcb-0d19ed46aaa8",
      "name": "Below Par"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "5d5f4053-3941-441e-be39-f489b679b561",
              "leftValue": "={{ $json[\"Waste Cost ($)\"] }}",
              "rightValue": 20,
              "operator": {
                "type": "number",
                "operation": "gt"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        240,
        192
      ],
      "id": "c4893db2-13c1-4863-ab18-8c284994959d",
      "name": "Waste Threshold"
    },
    {
      "parameters": {
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "",
          "mode": "id"
        },
        "text": "=\ud83d\udd34 Low Stock Alert: {{ $json[\"Item\"] }} Remaining: {{ $json[\"Qty Remaining\"] }} | Par Level: {{ $json[\"Par Level\"] }} Reported by: {{ $json[\"Staff\"] }} at {{ $json[\"Timestamp\"] }}",
        "otherOptions": {}
      },
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.5,
      "position": [
        512,
        -272
      ],
      "id": "e1fb3f41-0883-4712-b6e9-ccb38c5c4929",
      "name": "Slack - Low Stock Alert",
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "1ycIzHybAYHTSXukaohnXixtDVA3EjvULIKG0crUFeAs",
          "mode": "list",
          "cachedResultName": "Local-Biz-Inventory-Tracker-Template",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ycIzHybAYHTSXukaohnXixtDVA3EjvULIKG0crUFeAs/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 891874746,
          "mode": "list",
          "cachedResultName": "Inventory Log",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ycIzHybAYHTSXukaohnXixtDVA3EjvULIKG0crUFeAs/edit#gid=891874746"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Alert Sent?": "=TRUE",
            "Timestamp": "={{ $('Google Sheets Trigger').item.json[\"Timestamp\"] }}"
          },
          "matchingColumns": [
            "Timestamp"
          ],
          "schema": [
            {
              "id": "Timestamp",
              "displayName": "Timestamp",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Item",
              "displayName": "Item",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Qty Remaining",
              "displayName": "Qty Remaining",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Qty Wasted",
              "displayName": "Qty Wasted",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Waste Reason",
              "displayName": "Waste Reason",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Staff",
              "displayName": "Staff",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Unit Cost ($)",
              "displayName": "Unit Cost ($)",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Waste Cost ($)",
              "displayName": "Waste Cost ($)",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Par Level",
              "displayName": "Par Level",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Below Par?",
              "displayName": "Below Par?",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Alert Sent?",
              "displayName": "Alert Sent?",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "displayName": "row_number",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "readOnly": true,
              "removed": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        704,
        -272
      ],
      "id": "74a788bb-2455-4896-a3f0-3a2b72de643d",
      "name": "Mark Alert Sent - Low Stock",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "select": "channel",
        "channelId": {
          "__rl": true,
          "value": "",
          "mode": "id"
        },
        "text": "=\ud83d\udcb8 Waste Alert: {{ $json[\"Item\"] }}\n   Wasted: {{ $json[\"Qty Wasted\"] }} units (${{ $json[\"Waste Cost ($)\"] }})\n   Reason: {{ $json[\"Waste Reason\"] }}\n   Reported by: {{ $json[\"Staff\"] }} at {{ $json[\"Timestamp\"] }}",
        "otherOptions": {}
      },
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.5,
      "position": [
        528,
        80
      ],
      "id": "c2ed1a0c-b621-4598-ae3f-6e10e080e32c",
      "name": "Slack - Waste Alert",
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "1ycIzHybAYHTSXukaohnXixtDVA3EjvULIKG0crUFeAs",
          "mode": "list",
          "cachedResultName": "Local-Biz-Inventory-Tracker-Template",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ycIzHybAYHTSXukaohnXixtDVA3EjvULIKG0crUFeAs/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 891874746,
          "mode": "list",
          "cachedResultName": "Inventory Log",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ycIzHybAYHTSXukaohnXixtDVA3EjvULIKG0crUFeAs/edit#gid=891874746"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Alert Sent?": "=TRUE",
            "Timestamp": "={{ $('Google Sheets Trigger').item.json[\"Timestamp\"] }}"
          },
          "matchingColumns": [
            "Timestamp"
          ],
          "schema": [
            {
              "id": "Timestamp",
              "displayName": "Timestamp",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Item",
              "displayName": "Item",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Qty Remaining",
              "displayName": "Qty Remaining",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Qty Wasted",
              "displayName": "Qty Wasted",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Waste Reason",
              "displayName": "Waste Reason",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Staff",
              "displayName": "Staff",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Unit Cost ($)",
              "displayName": "Unit Cost ($)",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Waste Cost ($)",
              "displayName": "Waste Cost ($)",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Par Level",
              "displayName": "Par Level",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Below Par?",
              "displayName": "Below Par?",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Alert Sent?",
              "displayName": "Alert Sent?",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "displayName": "row_number",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "readOnly": true,
              "removed": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        720,
        80
      ],
      "id": "ff1bed90-3ad6-47c7-ae0b-1f39cc9ab41e",
      "name": "Mark Alert Sent - Waste",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Google Sheets Trigger": {
      "main": [
        [
          {
            "node": "Below Par",
            "type": "main",
            "index": 0
          },
          {
            "node": "Waste Threshold",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Below Par": {
      "main": [
        [
          {
            "node": "Slack - Low Stock Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Waste Threshold": {
      "main": [
        [
          {
            "node": "Slack - Waste Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack - Low Stock Alert": {
      "main": [
        [
          {
            "node": "Mark Alert Sent - Low Stock",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack - Waste Alert": {
      "main": [
        [
          {
            "node": "Mark Alert Sent - Waste",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false
  },
  "versionId": "5ebf12b4-3aaa-486b-ba13-610795d65be7",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodeGroups": [],
  "id": "vK4C580UJ6EirpA5",
  "tags": []
}

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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Inventory + Waste Tracker — [Client Name]. Uses googleSheetsTrigger, slack, googleSheets. Event-driven trigger; 7 nodes.

Source: https://github.com/justinrhedgep-star/cafe-autopilot-n8n/blob/main/02-stock-level-watcher.json — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

Customer Feedback Handler. Uses googleSheetsTrigger, slack, googleSheets. Event-driven trigger; 4 nodes.

Google Sheets Trigger, Slack, Google Sheets
Slack & Telegram

This workflow is perfect for HR teams, recruiters, and hiring managers who want to streamline their hiring process by posting jobs to multiple boards from a single source of truth.

Google Sheets, N8N Nodes Browseract Workflows, Google Sheets Trigger +1
Slack & Telegram

Google Sheets CRM Enrichment. Uses googleSheetsTrigger, httpRequest, googleSheets, slack. Event-driven trigger; 15 nodes.

Google Sheets Trigger, HTTP Request, Google Sheets +2
Slack & Telegram

New Google Form response triggers the workflow Checks if employee was already onboarded (prevents duplicates) Adds user to department-specific Slack channel If in Software department, grants GitHub re

Google Sheets Trigger, Slack, HTTP Request +2
Slack & Telegram

Splitout Code. Uses googleSheetsTrigger, httpRequest, splitInBatches, googleSheets. Event-driven trigger; 35 nodes.

Google Sheets Trigger, HTTP Request, Google Sheets +2