NPS with Driver Analysis

Go beyond the basic NPS score with this advanced driver analysis survey. After capturing the standard 0-10 recommendation score, customers rate the importance of key drivers like product quality, customer service, pricing, and reliability. This two-dimensional analysis helps you identify which factors have the biggest impact on loyalty, enabling targeted improvements that will move your NPS score. Perfect for quarterly relationship surveys and strategic planning.

Customer ExperiencePopular

Try the Form

Help us understand what matters most to you
Recommendation Score
Not at all likely
Extremely likely
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
export function npsWithDriversSurvey(form: FormTs) {
// NPS with Driver Analysis - Understand what drives customer loyalty
// Demonstrates: RatingScale (NPS), MatrixQuestion, Slider, dynamic styling, conditional visibility
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Customer Loyalty Survey',
computedValue: () => 'Help us understand what matters most to you',
customStyles: {
background: 'linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%)',
color: 'white',
padding: '28px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: NPS Score
// ============================================
const npsSection = form.addSubform('npsSection', {
title: 'Recommendation Score',
customStyles: () => {
const category = npsSection.ratingScale('npsScore')?.npsCategory();
if (category === 'promoter') return { backgroundColor: '#dcfce7', padding: '20px', borderRadius: '8px', borderLeft: '4px solid #22c55e' };
if (category === 'passive') return { backgroundColor: '#fef9c3', padding: '20px', borderRadius: '8px', borderLeft: '4px solid #eab308' };
if (category === 'detractor') return { backgroundColor: '#fee2e2', padding: '20px', borderRadius: '8px', borderLeft: '4px solid #ef4444' };
return { padding: '20px', borderRadius: '8px', border: '2px dashed #e2e8f0' };
}
});
 
npsSection.addRow(row => {
row.addRatingScale('npsScore', {
preset: 'nps',
label: 'How likely are you to recommend us to a friend or colleague?',
showCategoryLabel: true,
showSegmentColors: true,
showConfettiOnPromoter: true,
isRequired: true
});
});
 
// ============================================
// SECTION 2: Driver Importance Matrix
// ============================================
const driversSection = form.addSubform('driversSection', {
title: () => {
const category = npsSection.ratingScale('npsScore')?.npsCategory();
if (category === 'promoter') return 'What Made Us Stand Out?';
if (category === 'detractor') return 'Where Did We Fall Short?';
return 'Rate the Importance of Each Factor';
},
isVisible: () => npsSection.ratingScale('npsScore')?.value() !== null,
customStyles: { backgroundColor: '#f8fafc', padding: '20px', borderRadius: '8px' }
});
 
driversSection.addRow(row => {
row.addTextPanel('driverInstructions', {
computedValue: () => {
const category = npsSection.ratingScale('npsScore')?.npsCategory();
if (category === 'promoter') return 'Rate how important each factor was in your positive experience:';
if (category === 'detractor') return 'Rate how important each factor was in your experience:';
return 'Rate how important each of these factors is to your overall satisfaction:';
},
customStyles: { color: '#64748b', marginBottom: '16px', fontSize: '14px' }
});
});
 
driversSection.addRow(row => {
row.addMatrixQuestion('driverImportance', {
label: '',
rows: [
{ id: 'quality', label: 'Product/Service Quality', description: 'The quality of what we deliver', isRequired: true },
{ id: 'support', label: 'Customer Support', description: 'Responsiveness and helpfulness of our team', isRequired: true },
{ id: 'value', label: 'Value for Money', description: 'Fair pricing relative to quality received', isRequired: true },
{ id: 'reliability', label: 'Reliability', description: 'Consistency and dependability', isRequired: true },
{ id: 'ease', label: 'Ease of Use', description: 'How simple and intuitive the experience is', isRequired: true },
{ id: 'communication', label: 'Communication', description: 'Clear and timely updates', isRequired: true },
{ id: 'innovation', label: 'Innovation', description: 'New features and improvements', isRequired: false }
],
columns: [
{ id: 'not-important', label: 'Not Important' },
{ id: 'somewhat', label: 'Somewhat' },
{ id: 'important', label: 'Important' },
{ id: 'very-important', label: 'Very Important' },
{ id: 'critical', label: 'Critical' }
],
striped: true,
fullWidth: true
});
});
 
// ============================================
// SECTION 3: Top Driver Deep Dive
// ============================================
const deepDiveSection = form.addSubform('deepDiveSection', {
title: 'Tell Us More',
isVisible: () => {
const matrix = driversSection.matrixQuestion('driverImportance')?.value();
return matrix !== null && matrix !== undefined && Object.keys(matrix).length >= 3;
},
customStyles: { backgroundColor: '#fff', padding: '20px', borderRadius: '8px', border: '1px solid #e2e8f0' }
});
 
deepDiveSection.addRow(row => {
row.addRadioButton('topDriver', {
label: 'Which factor had the BIGGEST impact on your score?',
options: [
{ id: 'quality', name: 'Product/Service Quality' },
{ id: 'support', name: 'Customer Support' },
{ id: 'value', name: 'Value for Money' },
{ id: 'reliability', name: 'Reliability' },
{ id: 'ease', name: 'Ease of Use' },
{ id: 'communication', name: 'Communication' },
{ id: 'innovation', name: 'Innovation' },
{ id: 'other', name: 'Other' }
],
orientation: 'vertical'
});
});
 
deepDiveSection.addSpacer();
 
deepDiveSection.addRow(row => {
row.addTextarea('driverFeedback', {
label: () => {
const topDriver = deepDiveSection.radioButton('topDriver')?.value();
const category = npsSection.ratingScale('npsScore')?.npsCategory();
const driverLabels: Record<string, string> = {
'quality': 'product/service quality',
'support': 'customer support',
'value': 'value for money',
'reliability': 'reliability',
'ease': 'ease of use',
'communication': 'communication',
'innovation': 'innovation',
'other': 'this factor'
};
const driverLabel = driverLabels[topDriver || ''] || 'this';
 
if (category === 'promoter') {
return `What specifically impressed you about our ${driverLabel}?`;
} else if (category === 'detractor') {
return `What specifically disappointed you about our ${driverLabel}?`;
}
return `Please share specific feedback about our ${driverLabel}:`;
},
placeholder: 'Share specific examples or suggestions...',
rows: 3,
autoExpand: true,
isVisible: () => deepDiveSection.radioButton('topDriver')?.value() !== null
});
});
 
// ============================================
// SECTION 4: Overall Satisfaction Slider
// ============================================
const satisfactionSection = form.addSubform('satisfactionSection', {
title: 'Overall Satisfaction',
isVisible: () => npsSection.ratingScale('npsScore')?.value() !== null,
customStyles: { padding: '20px', borderRadius: '8px', backgroundColor: '#faf5ff' }
});
 
satisfactionSection.addRow(row => {
row.addSlider('overallSatisfaction', {
label: 'How satisfied are you with your overall experience?',
min: 0,
max: 100,
step: 5,
defaultValue: 50,
unit: '%',
showValue: true
});
});
 
satisfactionSection.addRow(row => {
row.addTextPanel('satisfactionLabel', {
computedValue: () => {
const value = satisfactionSection.slider('overallSatisfaction')?.value() ?? 50;
if (value >= 90) return 'Excellent! You are highly satisfied.';
if (value >= 70) return 'Good! You are satisfied overall.';
if (value >= 50) return 'Neutral. There is room for improvement.';
if (value >= 30) return 'Below expectations. We need to do better.';
return 'Dissatisfied. We apologize and want to make it right.';
},
customStyles: () => {
const value = satisfactionSection.slider('overallSatisfaction')?.value() ?? 50;
const baseStyles = { textAlign: 'center', padding: '12px', borderRadius: '6px', fontWeight: '500' };
if (value >= 70) return { ...baseStyles, backgroundColor: '#dcfce7', color: '#166534' };
if (value >= 50) return { ...baseStyles, backgroundColor: '#fef9c3', color: '#854d0e' };
return { ...baseStyles, backgroundColor: '#fee2e2', color: '#991b1b' };
}
});
});
 
// ============================================
// SECTION 5: Improvement Priorities (for non-promoters)
// ============================================
const improvementSection = form.addSubform('improvementSection', {
title: 'Improvement Priorities',
isVisible: () => {
const score = npsSection.ratingScale('npsScore')?.value();
return score !== null && score !== undefined && score < 9;
},
customStyles: { backgroundColor: '#fef3c7', padding: '20px', borderRadius: '8px' }
});
 
improvementSection.addRow(row => {
row.addCheckboxList('improvementAreas', {
label: 'Which areas should we prioritize improving? (Select up to 3)',
options: [
{ id: 'faster-response', name: 'Faster response times' },
{ id: 'better-quality', name: 'Higher quality products/services' },
{ id: 'lower-prices', name: 'More competitive pricing' },
{ id: 'easier-use', name: 'Simpler, easier experience' },
{ id: 'more-features', name: 'More features/options' },
{ id: 'better-communication', name: 'Clearer communication' },
{ id: 'more-reliable', name: 'Improved reliability' },
{ id: 'better-support', name: 'Better customer support' }
],
orientation: 'vertical',
max: 3
});
});
 
// ============================================
// SECTION 6: Additional Comments
// ============================================
const commentsSection = form.addSubform('commentsSection', {
title: 'Additional Thoughts',
isVisible: () => npsSection.ratingScale('npsScore')?.value() !== null
});
 
commentsSection.addSpacer();
 
commentsSection.addRow(row => {
row.addTextarea('additionalComments', {
label: 'Is there anything else you would like to share with us?',
placeholder: 'Any additional feedback, suggestions, or concerns...',
rows: 3,
autoExpand: true
});
});
 
// ============================================
// SECTION 7: Summary
// ============================================
const summarySection = form.addSubform('summary', {
title: 'Your Feedback Summary',
isVisible: () => {
const matrix = driversSection.matrixQuestion('driverImportance')?.value();
return matrix !== null && matrix !== undefined && Object.keys(matrix).length >= 3;
}
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const score = npsSection.ratingScale('npsScore')?.value();
const category = npsSection.ratingScale('npsScore')?.npsCategory();
const satisfaction = satisfactionSection.slider('overallSatisfaction')?.value() ?? 50;
const topDriver = deepDiveSection.radioButton('topDriver')?.value();
const matrix = driversSection.matrixQuestion('driverImportance')?.value() || {};
const improvements = improvementSection.checkboxList('improvementAreas')?.value() || [];
 
if (score === null || score === undefined) return '';
 
const categoryEmoji: Record<string, string> = {
'promoter': '🎉',
'passive': '🤔',
'detractor': '😟'
};
 
const driverLabels: Record<string, string> = {
'quality': 'Product Quality',
'support': 'Customer Support',
'value': 'Value for Money',
'reliability': 'Reliability',
'ease': 'Ease of Use',
'communication': 'Communication',
'innovation': 'Innovation',
'other': 'Other Factor'
};
 
// Count critical drivers
let criticalCount = 0;
Object.values(matrix).forEach(val => {
if (val === 'critical' || val === 'very-important') criticalCount++;
});
 
let summary = `${categoryEmoji[category || '']} Feedback Summary\n`;
summary += `${'═'.repeat(30)}\n\n`;
summary += `📊 NPS Score: ${score}/10 (${category?.charAt(0).toUpperCase()}${category?.slice(1)})\n`;
summary += `📈 Overall Satisfaction: ${satisfaction}%\n`;
summary += `🎯 Drivers Rated: ${Object.keys(matrix).length}/7\n`;
summary += `⚡ High Priority Drivers: ${criticalCount}\n`;
 
if (topDriver && driverLabels[topDriver]) {
summary += `\n🔑 Key Driver: ${driverLabels[topDriver]}`;
}
 
if (improvements.length > 0) {
summary += `\n\n📋 Improvement Areas: ${improvements.length} selected`;
}
 
return summary;
},
customStyles: () => {
const category = npsSection.ratingScale('npsScore')?.npsCategory();
const baseStyles = {
padding: '20px',
borderRadius: '8px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '14px'
};
 
if (category === 'promoter') {
return { ...baseStyles, backgroundColor: '#dcfce7', borderLeft: '4px solid #22c55e' };
} else if (category === 'passive') {
return { ...baseStyles, backgroundColor: '#fef9c3', borderLeft: '4px solid #eab308' };
} else if (category === 'detractor') {
return { ...baseStyles, backgroundColor: '#fee2e2', borderLeft: '4px solid #ef4444' };
}
return { ...baseStyles, backgroundColor: '#f1f5f9' };
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: () => {
const category = npsSection.ratingScale('npsScore')?.npsCategory();
if (category === 'promoter') return 'Submit Positive Feedback';
if (category === 'detractor') return 'Submit & Help Us Improve';
return 'Submit Feedback';
},
isVisible: () => npsSection.ratingScale('npsScore')?.value() !== null
});
 
form.configureCompletionScreen({
type: 'text',
title: () => {
const category = npsSection.ratingScale('npsScore')?.npsCategory();
if (category === 'promoter') return 'Thank You for Being a Promoter!';
if (category === 'detractor') return 'Thank You for Your Honesty';
return 'Thank You for Your Feedback!';
},
message: () => {
const category = npsSection.ratingScale('npsScore')?.npsCategory();
if (category === 'promoter') {
return 'Your support means everything to us. Your driver analysis will help us maintain what makes us great!';
}
if (category === 'detractor') {
return 'We truly appreciate your honest feedback. Your driver analysis will directly inform our improvement roadmap.';
}
return 'Your detailed feedback helps us understand what matters most. We will use your driver analysis to guide our priorities.';
}
});
}
 

Frequently Asked Questions

What is NPS driver analysis?

NPS driver analysis goes beyond the basic 0-10 score to understand WHY customers give certain ratings. By having customers rate the importance of various factors, you can identify which drivers most influence their loyalty and prioritize improvements accordingly.

Which drivers should I include?

Common NPS drivers include: Product/Service Quality, Customer Support, Pricing/Value, Ease of Use, Reliability, Communication, and Innovation. Choose 5-8 drivers most relevant to your business. Too many can cause survey fatigue.

How do I analyze the driver data?

Create a driver importance matrix by cross-referencing driver ratings with NPS categories. Drivers rated as highly important by detractors but not promoters indicate areas needing improvement. Drivers important to promoters reveal your competitive advantages.

How often should I run this survey?

This deeper analysis survey works best quarterly or bi-annually for relationship NPS. It's too detailed for transactional NPS after every interaction. Use it for strategic planning and tracking improvement initiatives.

Can I customize the driver categories?

Yes. The template includes common drivers, but you should customize them for your industry. A SaaS company might add 'Feature Set' and 'Integration Options', while a retailer might add 'Store Experience' and 'Product Selection'.