← Docs

Discord forms: send responses to a channel

Post every response into a Discord channel as an embed, with each answer labelled by the question that was asked. Setup is one URL — no bot, no app to register and no OAuth to approve.

Discord delivery needs Basic or Advanced

The free plan does not deliver to Discord or Slack: submissions are still stored and still reach any webhook you configure, but the chat step is skipped. See plans.

What is a Discord webhook?

A Discord webhook is a per-channel URL that lets an outside service post messages into that channel without a bot account. The URL ends in an ID and a token — /api/webhooks/<id>/<token> — and the token IS the authentication: anything holding the whole URL can post to that channel, and nothing else. Discord documents the format under Webhook Resource. One channel can hold several webhooks, and deleting one immediately invalidates its URL, which is what makes rotation trivial: delete, create, paste the new URL.

Do I need a Discord form bot?

No — and the distinction is worth knowing before you choose one. A Discord form bot collects answers inside Discord: members run a slash command and fill in a modal, so only people in the server can respond. A webhook destination is the other direction — the form lives on the public web, anyone with the link can answer it without a Discord account, and the response is posted into your channel.

Pick a bot for member applications and in-server workflows. Pick this for anything the public fills in: a contact form, a bug report, a survey whose results your moderators should see as they arrive. The same submission can also go to Slack and to your own webhook at the same time. Setup here is one URL and no OAuth; a bot has to be created, authorised and given permissions in the server.

How do I create a Discord webhook?

  1. Open the server and choose Server Settings IntegrationsWebhooks.
  2. Press New Webhook. Give it a name and pick the channel the submissions should land in — the name and avatar you set here are what appears on each message.
  3. Press Copy Webhook URL. It looks like https://discord.com/api/webhooks/<id>/<token>.

That URL is a credential

The token at the end of it is the whole authentication. Anyone with the URL can post into that channel without being in the server, so do not paste it into a public repository or an issue tracker. If it escapes, delete the webhook in Discord — the URL dies with it — and paste the new one here.

Adding the destination to your form

In the form editor, open Settings Storage, choose Discord, and paste the URL. Press Send test message before you save: a test posts a real line into the channel, so a green result means the URL, the channel and the permissions are all genuinely working.

A submission arrives as an embed titled with the form name. Each answer is a field labelled with the question that was asked — not the internal field ID — so a message is readable by someone who has never seen the form.

What are Discord’s message limits?

Discord caps a message at 2,000 characters of plain content and an embed at 6,000 characters in total, made up of at most 25 fields whose values are 1,024 characters each and whose names are 256. Those are hard limits, published in Discord’s message documentation: a single breach rejects the whole message with a 400 rather than trimming it. Two of them are reached by ordinary forms, so both are handled before the message is sent:

  • An empty answer is not allowed. A field value must be at least one character, so one skipped optional question would otherwise lose the entire submission. A skipped answer is shown as a dash — you can see the question was asked and not answered.
  • An answer over 1024 characters is shortened and marked with an ellipsis, and only the first 25 answers are shown, with the remainder counted in the footer.

In every case the full response is stored and available in your dashboard and CSV export. The Discord message is there to tell you something arrived, not to be the copy of record.

Coming from Google Forms?

Google Forms has no built-in Discord destination. The usual routes are an Apps Script trigger you maintain yourself, a third-party add-on, or an automation service like Zapier — each of which is another account, and in the automation case another subscription, between the response and the channel. Here the webhook URL is a field in the form’s own settings, and the delivery is made by the same server that stored the response.

Two honest caveats before you move. Google Forms is free without limit; this free plan holds 10 forms at 100 responses each, and Discord delivery itself needs a paid plan. And Google Forms writes straight into Sheets, which is a genuinely good answer if a spreadsheet is where you want the data — a webhook and a CSV export are what you get here instead. See the full comparison for the rest.

Why is my Discord webhook not working?

Four causes account for nearly every failed delivery: the URL is not a webhook URL, the webhook was deleted, the token was truncated when it was copied, or the channel is being rate-limited. Discord returns a real HTTP status and error code for each — it does not accept and silently discard, the way Slack does — so the Send test message button can name the cause. Each delivery is given 5 seconds to complete before it is abandoned.

What you seeWhat to do
That is not a Discord webhook URLYou have pasted an invite link or a channel link. Use Copy Webhook URL in Server Settings → Integrations → Webhooks.
Unknown Webhook (404, code 10015)The webhook was deleted in Discord. Create a new one and paste the new URL.
Invalid token (code 50027)The URL was truncated when it was copied. Copy the whole thing again — the token is the last segment.
Rate limited (429)Discord is throttling this webhook and the message was not delivered. A channel taking a lot of submissions may need a webhook of its own.
Nothing at allCheck the form is on a paid plan — the chat step is skipped on free, while everything else about the submission carries on as normal.

Common questions

Can I run a survey in Discord with this?
Yes — build the survey as a normal web form and add the Discord destination. Every response is posted into the channel as an embed the moment it arrives, so moderators see results live without opening a dashboard, and the full set stays available as a CSV export. Anyone with the link can answer; they do not need a Discord account or to be a member of your server.
Do I need to create a Discord bot?
No. A channel webhook is enough, and it is the whole setup: Server Settings → Integrations → Webhooks → New Webhook → Copy Webhook URL. There is no app to register, no OAuth screen and no scopes to choose. This is why Discord is the quickest destination here to get working.
Who can create the webhook?
Anyone with Manage Webhooks on the server. If Integrations is missing from Server Settings, you do not have that permission and a server admin has to create it for you — they only need to send you the resulting URL.
Is the webhook URL a secret?
Yes. The last part of the URL is a token, and anyone holding the whole URL can post into that channel — no account and no membership required. Treat it like a password. If it leaks, delete the webhook in Discord and create a new one; the old URL stops working immediately.
What happens to a very long answer?
It is shortened to Discord’s 1024-character limit per field and marked with an ellipsis, rather than the whole message being rejected. The complete answer is always in your dashboard and CSV export — the Discord message is a notification, not the record.
What if my form has more than 25 questions?
Discord allows 25 fields in an embed, so the first 25 answers are shown and the footer says how many more there are. Nothing is lost: every answer is stored and exportable as usual.
Can I send to Discord and a webhook at once?
Yes. Destinations are independent and delivered in parallel, and one failing never affects another or the submission itself.

Keep reading