How to Send Form Submissions to Slack in Under 2 Minutes

11 min read
Static Forms Team

Email inboxes are where leads go to die. By the time you scroll past three newsletters and a calendar invite, that "interested customer" has moved on to the next tab. If your team already lives in Slack, your form submissions should too.

This tutorial walks you through connecting any HTML form on your website to a Slack channel using Static Forms. The result: every time a visitor hits Submit, a clean, structured message lands in the channel of your choice — within seconds. No Zapier subscription, no custom Slack app, no incoming webhook URLs to manage. We'll cover the connection flow, build a working HTML form, verify end-to-end delivery, and troubleshoot the issues that typically trip people up.

What You'll Learn

  • How to connect a Slack workspace to your Static Forms account
  • What happens behind the scenes when you authorize
  • How to build a working HTML form that sends to Slack
  • How to verify the connection with a test submission
  • How to route different forms to different Slack channels
  • Common use cases for teams using Slack
  • How to troubleshoot common delivery issues

Prerequisites

Before you begin, make sure you have:

  1. A Static Forms account with at least one verified account. Sign up here if you don't have one.
  2. A Pro plan — Slack is a Pro feature. View pricing to upgrade if needed.
  3. Admin or owner access to a Slack workspace — or permission from your workspace admin to install apps.
  4. A website or local HTML file where you can add a form.

Got all four? Let's wire it up.

Step 1: Open the Integrations Page

Log into your Static Forms dashboard and click Settings in the top navigation. From the account list, choose the account you want Slack notifications for, then click the Integrations tab.

You'll see a list of available integrations including Webhooks, Google Sheets, and Slack. Click the Slack card to expand it.

Step 2: Connect to Slack

