Intermediate~20 min setupProductivity & FormsVerified April 2026
Notion logo
Typeform logo

How to Send Typeform Submissions to Notion Database with N8n

Auto-create Notion database rows from every Typeform submission with custom field mapping.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Teams that need custom data transformation between Typeform responses and Notion databases

Not ideal for

Users who want the fastest possible setup without any technical configuration

Sync type

real-time

Use case type

import

Real-World Example

💡

A 25-person product team uses this to capture feature requests through a Typeform embedded on their website. Each submission creates a Notion database row with priority scoring, user segment tags, and automatic assignment to product managers. Before automation, someone manually copied 15-20 weekly requests into Notion, often missing context or losing submissions in email.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured — you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Admin access to a Notion workspace with database creation permissions
A published Typeform with at least one question configured
N8n instance running (self-hosted or cloud) with webhook access enabled
Target Notion database created with columns matching your form fields

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Submitter Emailform_response.hidden.email
Response Textform_response.answers[0].text
Submission Dateform_response.submitted_at
3 optional fields▸ show
Choice Selectionform_response.answers[1].choice.label
Response IDform_response.token
Form Nameform_response.form_id

Step-by-Step Setup

1

Dashboard > New workflow

Create New N8n Workflow

Start a fresh workflow in N8n. This will contain the trigger node for Typeform webhooks and the action node for Notion database inserts.

  1. 1Click 'New workflow' from your N8n dashboard
  2. 2Name it 'Typeform to Notion Sync'
  3. 3Click 'Save' to create the workflow
What you should see: You should see a blank workflow canvas with the option to add your first node.
2

Workflow > Add Node > Triggers > Webhook

Add Typeform Webhook Trigger

Set up N8n to receive webhook notifications whenever someone submits your Typeform. The webhook will contain all form field data.

  1. 1Click the '+' button to add a node
  2. 2Search for and select 'Webhook' from the trigger list
  3. 3Set HTTP Method to 'POST'
  4. 4Copy the webhook URL from the node panel
What you should see: The webhook node shows a unique URL starting with your N8n instance domain.
Common mistake — Don't use the Typeform trigger node — it only polls every 15 minutes, not real-time
n8n
+
click +
search apps
Notion
NO
Notion
Add Typeform Webhook Trigger
Notion
NO
module added
3

Typeform > Connect > Webhooks

Configure Typeform Webhook URL

Connect your Typeform to N8n by adding the webhook URL to your form settings. This enables instant notifications when responses arrive.

  1. 1Open your Typeform dashboard and select your form
  2. 2Go to Connect > Webhooks
  3. 3Click 'Add webhook'
  4. 4Paste the N8n webhook URL
  5. 5Click 'Save webhook'
What you should see: Typeform shows your webhook as 'Active' with a green status indicator.
Common mistake — Make sure your N8n workflow is saved and active before testing — inactive workflows reject webhooks
4

N8n Workflow > Execute Workflow

Test Webhook Connection

Submit a test response through your Typeform to verify the webhook fires correctly. This populates N8n with sample data for mapping.

  1. 1Click 'Execute Workflow' in N8n to start listening
  2. 2Fill out and submit your Typeform
  3. 3Return to N8n and check the webhook node output
What you should see: The webhook node displays JSON data containing your form submission with field IDs and values.
Common mistake — Copy the webhook URL carefully — it expires if you regenerate it, and any scenarios using the old URL will silently stop working.
n8n
▶ Run once
executed
Notion
Typeform
Typeform
🔔 notification
received
5

Workflow > Add Node > Apps > Notion

Add Notion Database Node

Connect N8n to your Notion workspace and select the target database. This node will create new rows from Typeform data.

  1. 1Click '+' after the webhook node
  2. 2Search for and select 'Notion' from the apps list
  3. 3Choose 'Database' > 'Create' operation
  4. 4Click 'Connect my account' and authorize N8n in Notion
What you should see: The Notion node shows 'Connected' status and loads your available databases in the dropdown.
Common mistake — If your database doesn't appear, check that your Notion integration has access to the specific page
6

Notion Node > Database dropdown

Select Target Database

Pick the Notion database where you want to store form responses. N8n will load the database schema for field mapping.

  1. 1Click the Database dropdown in the Notion node
  2. 2Select your target database from the list
  3. 3Wait for N8n to load the database properties
What you should see: The node displays all available database properties (columns) for mapping.
7

Notion Node > Properties > Add Expression

Map Form Fields to Database Properties

Connect each Typeform question to the corresponding Notion database column. Use the expression editor to reference webhook data.

  1. 1Click on each database property field
  2. 2Select 'Add Expression' from the dropdown
  3. 3Map Typeform fields using syntax like {{$json.form_response.answers[0].text}}
  4. 4Test each mapping with 'Execute Node'
