Skip to Content

n8n

Available on Starter and Pro. See pricing.

n8n is a workflow automation tool you can use on n8n Cloud or host yourself. Connect it to Formtorch and every new submission starts an n8n workflow: enrich a lead, write to Postgres, call an AI model, or notify your team.

The connection is a Formtorch webhook pointed at an n8n Webhook trigger node. There’s no credential to set up in n8n. Setup takes about five minutes.

What you need

  • A Formtorch form on the Starter or Pro plan
  • An n8n instance that’s reachable over public HTTPS (n8n Cloud, or a self-hosted instance with a public URL)

Formtorch can’t deliver to localhost or private network addresses. If you self-host n8n on your own machine, expose it with a public HTTPS URL first (for example, through a tunnel or a reverse proxy).

Connect a form to n8n

Add a Webhook trigger in n8n

  1. Create a new workflow and add the Webhook trigger node.
  2. Set HTTP Method to POST. Formtorch always sends POST requests.
  3. Set Respond to Immediately.
  4. Open the Production URL tab and copy the URL.

Use the Production URL, not the Test URL. The Test URL only works while the editor is listening, and a Formtorch destination’s URL can’t be changed after you add it.

Publish the workflow

Save and publish the workflow (older n8n versions call this switching it to Active). n8n only registers the Production URL once the workflow is published.

Add the URL to your form in Formtorch

  1. Open the form in the dashboard  and go to Integrations.
  2. On the n8n card, click Add Destination, then Add Destination again in the panel that opens.
  3. Paste the n8n Production URL and click Add Destination. The label is pre-filled as n8n; change it if you like.

The n8n card then shows Active on this form. Click Manage on it to see, pause, or remove the destination. It’s also listed on the Webhooks card with a n8n badge, and counts as one of the form’s webhook destinations.

Formtorch shows a signing secret once. Copy it if you plan to verify signatures; otherwise you can close the dialog.

Send one real submission

Submit your form once from your site, like a visitor would, then open Executions in n8n. You should see a successful run with your submission in it.

Test submissions (_test) and submissions flagged as spam are never sent to per-form destinations. If nothing shows up in Executions, send a normal submission from your live form.

Use the fields in the next nodes

The Webhook node puts the request body under body, so your form fields are at body.submission.data:

{{ $json.body.submission.data.email }} {{ $json.body.submission.data.message }} {{ $json.body.form.name }}

Add your next nodes (for example, Postgres, HubSpot, or Slack) and map fields with these expressions.

That’s it. Every new submission on that form now runs your workflow.

What n8n receives

Each submission arrives as one JSON request. In n8n this is the body of the Webhook node’s output:

{ "event": "form.submitted", "timestamp": "2026-09-29T14:30:00.000Z", "delivery_id": "d3f456abc789", "form": { "id": "a1b2c3d4e5", "name": "Contact Form" }, "submission": { "id": "x9y8z7w6v5", "created_at": "2026-09-29T14:30:00.000Z", "data": { "name": "Alex", "email": "alex@example.com", "message": "Hello there" }, "is_test": false, "is_spam": false } }

Your form’s own fields are under submission.data, using the name attributes from your HTML. Reserved fields such as _redirect and _honeypot are removed before delivery. The request headers, including x-formtorch-signature and x-formtorch-delivery, are under headers in the node output.

Plan availability

Plann8n
FreeNot available
Starter✓ (uses the form’s 1 webhook destination)
Pro✓ (unlimited webhook destinations)

n8n uses a per-form webhook destination, so it counts toward the same per-form limit as any other webhook. On Starter, each form can send to one destination: n8n, Make, or another webhook URL. Different forms can each have their own. See the pricing page  for a full plan comparison.

One workflow for every form

If you’d rather run a single workflow for all your forms, paste the n8n URL into the workspace-wide endpoint in Settings → Webhooks instead, and subscribe only to form.submitted. Branch per form with a Switch node on {{ $json.body.form.id }}. The workspace endpoint also has a Send Test button that sends a sample payload. See Webhooks for how the two options differ.

Delivery and retries

Formtorch treats n8n like any other webhook destination:

  • Retries: if n8n doesn’t return a 2xx within 30 seconds, Formtorch retries with exponential backoff, up to 6 attempts in total.
  • Status: on the form’s Submissions tab, hover over a submission’s delivery badge to see its Delivery history, or open the submission and check Integrations on its Metadata tab.
  • Pausing and removing: click Manage on the n8n card on the form’s Integrations tab. Pausing stops sending without deleting it. Settings → Integrations shows which forms use n8n.

Keep Respond set to Immediately so n8n answers right away. If the Webhook node waits for the whole workflow to finish, a slow workflow can time out and be delivered again.

Verify the signature (optional)

Every request carries an X-FormTorch-Signature header: sha256= followed by an HMAC-SHA256 of the raw request body, keyed with the destination’s signing secret. Checking it proves the request came from Formtorch.

In n8n:

  1. In the Webhook node, click Add Option and turn on Raw Body.
  2. Add a Crypto node with the Hmac action: Type SHA256, Encoding HEX, Binary File on (pointing at the raw body), and a Crypto credential holding your signing secret.
  3. Add an If node that compares sha256=<your hex result> with {{ $json.headers["x-formtorch-signature"] }} and stops the workflow when they differ.

See Signature verification for the exact algorithm and code examples.

Troubleshooting

Nothing appears in Executions. Check that the workflow is published, that you used the Production URL, and that the Webhook node’s method is POST. Then send a normal, non-test submission.

n8n returns 404. The workflow isn’t published, or the URL is the Test URL. Publish the workflow, or remove the destination in Formtorch and add the Production URL.

Expressions come back empty. Form fields are under body.submission.data, not at the top level. Field names match your HTML name attributes and are case-sensitive.

Last updated on