All resources
Automations & integrations

How to Send Form Submissions to Slack

Post every form submission to a Slack channel as a formatted Block Kit message with the managed Slack connector — plus a free webhook + automation route.

The ShipMyForm team

· 6 min read

An email that lands in an inbox nobody watches is a lead you have already lost. Slack is where most teams actually live, so having each form submission drop straight into a channel — where someone can react, claim it, or reply within minutes — is one of the highest-leverage things you can do with a contact form. The problem is the plumbing: a plain HTML form on a static site has no way to post to Slack on its own.

There are two clean ways to bridge that gap with ShipMyForm, and this guide covers both: the managed Slack connector, which posts a nicely formatted message to your channel after you paste one webhook URL, and a free do-it-yourself route that sends ShipMyForm's raw webhook into an automation that reshapes it for Slack. Pick whichever fits your plan and how much you want to wire up.

The two approaches at a glance

Managed Slack connectorWebhook + automation
SetupPaste one Slack webhook URLWire an automation to reshape the payload
PlanPaid (Starter and up)Free plan works
Message formattingBlock Kit message, built for youYou build the Slack message yourself
MaintenanceNoneYou own the automation
Best forGet it working in a minuteFree tier or full control

Both rely on ShipMyForm sitting in front of your form: it catches the POST, stores the submission, and filters spam before anything reaches a connector — so only genuine submissions ever hit your channel instead of a stream of bot noise.

Option A: the managed Slack connector

This is the one-paste path. You give ShipMyForm a Slack Incoming Webhook URL, and from then on every non-spam submission is posted to that channel as a formatted message — no automation, no code.

Step 1: point your form at ShipMyForm

Your form stays plain HTML. Set its action to your form endpoint — no JavaScript required:

html
<form action="https://shipmyform.com/f/YOUR_FORM_ID" method="POST">
  <input name="name" required />
  <input name="email" type="email" required />
  <textarea name="message" required></textarea>
  <button type="submit">Send</button>
</form>

Step 2: get a Slack incoming webhook URL

A Slack Incoming Webhook is a URL that posts a message into one specific channel. To create one:

  1. Go to api.slack.com/apps and create a new app (or open an existing one) in your workspace.
  2. Open Incoming Webhooks and turn the feature on.
  3. Click Add New Webhook to Workspace, then choose the channel you want submissions to post into.
  4. Copy the generated URL — it looks like https://hooks.slack.com/services/T000/B000/xxxx.
One webhook equals one channel:

The webhook URL is bound to the channel you picked when you created it. If you later want submissions in a different channel, create a new webhook for that channel and swap the URL — you cannot repoint an existing one from ShipMyForm.

Step 3: add the Slack connector

In your dashboard, open the form, go to Connectors, and add Slack. Paste the https://hooks.slack.com/services/... URL into the connector and save. The connector only accepts a hooks.slack.com URL, so if the paste is rejected, double-check you copied the Incoming Webhook URL and not some other Slack link.

Step 4: send a test

Hit Send test in the connector (or just submit the real form). A formatted message appears in your channel almost immediately. ShipMyForm posts each submission as a Slack Block Kit message with three parts:

  • a header📨 New submission: <form name>,
  • a section listing up to 10 of the submitted fields, and
  • a context line with the submission timestamp.

Because spam is filtered out upstream, only real submissions ever produce a message — your channel does not fill up with bot garbage.

Posting to more than one channel

Each Slack connector maps to exactly one webhook, which maps to one channel. To send the same submissions into several channels, add a separate Slack connector for each one, each with its own webhook URL. There is no limit to how you split them — for example, sales enquiries into #sales and a copy into #leads.

That is the whole managed setup. From here every genuine submission shows up in Slack, formatted and ready to act on.

Option B: free, via the webhook connector and an automation

On the free plan, or if you want to control exactly how the Slack message looks, you can get submissions into Slack without the managed connector. The key thing to understand is why you cannot skip the middle step.

ShipMyForm's free Webhook connector sends its own raw JSON — a submission object with your fields under data. A Slack Incoming Webhook, on the other hand, expects Slack's own message JSON (a text field or a blocks array). Those two shapes are not the same, so pointing the generic webhook connector straight at a hooks.slack.com URL will not produce a readable message — Slack will reject or mangle it.

The fix is to put a small automation in between that receives ShipMyForm's payload, reshapes it into Slack's format, and forwards it on:

text
ShipMyForm  ──webhook (raw JSON)──▶  n8n / Zapier / Make  ──▶  Slack
                                     (reshapes the payload)

Step 1: point the webhook connector at your automation

In your ShipMyForm form, open Connectors, add the Webhook connector (it is on the free plan), and paste the inbound URL of your automation — an n8n Webhook node URL, a Zapier Catch Hook, or a Make custom-webhook URL. Save, and ShipMyForm will deliver every submission there as JSON.

Step 2: reshape the payload and post to Slack

In the automation, read the incoming fields (they arrive under data) and build a Slack message from them, then send it to your Slack Incoming Webhook — or use the platform's native Slack action, which builds the message for you. A minimal Slack payload is just:

json
{
  "text": "📨 New submission from [email protected]: Loved the guide, can we talk?"
}
Verify the request is really from ShipMyForm:

Every webhook delivery carries an X-ShipMyForm-Signature header: sha256= followed by an HMAC-SHA256 of the raw body, keyed with the connector’s signing secret. Since your automation’s inbound URL is open to the internet, recompute that hash and reject anything that does not match before you post to Slack.

The full n8n walkthrough covers this exact pattern — the Webhook node, the field mapping, and the signature check — and the same idea works in Zapier and Make. The trade-off is ownership: this route is free and fully in your control, but you build and maintain the automation, whereas the managed connector formats the message for you and needs nothing to keep running.

Which one should you use?

  • On a paid plan and just want it working? Use the managed Slack connector. Paste one webhook URL and every submission arrives as a formatted Block Kit message, spam already excluded.
  • On the free plan, or you want to design the Slack message yourself? Route the free webhook connector through n8n, Zapier, or Make and format it there.

Either way, ShipMyForm's storage means every submission is also kept in your dashboard, so even if a Slack post fails you still have a durable copy — nothing is lost.

Next steps

Frequently asked questions

Do I need a paid plan to send form submissions to Slack?
The managed Slack connector is on ShipMyForm's paid plans (Starter and up). It posts each submission to your channel as a formatted Block Kit message with no code. On the free plan you can still reach Slack by routing the free webhook connector through an automation (n8n, Zapier, or Make) that reshapes the payload into Slack's message format — that route is covered below.
How do I get a Slack incoming webhook URL?
In Slack, go to api.slack.com/apps, create or open an app, enable Incoming Webhooks, click "Add New Webhook to Workspace", choose the channel to post into, and copy the https://hooks.slack.com/services/... URL it gives you. That single URL is tied to the channel you picked, and it is what you paste into the Slack connector.
Can I post to more than one Slack channel?
Yes. Each Slack connector maps to one incoming webhook, which maps to one channel. To post the same submissions into several channels, add a separate Slack connector for each one, each with its own webhook URL for its target channel.
Will spam submissions post to Slack?
No. ShipMyForm filters spam before anything reaches your connectors, so only genuine, non-spam submissions are delivered to Slack. Your channel stays clean instead of filling up with bot noise.

Related guides