Browse Exit Survey

Not every visitor is ready to buy, but understanding why they leave helps improve conversions. This browse exit survey triggers when visitors show exit intent, asking about their interest level, what they were looking for, and what barriers stopped them from purchasing. The quick, non-intrusive format maximizes response rates while gathering actionable insights about pricing concerns, missing products, or trust issues that prevent conversions.

Retail & E-commerce

Try the Form

We noticed you're leaving. Help us improve your experience with a quick 30-second survey.
Your Interest
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
export function browseAbandonmentSurvey(form: FormTs) {
// Browse Exit Survey - Exit Intent Feedback for E-commerce
// Demonstrates: EmojiRating, SuggestionChips, Slider, RadioButton, ThumbRating, Conditional Visibility
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Before You Go...',
computedValue: () => 'We noticed you\'re leaving. Help us improve your experience with a quick 30-second survey.',
customStyles: {
backgroundColor: '#ec4899',
color: 'white',
padding: '20px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: Interest Level
// ============================================
const interestSection = form.addSubform('interest', {
title: 'Your Interest'
});
 
interestSection.addRow(row => {
row.addEmojiRating('interestLevel', {
label: 'How interested were you in what you saw today?',
preset: 'satisfaction',
size: 'lg',
alignment: 'center'
});
});
 
// ============================================
// SECTION 2: Visit Purpose
// ============================================
const purposeSection = form.addSubform('purpose', {
title: 'Your Visit Today',
isVisible: () => interestSection.emojiRating('interestLevel')?.value() !== null
});
 
purposeSection.addRow(row => {
row.addRadioButton('visitPurpose', {
label: 'What brought you here today?',
options: [
{ id: 'browse', name: 'Just browsing / window shopping' },
{ id: 'research', name: 'Researching before buying' },
{ id: 'compare', name: 'Comparing with other sites' },
{ id: 'specific', name: 'Looking for something specific' },
{ id: 'return', name: 'Returning to finish a purchase' },
{ id: 'other', name: 'Other reason' }
],
orientation: 'vertical'
});
});
 
// Show product interest for specific shoppers
const productInterestSection = form.addSubform('productInterest', {
title: 'What Were You Looking For?',
isVisible: () => {
const purpose = purposeSection.radioButton('visitPurpose')?.value();
return purpose === 'specific' || purpose === 'research' || purpose === 'compare';
},
customStyles: { backgroundColor: '#fdf4ff', padding: '16px', borderRadius: '8px' }
});
 
productInterestSection.addRow(row => {
row.addSuggestionChips('categories', {
label: 'Which categories were you interested in?',
suggestions: [
{ id: 'electronics', name: 'Electronics' },
{ id: 'clothing', name: 'Clothing & Fashion' },
{ id: 'home', name: 'Home & Garden' },
{ id: 'beauty', name: 'Beauty & Personal Care' },
{ id: 'sports', name: 'Sports & Outdoors' },
{ id: 'toys', name: 'Toys & Games' },
{ id: 'books', name: 'Books & Media' },
{ id: 'food', name: 'Food & Groceries' }
],
alignment: 'center'
});
});
 
productInterestSection.addRow(row => {
row.addTextbox('specificProduct', {
label: 'Were you looking for a specific product?',
placeholder: 'e.g., "wireless headphones", "summer dress", "garden tools"'
});
});
 
// ============================================
// SECTION 3: Barriers
// ============================================
const barriersSection = form.addSubform('barriers', {
title: 'What Stopped You?',
isVisible: () => {
const interest = interestSection.emojiRating('interestLevel')?.value();
return interest !== null && interest !== 'very-bad';
}
});
 
barriersSection.addRow(row => {
row.addSuggestionChips('mainBarriers', {
label: 'Select what prevented you from buying today:',
suggestions: [
{ id: 'not-ready', name: 'Not ready to buy yet' },
{ id: 'price', name: 'Prices too high' },
{ id: 'shipping', name: 'Shipping costs' },
{ id: 'not-found', name: 'Couldn\'t find what I wanted' },
{ id: 'trust', name: 'Trust/security concerns' },
{ id: 'compare', name: 'Need to compare options' },
{ id: 'reviews', name: 'Not enough reviews' },
{ id: 'info', name: 'Missing product info' }
],
alignment: 'center',
max: 3
});
});
 
// ============================================
// SECTION 4: Price Sensitivity (if price was a barrier)
// ============================================
const priceSection = form.addSubform('priceDetails', {
title: 'About Pricing',
isVisible: () => {
const barriers = barriersSection.suggestionChips('mainBarriers')?.value() || [];
return barriers.includes('price') || barriers.includes('shipping');
},
customStyles: { backgroundColor: '#fef3c7', padding: '16px', borderRadius: '8px' }
});
 
priceSection.addRow(row => {
row.addSlider('priceReduction', {
label: 'What discount would make you consider buying?',
min: 5,
max: 50,
step: 5,
unit: '% off',
showValue: true,
defaultValue: 15
}, '1fr');
row.addRadioButton('shippingPreference', {
label: 'What shipping option would you prefer?',
options: [
{ id: 'free-slow', name: 'Free shipping (slower)' },
{ id: 'cheap-fast', name: 'Low cost, fast delivery' },
{ id: 'threshold', name: 'Free shipping over $X' }
],
orientation: 'vertical',
isVisible: () => {
const barriers = barriersSection.suggestionChips('mainBarriers')?.value() || [];
return barriers.includes('shipping');
}
}, '1fr');
});
 
// ============================================
// SECTION 5: Trust Issues (if trust was a barrier)
// ============================================
const trustSection = form.addSubform('trustDetails', {
title: 'Trust & Security Concerns',
isVisible: () => {
const barriers = barriersSection.suggestionChips('mainBarriers')?.value() || [];
return barriers.includes('trust');
},
customStyles: { backgroundColor: '#fee2e2', padding: '16px', borderRadius: '8px' }
});
 
trustSection.addRow(row => {
row.addCheckboxList('trustConcerns', {
label: 'What would make you feel more confident?',
options: [
{ id: 'reviews', name: 'More customer reviews' },
{ id: 'badges', name: 'Security badges/certificates' },
{ id: 'returns', name: 'Clear return policy' },
{ id: 'payment', name: 'More payment options' },
{ id: 'contact', name: 'Easy-to-find contact info' },
{ id: 'social', name: 'Social proof/testimonials' }
],
orientation: 'vertical'
});
});
 
// ============================================
// SECTION 6: Future Intent
// ============================================
const futureSection = form.addSubform('future', {
title: 'Will You Return?',
isVisible: () => interestSection.emojiRating('interestLevel')?.value() !== null
});
 
futureSection.addRow(row => {
row.addThumbRating('returnIntent', {
label: 'Do you plan to come back and shop with us?',
size: 'lg',
showLabels: true,
upLabel: 'Yes, I\'ll be back',
downLabel: 'Probably not',
alignment: 'center'
});
});
 
futureSection.addRow(row => {
row.addRatingScale('purchaseTimeline', {
label: 'When are you likely to make a purchase?',
preset: 'custom',
min: 1,
max: 5,
lowLabel: 'Today',
highLabel: 'Not sure / months',
alignment: 'center',
isVisible: () => futureSection.thumbRating('returnIntent')?.value() === 'up'
});
});
 
// ============================================
// SECTION 7: Capture Email for Incentive
// ============================================
const emailSection = form.addSubform('emailCapture', {
title: 'Want a Special Offer?',
isVisible: () => {
const interest = interestSection.emojiRating('interestLevel')?.value();
const returnIntent = futureSection.thumbRating('returnIntent')?.value();
return (interest === 'good' || interest === 'excellent') || returnIntent === 'up';
},
customStyles: { backgroundColor: '#ecfdf5', padding: '16px', borderRadius: '8px' }
});
 
emailSection.addRow(row => {
row.addTextPanel('offerText', {
computedValue: () => {
const discount = priceSection.slider('priceReduction')?.value() ?? 10;
return `Get ${Math.min(discount, 15)}% off your first purchase! Enter your email below.`;
},
customStyles: {
textAlign: 'center',
fontWeight: 'bold',
color: '#059669',
marginBottom: '12px'
}
});
});
 
emailSection.addRow(row => {
row.addEmail('email', {
label: 'Your email address',
placeholder: 'you@example.com'
}, '1fr');
row.addCheckbox('marketingConsent', {
label: 'Send me deals and new arrivals (you can unsubscribe anytime)'
}, '1fr');
});
 
// ============================================
// SECTION 8: Additional Feedback
// ============================================
const feedbackSection = form.addSubform('additionalFeedback', {
title: 'Anything Else?',
isVisible: () => interestSection.emojiRating('interestLevel')?.value() !== null
});
 
feedbackSection.addSpacer({ height: '8px' });
 
feedbackSection.addRow(row => {
row.addTextarea('additionalComments', {
label: 'Is there anything else you\'d like us to know?',
placeholder: 'What would make your shopping experience better?',
rows: 3
});
});
 
// ============================================
// SECTION 9: Summary
// ============================================
const summarySection = form.addSubform('summary', {
title: 'Your Feedback Summary',
isVisible: () => interestSection.emojiRating('interestLevel')?.value() !== null
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const interest = interestSection.emojiRating('interestLevel')?.value();
const purpose = purposeSection.radioButton('visitPurpose')?.value();
const barriers = barriersSection.suggestionChips('mainBarriers')?.value() || [];
const returnIntent = futureSection.thumbRating('returnIntent')?.value();
const email = emailSection.email('email')?.value();
 
const interestLabels: Record<string, string> = {
'very-bad': 'Not interested',
'bad': 'Slightly interested',
'neutral': 'Somewhat interested',
'good': 'Very interested',
'excellent': 'Extremely interested'
};
 
const purposeLabels: Record<string, string> = {
'browse': 'Just browsing',
'research': 'Researching products',
'compare': 'Comparing options',
'specific': 'Looking for something specific',
'return': 'Returning to finish purchase',
'other': 'Other'
};
 
let summary = `Exit Survey Summary\n`;
summary += `${''.repeat(22)}\n\n`;
 
if (interest) {
summary += ` Interest: ${interestLabels[interest] || interest}\n`;
}
 
if (purpose) {
summary += ` Purpose: ${purposeLabels[purpose] || purpose}\n`;
}
 
if (barriers.length > 0) {
summary += `\n Barriers: ${barriers.length} factors identified\n`;
}
 
if (returnIntent) {
summary += `\n Return Intent: ${returnIntent === 'up' ? ' Will return' : ' Unlikely to return'}\n`;
}
 
if (email) {
summary += `\n Email captured for follow-up\n`;
}
 
return summary;
},
customStyles: () => {
const interest = interestSection.emojiRating('interestLevel')?.value();
const returnIntent = futureSection.thumbRating('returnIntent')?.value();
 
const baseStyles = {
padding: '16px',
borderRadius: '8px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '14px'
};
 
if (interest === 'excellent' || interest === 'good' || returnIntent === 'up') {
return { ...baseStyles, backgroundColor: '#d1fae5', borderLeft: '4px solid #10b981' };
}
if (interest === 'neutral') {
return { ...baseStyles, backgroundColor: '#fef3c7', borderLeft: '4px solid #f59e0b' };
}
return { ...baseStyles, backgroundColor: '#fee2e2', borderLeft: '4px solid #ef4444' };
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: () => {
const email = emailSection.email('email')?.value();
if (email) return 'Submit & Get My Discount';
return 'Submit Feedback';
}
});
 
form.configureCompletionScreen({
type: 'text',
title: 'Thanks for your feedback!',
message: 'Your input helps us create a better shopping experience. If you shared your email, check your inbox for a special discount code!'
});
}
 

Frequently Asked Questions

What is a browse abandonment survey?

A browse abandonment survey appears when visitors show signs of leaving your website without purchasing or converting. It asks quick questions to understand what they were looking for and why they're leaving, providing insights to improve the shopping experience.

When should the exit survey trigger?

Best practice is to trigger on exit intent (mouse moving toward browser close button) after the visitor has spent at least 30 seconds on your site. You can also trigger after viewing multiple pages without adding to cart, or on mobile when users scroll up quickly.

Won't exit surveys annoy visitors?

When designed well, exit surveys can actually improve user experience by showing you care about their needs. Keep surveys short (under 30 seconds), don't show to returning visitors who already dismissed it, and offer value like a discount code for completing it.

How many questions should be in an exit survey?

Keep it to 3-5 questions maximum. The goal is quick feedback, not a comprehensive survey. Focus on: interest level, what they were looking for, primary barrier, and optionally an email capture with incentive.

What are common browse abandonment barriers?

Top barriers include: just browsing/not ready to buy, prices too high, couldn't find what they wanted, shipping costs, need to think about it, comparison shopping, trust/security concerns, and complicated checkout process.

Should I offer an incentive for completing the survey?

Yes, offering a small discount (5-10% off) or free shipping for completing the survey increases response rates and can convert some abandoners into customers. Make sure the incentive appears after they complete the survey, not before.