Portfolio Supported AIs Solutions Tasks Email Archive Bring Your Own Code Integrations Pricing

Get Started

ChatGPT

ChatGPT

Start directly →

Ready
Claude

Claude

Directory Connector →

Ready
Mistral

Mistral

Directory Connector →

Ready

Dashboard Always available
← All articles

send form submissions to slack

How to Send Form Submissions to Slack, Step by Step

Send website form submissions to Slack with an incoming webhook: setup steps, a test command, message design, rate limits and fixes for common failures.

The most reliable way to send form submissions to Slack is an incoming webhook. You create a webhook URL for one channel in Slack, then make your form post a small JSON message to that URL each time someone submits. No polling and no inbox are involved. The message lands in the channel within moments.

This guide covers the full setup, how to test it before real leads arrive, how to shape the message so your team can act on it, and what breaks in practice. It also covers two special cases: Google Forms and Slack’s own built-in forms.

TL;DR

  • An incoming webhook gives you a unique URL for one channel. Your form posts JSON to it, and Slack shows the message.
  • Test the webhook with a single command before you connect any form. Then submit the real form once.
  • Use a dedicated channel such as #leads, and keep discussion in threads.
  • Treat the webhook URL like a password. Slack limits posting to about one message per second per channel.
  • Google Forms has no direct Slack connection, and Slack’s built-in forms are for internal use, not public website forms.

Table of Contents

How a form submission reaches Slack

There are three moving parts.

  1. The form. A visitor fills it in on your website or app.
  2. The sender. Something takes those fields and turns them into an HTTP request. That can be your site’s backend, a form service, or an automation tool.
  3. The webhook. Slack’s endpoint receives the request and posts it in a channel.

Per Slack’s documentation, an incoming webhook is a way to post messages from apps into Slack. Creating one gives you a unique URL, and you send a JSON payload with the message text and a few options to that URL. You can read the details in Slack’s guide to sending messages with incoming webhooks.

The webhook route has a practical advantage. Most form handling tools can already post to a URL, so you rarely need to install anything on the Slack side beyond the small app that holds the webhook.

Step 1: Create the incoming webhook in Slack

Do this once per channel you want to feed.

  1. Decide the destination channel first. Create it if needed, for example #leads for sales enquiries or #support for help requests.
  2. Open the Slack API site and create an app for your workspace. Choose to build it from scratch and name it something your team will recognize, like Website Forms.
  3. In the app settings, switch on Incoming Webhooks.
  4. Click the button to add a new webhook to your workspace, pick the channel, and approve.
  5. Copy the webhook URL. It looks like a long address that starts with https://hooks.slack.com/services/.

Slack ties each webhook to one channel. If you want leads in #leads and support requests in #support, create two webhooks. That is a feature: each form routes to the right team without any logic on your side.

Keep the URL secret

Treat the webhook URL as a password. If it leaks, anyone can post into your channel as your app. Slack notes this on its incoming webhooks page and says it monitors for leaked webhooks and revokes them automatically. So do not paste the URL into public code, a public repository, or front-end JavaScript that visitors can read.

That last point matters for website forms. If your page’s own browser code posts straight to Slack, the URL is visible to anyone who opens the developer tools. Send the submission to a backend or a form handler first, and let that server call Slack.

Step 2: Test the webhook before you connect a form

A two-minute test saves an hour of guessing later. From a terminal, run:

curl -X POST -H 'Content-type: application/json' --data '{"text":"Test: webhook is working"}' YOUR_WEBHOOK_URL

Replace YOUR_WEBHOOK_URL with the URL you copied. Slack should answer ok, and the message should appear in the channel.

If nothing shows up, check these in order:

  • The URL was copied whole, with no trailing characters.
  • The request is a POST with a JSON body, and the header says JSON.
  • The app is still installed in the workspace and the webhook was not revoked.
  • You are looking at the channel you picked, not a similar one.

Once the plain test works, any later failure is in the form or the sender, not in Slack.

Step 3: Connect your form to the webhook

How you do this depends on how your form is built. The principle is the same in every case: on each submission, the sender makes one POST to the webhook with a JSON body.

If your form posts to your own backend

