Skip to main content
Назад до блогу
4 хв читання

GDPR для невеликого SaaS: 5-годинний сетап, якого достатньо

Не потрібен юридичний аудит за €10K, щоб бути GDPR-комплаєнтним. Мінімально життєздатний сетап, який я реалізую для кожного EU-орієнтованого SaaS: що робити, що пропустити, що реально важливо.

security

Більшість фаундерів невеликих SaaS у ЄС знають, що їм потрібен GDPR. Більшість також думають, що це вимагає юридичного аудиту за €10K, платформи управління згодами та штатного DPO. Ні — не на маленькому масштабі.

Я налаштовував GDPR-комплаєнс для 6 клієнтських проєктів. Ось мінімально життєздатний сетап, що займає близько 5 годин і покриває те, що реально має значення.

Що GDPR реально вимагає (коротка версія)

  1. Законна основа для обробки: Потрібна юридична причина для збору даних. Для SaaS: згода (для маркетингу) або виконання контракту (для самого сервісу).
  2. Прозорість: Розкажіть користувачам, що ви збираєте, навіщо і як довго зберігаєте.
  3. Мінімізація даних: Не збирайте більше, ніж потрібно.
  4. Право на доступ/видалення: Користувачі можуть запросити свої дані або їх видалення.
  5. Безпека: Захищайте дані, що зберігаєте.
  6. Повідомлення про витік: Повідомте регулятору протягом 72 годин.

Все. Решта (DPO, DPIA, записи про обробку) має пороги, яких маленький SaaS рідко досягає.

5-годинний сетап

Година 1: Політика конфіденційності (справжня)

Не юридичний шаблон, скопійований у корпорації з Fortune 500. Документ зрозумілою мовою, що покриває:

Пишіть зрозумілою мовою. Не юридичним жаргоном. Користувач має зрозуміти, що відбувається з його даними, за 2 хвилини читання.

Година 2: Згода на куки (мінімальна)

Якщо ви використовуєте тільки необхідні куки (сесія, аутентифікація), банер кук взагалі не потрібен за GDPR. Необхідні куки мають виняток.

Якщо використовуєте аналітику:

Моя рекомендація: використовуйте 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-провайдерів воно є. Потрібно підписати — зазвичай просто галочка в їхньому дашборді.

Що можна пропустити (на маленькому масштабі)

Вартість бездіяльності

Штраф GDPR для маленької компанії починається з €10K–€50K. Реалістичніше — першим покаранням буде попередження від наглядового органу. Але реальна вартість — втратити B2B-угоду, бо команда закупівель покупця побачила відсутність політики конфіденційності та DPA.

5 годин сетапу. Нуль поточних витрат при аналітиці без кук. І сторінка конфіденційності, що реально зрозуміла живим людям.


Потрібен GDPR-комплаєнс для вашого SaaS? Напишіть — я включаю це в кожен EU-орієнтований проєкт.