Slack forms: send responses to a channel
Post every submission to a Slack channel, with each answer labelled by the question that was asked.
Slack delivery needs Basic or Advanced
Before you start
You need permission to install an app in the workspace. If you cannot reach Install to Workspace, an admin has to do this part.
Does this use a Slack incoming webhook?
No. This integration posts with a bot token through Slack’s chat.postMessage method, not through an incoming-webhook URL. The practical difference: an incoming webhook is bound to one channel forever, so changing where submissions land means generating a new URL, while a bot token can post to any channel it has been added to — you change the channel ID and nothing else. The cost of that flexibility is the invite step below, which an incoming webhook does not have.
If you specifically want an incoming-webhook-style URL, the webhook destination sends the raw submission to any endpoint you choose, and Discord works exactly that way.
How do I create the Slack app and bot token?
- Go to api.slack.com/apps and choose Create New App → From scratch.
- Name it, pick the workspace, and create it.
- Open OAuth & Permissions. Under Bot Token Scopes, add
chat:write. - Optionally also add
chat:write.public. This lets the bot post to any public channel without being invited — see step 4. - Click Install to Workspace and approve.
- Copy the Bot User OAuth Token. It starts with
xoxb-.
Use the bot token, not the user token (xoxp-).
How do I find my Slack channel ID?
A Slack channel ID is an 11-character code beginning with C — C06T3AM7Z7B, for example — and it is what this integration needs, not the #channel-name. The name can be changed by anyone with permission; the ID never changes, which is why the Slack API addresses channels by it.
- In Slack, right-click the channel → View channel details. Scroll to the bottom; the ID is there with a copy button.
- Or open the channel in a browser: the ID is the last part of the URL.
Adding the destination to your form
- Open your form, then the gear icon in the header.
- Go to Storage & Results and choose 💬 Slack.
- Paste the
xoxb-token and the channel ID, then Save Settings.
Why does Slack accept the message but post nothing?
This is the step almost everyone misses, and skipping it fails silently. A valid token with chat:write still cannot post to a channel the bot has not joined. Slack accepts the request, answers 200 OK, and posts nothing.
In the channel you configured, send:
/invite @your-app-nameAdding the chat:write.public scope in step 1 avoids this for public channels. Private channels always require the invite.
Coming from Google Forms?
Google Forms has no built-in Slack destination. The usual routes are a Workspace add-on, a Zapier or Make automation, or an Apps Script trigger you maintain — each one an extra account between the response and the channel, and in the automation case an extra subscription metered by task. Here the token and channel ID are fields in the form’s own settings, and the delivery is made by the same server that stored the response.
Two things Google Forms still does better: it is free without a form or response limit, and it writes straight into Sheets. This free plan holds 10 forms at 100 responses each, and Slack delivery itself needs a paid plan. See the full comparison.
What the message looks like
One message per submission: a green attachment titled New Form Submission, with the form ID, the time, and one row per answer.
Rows are titled with the question, not the storage key — so you see How many? rather than component-1787692637208. Fields you have not named fall back to their ID; give them readable ones with the gear on each field, as described in the webhook documentation.
Why is my Slack bot not posting?
Slack reports these with 200 OK and { "ok": false }, which is why a broken setup looks like silence rather than an error.
| Error | Fix |
|---|---|
not_in_channel | The bot is not a member. Invite it with /invite @your-app, or add chat:write.public. |
channel_not_found | Wrong ID, or the app is not installed in that workspace. Check you copied the ID and not the channel name. |
invalid_auth, not_authed, token_revoked | The token was rejected. Re-copy it from OAuth & Permissions — reinstalling issues a new one. |
missing_scope | chat:write is not on the token. Add it and reinstall the app. |
is_archived | The channel is archived. Un-archive it or pick another. |
Still nothing? Add a webhook pointing at webhook.site on the same form. If the webhook fires and Slack does not, the problem is in the Slack configuration rather than in your form.
What happens when a delivery fails?
- Slack is given 5 seconds, like every destination.
- There are no retries — a message that fails is not sent again. Responses are always stored in Seagit regardless.
- A Slack failure never fails the submission, and never affects your other destinations.
Common questions
- Why does Slack accept the message but post nothing?
- Because the bot is not in the channel. Slack answers 200 OK and silently discards it. Send /invite @your-app in that channel, or add the chat:write.public scope to post to public channels without joining.
- Can I run a survey and see the results in Slack?
- Yes — build the survey as a normal web form and add the Slack destination. Each response is posted into the channel as it arrives, with every answer titled by the question that was asked, so the team sees results live without opening a dashboard. Respondents need no Slack account and no membership of your workspace; anyone with the form link can answer.
- Which token do I need?
- The Bot User OAuth Token, which starts with xoxb-, with the chat:write scope. A user token starting with xoxp- will not work.
- Where do I find the channel ID?
- Right-click the channel in Slack and choose View channel details; the ID is at the bottom with a copy button. It looks like C06T3AM7Z7B — the ID, not the channel name.
- Will the message show my questions or the field IDs?
- The questions. Each answer is titled with its label, falling back to the field ID only when a field has no label.
- Can I send to Slack and a webhook at once?
- Yes. Destinations are independent, delivered in parallel, and one failing does not affect the other.