Add a few lines to the handler that runs after validation. Build a text string from the fields, post it to the webhook, and then return your normal thank-you response. Do not make the visitor wait on Slack. If the Slack call fails, log the error and still save the submission, so you never lose a lead because of a chat outage.

Form submission saved before Slack notification

If you use a form service or automation tool

Look for an option called webhook, HTTP request, or custom URL. Paste the Slack webhook URL, set the method to POST, and map the form fields into the message text. Many tools also offer a ready-made Slack connection that does the same thing behind a button. Either path ends in the same kind of message.

If you build with WebsitePublisher

WebsitePublisher is the AI web platform: your AI assistant, whether ChatGPT, Claude, Gemini or another, builds and publishes websites and apps through the WebsitePublisher connector. Every change is live immediately, so there is no separate deploy step between editing a form and testing it.

For forms that need to notify another system, our website webhook setup guide explains how one event can trigger a delivery to a URL. If you want to see which fields a lead form should collect in the first place, the lead capture form examples with field templates are a good starting point. And if you also want a spreadsheet record of every submission, see how to test website forms before adding scripts.

Step 4: Shape a message your team can act on

A raw dump of every field is hard to scan at 9 a.m. with forty other messages around it. Plan the message the way you would plan a good email subject line.

Put the most important facts first:

  • Who: name and email, or company name.
  • What: the type of request or the page the form sat on.
  • The ask: the visitor’s message, trimmed if it is long.
  • Where to act: a link to the record, a CRM entry, or your dashboard.

A simple payload looks like this:

