Pricing Perception Survey

The Pricing Perception Survey implements the Van Westendorp Price Sensitivity Meter, a proven market research technique for finding optimal price points. By asking four strategic questions about price expectations, you can identify the range of acceptable prices, the optimal price point, and the indifference price point. This template also captures qualitative feedback about value perception and willingness to pay at different price levels.

Product Feedback

Try the Form

Help us understand what pricing feels right to you.
About the Product
Consider a professional software tool that helps teams collaborate, track projects, and automate workflows. It includes real-time chat, file sharing, task management, and integrations with 100+ other tools.
Price Perception (Van Westendorp)
Think about a monthly subscription price per user. Move the sliders to indicate your price thresholds.
5$/month
5 $/month
0100
15$/month
15 $/month
0100
35$/month
35 $/month
0100
60$/month
60 $/month
0100
Price Thresholds: Quality concern below: $5/mo Good deal at: $15/mo Getting expensive at: $35/mo Won't consider above: $60/mo Your acceptable range: $15 - $35/mo Sweet spot (midpoint): $25/mo
Willingness to Pay
 
Feature Value Assessment
Nothing +$5/mo +$10/mo +$20/mo
Advanced analytics dashboard
Premium integrations
Priority support (24/7)
Unlimited storage
Enterprise security features
Value Perception
Strongly Disagree
Strongly Agree
0/5
Competitive Context
 
