Productivity · n8n

Automatically Save Form Submissions to a Notion Database in Real Time

Capture any web form submission via a webhook and instantly create a new entry in your Notion database — no manual copy-pasting required. Perfect for teams collecting leads, feedback, or requests through online forms.

difficulty Beginnersetup 30 minresult Every form submission is automatically saved as a structured record in your Notion database within seconds.
  1. 1

    Set up the Webhook trigger node

    Add a Webhook node as your trigger. Set the HTTP Method to POST. Copy the generated webhook URL — you will paste this into your form tool (e.g. Typeform, Tally, or your custom HTML form) as the form's submission endpoint. In the node Notes field, save your webhook URL for reference.

  2. 2

    Parse and map the incoming form data

    Add a Set node connected to the Webhook. Use it to extract the specific fields you want from the incoming payload. For example, map Name to {{ $json.body.name }}, Email to {{ $json.body.email }}, and Message to {{ $json.body.message }}. Adjust the field names to match your actual form field names. This keeps the data clean before sending it to Notion.

  3. 3

    Connect your Notion account

    Add a Notion node connected to the Set node. In the Credential field, click Create New and follow the prompts to authenticate with your Notion account. In Notion, go to Settings > Integrations, create a new internal integration, copy the secret token, and paste it into n8n. Then share your target Notion database with that integration using the Share button in Notion.

  4. 4

    Configure the Notion node to create a database page

    In the Notion node, set Resource to Database Page and Operation to Create. Select your target Database ID from the dropdown or paste it manually (found in your Notion database URL). Map each Notion property to the fields you defined in the Set node — for example, set the Name title property to {{ $json.Name }}, the Email property to {{ $json.Email }}, and the Message property to {{ $json.Message }}. Match the property types in Notion (title, email, text) accordingly.

  5. 5

    Activate and test the workflow

    Click Save and then toggle the workflow to Active. Submit a test entry through your form. Return to n8n and click Executions to verify the workflow ran successfully. Check your Notion database to confirm the new page appeared with the correct data. If any field is missing, revisit the Set node mapping and adjust the expression to match your form's payload keys.

Frequently asked questions

Which form tools work with this webhook approach?

Any form tool that supports custom webhook or HTTP POST submissions will work, including Tally, Typeform, Jotform, Google Forms (via a script), or a custom HTML form. Each tool has a slightly different payload structure, so check your form's documentation to know the exact field names to use in the Set node expressions.

What if my Notion database has different property types like Select or Date?

The Notion node in n8n supports all major property types. When you configure the Notion node, choose the correct property type for each field. For a Select property, provide the option name as a string. For a Date property, provide a valid ISO 8601 date string such as 2024-01-15. Adjust your Set node to format values correctly before they reach the Notion node.

Is the webhook URL secure enough for collecting real form data?

n8n webhook URLs include a unique identifier, making them hard to guess. For additional security, you can enable webhook authentication in n8n by adding a Header Auth credential and configuring your form tool to send a matching secret header. Avoid sharing the webhook URL publicly and rotate it if you suspect it has been exposed.

About this recipe. Recipes on FlowRecipesHub are written for business owners, not developers, and are tested before publishing — how recipes get made. Some ingredient links are affiliate links that cost you nothing — full disclosure.