{"text": "New lead: Dana Ortiz (dana@example.com)
Topic: Pricing question
Message: Do you offer onboarding calls?
Open record: https://example.com/admin/leads/1042"}

Slack also supports richer layouts with blocks, which let you add headings, fields in columns and buttons. They are optional. Plain text with a link is easier to maintain and renders the same on every device.

Slack does not take file uploads through a webhook. If your form accepts uploads, include the file name in the message and a secure link where your team can download it from your own dashboard. Slack’s incoming webhooks guide describes what a webhook can post, and files are not part of it.

Keep long answers in check

Long survey responses can be cut off or rejected, depending on the tool that sends them. Send a short summary and a link to the full record instead of pasting twenty answers into one message. Then test with a deliberately long submission to see what your setup does.

What we think about form alerts

We build websites and apps through AI assistants, and forms are among the first things people add. The pattern we recommend is simple: the form’s job is to capture data reliably, and the alert’s job is to get a human to look at it quickly. Those are two separate jobs, and mixing them is where setups go wrong.

So store the submission first, then notify. If a submission lives in your data and a Slack message points to it, a failed alert is an annoyance. If the Slack message is the only copy, a failed alert is a lost lead.

We also lean toward fewer, cleaner alerts. One message per submission, with a link, beats a stream of field-by-field notifications. And because every change on WebsitePublisher is live immediately, you can adjust a form, submit a test entry, and see the Slack message in the same minute. Test early and test often.

Set up the channel so alerts get answered

The webhook is the easy part. The habits around it decide whether anyone responds.

  • Use a dedicated channel. Slack’s own guidance on sending and reading messages explains threads, which keep a side conversation attached to the message it is about. A channel like #leads or #support keeps automated posts away from general chat.
  • Reply in the thread. When someone picks up a lead, they reply under the alert. The channel stays a clean list, and the history of who did what sits with the lead.
  • Name an owner. Agree on who watches the channel and when. An alert nobody owns is just noise.
  • Mark the status. Many teams add an emoji reaction, such as eyes for looking and a check mark for done. It costs nothing and prevents two people answering the same lead.

Limits and failure modes to know about

Rate limits

Slack limits posting through webhooks to about one message per second per channel. Short bursts above that are allowed, but per the rate limits documentation there is no guarantee those messages will be stored or displayed if the burst is too large. For a contact form that is rarely a problem. For a launch day with a viral landing page, it can be. In that case, batch submissions into a digest, or store everything first and post a summary.

No edits or deletes

A webhook posts messages into one channel and nothing more. You cannot edit or delete them afterward through the webhook. If you need to update a message, for example to mark a lead as handled, you need a full Slack app: it posts the message with chat.postMessage, as the incoming webhooks page points out, and can then change it with chat.update.

Messages that do not appear

If the webhook returns ok but your team says they saw nothing, the problem is usually notifications, not delivery. Slack’s troubleshooting guide for notifications lists the usual suspects: Do Not Disturb, focus settings on the operating system, and notification permissions turned off for the app. Slack also bundles email notifications for mentions and direct messages, so an email alert may come later than the message itself. For urgent leads, tell the team to rely on the Slack app’s push notifications for that one channel.

A quick troubleshooting table

Symptom Likely cause Fix
Test command works, form does not Sender is not posting JSON, or not posting at all Check the sender’s request log and body format
Nothing in the channel, no error Webhook revoked or app removed Create a new webhook and update the URL
Message arrives but nobody notices Notification settings Set channel alerts to all messages for the owners
Some submissions missing Burst of traffic or a failed call Store submissions first and retry failed posts
Webhook URL found in public code Posting from the browser Move the call to a backend and replace the URL

Special case: Google Forms

Google Forms has no direct Slack connection. Google’s own page on viewing and managing form responses covers email notifications and linking responses to a spreadsheet, but not posting to chat. To get answers into Slack you need a bridge: a script attached to the form that posts to your webhook, or an automation tool that watches the linked sheet for new rows and posts each one.

If you are choosing a form for a business website, a form that can post to a URL on its own removes that extra layer. It is one fewer thing to break.

Special case: Slack’s built-in forms

Slack can collect information with forms inside the workspace. Slack’s help article on collecting information with a simple form shows how to build one for ideas, feedback or requests, and how to add the responses to a Google Sheet. It works well for internal requests, such as IT help or time off.

It is not built for public website visitors, who do not have access to your workspace. For public forms, use the webhook method above.

There is also a middle path. Slack documents sending data to a webhook that starts a workflow in Workflow Builder. Slack notes that this technique needs a paid Slack plan. It suits teams that want a workflow to do more with each submission after it arrives.

Special case: Slack's built-in forms — overview diagram

Build the form and the alert in one place

If you are starting from scratch, you can describe the site or app you want to your AI assistant and have it built and live through WebsitePublisher. The platform has 100+ integrations for things like email, payments and lead capture, and a visual editor in the browser for content and design changes later. You are not locked into one AI session, so you can pick up the project with another assistant.

See the AI website platform page for how it works, or check the plans on the pricing page, which includes a free plan to start with.

Pre-launch checklist

Run through this before you send real traffic to the form.

  1. The webhook test command posts to the right channel.
  2. The webhook URL is stored on the server side only.
  3. The form saves each submission before it calls Slack.
  4. A failed Slack call is logged and does not break the thank-you page.
  5. The message leads with name, topic and a link to the record.
  6. A long, messy submission was tested and handled sensibly.
  7. Uploaded files appear as links, not attachments.
  8. Someone owns the channel, and replies happen in threads.
  9. Notification settings for the channel are set for the people on duty.
  10. You know how to revoke and replace the webhook if the URL ever leaks.

FAQ

Do I need a paid Slack plan to send form submissions to a channel?

Not for a basic incoming webhook that posts a message to a channel. Workflow Builder webhook triggers are different: Slack’s documentation says that technique needs a paid plan. Check your workspace’s current plan features before you design around it.

Can I send form submissions to a private channel?

Yes, when you create the webhook you choose the channel it posts to. For a private channel, the person who installs the webhook must be a member of that channel to pick it. If the post fails, check that the app still has access to that channel.

How do I stop the channel from getting noisy?

Use one dedicated channel per type of form, keep discussion in threads, and send one concise message per submission with a link to the full record. If volume grows, post a daily digest instead of one message per entry.

What happens if someone gets my webhook URL?

They can post messages into your channel as your app. Slack says it monitors for leaked webhooks and revokes them automatically, but you should not rely on that. Keep the URL on the server, and if it is exposed, create a new webhook and replace the old one.

Sources

Build your site the same way

Describe what you want. Your AI builds and publishes it — with the full stack behind it: data, auth, forms, payments, integrations and hosting.

See how it works →