

How to Route NPS Survey Responses from Typeform to Notion with N8n
Automatically route Typeform NPS survey responses to a Notion database with score-based tagging and follow-up task assignment.
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 NPS categorization logic and process 300+ survey responses monthly
Not ideal for
Non-technical teams or low-volume surveys under 50 responses per month
Sync type
real-timeUse case type
importReal-World Example
A 25-person B2B SaaS company sends quarterly NPS surveys to 800+ customers. Before automation, their success team manually reviewed each response in Typeform, copied Detractor feedback to Notion tasks, and often missed urgent follow-ups for 2-3 days. Now Detractor responses create high-priority tasks within seconds, while Promoter feedback automatically tags potential case study candidates. The team cut response-to-outreach time from days to hours.
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 | ||
| NPS Score | nps_score | |
| Customer Email | email | |
| Response Category | category | |
| Survey Date | submitted_at | |
2 optional fields▸ show
| Feedback Comments | comments |
| Customer Name | customer_name |
Step-by-Step Setup
Notion Workspace > + New > Database
Create Notion Database Structure
Set up your Notion database with proper fields for NPS data. You need columns for response text, score, customer info, and automated tags.
- 1Open Notion and click '+ New page' then select 'Database - Full page'
- 2Create text property 'Customer Name' and email property 'Email'
- 3Add number property 'NPS Score' with number format
- 4Create select property 'Category' with options: Promoter, Passive, Detractor
- 5Add text property 'Comments' for open-ended feedback
- 6Create checkbox property 'Follow-up Required'
notion.so/my-integrations
Get Notion Integration Token
N8n needs an internal integration token to write to your Notion database. This is different from the public API and requires specific permissions.
- 1Go to notion.so/my-integrations in your browser
- 2Click '+ New integration' button
- 3Name it 'N8n NPS Integration' and select your workspace
- 4Copy the Internal Integration Token that appears
- 5Go back to your database page and click 'Share' in top right
- 6Click 'Invite' and search for your integration name to grant access
Typeform > Connect > Webhooks
Configure Typeform Webhook
Set up Typeform to send NPS responses directly to N8n when submitted. This creates real-time data flow instead of polling.
- 1Open your Typeform and go to the Connect panel
- 2Click 'Webhooks' in the integrations list
- 3Click 'Add webhook' button
- 4Enter your N8n webhook URL (you'll get this in the next step)
- 5Select 'Complete responses' as the trigger event
- 6Click 'Save webhook'
N8n > New Workflow > + Node > Webhook
Create N8n Webhook Trigger
Start your N8n workflow with a webhook that receives Typeform submissions. This node listens for incoming HTTP requests from Typeform.
- 1Create new workflow in N8n dashboard
- 2Click the '+' to add first node and select 'Webhook'
- 3Set HTTP Method to 'POST'
- 4Leave Path field blank for default webhook URL
- 5Click 'Listen for Test Event'
- 6Copy the webhook URL that appears
Typeform Preview > Submit > N8n Webhook Node
Test Data Capture
Submit a test NPS response through your Typeform to capture the actual data structure N8n will receive. This ensures proper field mapping.
- 1Go back to your Typeform preview and submit a test response
- 2Include a numeric NPS score (0-10) and some comment text
- 3Return to N8n webhook node and check for incoming data
- 4Click 'Use Workflow' once you see the test data appear
- 5Expand the data tree to see field names like 'answers' and 'form_response'
+ Node > Code > Run Once for All Items
Add NPS Score Extraction
Extract the numeric NPS score from Typeform's nested response data and categorize it. Typeform wraps answers in arrays that need proper parsing.
- 1Add Code node after the webhook
- 2Set Mode to 'Run Once for All Items'
- 3Paste code to extract NPS score from items[0].json.form_response.answers
- 4Add logic to categorize: 9-10 = Promoter, 7-8 = Passive, 0-6 = Detractor
- 5Return structured object with score, category, and other response fields
+ Node > Notion > Database > Create
Configure Notion Node
Add the Notion node to write categorized NPS data to your database. This requires the database ID and proper field mapping.
- 1Add 'Notion' node after the Code node
- 2Select 'Database' resource and 'Create' operation
- 3Paste your Notion integration token in credentials
- 4Enter your database ID (found in the database URL)
- 5Map Code node outputs to Notion fields
- 6Set 'NPS Score' field to {{$json.nps_score}}
- 7Set 'Category' field to {{$json.category}}
+ Node > IF > Condition
Add Conditional Follow-up Logic
Create branching logic to assign follow-up tasks based on NPS category. Detractors need immediate attention while Promoters get different treatment.
- 1Add 'IF' node after Notion node
- 2Set condition: {{$json.category}} equals 'Detractor'
- 3Connect 'true' output to another Notion node for task creation
- 4Set this second Notion node to your tasks database
- 5Map detractor info to create urgent follow-up task
- 6Connect 'false' output to merge node for other categories
Workflow Settings > Error Handling
Set Up Error Handling
Add error handling to catch failed Notion writes or API timeouts. Without this, one bad response breaks the entire workflow.
- 1Click workflow settings (gear icon)
- 2Enable 'Continue on Failure' for Notion nodes
- 3Add 'HTTP Request' node for error notifications
- 4Set it to POST to a Slack webhook or email service
- 5Configure error message with failed response details
- 6Connect all error outputs to this notification node
Typeform > Submit > N8n Execution Log > Notion Database
Test Complete Workflow
Run end-to-end test with a real NPS response to verify all data flows correctly. Check that scores categorize properly and follow-up tasks generate.
- 1Submit new test response through your live Typeform
- 2Watch each node execute in N8n workflow panel
- 3Verify new row appears in Notion NPS database with correct category
- 4Check if Detractor responses create tasks in your tasks database
- 5Review any error messages in node output panels
- 6Test with different NPS scores (2, 7, 10) to verify all categories
Workflow > Toggle Active > Settings
Activate Workflow
Enable the workflow for production use and set up monitoring. Once active, it will process all incoming NPS responses automatically.
- 1Click the workflow toggle to 'Active' state
- 2Set execution log retention to 7 days minimum
- 3Add workflow to a folder for organization
- 4Test webhook URL is still responding with curl or Postman
- 5Document the webhook URL for your team
- 6Set up monitoring alerts for failed executions
Drop this into an n8n Code node.
JavaScript — Code Node// Enhanced NPS categorization with custom thresholds▸ Show code
// Enhanced NPS categorization with custom thresholds const score = parseInt(items[0].json.form_response.answers.find(a => a.field.ref === 'nps_score').number); const email = items[0].json.form_response.answers.find(a => a.field.type === 'email')?.email || '';
... expand to see full code
// Enhanced NPS categorization with custom thresholds
const score = parseInt(items[0].json.form_response.answers.find(a => a.field.ref === 'nps_score').number);
const email = items[0].json.form_response.answers.find(a => a.field.type === 'email')?.email || '';
// Custom scoring for enterprise customers
const isEnterprise = email.includes('@enterprise-domain.com');
const promoterThreshold = isEnterprise ? 8 : 9; // Lower bar for enterprise
let category;
if (score >= promoterThreshold) category = 'Promoter';
else if (score >= 7) category = 'Passive';
else category = 'Detractor';
return [{
nps_score: score,
category: category,
priority: (category === 'Detractor' && isEnterprise) ? 'Urgent' : 'Normal',
email: email
}];Scaling Beyond 500+ responses/month+ Records
If your volume exceeds 500+ responses/month records, apply these adjustments.
Add Rate Limit Delays
Insert 'Wait' nodes with 1-second delays before each Notion write. Notion's API allows 3 requests/second maximum. Without delays, bulk survey campaigns will hit 429 rate limit errors.
Use Bulk Database Operations
Replace individual Notion 'Create' nodes with batch operations using N8n's 'Merge' node. Group 10-20 responses into single API calls to reduce execution count and improve reliability during survey launches.
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 want full control over NPS categorization logic and don't mind writing JavaScript code nodes. You can customize the scoring thresholds (maybe 8+ is Promoter for your business), add complex follow-up routing, and avoid per-execution fees on high survey volumes. Pick Zapier instead if your team doesn't code - their NPS app has built-in categorization and costs less to set up.
Real math for costs: Each survey response triggers 3-4 N8n executions (webhook, code processing, Notion write, possible task creation). At 200 NPS responses per month, that's 800 executions. N8n cloud's starter plan includes 5,000 executions for $20/month. Make would cost $9/month for the same volume, but Zapier hits $20/month after 100 responses. N8n becomes cheapest once you exceed 300+ monthly responses.
Make handles Notion better with native database property mapping - no JSON wrestling required. Zapier's Typeform trigger captures response metadata like completion time and referrer that N8n webhooks miss. But N8n wins on customization: you can add sentiment analysis to comments, create different task types based on score ranges, or route high-value customer feedback to different databases. Neither Make nor Zapier offers that flexibility without multiple zaps.
You'll hit Notion's API rate limits at 3+ responses per second during survey campaigns. Typeform webhook retries can create duplicate entries if your workflow is slow - add a 1-second delay before the Notion write. The biggest gotcha: Typeform's webhook payload changes when you edit form questions, breaking your field mapping. Pin field references by question ID, not position in the answers array.
Ideas for what to build next
- →Add Slack Notifications for Detractors — Create immediate alerts in your customer success Slack channel when Detractor responses arrive. Include customer details and response text for faster follow-up.
- →Build NPS Trend Dashboard — Connect your Notion NPS database to a visualization tool like Retool or Grafana. Track score trends over time and identify patterns by customer segment or product area.
- →Implement Smart Follow-up Sequences — Add email automation for Promoters asking for reviews or referrals. Use different messaging for each category - thank Promoters, survey Passives for improvement ideas, and schedule calls with Detractors.
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