Privacy Policy Generator

appsApp Information

personPersonal Information

blockDo Not Collect Any Data
badgeFirst and Last Name
emailEmail Address
phonePhone Number
homeAddress
publicSocial Media Profiles
fingerprintBiometric Data
account_circleUser ID
cakeBirthdate

devicesDevice Information

blockDo Not Collect Any Data
location_onLocation (GPS)
contactsContacts
photo_cameraCamera
micMicrophone
storageStorage
sensorsSensors
network_wifiNetwork Info
devices_otherDevice ID

analyticsAnalytics & Tracking

blockDo Not Collect Any Data
insightsAnalytics Data
track_changesAdvertising ID
httpCookies

lockOther Permissions

blockNone
notificationsNotifications
bluetoothBluetooth
health_and_safetyHealth
paymentPayment
calendar_todayCalendar
smsSMS
callCall Logs

extensionThird-Party Services

blockNo Third-Party Services
androidGoogle Play Services
local_fire_departmentFirebase
monetization_onAdMob
analyticsGoogle Analytics
facebookFacebook SDK
flightAppsFlyer
notifications_activeOneSignal
show_chartMixpanel
bug_reportCrashlytics

shareData Sharing

business Share with Third-Party Services
ads_click Share for Advertising Purposes
gavel Share as Required by Law

palettePolicy Design & Branding

Choose a primary color for headers and accents.
The quick brown fox jumps over the lazy dog.
previewLive Preview
Privacy Policy - ${data.appName}
${innerHTML}
`; } function generatePolicy(mode) { const fullHTML = getFullPolicyHTML(); const data = collectPolicyData(); const blob = new Blob([fullHTML], { type: 'text/html' }); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `Privacy_Policy_${data.appName.replace(/\s+/g, '_')}.html`; document.body.appendChild(a); a.click(); document.body.removeChild(a); } function copyPolicy() { const fullHTML = getFullPolicyHTML(); navigator.clipboard.writeText(fullHTML).then(() => { Swal.fire({ icon: 'success', title: 'Copied!', text: 'Privacy Policy HTML copied to clipboard.', showConfirmButton: false, timer: 1500, toast: true, position: 'top-end' }); }).catch(err => { console.error('Copy failed', err); Swal.fire({ icon: 'error', title: 'Copy Failed', text: 'Could not copy to clipboard.' }); }); } // Add Event Listeners const events = ['input', 'change', 'keyup']; // Add keyup for instant typing feedback const inputs = document.querySelectorAll('input, select'); events.forEach(evt => { inputs.forEach(el => el.addEventListener(evt, updatePreview)); }); // Chip Selection Logic document.querySelectorAll('.chip[data-type^="none"]').forEach(noneChip => { noneChip.addEventListener('click', () => { const chipContainer = noneChip.closest('.chip-container'); const otherChips = chipContainer.querySelectorAll('.chip:not([data-type^="none"])'); const isNoneSelected = noneChip.classList.contains('selected'); if (!isNoneSelected) { noneChip.classList.add('selected'); otherChips.forEach(chip => { chip.classList.remove('selected'); chip.classList.add('disabled'); }); // Clear custom input if exists const possibleWrapper = chipContainer.closest('.chip-group'); if (possibleWrapper) { const customInput = possibleWrapper.querySelector('input[type="text"]'); if (customInput) { customInput.disabled = true; customInput.value = ''; updatePreview(); } } } else { noneChip.classList.remove('selected'); otherChips.forEach(chip => chip.classList.remove('disabled')); const possibleWrapper = chipContainer.closest('.chip-group'); if (possibleWrapper) { const customInput = possibleWrapper.querySelector('input[type="text"]'); if (customInput) customInput.disabled = false; } } updatePreview(); }); }); document.querySelectorAll('.chip:not([data-type^="none"])').forEach(chip => { chip.addEventListener('click', () => { const chipContainer = chip.closest('.chip-container'); const noneChip = chipContainer.querySelector('.chip[data-type^="none"]'); if (chip.classList.contains('disabled')) return; chip.classList.toggle('selected'); if (chip.classList.contains('selected') && noneChip) { noneChip.classList.remove('selected'); } updatePreview(); }); }); // Initialize updatePreview();