Travel Agent Review Form

The Travel Agent Review Form captures detailed feedback on the trip planning experience. From initial consultation to final booking, this survey evaluates your agent's destination knowledge, communication responsiveness, itinerary customization, and overall value delivered. Travel agencies can use these insights to recognize top performers, identify training needs, and improve client satisfaction.

Hospitality & Travel

Try the Form

Your feedback helps us deliver better travel experiences.
Your Trip Details
 
 
 
 
Overall Satisfaction
0/5
Agent Performance
Poor Fair Good Excellent
Destination knowledge*
Understood my preferences*
Response time & availability
Creative suggestions & ideas
Attention to detail
Problem-solving ability
Trip Planning Quality
0/5
0/5
Communication
0/5
 
Areas for Improvement
Would You Recommend?
Not at all likely
Extremely likely
Final Thoughts
Your Feedback Summary
 
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
export function travelAgentFeedbackSurvey(form: FormTs) {
// Travel Agent Review Form
// Comprehensive evaluation of travel agent/consultant performance
// Demonstrates: StarRating, RatingScale (NPS), EmojiRating, ThumbRating, MatrixQuestion, RadioButton, Datepicker, SuggestionChips, dynamic styling
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Rate Your Travel Agent',
computedValue: () => 'Your feedback helps us deliver better travel experiences.',
customStyles: {
backgroundColor: '#0369a1',
color: 'white',
padding: '24px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: Trip Details
// ============================================
const tripSection = form.addSubform('tripSection', {
title: 'Your Trip Details'
});
 
tripSection.addRow(row => {
row.addTextbox('destination', {
label: 'Destination(s)',
placeholder: 'e.g., Paris, France',
isRequired: true
}, '1fr');
 
row.addDatepicker('travelDate', {
label: 'Travel Date',
maxDate: new Date().toISOString()
}, '1fr');
});
 
tripSection.addRow(row => {
row.addRadioButton('tripType', {
label: 'Type of trip',
options: [
{ id: 'leisure', name: 'Leisure / Vacation' },
{ id: 'business', name: 'Business Travel' },
{ id: 'honeymoon', name: 'Honeymoon / Romance' },
{ id: 'adventure', name: 'Adventure / Active' },
{ id: 'family', name: 'Family Trip' },
{ id: 'cruise', name: 'Cruise' },
{ id: 'group', name: 'Group Tour' }
],
orientation: 'vertical'
});
});
 
tripSection.addRow(row => {
row.addTextbox('agentName', {
label: 'Your Travel Agent\'s Name (optional)',
placeholder: 'Agent name'
});
});
 
// ============================================
// SECTION 2: Overall Satisfaction
// ============================================
const satisfactionSection = form.addSubform('satisfactionSection', {
title: 'Overall Satisfaction',
customStyles: () => {
const rating = satisfactionSection.starRating('overallRating')?.value();
if (rating !== null && rating !== undefined) {
if (rating >= 4) return { backgroundColor: '#d1fae5', padding: '16px', borderRadius: '8px' };
if (rating >= 3) return { backgroundColor: '#fef3c7', padding: '16px', borderRadius: '8px' };
return { backgroundColor: '#fee2e2', padding: '16px', borderRadius: '8px' };
}
return { padding: '16px', borderRadius: '8px', border: '1px dashed #cbd5e1' };
}
});
 
satisfactionSection.addRow(row => {
row.addStarRating('overallRating', {
label: 'How would you rate your overall experience with your travel agent?',
maxStars: 5,
size: 'xl',
alignment: 'center',
showConfettiOnMax: true
});
});
 
satisfactionSection.addRow(row => {
row.addEmojiRating('tripMood', {
label: 'How do you feel about your trip planning experience?',
preset: 'satisfaction',
size: 'lg',
showLabels: true,
alignment: 'center'
});
});
 
// ============================================
// SECTION 3: Agent Performance Matrix
// ============================================
const performanceSection = form.addSubform('performanceSection', {
title: 'Agent Performance',
isVisible: () => satisfactionSection.starRating('overallRating')?.value() !== null
});
 
performanceSection.addRow(row => {
row.addMatrixQuestion('agentMatrix', {
label: 'Rate your agent on the following:',
rows: [
{ id: 'destination-knowledge', label: 'Destination knowledge', isRequired: true },
{ id: 'listening', label: 'Understood my preferences', isRequired: true },
{ id: 'responsiveness', label: 'Response time & availability' },
{ id: 'creativity', label: 'Creative suggestions & ideas' },
{ id: 'attention-detail', label: 'Attention to detail' },
{ id: 'problem-solving', label: 'Problem-solving ability' }
],
columns: [
{ id: 'poor', label: 'Poor' },
{ id: 'fair', label: 'Fair' },
{ id: 'good', label: 'Good' },
{ id: 'excellent', label: 'Excellent' }
],
striped: true,
fullWidth: true
});
});
 
// ============================================
// SECTION 4: Planning Quality
// ============================================
const planningSection = form.addSubform('planningSection', {
title: 'Trip Planning Quality',
isVisible: () => satisfactionSection.starRating('overallRating')?.value() !== null
});
 
planningSection.addRow(row => {
row.addStarRating('itineraryRating', {
label: 'Quality of itinerary/recommendations',
maxStars: 5,
size: 'lg',
alignment: 'center'
}, '1fr');
 
row.addStarRating('valueRating', {
label: 'Value for money',
maxStars: 5,
size: 'lg',
alignment: 'center'
}, '1fr');
});
 
planningSection.addRow(row => {
row.addThumbRating('expectationsMet', {
label: 'Did the trip meet your expectations?',
showLabels: true,
upLabel: 'Yes, met or exceeded',
downLabel: 'No, fell short',
size: 'lg',
alignment: 'center'
});
});
 
planningSection.addRow(row => {
row.addTextarea('expectationsDetails', {
label: () => {
const met = planningSection.thumbRating('expectationsMet')?.value();
if (met === 'up') return 'What exceeded your expectations?';
if (met === 'down') return 'What fell short of expectations?';
return 'Share more details';
},
placeholder: 'Tell us more...',
rows: 2,
isVisible: () => planningSection.thumbRating('expectationsMet')?.value() !== null
});
});
 
// ============================================
// SECTION 5: Communication Rating
// ============================================
const communicationSection = form.addSubform('communicationSection', {
title: 'Communication',
isVisible: () => satisfactionSection.starRating('overallRating')?.value() !== null
});
 
communicationSection.addRow(row => {
row.addStarRating('communicationRating', {
label: 'How well did your agent communicate with you?',
maxStars: 5,
size: 'lg',
alignment: 'center'
});
});
 
communicationSection.addRow(row => {
row.addRadioButton('responseTime', {
label: 'How quickly did your agent respond to inquiries?',
options: [
{ id: 'same-day', name: 'Same day' },
{ id: 'next-day', name: 'Within 24 hours' },
{ id: 'few-days', name: '2-3 days' },
{ id: 'slow', name: 'More than 3 days' }
],
orientation: 'horizontal'
});
});
 
// ============================================
// SECTION 6: What You Loved (for positive ratings)
// ============================================
const positiveSection = form.addSubform('positiveSection', {
title: 'What You Loved',
isVisible: () => {
const rating = satisfactionSection.starRating('overallRating')?.value();
return rating !== null && rating !== undefined && rating >= 4;
},
customStyles: { backgroundColor: '#ecfdf5', padding: '16px', borderRadius: '8px' }
});
 
positiveSection.addRow(row => {
row.addSuggestionChips('highlights', {
label: 'What did your agent do exceptionally well?',
suggestions: [
{ id: 'local-tips', name: 'Great local tips' },
{ id: 'hidden-gems', name: 'Found hidden gems' },
{ id: 'personal-touch', name: 'Personal touch' },
{ id: 'saved-money', name: 'Saved me money' },
{ id: 'smooth-booking', name: 'Smooth booking process' },
{ id: 'perfect-timing', name: 'Perfect timing/scheduling' },
{ id: 'special-requests', name: 'Handled special requests' },
{ id: 'emergency-help', name: 'Helped with issues' }
],
alignment: 'left'
});
});
 
// ============================================
// SECTION 7: Improvement Areas (for lower ratings)
// ============================================
const improvementSection = form.addSubform('improvementSection', {
title: 'Areas for Improvement',
isVisible: () => {
const rating = satisfactionSection.starRating('overallRating')?.value();
return rating !== null && rating !== undefined && rating <= 3;
},
customStyles: { backgroundColor: '#fef2f2', padding: '16px', borderRadius: '8px' }
});
 
improvementSection.addRow(row => {
row.addSuggestionChips('issues', {
label: 'What could have been better?',
suggestions: [
{ id: 'slow-response', name: 'Slow response' },
{ id: 'wrong-info', name: 'Incorrect information' },
{ id: 'limited-options', name: 'Limited options' },
{ id: 'poor-listening', name: 'Didn\'t understand needs' },
{ id: 'overpriced', name: 'Overpriced recommendations' },
{ id: 'missing-details', name: 'Missing details' },
{ id: 'no-alternatives', name: 'No backup plans' },
{ id: 'pushy', name: 'Too pushy/salesy' }
],
alignment: 'left'
});
});
 
improvementSection.addSpacer();
 
improvementSection.addRow(row => {
row.addTextarea('improvementDetails', {
label: 'Please share specific feedback to help us improve',
placeholder: 'Your detailed feedback helps us train our agents...',
rows: 3
});
});
 
// ============================================
// SECTION 8: Recommendation
// ============================================
const npsSection = form.addSubform('npsSection', {
title: 'Would You Recommend?',
isVisible: () => satisfactionSection.starRating('overallRating')?.value() !== null,
customStyles: () => {
const category = npsSection.ratingScale('npsScore')?.npsCategory();
if (category === 'promoter') return { backgroundColor: '#d1fae5', padding: '16px', borderRadius: '8px' };
if (category === 'passive') return { backgroundColor: '#fef3c7', padding: '16px', borderRadius: '8px' };
if (category === 'detractor') return { backgroundColor: '#fee2e2', padding: '16px', borderRadius: '8px' };
return { padding: '16px', borderRadius: '8px', border: '1px dashed #cbd5e1' };
}
});
 
npsSection.addRow(row => {
row.addRatingScale('npsScore', {
preset: 'nps',
label: 'How likely are you to recommend this travel agent to friends and family?',
showCategoryLabel: true,
showSegmentColors: true,
showConfettiOnPromoter: true
});
});
 
npsSection.addRow(row => {
row.addThumbRating('useAgain', {
label: 'Would you use this agent for your next trip?',
showLabels: true,
upLabel: 'Yes, definitely',
downLabel: 'No, probably not',
alignment: 'center',
isVisible: () => npsSection.ratingScale('npsScore')?.value() !== null
});
});
 
// ============================================
// SECTION 9: Final Comments
// ============================================
const finalSection = form.addSubform('finalSection', {
title: 'Final Thoughts',
isVisible: () => satisfactionSection.starRating('overallRating')?.value() !== null
});
 
finalSection.addSpacer();
 
finalSection.addRow(row => {
row.addTextarea('additionalComments', {
label: 'Any other feedback about your experience?',
placeholder: 'Share anything else you\'d like us to know...',
rows: 3
});
});
 
// ============================================
// SECTION 10: Summary
// ============================================
const summarySection = form.addSubform('summary', {
title: 'Your Feedback Summary',
isVisible: () => satisfactionSection.starRating('overallRating')?.value() !== null
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const overall = satisfactionSection.starRating('overallRating')?.value();
const destination = tripSection.textbox('destination')?.value();
const tripType = tripSection.radioButton('tripType')?.value();
const nps = npsSection.ratingScale('npsScore')?.value();
const npsCategory = npsSection.ratingScale('npsScore')?.npsCategory();
const itinerary = planningSection.starRating('itineraryRating')?.value();
const value = planningSection.starRating('valueRating')?.value();
 
if (!overall) return '';
 
let emoji = overall >= 4 ? '✈️' : overall >= 3 ? '📊' : '⚠️';
 
const tripLabels: Record<string, string> = {
'leisure': 'Leisure',
'business': 'Business',
'honeymoon': 'Honeymoon',
'adventure': 'Adventure',
'family': 'Family',
'cruise': 'Cruise',
'group': 'Group Tour'
};
 
let summary = `${emoji} Travel Agent Review\n`;
summary += `${'═'.repeat(30)}\n\n`;
 
if (destination) {
summary += `📍 Destination: ${destination}\n`;
}
 
if (tripType) {
summary += `🧳 Trip Type: ${tripLabels[tripType] || tripType}\n`;
}
 
summary += `\n⭐ Overall Rating: ${overall}/5 stars\n`;
 
if (itinerary) {
summary += `📋 Itinerary: ${itinerary}/5 stars\n`;
}
 
if (value) {
summary += `💰 Value: ${value}/5 stars\n`;
}
 
if (nps !== null && nps !== undefined) {
summary += `\n📊 NPS: ${nps}/10 (${npsCategory?.charAt(0).toUpperCase()}${npsCategory?.slice(1)})`;
}
 
return summary;
},
customStyles: () => {
const rating = satisfactionSection.starRating('overallRating')?.value();
const baseStyles = {
padding: '16px',
borderRadius: '8px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '14px'
};
 
if (rating !== null && rating !== undefined) {
if (rating >= 4) {
return { ...baseStyles, backgroundColor: '#d1fae5', borderLeft: '4px solid #10b981' };
} else if (rating >= 3) {
return { ...baseStyles, backgroundColor: '#fef3c7', borderLeft: '4px solid #f59e0b' };
} else {
return { ...baseStyles, backgroundColor: '#fee2e2', borderLeft: '4px solid #ef4444' };
}
}
return { ...baseStyles, backgroundColor: '#f1f5f9' };
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: 'Submit Review',
isVisible: () => satisfactionSection.starRating('overallRating')?.value() !== null
});
 
form.configureCompletionScreen({
type: 'text',
title: 'Thank you for your feedback!',
message: 'Your review helps us improve our travel services and recognize outstanding agents. We hope your trip was memorable and look forward to planning your next adventure!'
});
}
 

Frequently Asked Questions

When should I send this survey to clients?

Send it post-booking to capture planning experience, or post-trip to include the full journey. Post-booking surveys get higher response rates but miss trip execution feedback. Consider sending both for comprehensive insights.

What makes a travel agent rating meaningful?

Key factors include: destination expertise (did they know the area?), personalization (was the trip tailored to preferences?), responsiveness (how quickly did they communicate?), value (did the price match expectations?), and accuracy (were recommendations correct?).

How can I use this feedback for agent training?

Identify patterns in ratings across agents. Low destination expertise scores suggest product training needs. Poor communication ratings indicate process improvements. Share positive feedback to reinforce good behaviors.

Should I include trip-specific questions?

Yes, customize for your agency. Add questions about specific destinations you specialize in, types of trips (luxury, adventure, family), or unique services you offer. The template provides a foundation you can extend.

What's a good NPS score for a travel agency?

Travel and hospitality typically see NPS scores of 30-50. Luxury travel agencies often score higher (50-70). Track your score over time and against industry benchmarks to gauge performance.