Google Chat webhook: post form responses to a space
Post every response into a Google Chat space as a card, each answer beside the question that was asked. Setup is one URL from the space itself — no app to publish and no OAuth to approve.
Google Chat delivery needs a paid plan
Create the webhook
- Open the space in Google Chat.
- Click the space name at the top → Apps & integrations.
- Choose Webhooks → Add webhook, name it, and save.
- Copy the URL. It looks like
https://chat.googleapis.com/v1/spaces/<space>/messages?key=…&token=….
Copy everything after the question mark
Both the key and the token are credentials, and both live in the query string. A URL cut at the first & looks complete and fails as a 401 — which reads as a revoked webhook and sends people to delete a webhook that was fine.
Anyone holding the whole URL can post into that space. Treat it like a password; delete the webhook to revoke it.
Why is there no Webhooks option in my space?
Because your Google Workspace administrator has restricted them, and a restriction looks like nothing at all: the menu item is simply absent, with no message explaining why. It is the single most common reason this setup stalls, and no amount of checking the URL will reveal it.
An administrator can allow webhooks in the Admin console:
Apps → Google Workspace → Google Chat → Chat apps.
Two related limits worth knowing before you go looking: a webhook belongs to a space, so there is none for a direct message — create a space even if it holds two people — and a personal Google account cannot create one at all, because Chat webhooks are a Workspace feature.
Adding the destination to your form
- Open your form, then Settings → Storage.
- Choose Google Chat.
- Paste the webhook URL.
- Press Send test message. A real message is sent to the space, and anything that goes wrong is reported in words.
- Save.
Every submission then arrives as a card: the form’s name as the header, then one row per question with the question as a small label above the answer. The first 25 answers are shown, with a line counting any beyond that — the complete response is always in your dashboard and CSV export.
Why is my Google Chat webhook not working?
| Symptom | What to do |
|---|---|
| No Webhooks option in the space | Admin policy. Ask an administrator to allow them under Apps → Google Workspace → Google Chat → Chat apps. |
403 mentioning a restriction | The same policy, reported by the API. Same fix. |
401 or 403 with a valid-looking URL | The URL was copied short. Re-copy it whole, including key and token. |
404 | The space or the webhook was deleted. Add a new webhook and paste the new URL. |
429 | Rate-limited, and that message was not delivered. The response is still stored. |
| Nothing appears, but no error | Check you are looking at the same space the webhook belongs to — a webhook posts only into the space it was created in. |
Coming from Google Forms?
Google Forms and Google Chat are both Google products and still do not talk to each other: the usual route is an Apps Script that polls the responses sheet and posts to the webhook, which is code you own and maintain forever.
Here it is one field in the form’s settings, delivered as each response arrives rather than on a trigger you schedule. Most fields map across one for one — see the full comparison for what does not.
Common questions
- How do I create a webhook in Google Chat?
- Open the space, click its name at the top, then Apps & integrations → Webhooks → Add webhook. Give it a name, optionally an avatar URL, and copy the URL it gives you. It looks like https://chat.googleapis.com/v1/spaces/<space>/messages?key=…&token=… — copy the whole thing, including both values after the question mark.
- Why is there no Webhooks option in my space?
- Because a Google Workspace administrator has restricted webhooks for your domain. It is a policy rather than an error, which is why nothing explains it: the menu item is simply absent. An admin can allow them in the Admin console under Apps → Google Workspace → Google Chat → Chat apps. Webhooks are also unavailable in a direct message — they belong to a space, so create a space even if it is only you and one other person.
- Is the webhook URL a secret?
- Yes. The key and token in the query string are both credentials, and anyone holding the whole URL can post into that space without an account. Treat it like a password. If it leaks, delete the webhook in the space and add a new one; the old URL stops working immediately.
- Why does it fail with 401 when the URL looks right?
- Almost always a URL copied short. Both the key and the token live in the query string, so a URL cut at the first & still looks complete and still fails — as a 401, which reads like a revoked webhook rather than a truncated paste. Seagit Forms checks the shape before sending anything and says so.
- What does the message look like?
- A card headed with the form’s name, then one row per question: the question as a small label above the answer. The notification line carries the form name too, because a card-only message shows a blank preview in the space list. Unanswered optional questions appear as — rather than being dropped, since a skipped question is a fact worth seeing.
- Can several forms post into the same space?
- Yes, and they can share one webhook. Each card is headed with the form’s name, so a shared space stays readable. You can also add a webhook per form if you would rather see them named separately in the space’s settings.
- Do file uploads arrive in Google Chat?
- No. A file lives inside a Seagit response as a base64 data URI and a card cannot carry one, so the answer is named rather than attached. The file stays on the response in your dashboard and in the CSV export. File fields also need a paid plan.
- Is Google Chat delivery on the free plan?
- No. Google Chat, Teams, Slack, Discord, Airtable, Notion and Google Sheets are all on the paid plans — Basic at $20 a month and above. Webhooks and Telegram are free, and a webhook can reach Google Chat through your own code if you would rather not pay for the built-in one.