n8n Integration

    n8n is a destination in Formboost, alongside Slack, Discord and Telegram. Point it at a Webhook node and every submission starts that workflow automatically.

    This works with self-hosted n8n as well as n8n.cloud. Formboost does not publish a node in n8n's catalogue — the connection is made with n8n's built-in Webhook trigger node.

    n8n is available on the Starter plan and above.

    Setup

    1. In n8n, open the workflow you want to trigger and add a Webhook node as its trigger
    2. Set HTTP Method to POST; leave the generated path as it is
    3. Copy the Production URL shown on the node
    4. In Formboost, open your form → Integrations tab → n8nConnect
    5. Paste the Production URL, optionally name it, and save
    6. Click Send test — Formboost delivers a sample payload immediately
    7. In n8n, switch the workflow to Active
    8. Add your downstream nodes and save

    Production URL, not Test URL

    The Webhook node shows two URLs. The Test URL (/webhook-test/…) only listens while you have the canvas open and are clicking Listen for test event; it stops responding the moment you navigate away. The Production URL (/webhook/…) is the one to give Formboost.

    Formboost accepts either, because both are legitimate during setup — but a delivery log filling with 404s almost always means a Test URL was saved, or the workflow was never switched to Active.

    What n8n Receives

    Every delivery is a POST with a JSON body in this shape:

    1{
    2  "event": "form.submission",
    3  "eventId": "sub_3b241101-e2bb-4255-8caf-4136c566a962",
    4  "sentAt": "2026-08-24T12:00:00.120Z",
    5  "form": {
    6    "name": "Contact Form",
    7    "alias": "contact"
    8  },
    9  "submission": {
    10    "name": "John Doe",
    11    "email": "[email protected]",
    12    "message": "Hello",
    13    "submittedAt": "2026-08-24T12:00:00.000Z"
    14  }
    15}

    The same envelope goes to the Zapier and HTTP Webhook destinations, so a workflow built against it can be moved between them without remapping.

    FieldMeaning
    eventform.submission, or form.submission.test for a test delivery
    eventIdsub_<submission id>, stable across retries — use it to make the workflow idempotent. Tests get a test_<uuid> id
    sentAtWhen this attempt left Formboost. Changes on every retry
    form.name / form.aliasThe form's display name and endpoint alias
    submission.submittedAtWhen the form was filled in — unchanged by retries, so it can be much earlier than sentAt
    submission.*Your own form fields, exactly as submitted

    In later nodes, reference values as {{ $json.body.submission.email }}. Formboost's metadata stays at the top level, so a field of your own called event or name cannot shadow it.

    Only submittedAt is reserved: a form field of that name is dropped in favour of the real timestamp.

    To ignore test deliveries, add an IF node on {{ $json.body.event }}.

    Example Workflows

    WorkflowWhat it does
    Formboost → PostgresInsert every submission into your own database
    Formboost → OpenAI → SlackSummarise the enquiry, then post it to a channel
    Formboost → HubSpotCreate or update a contact from the email field
    Formboost → Google SheetsAppend a row per submission
    Formboost → IF → EmailRoute high-value enquiries to a different inbox

    Delivery and Retries

    Deliveries are asynchronous. Formboost accepts the submission first and delivers to n8n in the background, so a slow or unreachable instance never delays or fails the form submission itself.

    Formboost waits up to 15 seconds for a response. A long-running workflow should respond to the webhook immediately and continue in the background — in the Webhook node set Respond to Immediately rather than When Last Node Finishes.

    Every attempt is recorded in the delivery log with the response status, duration, and error if it failed. Failed deliveries are not retried automatically — open the delivery log and click Retry to resend one from its stored submission.

    Self-Hosted Instances

    Your instance must be reachable from the public internet over HTTPS. Formboost refuses:

    • plain http:// URLs
    • URLs containing credentials (https://user:pass@…)
    • private, loopback, and link-local addresses — localhost, 10.x, 192.168.x, 169.254.x and the like

    The address is re-checked when the connection is made, not only when you save, so a hostname that later resolves to a private address is still refused. An instance on a private network needs to be exposed through a public hostname before Formboost can reach it.

    Troubleshooting

    ProblemFix
    404 in the delivery logThe workflow is not Active, or a Test URL was saved. Switch it to Active and re-copy the Production URL
    URL rejected when savingIt must be https:// and contain /webhook/. Copy the URL from the Webhook node, not your instance's address bar
    "must point at a public address"The hostname resolves to a private IP. A local instance has to be publicly reachable first
    Timeouts in the logSet the Webhook node's Respond option to Immediately so a slow workflow does not hold the request open
    500 in the delivery logThe workflow itself errored — check its execution list in n8n
    Fields are empty downstreamValues live under body, e.g. {{ $json.body.submission.email }}, not at the top level

    Notes

    • One n8n destination per form. To drive several workflows from one form, use one workflow that branches, or n8n's Execute Workflow node.
    • The webhook URL is treated as a credential: anyone holding it can run your workflow. Formboost masks it after saving and never logs it in full.
    • If your Webhook node has authentication enabled, Formboost cannot satisfy it — the destination sends no auth header. Leave the node's authentication set to None and rely on the URL's secrecy, or use the generic HTTP Webhook destination, which supports custom headers.