GDPR Privacy Consent Form

This GDPR consent form helps organizations collect legally compliant consent from users before processing their personal data. It separates required consents (essential for service) from optional ones (marketing, analytics), provides clear explanations of data usage, and records explicit opt-in/opt-out preferences. The form includes dynamic visibility to show relevant sections based on user choices and provides a clear summary of all consent decisions. Essential for GDPR, CCPA, and other privacy regulation compliance.

Specialized

Try the Form

Please review and provide your consent for how we handle your personal data.
Your Information
 
 
Essential Data Processing
The following consent is required to use our services. We collect and process your data to provide the service you requested.
 
 
 
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
export function gdprConsentFormForm(form: FormTs) {
// GDPR Privacy Consent Form - Data Protection Compliance
// Demonstrates: Checkbox (required/optional), CheckboxList, ThumbRating, RadioButton, dynamic styling
 
// ============================================
// HEADER
// ============================================
form.addRow(row => {
row.addTextPanel('header', {
label: 'Privacy & Data Protection Consent',
computedValue: () => 'Please review and provide your consent for how we handle your personal data.',
customStyles: {
backgroundColor: '#0f766e',
color: 'white',
padding: '24px',
borderRadius: '12px',
textAlign: 'center'
}
});
});
 
// ============================================
// SECTION 1: User Information
// ============================================
const userSection = form.addSubform('userInfo', {
title: 'Your Information'
});
 
userSection.addRow(row => {
row.addTextbox('fullName', {
label: 'Full Name',
placeholder: 'Enter your full legal name',
isRequired: true
}, '1fr');
row.addEmail('email', {
label: 'Email Address',
placeholder: 'your@email.com',
isRequired: true
}, '1fr');
});
 
userSection.addRow(row => {
row.addDropdown('country', {
label: 'Country of Residence',
options: [
{ id: 'eu', name: 'European Union Member State' },
{ id: 'uk', name: 'United Kingdom' },
{ id: 'us', name: 'United States' },
{ id: 'ca', name: 'Canada' },
{ id: 'au', name: 'Australia' },
{ id: 'other', name: 'Other Country' }
],
isRequired: true
}, '1fr');
row.addRadioButton('userType', {
label: 'I am a:',
options: [
{ id: 'individual', name: 'Private Individual' },
{ id: 'business', name: 'Business Representative' }
],
orientation: 'horizontal',
isRequired: true
}, '1fr');
});
 
// ============================================
// SECTION 2: Essential Data Processing
// ============================================
const essentialSection = form.addSubform('essential', {
title: 'Essential Data Processing',
customStyles: {
backgroundColor: '#f0fdfa',
padding: '16px',
borderRadius: '8px',
borderLeft: '4px solid #0f766e'
}
});
 
essentialSection.addRow(row => {
row.addTextPanel('essentialInfo', {
computedValue: () => 'The following consent is required to use our services. We collect and process your data to provide the service you requested.',
customStyles: {
fontSize: '14px',
color: '#374151',
marginBottom: '12px'
}
});
});
 
essentialSection.addRow(row => {
row.addCheckbox('termsAccept', {
label: 'I accept the Terms of Service and Privacy Policy *',
isRequired: true
});
});
 
essentialSection.addRow(row => {
row.addCheckbox('dataProcessing', {
label: 'I consent to the processing of my personal data for service delivery *',
isRequired: true
});
});
 
essentialSection.addRow(row => {
row.addCheckbox('ageConfirm', {
label: 'I confirm that I am at least 16 years of age (or have parental consent) *',
isRequired: true
});
});
 
// ============================================
// SECTION 3: Marketing & Communications
// ============================================
const marketingSection = form.addSubform('marketing', {
title: 'Marketing & Communications (Optional)',
isVisible: () => essentialSection.checkbox('termsAccept')?.value() === true
});
 
marketingSection.addRow(row => {
row.addTextPanel('marketingInfo', {
computedValue: () => 'These consents are optional. You can use our services without opting in to marketing.',
customStyles: {
fontSize: '14px',
color: '#6b7280',
marginBottom: '12px'
}
});
});
 
marketingSection.addRow(row => {
row.addCheckbox('emailMarketing', {
label: 'I agree to receive marketing emails about products, services, and offers'
});
});
 
marketingSection.addRow(row => {
row.addCheckbox('smsMarketing', {
label: 'I agree to receive SMS/text message marketing communications',
isVisible: () => marketingSection.checkbox('emailMarketing')?.value() === true
});
});
 
marketingSection.addRow(row => {
row.addCheckbox('partnerOffers', {
label: 'I agree to receive offers from carefully selected partner organizations',
isVisible: () => marketingSection.checkbox('emailMarketing')?.value() === true
});
});
 
marketingSection.addRow(row => {
row.addDropdown('marketingFrequency', {
label: 'Preferred email frequency',
options: [
{ id: 'weekly', name: 'Weekly digest' },
{ id: 'monthly', name: 'Monthly newsletter' },
{ id: 'important', name: 'Important updates only' }
],
isVisible: () => marketingSection.checkbox('emailMarketing')?.value() === true
});
});
 
// ============================================
// SECTION 4: Cookies & Tracking
// ============================================
const cookiesSection = form.addSubform('cookies', {
title: 'Cookies & Analytics (Optional)',
isVisible: () => essentialSection.checkbox('termsAccept')?.value() === true
});
 
cookiesSection.addRow(row => {
row.addCheckboxList('cookiePreferences', {
label: 'Select which cookies you consent to:',
options: [
{ id: 'essential', name: 'Essential cookies (required for site functionality)', isRequired: true },
{ id: 'analytics', name: 'Analytics cookies (help us improve our service)' },
{ id: 'functional', name: 'Functional cookies (remember your preferences)' },
{ id: 'advertising', name: 'Advertising cookies (personalized ads)' }
],
orientation: 'vertical',
defaultValue: ['essential']
});
});
 
// ============================================
// SECTION 5: Data Sharing Preferences
// ============================================
const sharingSection = form.addSubform('sharing', {
title: 'Data Sharing Preferences',
isVisible: () => essentialSection.checkbox('dataProcessing')?.value() === true
});
 
sharingSection.addRow(row => {
row.addRadioButton('thirdPartySharing', {
label: 'Do you consent to sharing your data with third-party service providers?',
options: [
{ id: 'yes-all', name: 'Yes, share with all service providers' },
{ id: 'yes-essential', name: 'Only essential service providers' },
{ id: 'no', name: 'No, do not share my data' }
],
orientation: 'vertical'
});
});
 
sharingSection.addRow(row => {
row.addCheckboxList('dataCategories', {
label: 'Which data categories may we process?',
options: [
{ id: 'contact', name: 'Contact information (name, email, phone)' },
{ id: 'usage', name: 'Service usage data' },
{ id: 'preferences', name: 'Preferences and interests' },
{ id: 'location', name: 'Location data' },
{ id: 'financial', name: 'Financial/billing information' }
],
orientation: 'vertical',
isVisible: () => sharingSection.radioButton('thirdPartySharing')?.value() !== 'no'
});
});
 
// ============================================
// SECTION 6: Consent Verification
// ============================================
const verificationSection = form.addSubform('verification', {
title: 'Consent Verification',
isVisible: () =>
essentialSection.checkbox('termsAccept')?.value() === true &&
essentialSection.checkbox('dataProcessing')?.value() === true
});
 
verificationSection.addRow(row => {
row.addThumbRating('policyClarity', {
label: 'Was our privacy policy clear and easy to understand?',
showLabels: true,
upLabel: 'Yes, it was clear',
downLabel: 'No, it was confusing',
alignment: 'center',
size: 'lg'
});
});
 
verificationSection.addRow(row => {
row.addTextarea('questions', {
label: 'Do you have any questions about how we use your data?',
placeholder: 'Type any questions or concerns here...',
rows: 2,
isVisible: () => verificationSection.thumbRating('policyClarity')?.value() === 'down'
});
});
 
verificationSection.addRow(row => {
row.addRatingScale('consentConfidence', {
label: 'How confident are you in your consent decisions?',
preset: 'likert-5',
lowLabel: 'Not confident',
highLabel: 'Very confident',
alignment: 'center'
});
});
 
// ============================================
// SECTION 7: Consent Summary
// ============================================
const summarySection = form.addSubform('summary', {
title: 'Your Consent Summary',
isVisible: () =>
essentialSection.checkbox('termsAccept')?.value() === true &&
essentialSection.checkbox('dataProcessing')?.value() === true &&
essentialSection.checkbox('ageConfirm')?.value() === true
});
 
summarySection.addRow(row => {
row.addTextPanel('summaryContent', {
computedValue: () => {
const name = userSection.textbox('fullName')?.value() || 'User';
const email = userSection.email('email')?.value();
const country = userSection.dropdown('country')?.value();
const emailMarketing = marketingSection.checkbox('emailMarketing')?.value();
const cookies = cookiesSection.checkboxList('cookiePreferences')?.value() || ['essential'];
const sharing = sharingSection.radioButton('thirdPartySharing')?.value();
 
let summary = 'πŸ“‹ Consent Summary\n';
summary += '═'.repeat(28) + '\n\n';
summary += `πŸ‘€ Name: ${name}\n`;
if (email) summary += `πŸ“§ Email: ${email}\n`;
if (country) summary += `🌍 Region: ${country.toUpperCase()}\n`;
summary += '\nβœ… REQUIRED CONSENTS\n';
summary += 'β€’ Terms & Privacy Policy accepted\n';
summary += 'β€’ Data processing consent granted\n';
summary += 'β€’ Age confirmation provided\n';
summary += '\nπŸ“§ MARKETING\n';
summary += emailMarketing ? 'β€’ Email marketing: Opted In\n' : 'β€’ Email marketing: Opted Out\n';
summary += `\nπŸͺ COOKIES (${cookies.length} categories)\n`;
cookies.forEach(c => {
const labels: Record<string, string> = {
'essential': 'β€’ Essential (required)',
'analytics': 'β€’ Analytics',
'functional': 'β€’ Functional',
'advertising': 'β€’ Advertising'
};
summary += labels[c] + '\n';
});
if (sharing) {
summary += '\nπŸ”— DATA SHARING\n';
const sharingLabels: Record<string, string> = {
'yes-all': 'β€’ Sharing: All providers',
'yes-essential': 'β€’ Sharing: Essential only',
'no': 'β€’ Sharing: Declined'
};
summary += sharingLabels[sharing] + '\n';
}
return summary;
},
customStyles: {
padding: '16px',
borderRadius: '8px',
backgroundColor: '#f0fdfa',
borderLeft: '4px solid #0f766e',
whiteSpace: 'pre-wrap',
fontFamily: 'monospace',
fontSize: '13px'
}
});
});
 
// Final confirmation
summarySection.addSpacer({ height: '16px' });
summarySection.addRow(row => {
row.addCheckbox('finalConfirmation', {
label: 'I confirm that the above summary accurately reflects my consent choices',
isRequired: true
});
});
 
// ============================================
// FORM CONFIGURATION
// ============================================
form.configureSubmitButton({
label: 'Submit Consent',
isVisible: () => summarySection.checkbox('finalConfirmation')?.value() === true
});
 
form.configureCompletionScreen({
type: 'text',
title: 'Consent Recorded',
message: 'Thank you for providing your consent preferences. A confirmation email has been sent to you. You can update your preferences at any time through your account settings or by contacting our privacy team.'
});
}
 

Frequently Asked Questions

What consent is required vs. optional under GDPR?

Consent for essential service functionality can be bundled with terms acceptance. However, marketing communications, analytics tracking, and third-party data sharing require separate, explicit opt-in consent. Users must be able to refuse optional consent without losing access to the core service.

How should we store consent records?

GDPR requires documenting: who consented, when, what they were told, and how they consented. Store timestamped records of form submissions, the version of privacy policy shown, and all individual consent choices. This proves compliance during audits.

Can users withdraw consent?

Yes, GDPR requires that withdrawing consent is as easy as giving it. Provide clear unsubscribe links in emails, account privacy settings for ongoing consent management, and a process for users to request full consent withdrawal and data deletion.

How often should we refresh consent?

Consent should be refreshed when: your privacy policy materially changes, you want to use data for new purposes, or periodically (annually is common practice). Don't assume old consent covers new usesβ€”always get fresh consent for new processing activities.

Does this form work for CCPA and other regulations?

The form structure supports multiple privacy regulations. CCPA requires similar transparency but has different opt-out requirements. Customize the form language and consent structure based on your jurisdiction and the regulations that apply to your users.