Final Thoughts
Your Pricing Profile
Pricing Profile Summary ══════════════════════════════ Acceptable Range: $15 - $35/mo Sweet Spot: $25/mo Quality Floor: $5/mo Price Ceiling: $60/mo
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 pricingFeedbackSurvey(form: FormTs) {
// Pricing Perception Survey - Van Westendorp Price Sensitivity Analysis
// Demonstrates: Slider, RatingScale, StarRating, RadioButton, MatrixQuestion, PriceDisplay, dynamic computed values
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Pricing Perception Survey',
computedValue: () => 'Help us understand what pricing feels right to you.',
customStyles: {
background: 'linear-gradient(135deg, #059669 0%, #10b981 100%)',
color: 'white',
padding: '24px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: Product Context
// ============================================
const contextSection = form.addSubform('contextSection', {
title: 'About the Product',
customStyles: { backgroundColor: '#f0fdf4', padding: '16px', borderRadius: '8px' }
});
 
contextSection.addRow(row => {
row.addTextPanel('productInfo', {
computedValue: () => 'Consider a professional software tool that helps teams collaborate, track projects, and automate workflows. It includes real-time chat, file sharing, task management, and integrations with 100+ other tools.',
customStyles: {
backgroundColor: 'white',
padding: '16px',
borderRadius: '8px',
border: '1px solid #d1fae5',
lineHeight: '1.6'
}
});
});
 
// ============================================
// SECTION 2: Van Westendorp Price Questions
// ============================================
const priceSection = form.addSubform('priceSection', {
title: 'Price Perception (Van Westendorp)',
customStyles: { padding: '16px', borderRadius: '8px', border: '2px solid #10b981' }
});
 
priceSection.addRow(row => {
row.addTextPanel('priceInstructions', {
computedValue: () => 'Think about a monthly subscription price per user. Move the sliders to indicate your price thresholds.',
customStyles: { color: '#6b7280', fontSize: '14px', marginBottom: '8px' }
});
});
 
// Too Cheap
priceSection.addRow(row => {
row.addSlider('tooCheap', {
label: 'At what price would this seem TOO CHEAP, making you doubt its quality?',
min: 0,
max: 100,
step: 5,
defaultValue: 5,
showValue: true,
unit: '$/month'
});
});
 
// Cheap (Good Deal)
priceSection.addRow(row => {
row.addSlider('cheap', {
label: 'At what price would this be a BARGAIN - a great deal for the value?',
min: 0,
max: 100,
step: 5,
defaultValue: 15,
showValue: true,
unit: '$/month'
});
});
 
// Expensive
priceSection.addRow(row => {
row.addSlider('expensive', {
label: 'At what price would this start to seem EXPENSIVE, but still worth considering?',
min: 0,
max: 100,
step: 5,
defaultValue: 35,
showValue: true,
unit: '$/month'
});
});
 
// Too Expensive
priceSection.addRow(row => {
row.addSlider('tooExpensive', {
label: 'At what price would this be TOO EXPENSIVE to ever consider?',
min: 0,
max: 100,
step: 5,
defaultValue: 60,
showValue: true,
unit: '$/month'
});
});
 
// Price Range Analysis
priceSection.addRow(row => {
row.addTextPanel('priceAnalysis', {
label: 'Your Price Range Analysis',
computedValue: () => {
const tooCheap = priceSection.slider('tooCheap')?.value() ?? 5;
const cheap = priceSection.slider('cheap')?.value() ?? 15;
const expensive = priceSection.slider('expensive')?.value() ?? 35;
const tooExpensive = priceSection.slider('tooExpensive')?.value() ?? 60;
 
const range = expensive - cheap;
const midpoint = Math.round((cheap + expensive) / 2);
 
let analysis = 'Price Thresholds:\n';
analysis += ` Quality concern below: $${tooCheap}/mo\n`;
analysis += ` Good deal at: $${cheap}/mo\n`;
analysis += ` Getting expensive at: $${expensive}/mo\n`;
analysis += ` Won't consider above: $${tooExpensive}/mo\n\n`;
analysis += `Your acceptable range: $${cheap} - $${expensive}/mo\n`;
analysis += `Sweet spot (midpoint): $${midpoint}/mo`;
 
return analysis;
},
customStyles: () => {
const cheap = priceSection.slider('cheap')?.value() ?? 15;
const expensive = priceSection.slider('expensive')?.value() ?? 35;
 
return {
backgroundColor: cheap < expensive ? '#d1fae5' : '#fee2e2',
padding: '16px',
borderRadius: '8px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '13px'
};
}
});
});
 
// ============================================
// SECTION 3: Willingness to Pay
// ============================================
const wtpSection = form.addSubform('wtpSection', {
title: 'Willingness to Pay'
});
 
wtpSection.addRow(row => {
row.addRadioButton('purchaseIntent', {
label: 'At $25/month per user, how likely are you to subscribe?',
options: [
{ id: 'definitely', name: 'Definitely would subscribe' },
{ id: 'probably', name: 'Probably would subscribe' },
{ id: 'maybe', name: 'Might or might not' },
{ id: 'probably_not', name: 'Probably would not subscribe' },
{ id: 'definitely_not', name: 'Definitely would not subscribe' }
],
orientation: 'vertical'
});
});
 
// Follow-up for unlikely buyers
wtpSection.addRow(row => {
row.addTextarea('priceBarrier', {
label: 'What would make this price more acceptable?',
placeholder: 'More features, longer trial, team discounts...',
rows: 2,
isVisible: () => {
const intent = wtpSection.radioButton('purchaseIntent')?.value();
return intent === 'probably_not' || intent === 'definitely_not';
}
});
});
 
// ============================================
// SECTION 4: Feature Value Matrix
// ============================================
const valueSection = form.addSubform('valueSection', {
title: 'Feature Value Assessment'
});
 
valueSection.addRow(row => {
row.addMatrixQuestion('featureValue', {
label: 'How much would you pay extra for these features?',
rows: [
{ id: 'analytics', label: 'Advanced analytics dashboard' },
{ id: 'integrations', label: 'Premium integrations' },
{ id: 'support', label: 'Priority support (24/7)' },
{ id: 'storage', label: 'Unlimited storage' },
{ id: 'security', label: 'Enterprise security features' }
],
columns: [
{ id: 'nothing', label: 'Nothing' },
{ id: 'little', label: '+$5/mo' },
{ id: 'moderate', label: '+$10/mo' },
{ id: 'significant', label: '+$20/mo' }
],
striped: true,
fullWidth: true
});
});
 
// ============================================
// SECTION 5: Value Perception
// ============================================
const perceptionSection = form.addSubform('perceptionSection', {
title: 'Value Perception'
});
 
perceptionSection.addRow(row => {
row.addRatingScale('valueForMoney', {
preset: 'likert-7',
label: 'At $25/month, this product would be good value for money',
lowLabel: 'Strongly Disagree',
highLabel: 'Strongly Agree',
alignment: 'center'
});
});
 
perceptionSection.addRow(row => {
row.addStarRating('overallValue', {
label: 'Overall value rating compared to competitors',
maxStars: 5,
size: 'lg',
alignment: 'center'
});
});
 
// ============================================
// SECTION 6: Comparison & Competition
// ============================================
const compSection = form.addSubform('compSection', {
title: 'Competitive Context'
});
 
compSection.addRow(row => {
row.addDropdown('currentSpend', {
label: 'How much do you currently spend on similar tools?',
options: [
{ id: 'nothing', name: 'Nothing (not using any)' },
{ id: 'under10', name: 'Under $10/month' },
{ id: '10to25', name: '$10-25/month' },
{ id: '25to50', name: '$25-50/month' },
{ id: '50to100', name: '$50-100/month' },
{ id: 'over100', name: 'Over $100/month' }
],
placeholder: 'Select your current spend...'
});
});
 
compSection.addRow(row => {
row.addRadioButton('switchLikelihood', {
label: 'How likely would you be to switch from your current tool to this one at $25/month?',
options: [
{ id: 'very_likely', name: 'Very likely - better value' },
{ id: 'somewhat', name: 'Somewhat likely - would consider' },
{ id: 'neutral', name: 'Neutral - need more info' },
{ id: 'unlikely', name: 'Unlikely - happy with current tool' },
{ id: 'na', name: 'N/A - not using any tool currently' }
],
orientation: 'vertical',
isVisible: () => compSection.dropdown('currentSpend')?.value() !== 'nothing'
});
});
 
// ============================================
// SECTION 7: Final Thoughts
// ============================================
const finalSection = form.addSubform('finalSection', {
title: 'Final Thoughts'
});
 
finalSection.addRow(row => {
row.addTextarea('pricingFeedback', {
label: 'Any other thoughts on pricing or value?',
placeholder: 'Share what would make this product worth more to you, or any pricing concerns...',
rows: 3,
autoExpand: true
});
});
 
// ============================================
// SECTION 8: Summary
// ============================================
const summarySection = form.addSubform('summarySection', {
title: 'Your Pricing Profile',
isVisible: () => {
const cheap = priceSection.slider('cheap')?.value();
return cheap !== null && cheap !== undefined;
}
});
 
summarySection.addRow(row => {
row.addTextPanel('summary', {
computedValue: () => {
const tooCheap = priceSection.slider('tooCheap')?.value() ?? 5;
const cheap = priceSection.slider('cheap')?.value() ?? 15;
const expensive = priceSection.slider('expensive')?.value() ?? 35;
const tooExpensive = priceSection.slider('tooExpensive')?.value() ?? 60;
const intent = wtpSection.radioButton('purchaseIntent')?.value();
const value = perceptionSection.ratingScale('valueForMoney')?.value();
const rating = perceptionSection.starRating('overallValue')?.value();
 
const midpoint = Math.round((cheap + expensive) / 2);
 
let summary = 'Pricing Profile Summary\n';
summary += '═'.repeat(30) + '\n\n';
summary += `Acceptable Range: $${cheap} - $${expensive}/mo\n`;
summary += `Sweet Spot: $${midpoint}/mo\n`;
summary += `Quality Floor: $${tooCheap}/mo\n`;
summary += `Price Ceiling: $${tooExpensive}/mo\n`;
 
if (intent) {
const intentLabels: Record<string, string> = {
'definitely': 'Very High',
'probably': 'High',
'maybe': 'Medium',
'probably_not': 'Low',
'definitely_not': 'Very Low'
};
summary += `\nPurchase Intent @$25: ${intentLabels[intent] || intent}`;
}
 
if (value) {
summary += `\nValue Rating: ${value}/7`;
}
 
if (rating && rating > 0) {
summary += `\nCompetitive Value: ${'★'.repeat(rating)}${'☆'.repeat(5 - rating)}`;
}
 
return summary;
},
customStyles: {
backgroundColor: '#f0fdf4',
padding: '16px',
borderRadius: '8px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '13px',
borderLeft: '4px solid #10b981'
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: 'Submit Pricing Feedback'
});
 
form.configureCompletionScreen({
type: 'text',
title: 'Thank you for your pricing feedback!',
message: 'Your input helps us set fair prices that reflect the value we provide. We appreciate your time and thoughtful responses.'
});
}
 

Frequently Asked Questions

What is Van Westendorp Price Sensitivity Meter?

Van Westendorp is a market research technique developed in the 1970s. It asks four questions to identify price thresholds: too cheap (quality concern), cheap (good deal), expensive (hesitation), and too expensive (won't buy). The intersection points reveal optimal and acceptable price ranges.

How do I interpret Van Westendorp results?

Plot all four price curves. The 'Optimal Price Point' (OPP) is where 'too cheap' and 'too expensive' intersect. The 'Indifference Price Point' (IDP) is where 'cheap' and 'expensive' intersect. The acceptable price range lies between the 'Point of Marginal Cheapness' and 'Point of Marginal Expensiveness'.

How many responses do I need for valid results?

For statistically significant Van Westendorp analysis, aim for at least 200-300 responses from your target market. Smaller samples (100+) can still provide directional insights, but confidence intervals will be wider.

Can I use this for subscription pricing?

Yes. Adjust the price labels to reflect your billing period (e.g., 'per month' or 'per year'). You may want to create separate surveys for monthly vs. annual pricing to avoid confusion.

Should I show actual product features before the pricing questions?

Absolutely. Respondents need context to evaluate pricing fairly. Include a brief product description, key features, or even images. Without context, price feedback will be less meaningful and actionable.

How often should I run pricing surveys?

Run pricing research when launching new products, entering new markets, after significant feature additions, or when market conditions change. For established products, annual or bi-annual pricing checks help track market perception.