Більшість фаундерів невеликих SaaS у ЄС знають, що їм потрібен GDPR. Більшість також думають, що це вимагає юридичного аудиту за €10K, платформи управління згодами та штатного DPO. Ні — не на маленькому масштабі.
Я налаштовував GDPR-комплаєнс для 6 клієнтських проєктів. Ось мінімально життєздатний сетап, що займає близько 5 годин і покриває те, що реально має значення.
Що GDPR реально вимагає (коротка версія)
- Законна основа для обробки: Потрібна юридична причина для збору даних. Для SaaS: згода (для маркетингу) або виконання контракту (для самого сервісу).
- Прозорість: Розкажіть користувачам, що ви збираєте, навіщо і як довго зберігаєте.
- Мінімізація даних: Не збирайте більше, ніж потрібно.
- Право на доступ/видалення: Користувачі можуть запросити свої дані або їх видалення.
- Безпека: Захищайте дані, що зберігаєте.
- Повідомлення про витік: Повідомте регулятору протягом 72 годин.
Все. Решта (DPO, DPIA, записи про обробку) має пороги, яких маленький SaaS рідко досягає.
5-годинний сетап
Година 1: Політика конфіденційності (справжня)
Не юридичний шаблон, скопійований у корпорації з Fortune 500. Документ зрозумілою мовою, що покриває:
- Що ви збираєте: email, ім'я, аналітика використання, платіжні дані (через Stripe — ви не зберігаєте карти)
- Навіщо збираєте: надання сервісу, транзакційні листи, покращення продукту
- З ким ділитесь: Stripe (платежі), Vercel (хостинг), Sentry (трекінг помилок), Plausible (аналітика)
- Як довго зберігаєте: дані активного акаунту зберігаються, поки акаунт існує; видаляються протягом 30 днів після видалення акаунту
- Права користувачів: доступ, виправлення, видалення, переносність, заперечення проти обробки
- Контакт: email для запитів даних
Пишіть зрозумілою мовою. Не юридичним жаргоном. Користувач має зрозуміти, що відбувається з його даними, за 2 хвилини читання.
Година 2: Згода на куки (мінімальна)
Якщо ви використовуєте тільки необхідні куки (сесія, аутентифікація), банер кук взагалі не потрібен за GDPR. Необхідні куки мають виняток.
Якщо використовуєте аналітику:
- Plausible та Fathom: Аналітика без кук. Банер не потрібен.
- PostHog у режимі без кук: Банер не потрібен при відповідному налаштуванні.
- Google Analytics: Вимагає згоди. Потрібен банер.
Моя рекомендація: використовуйте Plausible або PostHog у режимі без кук і пропустіть банер кук повністю. Банер коштує вам 5–15% точності аналітики та додає UX-тертя.
Година 3: Флоу видалення даних
Коли користувач видаляє акаунт, ви маєте реально видалити його дані. Не soft-delete — hard delete з бази даних.
async function deleteUserData(userId: string) {
await stripe.subscriptions.cancel(user.stripeSubscriptionId)
await db.transaction(async (tx) => {
await tx.delete(sessions).where(eq(sessions.userId, userId))
await tx.delete(preferences).where(eq(preferences.userId, userId))
await tx.delete(activities).where(eq(activities.userId, userId))
await tx.delete(users).where(eq(users.id, userId))
})
await posthog.deleteUser(userId)
await sentry.deleteUser(userId)
logger.info('User data deleted', { userId, timestamp: new Date() })
}
Лог видалення — ваш доказ, що ви виконали запит. Зберігайте 3 роки.
Година 4: Ендпоінт експорту даних
GDPR дає користувачам право отримати свої дані в машиночитабельному форматі. Один ендпоінт:
export async function GET(request: Request) {
const user = await getAuthenticatedUser(request)
const data = {
profile: await db.query.users.findFirst({ where: eq(users.id, user.id) }),
preferences: await db.query.preferences.findMany({
where: eq(preferences.userId, user.id),
}),
activities: await db.query.activities.findMany({
where: eq(activities.userId, user.id),
}),
}
delete data.profile.passwordHash
delete data.profile.stripeCustomerId
return new Response(JSON.stringify(data, null, 2), {
headers: {
'Content-Type': 'application/json',
'Content-Disposition': `attachment; filename="user-data-${user.id}.json"`,
},
})
}
JSON — валідний машиночитабельний формат.
Година 5: Аудит третіх сторін
Перерахуйте кожен сервіс, що торкається даних користувачів. Для кожного: який DPA підписаний, чи є хостинг у ЄС.
DPA = Data Processing Agreement. У більшості SaaS-провайдерів воно є. Потрібно підписати — зазвичай просто галочка в їхньому дашборді.
Що можна пропустити (на маленькому масштабі)
- Data Protection Officer: Потрібен тільки якщо ваша основна діяльність включає систематичний моніторинг осіб у великому масштабі. SaaS на 500 користувачів не кваліфікується.
- Data Protection Impact Assessment: Потрібен тільки для обробки високого ризику. Стандартний SaaS не кваліфікується.
- Платформа згоди на куки: Оверкіл при аналітиці без кук.
Вартість бездіяльності
Штраф GDPR для маленької компанії починається з €10K–€50K. Реалістичніше — першим покаранням буде попередження від наглядового органу. Але реальна вартість — втратити B2B-угоду, бо команда закупівель покупця побачила відсутність політики конфіденційності та DPA.
5 годин сетапу. Нуль поточних витрат при аналітиці без кук. І сторінка конфіденційності, що реально зрозуміла живим людям.
Потрібен GDPR-комплаєнс для вашого SaaS? Напишіть — я включаю це в кожен EU-орієнтований проєкт.