What you should see: Each mapped field shows a preview of the actual data from your test submission.
Common mistake — Typeform answer arrays are ordered by question sequence — double-check array indices match your form structure
Notion fields
Name
Status
Assignee
Due Date
Priority
available as variables:
1.props.Name
1.props.Status
1.props.Assignee
1.props.Due Date
1.props.Priority
8

Notion Node > Multi-select Property > Expression

Handle Multi-Choice Questions

Transform Typeform's choice arrays into Notion-compatible formats. Multi-select and dropdown fields need special handling.

  1. 1For multi-select fields, use {{$json.form_response.answers[X].choices.map(choice => choice.label).join(', ')}}
  2. 2For single choice, use {{$json.form_response.answers[X].choice.label}}
  3. 3Test the expression with Execute Node
What you should see: Choice fields display properly formatted text instead of raw JSON objects.
9

Notion Node > Settings > Continue on Fail

Configure Error Handling

Set up the workflow to handle failures gracefully. This prevents data loss when Notion API calls fail or time out.

  1. 1Click the gear icon on the Notion node
  2. 2Set 'Continue on Fail' to true
  3. 3Add an 'If' node after Notion to check for errors
  4. 4Route failed executions to a separate error notification
What you should see: The workflow shows error handling paths and continues processing even when individual submissions fail.
Common mistake — Without error handling, one bad submission can break the entire workflow for future responses
10

Workflow > Active toggle > Test

Test End-to-End Flow

Submit another test response to verify the complete automation works. Check that data appears correctly in your Notion database.

  1. 1Activate the workflow with the toggle switch
  2. 2Submit a new response through your Typeform
  3. 3Check your Notion database for the new row
  4. 4Verify all mapped fields contain the correct data
What you should see: A new row appears in Notion within 5-10 seconds with all form data properly mapped to database columns.

Drop this into an n8n Code node.

JavaScript — Code Node{{$json.form_response.answers.reduce((acc, answer, index) => {acc[`question_${index}`] = answer.text || answer.choice?.label || answer.choices?.map(c => c.label).join(', '); return acc;}, {})}}
▸ Show code
{{$json.form_response.answers.reduce((acc, answer, index) => {acc[`question_${index}`] = answer.text || answer.choice?.label || answer.choices?.map(c => c.label).join(', '); return acc;}, {})}}

... expand to see full code

{{$json.form_response.answers.reduce((acc, answer, index) => {acc[`question_${index}`] = answer.text || answer.choice?.label || answer.choices?.map(c => c.label).join(', '); return acc;}, {})}}

Scaling Beyond 200+ submissions/day+ Records

If your volume exceeds 200+ submissions/day records, apply these adjustments.

1

Add Rate Limit Handling

Notion API allows 3 requests/second. Add a 350ms delay node between submissions if you expect bursts. Use the Wait node with {{Math.random() * 500}} to stagger concurrent requests.

2

Implement Retry Logic

Add an If node after Notion to catch 429 rate limit errors. Route failures to a 5-second Wait node, then back to the Notion insert. This handles temporary API limits automatically.

3

Monitor Database Size

Notion databases slow down after 10,000+ rows. Archive old responses monthly or split into multiple databases by date. Large databases cause timeout errors on property updates.

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use N8n for this if you need custom data transformation between Typeform and Notion. The expression editor handles complex field mapping that Zapier struggles with — like flattening nested choice arrays or combining multiple form fields into one database property. You also get unlimited executions on self-hosted instances. Skip N8n if you want zero setup time and don't mind paying per execution — Zapier connects these apps in 3 minutes.

Cost

This workflow uses 1 execution per form submission. At 500 responses/month, that's 500 executions total. N8n cloud starts at $20/month for 5,000 executions, so you're well under the limit. Self-hosted N8n is free with unlimited usage. Zapier would cost $20/month for the same volume (Starter plan), while Make charges $9/month for 1,000 operations but requires 2 operations per submission (webhook + database insert).

Tradeoffs

Zapier wins on setup speed — their Typeform trigger automatically parses form fields into readable names instead of generic array positions. Make offers better Notion field mapping with dropdown selectors for database properties. But N8n gives you the expression editor for complex transformations that the other platforms can't handle. You can merge multiple choice fields, format dates, or clean text data before sending to Notion.

Typeform's webhook payload changes structure based on question types — text answers use different JSON paths than multiple choice or file uploads. The answers array doesn't include question titles, only IDs, so you need to map by position or reference the form definition. Notion's API is strict about property types — sending a string to a number field fails the entire request. Test with different question types beyond basic text to catch these mismatches early.

Ideas for what to build next

  • Add Slack Notifications for New ResponsesSend a message to your team channel whenever high-priority form submissions arrive in Notion.
  • Create Response Follow-up AutomationAutomatically send confirmation emails to form submitters using their provided email address.
  • Build Response Analytics DashboardTrack submission volume and response patterns by sending summary data to Google Sheets or a BI tool.

Related guides

Was this guide helpful?
Notion + Typeform overviewn8n profile →