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

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-time

Use case type

import

Real-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.

/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.

Active Typeform account with NPS survey form already built
Notion workspace with admin permissions to create integrations
N8n instance running (self-hosted or cloud)
Basic understanding of JSON data structures

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
NPS Scorenps_score
Customer Emailemail
Response Categorycategory
Survey Datesubmitted_at
2 optional fields▸ show
Feedback Commentscomments
Customer Namecustomer_name

Step-by-Step Setup

1

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.

  1. 1Open Notion and click '+ New page' then select 'Database - Full page'
  2. 2Create text property 'Customer Name' and email property 'Email'
  3. 3Add number property 'NPS Score' with number format
  4. 4Create select property 'Category' with options: Promoter, Passive, Detractor
  5. 5Add text property 'Comments' for open-ended feedback
  6. 6Create checkbox property 'Follow-up Required'
What you should see: You should see a database table with 6 columns ready for NPS response data.
2

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.

  1. 1Go to notion.so/my-integrations in your browser
  2. 2Click '+ New integration' button
  3. 3Name it 'N8n NPS Integration' and select your workspace
  4. 4Copy the Internal Integration Token that appears
  5. 5Go back to your database page and click 'Share' in top right
  6. 6Click 'Invite' and search for your integration name to grant access
What you should see: Your integration should appear in the database's shared connections list.
Common mistake — The integration won't see your database until you explicitly share it in step 6
3

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.

  1. 1Open your Typeform and go to the Connect panel
  2. 2Click 'Webhooks' in the integrations list
  3. 3Click 'Add webhook' button
  4. 4Enter your N8n webhook URL (you'll get this in the next step)
  5. 5Select 'Complete responses' as the trigger event
  6. 6Click 'Save webhook'
What you should see: Webhook status should show 'Active' with your N8n URL listed.
Common mistake — Don't select 'Partial responses' or you'll get incomplete NPS data
4

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.

  1. 1Create new workflow in N8n dashboard
  2. 2Click the '+' to add first node and select 'Webhook'
  3. 3Set HTTP Method to 'POST'
  4. 4Leave Path field blank for default webhook URL
  5. 5Click 'Listen for Test Event'
  6. 6Copy the webhook URL that appears
What you should see: You should see a webhook URL like https://your-n8n.com/webhook/abc123 ready to receive data.
Common mistake — Keep this browser tab open - you'll need to submit a test Typeform response to capture the data structure
n8n
+
click +
search apps
Notion
NO
Notion
Create N8n Webhook Trigger
Notion
NO
module added
5

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.

  1. 1Go back to your Typeform preview and submit a test response
  2. 2Include a numeric NPS score (0-10) and some comment text
  3. 3Return to N8n webhook node and check for incoming data
  4. 4Click 'Use Workflow' once you see the test data appear
  5. 5Expand the data tree to see field names like 'answers' and 'form_response'
What you should see: The webhook node should display your test submission data with nested fields visible.
Common mistake — If no data appears after 30 seconds, check that your webhook URL in Typeform exactly matches the N8n URL
n8n
▶ Run once
executed
Notion
Typeform
Typeform
🔔 notification
received
6

+ 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.

  1. 1Add Code node after the webhook
  2. 2Set Mode to 'Run Once for All Items'
  3. 3Paste code to extract NPS score from items[0].json.form_response.answers
  4. 4Add logic to categorize: 9-10 = Promoter, 7-8 = Passive, 0-6 = Detractor
  5. 5Return structured object with score, category, and other response fields
What you should see: Code node output should show clean fields like nps_score: 8 and category: 'Passive'.
Common mistake — Typeform answer arrays can shift position if you reorder questions - reference by field ID not array index
7

+ 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.

  1. 1Add 'Notion' node after the Code node
  2. 2Select 'Database' resource and 'Create' operation
  3. 3Paste your Notion integration token in credentials
  4. 4Enter your database ID (found in the database URL)
  5. 5Map Code node outputs to Notion fields
  6. 6Set 'NPS Score' field to {{$json.nps_score}}
  7. 7Set 'Category' field to {{$json.category}}
What you should see: Field mapping should show green checkmarks with your database properties listed.
Common mistake — The database ID is the 32-character string in your Notion URL, not the page title
8

+ 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.

  1. 1Add 'IF' node after Notion node
  2. 2Set condition: {{$json.category}} equals 'Detractor'
  3. 3Connect 'true' output to another Notion node for task creation
  4. 4Set this second Notion node to your tasks database
  5. 5Map detractor info to create urgent follow-up task
  6. 6Connect 'false' output to merge node for other categories
What you should see: You should see two paths: one for Detractors leading to task creation, one for others.
Common mistake — Create a separate tasks database first, or this step will fail - don't try to add tasks to the same NPS responses database
Notion
NO
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Typeform
TY
notified
9

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.

  1. 1Click workflow settings (gear icon)
  2. 2Enable 'Continue on Failure' for Notion nodes
  3. 3Add 'HTTP Request' node for error notifications
  4. 4Set it to POST to a Slack webhook or email service
  5. 5Configure error message with failed response details
  6. 6Connect all error outputs to this notification node
What you should see: Error paths should be connected with red dotted lines to your notification node.
Common mistake — Don't enable 'Continue on Failure' globally - only on nodes where you want to catch errors, not skip important data
10

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.

  1. 1Submit new test response through your live Typeform
  2. 2Watch each node execute in N8n workflow panel
  3. 3Verify new row appears in Notion NPS database with correct category
  4. 4Check if Detractor responses create tasks in your tasks database
  5. 5Review any error messages in node output panels
  6. 6Test with different NPS scores (2, 7, 10) to verify all categories
What you should see: New rows should appear in Notion within 10-15 seconds of Typeform submission.
Common mistake — Test with scores at category boundaries (6, 7, 8, 9) - off-by-one errors in categorization logic are common
11

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.

  1. 1Click the workflow toggle to 'Active' state
  2. 2Set execution log retention to 7 days minimum
  3. 3Add workflow to a folder for organization
  4. 4Test webhook URL is still responding with curl or Postman
  5. 5Document the webhook URL for your team
  6. 6Set up monitoring alerts for failed executions
What you should see: Workflow status should show 'Active' with green indicator and recent execution timestamps.
Common mistake — N8n workflows can deactivate automatically after extended errors - check status weekly if response volume is low

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.

1

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.

2

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

VerdictWhy n8n for this workflow

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.

Cost

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.

Tradeoffs

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 DetractorsCreate 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 DashboardConnect 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 SequencesAdd 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

Was this guide helpful?
Notion + Typeform overviewn8n profile →