How to Send Form Submissions to Slack in Under 2 Minutes
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:
- A Static Forms account with at least one verified account. Sign up here if you don't have one.
- A Pro plan — Slack is a Pro feature. View pricing to upgrade if needed.
- Admin or owner access to a Slack workspace — or permission from your workspace admin to install apps.
- 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:
- Pick a workspace from the dropdown in the top-right corner.
- Choose a channel that should receive the notifications (for example,
#leads,#contact-form, or#support). - 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:
- Receives a webhook URL from Slack tied to your selected workspace and channel
- Stores the webhook URL encrypted in our database — it's never exposed in the dashboard
- 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
apiKeylike 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.
<!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:
- The browser redirects to your
redirectToURL. - 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
Email — jane@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:
- Create a new account in your dashboard for each form (e.g., "Sales Leads", "Support", "Newsletter").
- Connect each account to a different Slack channel.
- Use each account's
apiKeyin the corresponding HTML form.
For example:
- Marketing landing page form →
Sales Leadsaccount →#saleschannel - Help page form →
Supportaccount →#supportchannel - Footer signup →
Newsletteraccount →#growthchannel
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:
- Slack toggle is on — the switch on the integration card must be enabled.
- 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. - 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:
<!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:
- Add Altcha CAPTCHA for privacy-first spam protection
- Mirror submissions to Google Sheets for long-term storage
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.
Related Articles
How to Send Form Submissions to Google Sheets
Connect Google Sheets to your Static Forms account with one click. Every form submission is appended as a new row — no code, no Zapier, no Apps Script.
How to Add a Contact Form to Google Sites
Learn how to add a working contact form to your Google Sites website using Static Forms — no backend or coding experience required.
How to Add a Contact Form to Your Astro Website
Step-by-step tutorial for adding a working contact form to Astro sites using Static Forms — no backend required.