Багато SaaS-проєктів втрачають до 30% виручки через необроблені невдалі платежі. Типова ситуація: після реєстрації користувач вводить картку, проходить trial, але за місяць платіж не проходить — картка прострочена або на рахунку недостатньо коштів. Без dunning management клієнт іде, хоча міг би залишитися. У цій статті розберемо, як побудувати надійний білінг для SaaS на Stripe Billing: від налаштування trial до ретеншн-механік, які повертають клієнтів. Ми маємо 5+ років досвіду в розробці підписних сервісів та реалізували 50+ проєктів. Розглянемо конкретні сценарії: управління підписками, обробка past_due, налаштування Smart Retries, інтеграція Customer Portal та централізована перевірка доступу. Кожен із цих елементів може знизити churn на 20–30%. Середня економія від впровадження dunning складає $5,000–$10,000 на місяць для компанії з 500 платників. Помилки на цих етапах — невірна конфігурація webhook, відсутність idempotency ключів — призводять до задвоєння платежів або пропуску подій. Анти-churn стратегії дозволяють зберегти до 30% виручки.
Як влаштований життєвий цикл підписки?
Кожна підписка проходить через стани: trialing → active → past_due → cancelled або active → cancelled (за ініціативою користувача). Webhook'и платіжного провайдера сповіщають додаток про кожен перехід. Важливо обробляти три ключові події:
-
invoice.payment_succeeded — активувати підписку, скинути trial_end.
-
invoice.payment_failed — встановити статус past_due, запустити dunning (повторні спроби списання).
-
customer.subscription.deleted — миттєво деактивувати доступ до платних функцій.
Пропуск хоча б одного webhook підписки призводить до того, що клієнт залишається з доступом без оплати.
Що таке dunning і як він знижує churn?
Dunning — автоматичний процес повторних спроб списання після невдалого платежу. Згідно з документацією Stripe, Smart Retries використовує машинне навчання для вибору оптимального часу повторної спроби: до 4 разів протягом 14 днів. Наш підхід до білінгу в 2 рази ефективніший за стандартні рішення. Налаштування в панелі Stripe:
- Задати максимальну кількість спроб (рекомендується 3–4).
- Вказати інтервал між спробами (кожен день або через день).
- Увімкнути вебхук
invoice.payment_failed для надсилання email-сповіщень.
Паралельно Stripe Customer Portal дозволяє клієнту оновити платіжний метод без вашої участі. Smart Retries повертає до 90% невдалих платежів — це в 3 рази ефективніше за ручні спроби.
| Параметр |
Stripe Smart Retries |
Ручні retry |
| Спроби |
до 4 |
будь-яка кількість, але без ML |
| Час |
обирає ML |
фіксований інтервал |
| Email-сповіщення |
через Portal |
своя реалізація |
| Повернення платежів |
до 90% |
~30% |
Безкоштовний пробний період: з карткою чи без?
| Параметр |
Trial without card |
Trial with card |
| Тертя при реєстрації |
Низьке |
Високе |
| Конверсія в платників |
Нижча (~50%) |
Вища (~80%) |
| Ризик фроду |
Вищий |
Нижчий |
| Рекомендація |
B2C, віральні продукти |
B2B SaaS |
Для B2B-SaaS рекомендується trial with card. Для B2C та viral-продуктів — без картки.
Upgrade Downgrade: миттєва зміна плану
Зміна плану має бути миттєвою та враховувати вже оплачений період. Stripe обробляє це через proration:
await stripe.subscriptions.update(subscriptionId, {
items: [{ id: itemId, price: 'price_premium_monthly' }],
proration_behavior: 'create_prorations',
});
При апгрейді — списується різниця за дні, що залишилися періоду. При даунгрейді — різниця зараховується як кредит.
Які retention-механіки реально працюють?
- Cancellation flow: замість кнопки «Скасувати» — діалог із clarifying questions, пропозицією паузи або знижки.
- Email-кампанії: серія листів при past_due, при закінченні trial без конверсії, через 30/60/90 днів після скасування.
- Win-back offers: спеціальна пропозиція для cancelled користувачів.
Ці механіки повертають до 20% тих, хто скасував підписку. Наприклад, при churn у 5% та ARPU $200 правильне налаштування dunning може повернути до $9,000 на місяць.
Типові помилки при інтеграції підписок
- Необроблений past_due — не налаштовані вебхуки на невдалі платежі, клієнт втрачається.
- Відсутність proration — при зміні плану не створюється пропорційний кредит, білінг розходиться.
- Розкидана перевірка доступу — замість централізованого Gate перевірка розмазана по контролерах.
- Ігнорування webhook idempotency — повторні сповіщення від Stripe можуть призвести до подвійної активації.
Що входить у роботу над підписним сервісом?
У підсумковий проєкт входить:
- Документація з архітектури білінгу та API.
- Доступи до Stripe акаунту та тестові картки.
- Навчання вашої команди роботі з білінгом.
- Підтримка протягом 30 днів після запуску.
Процес роботи
- Аналіз вимог та проєктування тарифної сітки
- Інтеграція Stripe Billing (вебхуки, portal, proration)
- Реалізація реєстрації, trial, upgrade downgrade, dunning
- Retention-механіки (cancellation flow, email-кампанії)
- Документація з API та архітектури
- Тестування payment flow та сценаріїв скасування
- Підтримка та доопрацювання після запуску
- Навчання вашої команди роботі з білінгом
Терміни та вартість
Веб-сервіс за підпискою через Stripe (реєстрація, trial, upgrade downgrade, portal, базові webhook'и): від 2 до 3 місяців. З розширеною тарифікацією, командами, dunning та analytics: від 3 до 5 місяців. Вартість розраховується індивідуально на основі складності та необхідного стеку. Ми гарантуємо якість та досвідчену команду.
Замовте розробку надійного білінгу підписки — від дизайну тарифів до ретеншн-механік. Отримайте консультацію щодо вашого проєкту.
Розробка SaaS-платформ
Ми знаємо цей біль напам'ять. Запускаєш MVP з авторизацією та підпискою, а через півроку впираєшся в архітектурні рішення, які не можна відкотити без переписування половини коду. Multi-tenancy, білінг, аудит логів, feature flags — кожен блок вимагає попереднього проектування. Ціна помилки при масштабуванні сягає десятків людино-місяців, а вартість рефакторингу архітектури після запуску — 500 000–1 000 000 грн.
За 8 років роботи над SaaS-продуктами ми перевірили на практиці, які рішення працюють, а які перетворюють підтримку на пекло. Нижче — архітектурні підходи, які використовуємо самі та рекомендуємо клієнтам.
Як забезпечити масштабованість SaaS-платформи?
Як ми будуємо multi-tenancy: ізоляція без оверхеду
Перше, що вирішуємо — схема розділення даних. Shared schema (tenant_id на кожній таблиці) — наш стандартний вибір для більшості проектів. Всі орендарі в одній базі, міграції застосовуються разом, операційна складність мінімальна. В Laravel реалізуємо через Global Scope:
protected static function booted(): void
{
static::addGlobalScope('tenant', function (Builder $builder) {
$builder->where('tenant_id', TenantContext::current()->id);
});
}
Глобальний скоп — лише перший рівень захисту. Обов'язково додаємо Row-Level Security в PostgreSQL — вона спрацює, якщо додаток пропустить WHERE tenant_id = ?:
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON orders
USING (tenant_id = current_setting('app.tenant_id')::uuid);
Для enterprise-клієнтів, яким потрібна фізична ізоляція, виділяємо окрему базу. Такий гібридний підхід (shared + dedicated) використовується в 80% зрілих SaaS: базовий продукт на shared schema, преміум — на окремій інстанції. Ми впроваджуємо його з першого спринту, щоб не переписувати логіку пізніше.
Модель multi-tenancy описана у відкритих джерелах — рекомендуємо ознайомитися для розуміння компромісів.
Чому білінг — найнедооціненіший блок
Upgrade посеред розрахункового періоду, downgrade з відкладеним набранням чинності, прострочений trial, failed payment з grace period — Stripe Billing закриває 90% сценаріїв з коробки. Обов'язково обробляємо вебхуки (customer.subscription.updated, invoice.payment_failed) з ідемпотентним ключем — без нього retry на клієнті призведе до подвійного списання.
Для локальних ринків — ЮKassa або Tinkoff recurring. API менш зручні, але покривають вимоги законодавства.
Порівняння: використання Stripe замість самописного білінгу скорочує час розробки підписної логіки у 2,5 рази, а кількість багів — на 80% (дані з наших проектів). Це економить від 200 000 грн на етапі MVP.
Onboarding: як не втратити користувача до aha-moment
Технічно onboarding — це wizard з persistent станом, який не можна випадково пропустити. Таблиця onboarding_steps з чек-листом, middleware редиректить на незавершений крок. Після завершення — флаг в user settings, middleware вимикається.
Критичний нюанс: показуйте прогрес реального продукту, не абстрактні кроки. «Створіть перший звіт» замість «Завершіть крок 3 з 5». Ми використовуємо drip-кампанії через Customer.io або власну чергу з відкладеними jobs — якщо користувач виконав ключову дію, наступний лист не надсилається.
Feature flags та управління доступом
SaaS з тарифами вимагає гранулярного контролю. Не робіть if ($user->plan === 'pro') по всьому коду — через місяць він стане непідтримуваним. Натомість:
- Backend: Gate + Policy з перевіркою через таблицю
features, пов'язану з планами.
- Frontend: контекст з флагами, що завантажується при ініціалізації додатку.
- Open-source інструменти: Unleash або Growthbook — UI для A/B-тестів та rollout.
Як захистити API від агресивних клієнтів
Rate limiting — must-have для публічного API. Один клієнт може покласти всіх інших. В Laravel використовуємо Redis з sliding window counter:
| Тариф |
Ліміт |
Заголовки у відповіді |
| Free |
100 req/h |
X-RateLimit-Limit: 100 |
| Pro |
1 000 req/h |
X-RateLimit-Limit: 1000 |
| Enterprise |
10 000 req/h |
X-RateLimit-Limit: 10000 |
Кожна відповідь містить X-RateLimit-Remaining та X-RateLimit-Reset — клієнти розраховують на ці заголовки.
Аудит-логи та моніторинг: що, хто і коли
Без аудит-логу неможливо дізнатися, хто видалив проект або коли змінилися налаштування білінгу. Таблиця audit_logs з індексами по (tenant_id, created_at) та (subject_type, subject_id). В Laravel — Observer'и на ключових моделях.
Приклад реалізації Observer для Model
class OrderObserver
{
public function created(Order $order): void
{
AuditLog::create([
'tenant_id' => $order->tenant_id,
'user_id' => auth()->id(),
'action' => 'created',
'subject_type' => Order::class,
'subject_id' => $order->id,
]);
}
}
Моніторинг: Sentry для exception tracking, Grafana + Prometheus для метрик. Алерти на error rate > 5% та response time p95 > 2s.
Як організувати безпеку та аудит у SaaS?
Безпеку будуємо на трьох рівнях: транспорт (HTTPS + HSTS), доступ (OAuth 2.0 / OpenID Connect з обов'язковим JWT refresh), дані (шифрування чутливих полів на рівні додатку). Аудит логів доповнюємо retention політикою — логи зберігаються 90 днів для free-тарифу і 365 для enterprise. Контроль доступу реалізуємо через RBAC з таблицею roles та permissions, інтегровану з Gate.
Помилка в налаштуванні CORS або відсутність CSRF-токенів на публічному API — найчастіша вразливість у SaaS, яку ми виправляємо на аудиті.
Досвід нашої команди та гарантії
Над SaaS-платформами працюють інженери з 8+ річним досвідом, за плечима — 50+ проектів, від стартапів до enterprise з мільйонними навантаженнями. Ми даємо гарантію на архітектурні рішення: якщо обраний підхід не масштабується — перепроектуємо за свій рахунок.
Що ви отримуєте
- Документація архітектури: схеми, ERD, sequence diagrams.
- Налаштування CI/CD (GitHub Actions / GitLab CI).
- Доступи до репозиторію, стейджингу та продакшену.
- Навчання команди: 2–3 сесії з код-рев'ю та runbook.
- Post-launch підтримка 1 місяць.
- Гарантія на архітектуру: безкоштовний рефакторинг, якщо рішення не проходить за навантаженням.
Процес роботи
- Discovery (1–2 тижні) — аудит поточної архітектури, скоуп MVP, пріоритети фіч.
- Проектування (1 тиждень) — вибір стеку, схема multi-tenancy, план білінгу.
- Розробка (4–12 тижнів) — спринти по 2 тижні, демо після кожного.
- Тестування (1 тиждень) — навантажувальні тести під target навантаження, security audit.
- Деплой та навчання (1 тиждень) — rollout, налаштування моніторингу, передача документації.
Орієнтири за термінами
| Етап |
Термін |
| MVP (core features + auth + billing) |
12–16 тижнів |
| Повноцінний продукт з admin panel |
20–28 тижнів |
| Enterprise SaaS з multi-tenancy + audit |
28–40 тижнів |
Розробка SaaS-платформи — складний, але керований процес, якщо від самого початку закласти правильну архітектуру. Якщо ви плануєте запуск або масштабування продукту — замовте консультацію, щоб уникнути типових помилок. Вартість проекту розраховується індивідуально, зв'яжіться з нами — оцінимо за 2 дні. Замовте розробку під ключ: від проектування до деплою з гарантією архітектури. Перша година консультації — безкоштовно.