Capture Slack Ideas in Google Sheets
Automate your idea management by capturing Slack slash commands (e.g., /idea) and logging them directly into a Google Sheet. Streamline feedback collection for your team.
Overview
Automates logging ideas from a Slack slash command directly into a Google Sheets spreadsheet for easy tracking and management.
🧠 Description & Use Case
This workflow creates a seamless bridge between your team's conversations in Slack and your tracking system in Google Sheets. It allows any team member to submit an idea using a simple /idea slash command, which is then automatically captured and organized in a designated spreadsheet. This eliminates manual data entry and ensures no great idea gets lost in the chat.
After an idea is submitted, the workflow sends a private confirmation message back to the user in Slack, thanking them and providing a direct link to the Google Sheet to add more details.
🔄 How It Works:
- Trigger with a Slack Command: The workflow is initiated when a user in your Slack workspace types
/ideafollowed by their idea text (e.g.,/idea Create a new marketing campaign for Q4). - Webhook Catches the Data: A
Webhooknode listens for the POST request sent by the Slack slash command, capturing the idea text, username, and a unique response URL. - Configure Spreadsheet: A
Setnode is used to define the URL of your Google Sheets document, making it easy to update the destination sheet without reconfiguring the entire workflow. - Route the Command: A
Switchnode checks the command received from Slack. The template is pre-configured for/ideabut can be easily extended to handle other commands like/bugor/feedbackby adding more rules. - Log to Google Sheets: The
Add to Google Sheetsnode takes the idea text and the creator's username from the webhook data and appends them as a new row in your sheet under the columnsNameandCreator. - Send a Confirmation Message: Finally, an
HTTP Requestnode sends a POST request to theresponse_urlprovided by Slack. This delivers a private (ephemeral) message back to the user who submitted the idea, confirming its submission and providing a link to the spreadsheet for further details.
✅ Real-World Use Cases:
- Product Teams: Collect feature requests and product ideas directly from internal team discussions without interrupting the flow of conversation.
- Hackathons & Brainstorming: Quickly log ideas during a high-energy brainstorming session, ensuring every concept is captured for later review.
- Bug Reporting: Extend the workflow by adding a
/bugcommand in theSwitchnode to log issues into a dedicated sheet for the engineering team. - General Feedback: Use a
/feedbackcommand to capture general employee or customer feedback in a centralized, easy-to-manage location. - Content Calendar: Allow your marketing team to submit content ideas (e.g.,
/blogidea [title]) directly from Slack to a shared content calendar in Google Sheets.
Instructions
Basic steps
- Download workflow JSON
- Import into n8n
- Configure node parameters as needed
- Test and enable the workflow
💡 Tips
After importing, verify all connectors and credentials match your environment.
Preview
Workflow Visualization
Nodes
Webhook
webhook
Sticky Note
stickyNote
Sticky Note1
stickyNote
Set me up
set
Sticky Note2
stickyNote
Switch
switch
Add to Google Sheets
googleSheets
Hidden message to Slack to add feature details
httpRequest
Statistics
View full JSON structure
{
"nodes": [
{
"id": "ec952e64-698b-4e3a-a82d-4474a3bf8b6b",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
900,
460
],
"webhookId": "0f85cfa2-29d7-48c8-bea1-298a61a07b77",
"parameters": {
"path": "slack-trigger",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1
},
{
"id": "c6bc7004-9bec-48a3-99f2-e0d89e32730c",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
380,
240
],
"parameters": {
"color": 7,
"width": 446,
"height": 321,
"content": "## Needed pre-work: Add a Slack App\n1. Visit https://api.slack.com/apps, click on `New App` and choose a name and workspace.\n2. Click on `OAuth & Permissions` and scroll down to Scopes -> Bot token Scopes\n3. Add the `chat:write` scope\n4. Head over to `Slash Commands` and click on `Create New Command`\n5. Use `/idea` as the command\n6. Copy the test URL from the **Webhook** node into `Request URL`\n7. Add whatever feels best to the description and usage hint\n8. Go to `Install app` and click install"
},
"typeVersion": 1
},
{
"id": "e8850a88-b91a-4496-b8d2-a391f17e67ad",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1100,
198.4883720930233
],
"parameters": {
"color": 5,
"width": 331,
"height": 404.3683406098835,
"content": "## Setup\n1. Create a Google Sheets document with the columns `Name` and `Creator`\n2. Add your Google Sheets credentials \n3. Fill the setup node below\n4. Create your Slack app (*see other sticky*)\n5. Click `Test` workflow and use the `/idea` comment in Slack\n6. Activate the workflow and exchange the Request URL with the production URL from the webhook"
},
"typeVersion": 1
},
{
"id": "f1814a18-9301-4e86-9023-e16c5704db65",
"name": "Set me up",
"type": "n8n-nodes-base.set",
"position": [
1220,
460
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9bcc3fa7-a09e-48f0-b4ff-2c78264dec2d",
"name": "Google Sheets URL",
"type": "string",
"value": "https://docs.google.com/spreadsheets/d/17mugx8JYjbxaTMK9aqDkJywbc0NlNmStGYq-M5fKmG8/edit#gid=0"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "4824c23f-6477-4ee7-a6a0-2b83eaf61430",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1460,
380
],
"parameters": {
"color": 7,
"height": 224.4819228439648,
"content": "You can easily support more commands, like `/bug` or `/pain` here"
},
"typeVersion": 1
},
{
"id": "f8966efa-0576-48b9-89fe-bf49f10d703b",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
1520,
460
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "New idea",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Webhook').item.json.body.command }}",
"rightValue": "/idea"
}
]
},
"renameOutput": true
},
{
"outputKey": "Add more here",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "25221a2c-18e9-47f6-a112-0edc85b63cda",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Webhook').item.json.body.command }}",
"rightValue": "/some-other-command"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3
},
{
"id": "1caf810e-8b40-4430-8840-8e17a176b67a",
"name": "Add to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1780,
360
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $('Webhook').item.json.body.text }}",
"Creator": "={{ $('Webhook').item.json.body.user_name }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Creator",
"type": "string",
"display": true,
"required": false,
"displayName": "Creator",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Name"
]
},
"options": {
"cellFormat": "USER_ENTERED"
},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/17mugx8JYjbxaTMK9aqDkJywbc0NlNmStGYq-M5fKmG8/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $json['Google Sheets URL'] }}"
}
},
"typeVersion": 4.3
},
{
"id": "51f80b29-4b8c-4e2a-9da9-a7409763af0c",
"name": "Hidden message to Slack to add feature details",
"type": "n8n-nodes-base.httpRequest",
"position": [
2000,
360
],
"parameters": {
"url": "={{ $('Webhook').item.json.body.response_url }}",
"method": "POST",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "text",
"value": "=Thanks for adding the idea `{{ $('Webhook').item.json[\"body\"][\"text\"] }}` <@{{$('Webhook').item.json[\"body\"][\"user_id\"]}}> :rocket: Please make sure to add some details and a hypothesis to it to make it easier for us to work with it.\n\n:point_right: <{{ $('Set me up').item.json[\"Google Sheets URL\"] }}|Add your details here>"
}
]
}
},
"typeVersion": 3
}
],
"connections": {
"Switch": {
"main": [
[
{
"node": "Add to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Set me up",
"type": "main",
"index": 0
}
]
]
},
"Set me up": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Add to Google Sheets": {
"main": [
[
{
"node": "Hidden message to Slack to add feature details",
"type": "main",
"index": 0
}
]
]
}
}
}Actions
Technical Specs
Compatibility
License
This workflow template follows MIT license, you can freely use, modify and distribute.
Please comply with relevant third-party service terms when using.