Post-Upgrade Feedback Survey

Understanding why customers upgrade and whether the upgrade meets expectations is critical for reducing churn and optimizing pricing. This survey captures the complete upgrade experience: what motivated the change, which new features are most valued, whether expectations were met, and perceived value for money. Use it to validate your tier structure, identify upsell opportunities, and ensure upgrade satisfaction leads to long-term retention.

Product Feedback

Try the Form

You recently upgraded your plan. We'd love to hear about your experience so far.
Your Upgrade
 
Overall Satisfaction
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
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
export function upgradeFeedbackSurvey(form: FormTs) {
// Post-Upgrade Feedback Survey for SaaS/Subscription Products
// Demonstrates: Dropdown, StarRating, Slider, EmojiRating, CheckboxList, RadioButton, MatrixQuestion
// Advanced: Conditional visibility, Dynamic labels, Value perception analysis, Expectation matching
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'How is Your Upgrade Going?',
computedValue: () => "You recently upgraded your plan. We'd love to hear about your experience so far.",
customStyles: {
backgroundColor: '#059669',
color: 'white',
padding: '24px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: Upgrade Details
// ============================================
const upgradeSection = form.addSubform('upgradeSection', {
title: 'Your Upgrade'
});
 
upgradeSection.addRow(row => {
row.addDropdown('previousPlan', {
label: 'What plan were you on before?',
options: [
{ id: 'free', name: 'Free / Trial' },
{ id: 'starter', name: 'Starter' },
{ id: 'basic', name: 'Basic' },
{ id: 'professional', name: 'Professional' },
{ id: 'business', name: 'Business' },
{ id: 'other', name: 'Other' }
],
placeholder: 'Select your previous plan'
}, '1fr');
row.addDropdown('currentPlan', {
label: 'What plan are you on now?',
options: [
{ id: 'starter', name: 'Starter' },
{ id: 'basic', name: 'Basic' },
{ id: 'professional', name: 'Professional' },
{ id: 'business', name: 'Business' },
{ id: 'enterprise', name: 'Enterprise' },
{ id: 'other', name: 'Other' }
],
placeholder: 'Select your current plan'
}, '1fr');
});
 
upgradeSection.addSpacer({ height: '16px' });
 
upgradeSection.addRow(row => {
row.addRadioButton('upgradeReason', {
label: 'What was the main reason for upgrading?',
options: [
{ id: 'features', name: 'Needed specific features' },
{ id: 'limits', name: 'Hit usage limits' },
{ id: 'team', name: 'Team/user growth' },
{ id: 'support', name: 'Better support options' },
{ id: 'security', name: 'Security/compliance needs' },
{ id: 'value', name: 'Better value at higher tier' },
{ id: 'other', name: 'Other reason' }
],
orientation: 'vertical'
});
});
 
upgradeSection.addRow(row => {
row.addTextbox('upgradeReasonOther', {
label: 'Please specify:',
placeholder: 'What was your reason for upgrading?',
isVisible: () => upgradeSection.radioButton('upgradeReason')?.value() === 'other',
isRequired: () => upgradeSection.radioButton('upgradeReason')?.value() === 'other'
});
});
 
// ============================================
// SECTION 2: Initial Satisfaction
// ============================================
const satisfactionSection = form.addSubform('satisfactionSection', {
title: 'Overall Satisfaction',
customStyles: () => {
const satisfaction = satisfactionSection.emojiRating('upgradeSatisfaction')?.value();
if (satisfaction === 'excellent' || satisfaction === 'good') {
return { backgroundColor: '#ecfdf5', padding: '20px', borderRadius: '10px' };
}
if (satisfaction === 'bad' || satisfaction === 'very-bad') {
return { backgroundColor: '#fef2f2', padding: '20px', borderRadius: '10px' };
}
return { backgroundColor: '#f8fafc', padding: '20px', borderRadius: '10px' };
}
});
 
satisfactionSection.addRow(row => {
row.addEmojiRating('upgradeSatisfaction', {
label: 'How satisfied are you with your upgrade so far?',
preset: 'satisfaction',
size: 'lg',
showLabels: true,
alignment: 'center'
});
});
 
// Conditional follow-up based on satisfaction
satisfactionSection.addSpacer({ height: '16px' });
 
satisfactionSection.addRow(row => {
row.addTextarea('satisfactionReason', {
label: () => {
const satisfaction = satisfactionSection.emojiRating('upgradeSatisfaction')?.value();
if (satisfaction === 'excellent' || satisfaction === 'good') {
return "Great to hear! What's been the best part of upgrading?";
}
if (satisfaction === 'bad' || satisfaction === 'very-bad') {
return "We're sorry to hear that. What hasn't met your expectations?";
}
return "What's been your experience with the upgrade?";
},
placeholder: 'Share your thoughts...',
rows: 3,
autoExpand: true,
isVisible: () => satisfactionSection.emojiRating('upgradeSatisfaction')?.value() != null
});
});
 
// ============================================
// SECTION 3: Expectations vs Reality
// ============================================
const expectationsSection = form.addSubform('expectationsSection', {
title: 'Expectations vs Reality',
isVisible: () => satisfactionSection.emojiRating('upgradeSatisfaction')?.value() != null
});
 
expectationsSection.addRow(row => {
row.addRatingScale('metExpectations', {
preset: 'likert-5',
label: 'How well has the upgrade met your expectations?',
lowLabel: 'Far below',
highLabel: 'Far exceeded',
size: 'md',
alignment: 'center'
});
});
 
expectationsSection.addSpacer({ height: '16px' });
 
expectationsSection.addRow(row => {
row.addMatrixQuestion('expectationMatrix', {
label: 'How do specific aspects compare to what you expected?',
rows: [
{ id: 'features', label: 'Feature quality', description: 'Compared to what was promised' },
{ id: 'performance', label: 'Performance/Speed', description: 'System responsiveness' },
{ id: 'usability', label: 'Ease of use', description: 'Of the new features' },
{ id: 'support', label: 'Support quality', description: 'If you\'ve used support' },
{ id: 'value', label: 'Overall value', description: 'For the price paid' }
],
columns: [
{ id: 'worse', label: 'Worse' },
{ id: 'as-expected', label: 'As Expected' },
{ id: 'better', label: 'Better' },
{ id: 'na', label: 'N/A' }
],
selectionMode: 'single',
striped: true,
fullWidth: true
});
});
 
// ============================================
// SECTION 4: New Features Experience
// ============================================
const featuresSection = form.addSubform('featuresSection', {
title: 'New Features',
isVisible: () => satisfactionSection.emojiRating('upgradeSatisfaction')?.value() != null
});
 
featuresSection.addRow(row => {
row.addCheckboxList('valuedFeatures', {
label: 'Which new features have been most valuable to you?',
options: [
{ id: 'analytics', name: 'Advanced analytics/reporting' },
{ id: 'integrations', name: 'Additional integrations' },
{ id: 'automation', name: 'Automation capabilities' },
{ id: 'collaboration', name: 'Team collaboration features' },
{ id: 'storage', name: 'Increased storage/limits' },
{ id: 'customization', name: 'Customization options' },
{ id: 'support', name: 'Priority support' },
{ id: 'security', name: 'Enhanced security features' },
{ id: 'api', name: 'API access' },
{ id: 'other', name: 'Other' }
],
orientation: 'vertical'
});
});
 
featuresSection.addSpacer({ height: '16px' });
 
featuresSection.addRow(row => {
row.addRadioButton('featureDiscovery', {
label: 'How easy was it to discover and start using the new features?',
options: [
{ id: 'very-easy', name: 'Very easy - intuitive' },
{ id: 'easy', name: 'Easy - minimal learning' },
{ id: 'moderate', name: 'Moderate - some exploration needed' },
{ id: 'difficult', name: 'Difficult - needed help' },
{ id: 'very-difficult', name: 'Very difficult - still figuring out' }
],
orientation: 'vertical'
});
});
 
// ============================================
// SECTION 5: Value Perception
// ============================================
const valueSection = form.addSubform('valueSection', {
title: 'Value for Money',
isVisible: () => satisfactionSection.emojiRating('upgradeSatisfaction')?.value() != null,
customStyles: { backgroundColor: '#f8fafc', padding: '20px', borderRadius: '10px' }
});
 
valueSection.addRow(row => {
row.addSlider('valueRating', {
label: 'How would you rate the value for money of your new plan?',
min: 1,
max: 10,
step: 1,
showValue: true,
defaultValue: 5
});
});
 
valueSection.addSpacer({ height: '8px' });
 
valueSection.addRow(row => {
row.addTextPanel('valueScale', {
computedValue: () => {
const value = valueSection.slider('valueRating')?.value();
if (value == null) return '1 = Poor value, 10 = Excellent value';
if (value <= 3) return 'You feel the price is too high for what you get';
if (value <= 5) return 'You feel the value is about fair';
if (value <= 7) return 'You feel you\'re getting good value';
return 'You feel you\'re getting excellent value!';
},
customStyles: () => {
const value = valueSection.slider('valueRating')?.value();
const baseStyles = { fontSize: '13px', textAlign: 'center', padding: '8px' };
if (value != null && value <= 3) return { ...baseStyles, color: '#dc2626' };
if (value != null && value >= 8) return { ...baseStyles, color: '#059669' };
return { ...baseStyles, color: '#64748b' };
}
});
});
 
valueSection.addSpacer({ height: '16px' });
 
valueSection.addRow(row => {
row.addStarRating('priceJustification', {
label: 'Is the price difference between plans justified?',
tooltip: 'Do you feel the additional cost is worth the additional features?',
maxStars: 5,
size: 'lg',
showCounter: true,
alignment: 'center'
});
});
 
// ============================================
// SECTION 6: Upgrade Process
// ============================================
const processSection = form.addSubform('processSection', {
title: 'Upgrade Process',
isVisible: () => satisfactionSection.emojiRating('upgradeSatisfaction')?.value() != null
});
 
processSection.addRow(row => {
row.addStarRating('upgradeEase', {
label: 'How easy was the upgrade process?',
tooltip: 'From decision to activation',
maxStars: 5,
size: 'lg',
showCounter: true,
alignment: 'left'
}, '1fr');
row.addStarRating('dataTransition', {
label: 'How smooth was the data/settings transition?',
tooltip: 'Were your settings and data preserved?',
maxStars: 5,
size: 'lg',
showCounter: true,
alignment: 'left'
}, '1fr');
});
 
// ============================================
// SECTION 7: Future Outlook
// ============================================
const futureSection = form.addSubform('futureSection', {
title: 'Looking Forward',
isVisible: () => satisfactionSection.emojiRating('upgradeSatisfaction')?.value() != null
});
 
futureSection.addRow(row => {
row.addRadioButton('likelyToStay', {
label: 'How likely are you to stay on this plan?',
options: [
{ id: 'definitely', name: 'Definitely staying' },
{ id: 'probably', name: 'Probably staying' },
{ id: 'unsure', name: 'Not sure yet' },
{ id: 'considering-down', name: 'Considering downgrading' },
{ id: 'considering-up', name: 'Considering upgrading further' }
],
orientation: 'vertical'
});
});
 
futureSection.addSpacer({ height: '16px' });
 
futureSection.addRow(row => {
row.addRatingScale('recommendPlan', {
preset: 'nps',
label: 'How likely are you to recommend this plan to others?',
showCategoryLabel: true,
showSegmentColors: true,
size: 'sm',
alignment: 'center'
});
});
 
// ============================================
// SECTION 8: Additional Feedback
// ============================================
const additionalSection = form.addSubform('additionalSection', {
title: 'Additional Feedback',
isVisible: () => satisfactionSection.emojiRating('upgradeSatisfaction')?.value() != null
});
 
additionalSection.addRow(row => {
row.addTextarea('improvements', {
label: 'What improvements would make this plan even better?',
placeholder: 'Share any features or improvements you\'d like to see...',
rows: 3,
autoExpand: true
});
});
 
// ============================================
// SECTION 9: Summary
// ============================================
const summarySection = form.addSubform('summarySection', {
title: 'Your Feedback Summary',
isVisible: () => satisfactionSection.emojiRating('upgradeSatisfaction')?.value() != null
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const prevPlan = upgradeSection.dropdown('previousPlan')?.value();
const currPlan = upgradeSection.dropdown('currentPlan')?.value();
const satisfaction = satisfactionSection.emojiRating('upgradeSatisfaction')?.value();
const expectations = expectationsSection.ratingScale('metExpectations')?.value();
const valueRating = valueSection.slider('valueRating')?.value();
const priceJust = valueSection.starRating('priceJustification')?.value();
const upgradeEase = processSection.starRating('upgradeEase')?.value();
const recommend = futureSection.ratingScale('recommendPlan')?.value();
const likelyToStay = futureSection.radioButton('likelyToStay')?.value();
 
if (!satisfaction) return '';
 
let emoji = '📊';
if (satisfaction === 'excellent' || satisfaction === 'good') emoji = '🎉';
else if (satisfaction === 'bad' || satisfaction === 'very-bad') emoji = '⚠️';
 
let summary = `${emoji} Upgrade Feedback Summary\n`;
summary += `${'═'.repeat(28)}\n\n`;
 
if (prevPlan && currPlan) {
summary += `📈 Upgrade: ${prevPlan} → ${currPlan}\n`;
}
 
const satisfactionLabels: Record<string, string> = {
'very-bad': 'Very Dissatisfied',
'bad': 'Dissatisfied',
'neutral': 'Neutral',
'good': 'Satisfied',
'excellent': 'Very Satisfied'
};
summary += `\n😊 Satisfaction: ${satisfactionLabels[satisfaction] || satisfaction}`;
 
if (expectations != null) {
const expLabels = ['Far Below', 'Below', 'Met', 'Exceeded', 'Far Exceeded'];
summary += `\n📋 Expectations: ${expLabels[expectations - 1] || expectations}`;
}
 
if (valueRating != null) {
summary += `\n💰 Value Rating: ${valueRating}/10`;
}
 
if (priceJust != null) {
summary += `\n⚖️ Price Justified: ${priceJust}/5`;
}
 
if (upgradeEase != null) {
summary += `\n🔧 Upgrade Ease: ${upgradeEase}/5`;
}
 
if (likelyToStay) {
const stayLabels: Record<string, string> = {
'definitely': 'Definitely Staying',
'probably': 'Probably Staying',
'unsure': 'Unsure',
'considering-down': 'Considering Downgrade',
'considering-up': 'Considering Further Upgrade'
};
summary += `\n\n🔄 Retention: ${stayLabels[likelyToStay] || likelyToStay}`;
}
 
if (recommend != null) {
summary += `\n📣 NPS: ${recommend}/10`;
}
 
return summary;
},
customStyles: () => {
const satisfaction = satisfactionSection.emojiRating('upgradeSatisfaction')?.value();
const baseStyles = {
padding: '20px',
borderRadius: '10px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '13px',
lineHeight: '1.6'
};
 
if (satisfaction === 'excellent' || satisfaction === 'good') {
return { ...baseStyles, backgroundColor: '#ecfdf5', borderLeft: '4px solid #10b981' };
} else if (satisfaction === 'bad' || satisfaction === 'very-bad') {
return { ...baseStyles, backgroundColor: '#fef2f2', borderLeft: '4px solid #ef4444' };
}
return { ...baseStyles, backgroundColor: '#fffbeb', borderLeft: '4px solid #f59e0b' };
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: 'Submit Upgrade Feedback',
isVisible: () => satisfactionSection.emojiRating('upgradeSatisfaction')?.value() != null
});
 
form.configureCompletionScreen({
type: 'text',
title: () => {
const satisfaction = satisfactionSection.emojiRating('upgradeSatisfaction')?.value();
if (satisfaction === 'excellent' || satisfaction === 'good') {
return "We're Glad You're Enjoying Your Upgrade!";
}
if (satisfaction === 'bad' || satisfaction === 'very-bad') {
return "We Want to Make This Right";
}
return "Thank You for Your Feedback!";
},
message: () => {
const satisfaction = satisfactionSection.emojiRating('upgradeSatisfaction')?.value();
if (satisfaction === 'bad' || satisfaction === 'very-bad') {
return "We're sorry the upgrade hasn't met your expectations. Our customer success team will reach out within 24 hours to discuss how we can help.";
}
return "Your feedback helps us improve our plans and pricing. We appreciate you taking the time to share your upgrade experience with us.";
}
});
}
 

Frequently Asked Questions

When should I send a post-upgrade survey?

Wait 7-14 days after upgrade so customers have time to experience new features. Too early and they won't have meaningful feedback; too late and initial impressions fade. For major upgrades, consider a quick check at 3 days and a detailed survey at 30 days.

What if the customer is unhappy after upgrading?

Flag low satisfaction scores immediately for customer success outreach. Offer personalized onboarding for underutilized features, or discuss if they're on the right tier. Sometimes a downgrade with good experience is better than a churn.

How do I measure upgrade value perception?

Compare expected vs. actual value, track which new features are used most, and ask directly about ROI. The gap between what they expected and what they got reveals whether your upgrade messaging is accurate.

Should I ask why they upgraded?

Absolutely - upgrade motivations inform your marketing, feature development, and tier structure. Common drivers include: specific feature needs, team growth, usage limits, and competitor influence.

How does upgrade feedback differ from regular product feedback?

Upgrade feedback focuses on the delta - what's new and different. It measures expectation vs. reality, value justification, and upgrade-specific friction. Regular product feedback covers the overall experience regardless of tier.

What if customers don't use the new features?

Low feature adoption after upgrade suggests either poor onboarding, feature-tier mismatch, or upgrade for wrong reasons. Use feedback to identify which scenario applies and intervene with targeted education or tier optimization.