Get a Slack message for every signup: three ways
18 September 2026 · by Nordva, who make Nordva Launch
How do I get a Slack (or Discord) message every time someone signs up for my waitlist?
Create a Slack incoming webhook for the channel, then either call it from your own signup handler (about ten lines), route through Zapier, n8n or Make if you would rather not touch code, or use a waitlist tool that posts to Slack directly. With Nordva Launch you paste the Slack URL as a webhook endpoint and pick the events; the same works for Discord.
Wanting to see each signup arrive is not vanity. In the first weeks after a launch it is the fastest feedback loop you have: which post is working, right now, and who is turning up. Three ways to get it, in order of how much you own.
1. From your own signup handler
If you already have a server route that stores the email, add a Slack call after the response is sent.
Create the webhook: at api.slack.com/apps, create an app from scratch, turn on Incoming Webhooks, press Add New Webhook to Workspace, pick the channel, copy the URL. Put it in an environment variable.
// after the signup is saved; never before the user has their answer
async function notifySlack(email: string, source: string | null) {
try {
await fetch(process.env.SLACK_SIGNUPS_WEBHOOK_URL!, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text: `New signup: ${email}${source ? ` from ${source}` : ""}` }),
});
} catch (err) {
console.error("slack notify failed", err); // never let this fail the signup
}
}
For Discord, the URL comes from the channel’s settings (Integrations → Webhooks) and the body is { "content": "…" }.
What you own: everything. What you have to remember: run it after responding, swallow errors, and do not commit the URL.
2. Through Zapier, n8n or Make
If the form is on a no-code page, or you do not want to edit the handler, put an automation tool in between. The form (or your backend) posts to the tool’s hook URL; the tool has a Slack action.
- Zapier: trigger Webhooks by Zapier → Catch Hook, action Slack → Send Channel Message. Webhooks by Zapier is not on the free plan.
- n8n: Webhook node → Slack node. Free if self-hosted; the instance needs a public https URL.
- Make: Custom webhook → Slack → Create a Message.
What you own: the mapping. What you pay: the tool’s plan, and one more place a signup passes through.
3. From the waitlist tool itself
If a service holds your list, it should be able to tell Slack directly, with no code and no middleman.
With Nordva Launch: Webhooks → Add webhook, paste the Slack incoming-webhook URL, tick waitlist.signup.created, press Test. Launch recognises hooks.slack.com and posts one readable line per event instead of JSON:
New waitlist signup: [email protected] (position 42) from hn
The same with a Discord URL. Over the API it is one call with a secret key, and an AI agent with the MCP server connected does it with create_webhook when you say “send new signups to Slack, here is the URL”.
Deliveries are queued and retried (1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours), an endpoint that fails 20 times in a row is switched off with a reason shown in the dashboard, and a Slack outage never fails the signup. Feedback and published changelog entries can go to the same or another channel. Webhooks are on Indie and Builder, 2 and 5 endpoints per project.
The Slack recipe page has the steps with screenshots-worth of detail, and the webhooks guide has the JSON envelope and signature check for when you want the fields rather than a line.
Which one
| You have | Do |
|---|---|
| Your own signup handler and a few minutes | Way 1 |
| A no-code form, or a team that lives in Zapier or Make | Way 2 |
| A waitlist tool that supports Slack; you want the delivery log and retries handled | Way 3 |
If you are choosing a waitlist tool partly for this, check that it retries, that it logs what Slack answered, and that its Slack call is not in the request path of the signup. Those three are the difference between a nice-to-have and a form that goes down with a chat app.
Questions
- Do I need a Slack app to post to a channel?
- You need an app with Incoming Webhooks turned on, which takes a minute at api.slack.com/apps and needs no code, review or OAuth flow. The result is a URL; anyone with it can post to that channel, so keep it out of the repository.
- What about Discord?
- Discord channel webhooks are simpler still: channel settings, Integrations, New Webhook, copy the URL. Post JSON with a content field. Messages are capped at 2,000 characters.
- Will a Slack outage break my signup form?
- It should not, if the Slack call happens after you have answered the user and is wrapped so a failure is logged and ignored. A tool that does this for you should say so; Nordva Launch's webhooks are queued and retried, and a failed delivery never fails the signup.
Try it in your project
npx nordva@latest init
Free plan, no card, no invite.