Donor Satisfaction Survey

Build stronger donor relationships with this comprehensive donor satisfaction survey. Designed specifically for non-profit organizations, this form measures key loyalty drivers including perceived impact, communication effectiveness, transparency, and emotional connection. Features NPS scoring with automatic categorization, matrix-based satisfaction ratings, and intelligent follow-up questions that adapt based on donor sentiment. Perfect for annual donor surveys, post-campaign feedback, or regular relationship health checks.

Specialized

Try the Form

Thank you for being a valued supporter. Your feedback helps us serve our community better.
Donor Loyalty
Not at all likely
Extremely likely
 
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
export function donorFeedbackSurvey(form: FormTs) {
// Donor Satisfaction Survey - Non-Profit Feedback Form
// Demonstrates: NPS, StarRating, MatrixQuestion, EmojiRating, SuggestionChips, conditional visibility, dynamic styling
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Your Voice Matters to Our Mission',
computedValue: () => 'Thank you for being a valued supporter. Your feedback helps us serve our community better.',
customStyles: {
background: 'linear-gradient(135deg, #7c3aed 0%, #a855f7 100%)',
color: 'white',
padding: '28px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: Donor Loyalty (NPS)
// ============================================
const npsSection = form.addSubform('npsSection', {
title: 'Donor Loyalty',
customStyles: () => {
const category = npsSection.ratingScale('donorNps')?.npsCategory();
if (category === 'promoter') return { backgroundColor: '#dcfce7', padding: '16px', borderRadius: '8px' };
if (category === 'passive') return { backgroundColor: '#fef9c3', padding: '16px', borderRadius: '8px' };
if (category === 'detractor') return { backgroundColor: '#fee2e2', padding: '16px', borderRadius: '8px' };
return { padding: '16px', borderRadius: '8px', border: '1px dashed #d4d4d8' };
}
});
 
npsSection.addRow(row => {
row.addRatingScale('donorNps', {
preset: 'nps',
label: 'How likely are you to recommend supporting our organization to friends and family?',
showCategoryLabel: true,
showSegmentColors: true,
showConfettiOnPromoter: true,
isRequired: true
});
});
 
npsSection.addSpacer({ height: '16px' });
 
npsSection.addRow(row => {
row.addTextarea('npsReason', {
label: () => {
const category = npsSection.ratingScale('donorNps')?.npsCategory();
switch (category) {
case 'promoter': return "We're so grateful for your enthusiasm! What inspires you most about our work?";
case 'passive': return 'Thank you! What would make you feel more connected to our mission?';
case 'detractor': return "We're sorry to hear that. What could we do better to earn your trust?";
default: return 'Tell us more about your experience with our organization';
}
},
placeholder: () => {
const category = npsSection.ratingScale('donorNps')?.npsCategory();
if (category === 'promoter') return 'Share what makes our mission meaningful to you...';
if (category === 'passive') return 'Your suggestions help us grow stronger...';
if (category === 'detractor') return "We're listening and committed to improvement...";
return 'Your thoughts...';
},
rows: 3,
autoExpand: true,
isVisible: () => npsSection.ratingScale('donorNps')?.value() !== null
});
});
 
// ============================================
// SECTION 2: Impact & Transparency Rating
// ============================================
const impactSection = form.addSubform('impactSection', {
title: 'Impact & Transparency',
isVisible: () => npsSection.ratingScale('donorNps')?.value() !== null,
customStyles: { backgroundColor: '#f8fafc', padding: '16px', borderRadius: '8px' }
});
 
impactSection.addRow(row => {
row.addMatrixQuestion('satisfactionMatrix', {
label: 'Please rate your satisfaction with the following:',
rows: [
{ id: 'impact', label: 'Clarity of impact reporting', isRequired: true },
{ id: 'transparency', label: 'Financial transparency' },
{ id: 'communication', label: 'Communication frequency & quality' },
{ id: 'acknowledgment', label: 'Donation acknowledgment' },
{ id: 'engagement', label: 'Opportunities to get involved' }
],
columns: [
{ id: 'very-dissatisfied', label: 'Very Dissatisfied' },
{ id: 'dissatisfied', label: 'Dissatisfied' },
{ id: 'neutral', label: 'Neutral' },
{ id: 'satisfied', label: 'Satisfied' },
{ id: 'very-satisfied', label: 'Very Satisfied' }
],
striped: true,
fullWidth: true
});
});
 
// ============================================
// SECTION 3: Emotional Connection
// ============================================
const emotionSection = form.addSubform('emotionSection', {
title: 'Your Connection to Our Cause',
isVisible: () => npsSection.ratingScale('donorNps')?.value() !== null,
customStyles: { backgroundColor: '#fdf4ff', padding: '16px', borderRadius: '8px' }
});
 
emotionSection.addRow(row => {
row.addEmojiRating('emotionalConnection', {
label: 'How connected do you feel to our mission?',
preset: 'satisfaction',
size: 'lg',
showLabels: true,
alignment: 'center'
});
});
 
emotionSection.addSpacer({ height: '16px' });
 
emotionSection.addRow(row => {
row.addStarRating('overallSatisfaction', {
label: 'Overall satisfaction with your donor experience',
maxStars: 5,
size: 'lg',
alignment: 'center',
showConfettiOnMax: true
});
});
 
// ============================================
// SECTION 4: What Matters Most
// ============================================
const prioritiesSection = form.addSubform('prioritiesSection', {
title: 'What Matters Most to You',
isVisible: () => npsSection.ratingScale('donorNps')?.value() !== null,
customStyles: { backgroundColor: '#f0fdf4', padding: '16px', borderRadius: '8px' }
});
 
prioritiesSection.addRow(row => {
row.addSuggestionChips('priorities', {
label: 'Select what matters most to you as a donor (up to 3)',
suggestions: [
{ id: 'impact-stories', name: 'Impact stories' },
{ id: 'financial-reports', name: 'Financial reports' },
{ id: 'volunteer-ops', name: 'Volunteer opportunities' },
{ id: 'events', name: 'Events & gatherings' },
{ id: 'newsletters', name: 'Regular updates' },
{ id: 'recognition', name: 'Donor recognition' },
{ id: 'personal-contact', name: 'Personal contact' },
{ id: 'matching-gifts', name: 'Matching gift programs' }
],
max: 3,
alignment: 'center'
});
});
 
// ============================================
// SECTION 5: Areas for Improvement (Detractors/Passives)
// ============================================
const improvementSection = form.addSubform('improvementSection', {
title: 'How Can We Improve?',
isVisible: () => {
const score = npsSection.ratingScale('donorNps')?.value();
return score !== null && score !== undefined && score <= 7;
},
customStyles: { backgroundColor: '#fef3c7', padding: '16px', borderRadius: '8px' }
});
 
improvementSection.addRow(row => {
row.addCheckboxList('improvementAreas', {
label: 'What areas need the most improvement?',
options: [
{ id: 'communication', name: 'Communication & updates' },
{ id: 'transparency', name: 'Financial transparency' },
{ id: 'impact', name: 'Showing impact of donations' },
{ id: 'acknowledgment', name: 'Donation acknowledgment' },
{ id: 'engagement', name: 'Engagement opportunities' },
{ id: 'ease', name: 'Ease of donating' },
{ id: 'website', name: 'Website experience' },
{ id: 'events', name: 'Events & activities' }
],
orientation: 'vertical'
});
});
 
improvementSection.addSpacer({ height: '12px' });
 
improvementSection.addRow(row => {
row.addTextarea('improvementDetails', {
label: 'Please share specific suggestions for improvement',
placeholder: 'Your ideas help us serve our community and donors better...',
rows: 3,
autoExpand: true
});
});
 
// ============================================
// SECTION 6: Future Giving Intent
// ============================================
const futureSection = form.addSubform('futureSection', {
title: 'Future Support',
isVisible: () => npsSection.ratingScale('donorNps')?.value() !== null
});
 
futureSection.addRow(row => {
row.addRadioButton('givingIntent', {
label: 'How likely are you to continue supporting our organization?',
options: [
{ id: 'definitely', name: 'Definitely will continue' },
{ id: 'probably', name: 'Probably will continue' },
{ id: 'unsure', name: 'Not sure' },
{ id: 'unlikely', name: 'Unlikely to continue' }
],
orientation: 'vertical'
});
});
 
futureSection.addRow(row => {
row.addCheckbox('increaseGiving', {
label: 'I am interested in increasing my giving or becoming a monthly donor',
isVisible: () => {
const intent = futureSection.radioButton('givingIntent')?.value();
return intent === 'definitely' || intent === 'probably';
}
});
});
 
// ============================================
// SECTION 7: Contact Preferences
// ============================================
const contactSection = form.addSubform('contactSection', {
title: 'Stay Connected',
isVisible: () => npsSection.ratingScale('donorNps')?.value() !== null
});
 
contactSection.addRow(row => {
row.addCheckbox('allowContact', {
label: 'I would like someone to follow up with me about my feedback'
});
});
 
contactSection.addRow(row => {
row.addTextbox('contactName', {
label: 'Your name',
placeholder: 'Optional - for personalized follow-up',
isVisible: () => contactSection.checkbox('allowContact')?.value() === true
}, '1fr');
row.addEmail('contactEmail', {
label: 'Email address',
placeholder: 'your@email.com',
isRequired: () => contactSection.checkbox('allowContact')?.value() === true,
isVisible: () => contactSection.checkbox('allowContact')?.value() === true
}, '1fr');
});
 
// ============================================
// SECTION 8: Summary
// ============================================
const summarySection = form.addSubform('summary', {
title: 'Feedback Summary',
isVisible: () => npsSection.ratingScale('donorNps')?.value() !== null
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const npsScore = npsSection.ratingScale('donorNps')?.value();
const category = npsSection.ratingScale('donorNps')?.npsCategory();
const overallRating = emotionSection.starRating('overallSatisfaction')?.value();
const emotionalConnection = emotionSection.emojiRating('emotionalConnection')?.value();
const priorities = prioritiesSection.suggestionChips('priorities')?.value() || [];
const givingIntent = futureSection.radioButton('givingIntent')?.value();
 
if (npsScore === null || npsScore === undefined) return '';
 
let emoji = '';
if (category === 'promoter') emoji = '💜';
else if (category === 'passive') emoji = '💭';
else emoji = '🙏';
 
let summary = `${emoji} Donor Feedback Summary\n`;
summary += `${'═'.repeat(28)}\n\n`;
summary += `📊 NPS Score: ${npsScore}/10 (${category?.charAt(0).toUpperCase()}${category?.slice(1)})\n`;
 
if (overallRating) {
summary += `⭐ Overall Satisfaction: ${overallRating}/5 stars\n`;
}
 
if (emotionalConnection) {
const connectionLabels: Record<string, string> = {
'very-bad': '😟 Disconnected',
'bad': '😐 Somewhat disconnected',
'neutral': '🤔 Neutral',
'good': '😊 Connected',
'excellent': '💜 Deeply connected'
};
summary += `\n${connectionLabels[emotionalConnection] || emotionalConnection}\n`;
}
 
if (priorities.length > 0) {
summary += `\n🎯 Top priorities: ${priorities.length} selected`;
}
 
if (givingIntent) {
const intentLabels: Record<string, string> = {
'definitely': '✅ Will definitely continue',
'probably': '👍 Probably will continue',
'unsure': '🤷 Unsure',
'unlikely': '⚠️ Unlikely to continue'
};
summary += `\n${intentLabels[givingIntent] || givingIntent}`;
}
 
return summary;
},
customStyles: () => {
const category = npsSection.ratingScale('donorNps')?.npsCategory();
const baseStyles = {
padding: '16px',
borderRadius: '8px',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '14px'
};
 
if (category === 'promoter') {
return { ...baseStyles, backgroundColor: '#f3e8ff', borderLeft: '4px solid #a855f7' };
} else if (category === 'passive') {
return { ...baseStyles, backgroundColor: '#fef9c3', borderLeft: '4px solid #eab308' };
} else if (category === 'detractor') {
return { ...baseStyles, backgroundColor: '#fee2e2', borderLeft: '4px solid #ef4444' };
}
return baseStyles;
}
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: 'Submit Feedback',
isVisible: () => npsSection.ratingScale('donorNps')?.value() !== null
});
 
form.configureCompletionScreen({
type: 'text',
title: 'Thank You for Your Feedback!',
message: 'Your voice helps us strengthen our mission and better serve our community. We deeply appreciate your support and your time in sharing these insights.'
});
}
 

Frequently Asked Questions

Why should non-profits measure donor satisfaction?

Donor satisfaction directly impacts retention and lifetime value. Studies show that satisfied donors are 3x more likely to give again and 5x more likely to increase their giving. Regular measurement helps identify at-risk donors before they lapse.

What is a good NPS score for non-profits?

Non-profit NPS benchmarks typically range from 40-60, higher than most commercial sectors due to emotional engagement. Scores above 50 are excellent. Focus on converting passives to promoters and understanding detractor concerns.

When should I send this survey to donors?

Best practices include: after a donation (within 48 hours for transactional NPS), quarterly for major donors, annually for all donors, and after key campaigns or events. Avoid survey fatigue by limiting to 2-4 surveys per year per donor.

How do I improve donor satisfaction scores?

Key drivers include: clear impact reporting, timely acknowledgment, personalized communication, transparency about fund usage, and meaningful engagement opportunities. Address detractor feedback promptly with personal outreach.

Can I customize the satisfaction dimensions?

Yes! The matrix question can be fully customized. Common dimensions include: impact communication, financial transparency, volunteer opportunities, event quality, staff responsiveness, and recognition programs.