Seasonal Campaign Feedback Form

Seasonal campaigns require quick feedback to optimize spend and messaging. This form measures campaign awareness, channel effectiveness, message resonance, and purchase intent. Whether it's Black Friday, holiday promotions, or summer sales, gather actionable data on what's working and what needs adjustment. The conditional logic adapts questions based on awareness levels, ensuring you get relevant insights from both engaged customers and those who missed the campaign.

Retail & E-commerce

Try the Form

Help us understand how our seasonal promotion reached you.
Campaign Awareness
 
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
export function seasonalCampaignForm(form: FormTs) {
// Seasonal Campaign Feedback - Marketing Effectiveness Measurement
// Demonstrates: RadioButton, CheckboxList, RatingScale, EmojiRating, Slider, conditional sections
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Campaign Feedback Survey',
computedValue: () => 'Help us understand how our seasonal promotion reached you.',
customStyles: {
backgroundColor: '#f59e0b',
color: 'white',
padding: '24px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: Campaign Awareness
// ============================================
const awarenessSection = form.addSubform('awarenessSection', {
title: 'Campaign Awareness'
});
 
awarenessSection.addRow(row => {
row.addRadioButton('sawCampaign', {
label: 'Did you see or hear about our seasonal promotion?',
options: [
{ id: 'yes-clear', name: 'Yes, I clearly remember it' },
{ id: 'yes-vague', name: 'Yes, but only vaguely' },
{ id: 'not-sure', name: 'I\'m not sure' },
{ id: 'no', name: 'No, I didn\'t see it' }
],
orientation: 'vertical',
isRequired: true
});
});
 
// ============================================
// SECTION 2: Campaign Channels (If aware)
// ============================================
const channelSection = form.addSubform('channelSection', {
title: 'Where Did You See It?',
isVisible: () => {
const saw = awarenessSection.radioButton('sawCampaign')?.value();
return saw === 'yes-clear' || saw === 'yes-vague';
}
});
 
channelSection.addRow(row => {
row.addCheckboxList('channels', {
label: 'Where did you see the promotion? (Select all that apply)',
options: [
{ id: 'email', name: 'Email newsletter' },
{ id: 'social-feed', name: 'Social media feed' },
{ id: 'social-ad', name: 'Social media ads' },
{ id: 'website', name: 'Website banners' },
{ id: 'app', name: 'Mobile app notification' },
{ id: 'sms', name: 'SMS/Text message' },
{ id: 'search', name: 'Search engine ads' },
{ id: 'display', name: 'Display ads on other sites' },
{ id: 'tv', name: 'TV commercial' },
{ id: 'radio', name: 'Radio/Podcast' },
{ id: 'print', name: 'Print/Magazine' },
{ id: 'store', name: 'In-store signage' },
{ id: 'friend', name: 'Friend or family' }
],
orientation: 'vertical'
});
});
 
// ============================================
// SECTION 3: Message Recall (If aware)
// ============================================
const recallSection = form.addSubform('recallSection', {
title: 'What Do You Remember?',
isVisible: () => {
const saw = awarenessSection.radioButton('sawCampaign')?.value();
return saw === 'yes-clear' || saw === 'yes-vague';
}
});
 
recallSection.addRow(row => {
row.addCheckboxList('rememberedElements', {
label: 'Which elements of the promotion do you remember? (Select all)',
options: [
{ id: 'discount', name: 'Discount percentage or amount' },
{ id: 'products', name: 'Specific products featured' },
{ id: 'deadline', name: 'Deadline or urgency message' },
{ id: 'free-shipping', name: 'Free shipping offer' },
{ id: 'bundle', name: 'Bundle deals' },
{ id: 'gift', name: 'Gift with purchase' },
{ id: 'code', name: 'Promo code' },
{ id: 'theme', name: 'Seasonal theme or imagery' }
],
orientation: 'vertical'
});
});
 
recallSection.addSpacer();
 
recallSection.addRow(row => {
row.addRatingScale('messageClarity', {
label: 'How clear was the promotional message?',
preset: 'likert-5',
lowLabel: 'Very confusing',
highLabel: 'Very clear',
alignment: 'center'
});
});
 
// ============================================
// SECTION 4: Campaign Reaction (If aware)
// ============================================
const reactionSection = form.addSubform('reactionSection', {
title: 'Your Reaction',
isVisible: () => {
const saw = awarenessSection.radioButton('sawCampaign')?.value();
return saw === 'yes-clear' || saw === 'yes-vague';
}
});
 
reactionSection.addRow(row => {
row.addEmojiRating('initialReaction', {
label: 'What was your initial reaction to the promotion?',
preset: 'custom',
emojis: [
{ id: 'annoyed', emoji: '😒', label: 'Annoyed' },
{ id: 'uninterested', emoji: '😐', label: 'Uninterested' },
{ id: 'curious', emoji: '🤔', label: 'Curious' },
{ id: 'interested', emoji: '😊', label: 'Interested' },
{ id: 'excited', emoji: '🤩', label: 'Excited' }
],
size: 'lg',
alignment: 'center'
});
});
 
reactionSection.addRow(row => {
row.addMatrixQuestion('campaignAttributes', {
label: 'How would you rate these aspects of the promotion?',
rows: [
{ id: 'appealing', label: 'Visual appeal' },
{ id: 'relevant', label: 'Relevance to my needs' },
{ id: 'timing', label: 'Timing of the offer' },
{ id: 'value', label: 'Value of the deal' }
],
columns: [
{ id: '1', label: 'Poor' },
{ id: '2', label: 'Fair' },
{ id: '3', label: 'Good' },
{ id: '4', label: 'Very Good' },
{ id: '5', label: 'Excellent' }
],
striped: true,
fullWidth: true
});
});
 
// ============================================
// SECTION 5: Actions Taken
// ============================================
const actionsSection = form.addSubform('actionsSection', {
title: 'What Did You Do?',
isVisible: () => {
const saw = awarenessSection.radioButton('sawCampaign')?.value();
return saw === 'yes-clear' || saw === 'yes-vague';
}
});
 
actionsSection.addRow(row => {
row.addCheckboxList('actionsTaken', {
label: 'What actions did you take after seeing the promotion?',
options: [
{ id: 'clicked', name: 'Clicked to learn more' },
{ id: 'browsed', name: 'Browsed products on sale' },
{ id: 'cart', name: 'Added items to cart' },
{ id: 'purchased', name: 'Made a purchase' },
{ id: 'saved', name: 'Saved for later' },
{ id: 'shared', name: 'Shared with someone' },
{ id: 'compared', name: 'Compared with competitors' },
{ id: 'nothing', name: 'Didn\'t take any action' }
],
orientation: 'vertical'
});
});
 
// Conditional: If purchased
actionsSection.addRow(row => {
row.addStarRating('purchaseSatisfaction', {
label: 'How satisfied are you with your purchase?',
maxStars: 5,
size: 'lg',
alignment: 'center',
showConfettiOnMax: true,
isVisible: () => {
const actions = actionsSection.checkboxList('actionsTaken')?.value() || [];
return actions.includes('purchased');
}
});
});
 
// Conditional: If didn't take action
actionsSection.addRow(row => {
row.addCheckboxList('whyNoAction', {
label: 'What stopped you from taking action?',
options: [
{ id: 'no-need', name: 'Didn\'t need anything right now' },
{ id: 'price', name: 'Prices still too high' },
{ id: 'products', name: 'Products weren\'t interesting' },
{ id: 'timing', name: 'Bad timing for me' },
{ id: 'competitor', name: 'Found a better deal elsewhere' },
{ id: 'forgot', name: 'Forgot about it' },
{ id: 'distrust', name: 'Didn\'t trust the offer' }
],
orientation: 'vertical',
isVisible: () => {
const actions = actionsSection.checkboxList('actionsTaken')?.value() || [];
return actions.includes('nothing');
}
});
});
 
// ============================================
// SECTION 6: Purchase Intent
// ============================================
const intentSection = form.addSubform('intentSection', {
title: 'Future Purchase Intent',
isVisible: () => awarenessSection.radioButton('sawCampaign')?.value() !== null
});
 
intentSection.addRow(row => {
row.addSlider('purchaseIntent', {
label: 'How likely are you to make a purchase during this promotion?',
min: 0,
max: 100,
step: 10,
showValue: true,
unit: '%',
defaultValue: 50
});
});
 
intentSection.addRow(row => {
row.addSuggestionChips('whatWouldHelp', {
label: 'What would increase your likelihood to purchase?',
suggestions: [
{ id: 'bigger-discount', name: 'Bigger discount' },
{ id: 'free-shipping', name: 'Free shipping' },
{ id: 'different-products', name: 'Different products' },
{ id: 'longer-time', name: 'More time to decide' },
{ id: 'reviews', name: 'More reviews' },
{ id: 'reminder', name: 'A reminder' },
{ id: 'nothing', name: 'Nothing - I\'ll buy!' }
],
max: 3,
alignment: 'left'
});
});
 
// ============================================
// SECTION 7: Improvement Suggestions
// ============================================
const improvementSection = form.addSubform('improvementSection', {
title: 'How Can We Improve?',
isVisible: () => awarenessSection.radioButton('sawCampaign')?.value() !== null
});
 
improvementSection.addRow(row => {
row.addTextarea('improvementSuggestions', {
label: 'Any suggestions for making our promotions more appealing to you?',
placeholder: 'Share your ideas...',
rows: 3,
autoExpand: true
});
});
 
// ============================================
// SECTION 8: Summary
// ============================================
const summarySection = form.addSubform('summarySection', {
title: 'Campaign Feedback Summary',
isVisible: () => {
const saw = awarenessSection.radioButton('sawCampaign')?.value();
return saw !== null;
}
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const awareness = awarenessSection.radioButton('sawCampaign')?.value();
const channels = channelSection.checkboxList('channels')?.value() || [];
const reaction = reactionSection.emojiRating('initialReaction')?.value();
const clarity = recallSection.ratingScale('messageClarity')?.value();
const actions = actionsSection.checkboxList('actionsTaken')?.value() || [];
const intent = intentSection.slider('purchaseIntent')?.value();
 
const awarenessLabels: Record<string, string> = {
'yes-clear': 'Yes - Clear recall',
'yes-vague': 'Yes - Vague recall',
'not-sure': 'Not sure',
'no': 'Did not see'
};
 
const reactionEmojis: Record<string, string> = {
'annoyed': '😒',
'uninterested': '😐',
'curious': '🤔',
'interested': '😊',
'excited': '🤩'
};
 
let summary = `📢 Campaign Feedback\n`;
summary += `${'═'.repeat(25)}\n\n`;
if (awareness) summary += `👁️ Awareness: ${awarenessLabels[awareness] || awareness}\n`;
if (channels.length > 0) summary += `📱 Channels: ${channels.length} sources\n`;
if (reaction) summary += `${reactionEmojis[reaction] || ''} Reaction: ${reaction}\n`;
if (clarity) summary += `📝 Message Clarity: ${clarity}/5\n`;
if (actions.length > 0) {
const purchased = actions.includes('purchased');
summary += `🛒 Action: ${purchased ? 'Made purchase' : actions.length + ' actions'}\n`;
}
if (intent) summary += `\n🎯 Purchase Intent: ${intent}%`;
 
return summary;
},
customStyles: () => {
const intent = intentSection.slider('purchaseIntent')?.value() ?? 0;
const baseStyles = {
padding: '16px',
borderRadius: '8px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '14px'
};
 
if (intent >= 70) {
return { ...baseStyles, backgroundColor: '#d1fae5', borderLeft: '4px solid #10b981' };
} else if (intent >= 40) {
return { ...baseStyles, backgroundColor: '#fef3c7', borderLeft: '4px solid #f59e0b' };
}
return { ...baseStyles, backgroundColor: '#fee2e2', borderLeft: '4px solid #ef4444' };
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: 'Submit Feedback',
isVisible: () => awarenessSection.radioButton('sawCampaign')?.value() !== null
});
 
form.configureCompletionScreen({
type: 'text',
title: 'Thank You!',
message: 'Your feedback helps us create better promotions. Keep an eye out for exclusive offers based on what customers like you tell us!'
});
}
 

Frequently Asked Questions

When should I send this survey?

For ongoing campaigns, send mid-campaign to make adjustments. For completed campaigns, send within 1 week of campaign end while memory is fresh. Sample 5-10% of your audience to get statistically significant results.

How do I measure campaign effectiveness?

Key metrics include: awareness rate (who saw it), channel effectiveness (where they saw it), message recall (what they remember), engagement rate (actions taken), and purchase intent (likelihood to buy). Compare these against campaign goals and previous campaigns.

Should I survey people who didn't see the campaign?

Yes - surveying non-aware customers helps measure reach gaps and provides a control group. The form's conditional logic shows different questions based on awareness, so everyone gets a relevant experience.

How can I improve purchase intent?

Analyze what resonates (deals, messaging, urgency) with high-intent respondents. Look for patterns in channels and creative elements that drive action. Use insights to refine targeting and messaging for future campaigns.

Can I use this for non-retail campaigns?

Absolutely. The form works for any promotional campaign - B2B product launches, service promotions, awareness campaigns, or event marketing. Customize the channel options and call-to-action questions for your context.