

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-timeUse case type
importReal-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.
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
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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Submitter Email | form_response.hidden.email | |
| Response Text | form_response.answers[0].text | |
| Submission Date | form_response.submitted_at | |
3 optional fields▸ show
| Choice Selection | form_response.answers[1].choice.label |
| Response ID | form_response.token |
| Form Name | form_response.form_id |
Step-by-Step Setup
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.
- 1Click 'New workflow' from your N8n dashboard
- 2Name it 'Typeform to Notion Sync'
- 3Click 'Save' to create the workflow
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.
- 1Click the '+' button to add a node
- 2Search for and select 'Webhook' from the trigger list
- 3Set HTTP Method to 'POST'
- 4Copy the webhook URL from the node panel
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.
- 1Open your Typeform dashboard and select your form
- 2Go to Connect > Webhooks
- 3Click 'Add webhook'
- 4Paste the N8n webhook URL
- 5Click 'Save webhook'
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.
- 1Click 'Execute Workflow' in N8n to start listening
- 2Fill out and submit your Typeform
- 3Return to N8n and check the webhook node output
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.
- 1Click '+' after the webhook node
- 2Search for and select 'Notion' from the apps list
- 3Choose 'Database' > 'Create' operation
- 4Click 'Connect my account' and authorize N8n in Notion
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.
- 1Click the Database dropdown in the Notion node
- 2Select your target database from the list
- 3Wait for N8n to load the database properties
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.
- 1Click on each database property field
- 2Select 'Add Expression' from the dropdown
- 3Map Typeform fields using syntax like {{$json.form_response.answers[0].text}}
- 4Test each mapping with 'Execute Node'
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.
- 1For multi-select fields, use {{$json.form_response.answers[X].choices.map(choice => choice.label).join(', ')}}
- 2For single choice, use {{$json.form_response.answers[X].choice.label}}
- 3Test the expression with Execute Node
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.
- 1Click the gear icon on the Notion node
- 2Set 'Continue on Fail' to true
- 3Add an 'If' node after Notion to check for errors
- 4Route failed executions to a separate error notification
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.
- 1Activate the workflow with the toggle switch
- 2Submit a new response through your Typeform
- 3Check your Notion database for the new row
- 4Verify all mapped fields contain the correct data
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.
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.
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.
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
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.
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).
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 Responses — Send a message to your team channel whenever high-priority form submissions arrive in Notion.
- →Create Response Follow-up Automation — Automatically send confirmation emails to form submitters using their provided email address.
- →Build Response Analytics Dashboard — Track submission volume and response patterns by sending summary data to Google Sheets or a BI tool.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup