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 →
{
"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.
googleSheetsOAuth2ApigoogleSheetsTriggerOAuth2ApislackApi
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Customer Feedback Handler. Uses googleSheetsTrigger, slack, googleSheets. Event-driven trigger; 4 nodes.
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 CRM Enrichment. Uses googleSheetsTrigger, httpRequest, googleSheets, slack. Event-driven trigger; 15 nodes.
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
Splitout Code. Uses googleSheetsTrigger, httpRequest, splitInBatches, googleSheets. Event-driven trigger; 35 nodes.