Click the Connect to Slack button. You'll be redirected to Slack's standard OAuth consent screen, where you'll:

  1. Pick a workspace from the dropdown in the top-right corner.
  2. Choose a channel that should receive the notifications (for example, #leads, #contact-form, or #support).
  3. Click Allow to authorize the connection.

Slack redirects you back to the integrations page with a success confirmation. The card now shows your connected workspace and channel name.

Note: Static Forms only requests the minimum scope needed to post messages to the channel you select. We never request access to read messages, list members, or post to other channels.

What Happens Behind the Scenes

When you authorize, Static Forms:

  1. Receives a webhook URL from Slack tied to your selected workspace and channel
  2. Stores the webhook URL encrypted in our database — it's never exposed in the dashboard
  3. Enables notifications immediately — the very next form submission triggers a Slack message

You don't need to create a Slack app, manage OAuth tokens, or configure any incoming webhook manually. The entire flow is handled by our pre-built integration.

Step 3: Send a Test Notification

Before wiring up a real form, click the Send test message button on the Slack integration card. Switch over to Slack — within a couple of seconds, a test notification appears in the channel you selected.

If the test message arrives, your connection is healthy. If it doesn't, jump to the Troubleshooting section.

Step 4: Grab Your API Key

You need your account's apiKey to point a form at it. Still in the Settings area, click the Account tab. Copy the apiKey value — it's a long string that looks like sf_live_....

Treat your apiKey like a password. Don't commit it to a public repo.

Step 5: Build the HTML Form

Drop this HTML anywhere on your website. Replace YOUR_API_KEY with the key you copied in Step 4 and update the redirect URL to your own thank-you page.

HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Contact Us</title>
</head>
<body>
  <form action="https://api.staticforms.dev/submit" method="POST">
    <!-- Static Forms config -->
    <input type="hidden" name="apiKey" value="YOUR_API_KEY" />
    <input type="hidden" name="redirectTo" value="https://yoursite.com/thank-you" />

    <!-- Your fields -->
    <label for="name">Name</label>
    <input type="text" id="name" name="name" required />

    <label for="email">Email</label>
    <input type="email" id="email" name="email" required />

    <label for="subject">Subject</label>
    <input type="text" id="subject" name="subject" />

    <label for="message">Message</label>
    <textarea id="message" name="message" rows="5" required></textarea>

    <button type="submit">Send Message</button>
  </form>
</body>
</html>

That's the entire form. No JavaScript, no backend, no fetch calls. The browser POSTs the form data straight to https://api.staticforms.dev/submit, Static Forms validates it, runs spam checks, and forwards a structured notification to your Slack channel.

Step 6: Submit and Verify

Open the page in your browser, fill out the form, and click Send Message. Within seconds:

  1. The browser redirects to your redirectTo URL.
  2. A notification appears in your Slack channel showing every field you submitted.

Your form is now wired to Slack.

What the Slack Message Looks Like

Static Forms uses Slack's Block Kit format to deliver rich, structured notifications. Each submission shows up as:

Header — A bold title identifying the account that received the submission, so you can tell at a glance which form it came from.

Form fields — Each field from the submission is displayed in a clean two-column layout. Field names appear on the left in bold, values on the right. For example:

Name — Jane Smith
Emailjane@example.com
Message — I'd like to learn more about your enterprise plan.

Footer — A subtle line showing the submission timestamp and a link to view the full record in your dashboard.

The result is scannable at a glance — your team can read the whole submission, reply in a thread, and assign follow-up without ever opening another tab.

Managing the Integration

Enable / Disable Notifications

Toggle the switch on the Slack integration card to pause or resume notifications. When disabled, form submissions still process normally — email notifications, webhooks, and Google Sheets sync all continue — only the Slack message is skipped.

This is useful during maintenance windows or when a high-volume campaign would flood your channel.

Disconnect

Click Disconnect to remove the Slack connection entirely. The webhook URL is deleted from our system and no further messages are sent. Your Slack channel history is unaffected — all previously posted notifications remain.

Reconnect to a Different Channel

To change the destination channel, disconnect the current connection and click Connect to Slack again. During the OAuth flow, select the new channel.

Routing Different Forms to Different Channels

Static Forms organizes integrations per account. Each account has its own apiKey and its own Slack connection. To route forms separately:

  1. Create a new account in your dashboard for each form (e.g., "Sales Leads", "Support", "Newsletter").
  2. Connect each account to a different Slack channel.
  3. Use each account's apiKey in the corresponding HTML form.

For example:

  • Marketing landing page formSales Leads account → #sales channel
  • Help page formSupport account → #support channel
  • Footer signupNewsletter account → #growth channel

You can also connect different accounts to entirely different Slack workspaces — useful for agencies managing multiple clients.

Common Use Cases

Lead Alerts to #sales

Connect your landing page form to your #sales channel. Your sales team sees every lead the moment it arrives. They can discuss the lead in a Slack thread, assign follow-up, and respond faster than any competitor still checking their inbox.

Support Tickets to #support

Route support form submissions to #support. Use Slack threads to triage issues in real time. Pair this with the Google Sheets integration to keep a permanent log of every request while your team handles them in Slack.

Event RSVPs to #events

Post every RSVP to your #events channel so your team can see registrations rolling in live. It's a great morale boost during a launch — and you'll know instantly if signups stall.

Internal Feedback to #product

Use a feedback form on your internal tools and route submissions to #product. Your product team gets unfiltered user feedback without anyone needing to compile a report.

Pairing Slack with Other Integrations

Slack is great for awareness but not great for archival. For most teams, the winning combo is:

  • Slack for instant alerts and team discussion
  • Google Sheets for the permanent record and ad-hoc analysis
  • Email notifications as a backup channel for individual reviewers

All three can run in parallel on the same account. Submissions are processed once and fanned out to every enabled destination — if Slack is down, the email and sheet still work, and vice versa.

If you haven't set up Sheets yet, see our guide on How to Automatically Send Form Submissions to Google Sheets.

Slack vs. Google Sheets vs. Webhooks

Not sure which integration to use? Here's a quick comparison:

Slack (Native) Google Sheets (Native) Webhooks
Best for Real-time team alerts Data logging & analysis Custom backends
Setup time 30 seconds 30 seconds 2 minutes
Code required None None Endpoint needed
Cost Free (Pro plan) Free (Pro plan) Free (Pro plan)
Output Channel message Spreadsheet row HTTP POST to your server
Searchable Slack search Sheets filter/sort Your own system
Team visibility Entire channel sees it Shared spreadsheet Depends on your setup

The best approach for most teams is to use Slack and Google Sheets together — Slack for instant awareness, Sheets for the permanent record. Both can be enabled on the same account simultaneously.

Troubleshooting

The test message didn't arrive

Check that the channel still exists and hasn't been archived. If you connected to a private channel and later removed the Static Forms app from it, the webhook is invalid. Click Disconnect, then Connect to Slack again to generate a fresh connection.

The form submits but nothing arrives in Slack

Three things to verify:

  1. Slack toggle is on — the switch on the integration card must be enabled.
  2. You're using the right apiKey — each account has its own key. Submissions to the wrong account go to the wrong (or no) Slack channel.
  3. Static Forms isn't classifying the submission as spam — check your dashboard's Submissions view. Spam-flagged submissions are stored but not forwarded to integrations.

"Delivery failed" appears on the integration card

The webhook is no longer valid. Most common causes:

  • The Static Forms app was removed from your Slack workspace
  • The destination channel was deleted or archived
  • Workspace admin changed app permissions

Fix: Disconnect, then Connect to Slack again. The reconnect generates a brand-new webhook URL.

Some fields are missing from the Slack message

Static Forms includes every field present in the submission. If a field is missing, double-check that your HTML <input> has a name attribute (not just an id) — only fields with name are sent.

My form has 30+ fields and the message is truncated

Slack caps message block size. For very large submissions, the Slack notification may be truncated. The full submission is always available in your Static Forms dashboard and via email — Slack is built for a quick heads-up, not full archival.

Rate limits

Slack enforces rate limits on incoming webhooks (approximately one message per second per channel). Under normal usage this is never an issue. If you're receiving hundreds of submissions per minute during a viral campaign, some notifications may be delayed or dropped. Consider disabling Slack temporarily during extreme volume and relying on Google Sheets or email for the full record.

Errors never block form submission delivery — email notifications, webhooks, and Google Sheets sync continue working normally even if the Slack notification fails.

Complete Working Example

Here's a production-ready contact form with basic styling and a honeypot field for extra spam protection:

HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Contact Us</title>
  <style>
    body { font-family: system-ui, sans-serif; max-width: 480px; margin: 4rem auto; padding: 0 1rem; }
    label { display: block; margin-top: 1rem; font-weight: 600; }
    input, textarea { width: 100%; padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px; }
    button { margin-top: 1.5rem; padding: 0.75rem 1.5rem; background: #0070f3; color: #fff; border: 0; border-radius: 4px; cursor: pointer; }
    .honeypot { position: absolute; left: -5000px; }
  </style>
</head>
<body>
  <h1>Contact Us</h1>
  <form action="https://api.staticforms.dev/submit" method="POST">
    <input type="hidden" name="apiKey" value="YOUR_API_KEY" />
    <input type="hidden" name="redirectTo" value="https://yoursite.com/thank-you" />

    <!-- Honeypot: bots fill this in, humans never see it -->
    <div class="honeypot" aria-hidden="true">
      <label for="company">Company</label>
      <input type="text" id="company" name="honeypot" tabindex="-1" autocomplete="off" />
    </div>

    <label for="name">Name</label>
    <input type="text" id="name" name="name" required />

    <label for="email">Email</label>
    <input type="email" id="email" name="email" required />

    <label for="message">Message</label>
    <textarea id="message" name="message" rows="5" required></textarea>

    <button type="submit">Send Message</button>
  </form>
</body>
</html>

Drop this into any static site — Next.js, Gatsby, Hugo, plain HTML, GitHub Pages — and you're done. Submissions land in Slack instantly.

You're Done!

You now have a fully working pipeline from your website to your Slack channel. To recap:

  • Connected Slack to your Static Forms account via native OAuth
  • Built a working HTML form pointing at the Static Forms API
  • Verified end-to-end delivery with a test submission
  • Set up routing for multiple forms to different channels
  • Layered in extra spam protection with a honeypot field

If you want to take it further:

Have feedback or want a feature added? Get in touch — we read every message.


Slack integration is available on the Pro plan. View pricing to learn more about Static Forms plans.