n8n

Trigger an n8n workflow on every form submission with a Webhook node, on n8n Cloud or self-hosted.

n8n can run a workflow for every form submission: enrich the data, filter out what you do not need, and send it to a database, a CRM or a chat channel. The connection is an n8n Webhook node that receives the SilentForms webhook. It works the same on n8n Cloud and on a self-hosted instance, as long as the instance is reachable from the internet.

1. Add a Webhook node#

  1. Create a new workflow and add the Webhook trigger node.
  2. Set HTTP Method to POST. SilentForms always sends a POST, and a node left on another method will not match the request.
  3. Leave Authentication set to none. SilentForms cannot send custom headers or credentials; the URL itself is the secret (see below).
  4. Set Respond to Immediately. n8n then answers as soon as the request arrives, instead of waiting for the rest of the workflow, which keeps you well inside the 5-second webhook timeout.

The node shows two URLs: a Test URL and a Production URL. They differ, and which one you use matters.

Test URL and Production URL#

Test URLProduction URL
Works whenYou click Listen for test event (or execute the workflow) in the editorThe workflow is published (active)
Data shown in the editorYesNo; see the Executions tab
Use it forSetting up and mapping fieldsReal submissions

The test URL only listens while you are waiting for a test event in the editor. If you leave it saved in SilentForms, every real submission outside that window fails. Use it to build the workflow, then switch to the production URL.

2. Capture a test submission#

  1. In the Webhook node, copy the Test URL.
  2. Sign in to the SilentForms dashboard, open the form and save the URL as its webhook URL.
  3. In n8n, click Listen for test event.
  4. Submit your form with realistic values, filling every field you want to use.

The node's output now shows the request. The form fields are under body, alongside headers, params and query:

{
  "body": {
    "name": "Jane",
    "email": "[email protected]",
    "message": "Hi",
    "receivedAt": "2026-10-25T09:30:00.000Z"
  }
}

In later nodes, refer to fields with expressions such as {{ $json.body.email }}, or drag them from the input panel. Checkbox groups arrive as JSON arrays, for example {{ $json.body.interests }}, so a Code or Split Out node can handle each value. Special fields such as subject, redirect and the access key are removed before sending.

3. Build the rest of the workflow#

Add the nodes you need after the Webhook node. A common shape is an If node that checks a field (for example, only continue when {{ $json.body.topic }} is "Sales"), followed by the destination node: Google Sheets, Slack, Postgres, an HTTP Request to your own API, and so on. Execute the workflow with test data until it does what you want.

4. Go live#

  1. In the Webhook node, copy the Production URL.
  2. Save it in the SilentForms dashboard, replacing the test URL.
  3. Publish the workflow. In n8n 2.x this is the Publish button; older versions use an Active toggle in the top bar. The production URL only responds once the workflow is published.
  4. Send a submission and check the workflow's Executions tab. In the SilentForms dashboard, the delivery should show as "sent".

After you change the workflow, publish again: the production webhook runs the published version, not unsaved edits.

Self-hosted n8n#

SilentForms only sends webhooks to public addresses. URLs that resolve to private networks, localhost, link-local or other reserved ranges are refused (a webhookUrl field pointing at one makes the submission fail with a 400). An n8n instance at http://localhost:5678 or on a home network cannot receive submissions directly.

To make a self-hosted instance reachable:

  • Put it behind a public domain with HTTPS, typically through a reverse proxy.
  • Set n8n's N8N_WEBHOOK_URL environment variable (WEBHOOK_URL before n8n 2.35) to that public address, so the URLs shown in the Webhook node use the public domain instead of localhost. See n8n's reverse proxy configuration docs.
  • Make sure the proxy does not redirect the webhook path, for example from http to https or to add a trailing slash. SilentForms does not follow redirects, so a redirect counts as "failed". Use the exact final URL.

Securing the webhook#

n8n generates a random path for each Webhook node, which already makes the URL hard to guess. Keep the production URL in the dashboard, not in a hidden webhookUrl field, so it never appears in your page source. If you set a custom Path, make it long and random.

Troubleshooting#

  • "failed" with a 404. The workflow is not published, or the saved URL is the test URL.
  • "error". The instance is unreachable from the internet, or the workflow took longer than 5 seconds to answer because Respond is not set to Immediately.
  • 400 "webhookUrl must not point at a private or reserved address." The URL resolves to a private network or localhost. See the self-hosted section above.

Next steps#