Тріал — стандарт для SaaS, але без правильного налаштування churn досягає 90%. Ми маємо понад 8 років досвіду та більше 50 реалізованих проєктів, і стикалися з випадками, де користувачі йшли після пробного періоду через відсутність онбордингу та нагадувань. Грамотна реалізація тріалу — ключ до конверсії trial-to-paid у 20% і вище. Розберемо технічні деталі: вибір підходу, інтеграція з платіжним шлюзом, метрики та автоматичні сповіщення.
Як налаштувати тріал з карткою в Stripe?
Найнадійніший спосіб — запросити картку одразу, а тріал зробити безкоштовним. Stripe дозволяє це через payment_behavior: 'default_incomplete' та payment_method_collection: 'always' у Checkout-сесії. Користувач вводить картку, але списання відбудеться тільки після тріалу. Код нижче створює підписку з 14-денним тріалом та негайним збором платіжних даних.
const subscription = await stripe.subscriptions.create({ customer: customerId, items: [{ price: priceId }], trial_period_days: 14, payment_behavior: 'default_incomplete', expand: ['latest_invoice.payment_intent'], }); const session = await stripe.checkout.sessions.create({ mode: 'subscription', customer: customerId, line_items: [{ price: priceId, quantity: 1 }], subscription_data: { trial_period_days: 14, }, payment_method_collection: 'always', success_url: `${APP_URL}/dashboard?trial=started`, cancel_url: `${APP_URL}/pricing`, }); Такий підхід працює: користувач, який уже надав картку, з набагато більшою ймовірністю залишиться після тріалу. За нашою статистикою, конверсія з карткою на 40% вища, ніж без неї — тобто тріал з карткою кращий в 1.4 раза. Це підтверджують дані Stripe: тріал з карткою підвищує конверсію на 30–50%. Однак такий підхід відлякує частину аудиторії, особливо на ранньому етапі. Середня вартість підписки на B2B SaaS становить $100–500 на місяць, тому ризик втратити потенційних клієнтів через вимогу картки варто враховувати. Наприклад, для стартапу з 1000 реєстрацій економія від зниження churn може сягати $10 000 на ретаргетингу.
Коли варто не вимагати картку?
Для продуктів із тривалим циклом угоди або низьким порогом входу (наприклад, безкоштовні інструменти) краще не вимагати картку. Реалізація простіша: зберігаємо дату закінчення в БД і перевіряємо в middleware.
export async function startFreeTrial(userId: string): Promise<void> { const trialEndsAt = new Date(); trialEndsAt.setDate(trialEndsAt.getDate() + 14); await db.user.update({ where: { id: userId }, data: { trialEndsAt, trialUsed: true, } }); await sendTrialStartedEmail(userId, trialEndsAt); } export async function checkTrialAccess(userId: string): Promise<boolean> { const user = await db.user.findUnique({ where: { id: userId }, select: { trialEndsAt: true, subscription: { select: { status: true } } } }); if (user?.subscription?.status === 'ACTIVE') return true; if (user?.trialEndsAt && user.trialEndsAt > new Date()) return true; return false; } Порівняння підходів
| Критерій | Тріал з карткою | Тріал без картки |
|---|---|---|
| Конверсія | 25–40% | 10–20% |
| Churn після тріалу | 30% | 60% |
| Кількість реєстрацій | Нижча на 30% | Вища на 50% |
| Складність реалізації | Середня (Stripe) | Низька (БД) |
| Ризик шахрайства | Низький | Високий |
Конверсія trial-to-paid на рівні 22% означає додатковий дохід у $22 000 на кожні 1000 реєстрацій — це вагомий аргумент для інвестицій в онбординг. Крім того, правильне налаштування тріалу може економити до $10 000 на ретаргетингових кампаніях для однієї когорти.
Автоматичні нагадування та win-back
Навіть з ідеальним онбордингом частина користувачів піде. Наше завдання — мінімізувати втрати через автоматичні сповіщення. Реалізуємо cron-задачу, яка щодня перевіряє користувачів з тріалом, що закінчується, і надсилає листи.
export async function sendTrialReminders() { const now = new Date(); const threeDaysLeft = new Date(now.getTime() + 3 * 24 * 60 * 60 * 1000); const trialEndingSoon = await db.user.findMany({ where: { trialEndsAt: { gte: now, lte: threeDaysLeft, }, subscription: null, trialReminderSent: false, } }); for (const user of trialEndingSoon) { await sendEmail({ to: user.email, template: 'trial-ending-soon', variables: { daysLeft: Math.ceil((user.trialEndsAt!.getTime() - now.getTime()) / (1000 * 60 * 60 * 24)), upgradeUrl: `${APP_URL}/settings/billing`, } }); await db.user.update({ where: { id: user.id }, data: { trialReminderSent: true } }); } const expired = await db.user.findMany({ where: { trialEndsAt: { lt: now }, subscription: null, trialExpiredEmailSent: false, } }); for (const user of expired) { await sendEmail({ to: user.email, template: 'trial-expired', variables: { upgradeUrl: `${APP_URL}/settings/billing` } }); await db.user.update({ where: { id: user.id }, data: { trialExpiredEmailSent: true } }); } } Після закінчення тріалу запускайте win-back-кампанію: запропонуйте знижку 20–30% на перший місяць, дайте тиждень преміум-доступу або просто запитайте причину відмови. Live-чат в останні дні тріалу збільшує конверсію на 15%.
Як UI-банер впливає на конверсію?
Покажіть користувачу, скільки днів залишилося. Якщо тріал закінчується через 3 дні або менше, пофарбуйте банер у червоний — це створює терміновість.
export function TrialBanner({ trialEndsAt, daysLeft, }: { trialEndsAt: Date; daysLeft: number; }) { const urgency = daysLeft <= 3; return ( <div className={`flex items-center justify-between px-4 py-2 text-sm ${urgency ? 'bg-red-50 border-b border-red-200 text-red-800' : 'bg-blue-50 border-b border-blue-200 text-blue-800' }`} > <span> {urgency ? `Тріал закінчується через ${daysLeft} ${daysLeft === 1 ? 'день' : 'дні'}!` : `Пробний період активний ще ${daysLeft} днів (до ${trialEndsAt.toLocaleDateString('uk-UA')})` } </span> <a href="/settings/billing" className={`ml-4 font-medium underline ${urgency ? 'text-red-900' : 'text-blue-900'}`} > Перейти на платний план </a> </div> ); } Ключові метрики для відстеження
Без метрик неможливо покращити конверсію. Ми використовуємо PostHog для захоплення подій та подальшого аналізу (гарантуємо налаштування за 1 день). Ключові показники:
- Trial-to-Paid Conversion Rate — мета 15–25% для B2B SaaS. У наших проєктах середнє значення 22%. Це в 2,2 раза вище, ніж у 10% компаній, які не використовують онбординг.
- Trial Activation Rate — відсоток тріалів, де користувач виконав ключову дію (наприклад, завантажив перший файл). Мішень — 60%.
- Time to First Key Action — коли користувач вперше відчув цінність. Ідеально — в перші 24 години.
- Churn at Trial End — скільки йде в день X. Якщо вище 40% — перевіряйте онбординг.
| Метрика | Цільове значення | Коментар |
|---|---|---|
| Trial-to-Paid Conversion Rate | 15–25% | Середнє по B2B SaaS — 22% |
| Trial Activation Rate | >60% | Частка виконавших ключову дію |
| Time to First Key Action | <24 години | Чим раніше, тим вища конверсія |
| Churn at Trial End | <40% | Інакше потрібен онбординг |
posthog.capture('trial_started', { distinct_id: userId, trial_days: 14, plan: 'pro', source: 'checkout', }); posthog.capture('trial_converted', { distinct_id: userId, trial_day: daysFromTrialStart, plan: 'pro', billing_period: 'monthly', }); Процес реалізації під ключ
Ми виконуємо налаштування тріального періоду за 2–3 робочі дні. Етапи:
- Аналітика — визначаємо тривалість тріалу, чи вимагати картку, метрики успіху.
- Проєктування — вибираємо підхід (Stripe / БД), проєктуємо схему сповіщень.
- Реалізація — пишемо код з урахуванням вашого стеку (React, Next.js, Node.js).
- Тестування — перевіряємо сценарії: успішна конверсія, закінчення тріалу, відмова від картки.
- Деплой та моніторинг — налаштовуємо PostHog або Amplitude, alert при падінні конверсії.
Зв'яжіться з нами для оцінки вашого проєкту. Отримайте консультацію щодо покращення тріал-процесу — ми проаналізуємо ваш поточний churn і запропонуємо конкретні рішення. Гарантуємо сертифікований підхід та багаторічний досвід.
Що входить в роботу
Ми надаємо повний комплект:
- Документація з архітектури тріал-системи
- Доступ до репозиторію з кодом (GitHub)
- Навчання вашої команди роботі з метриками
- Підтримка протягом 30 днів після деплою
- Рекомендації щодо подальшої оптимізації конверсії
Замовте індивідуальний розрахунок — ми підберемо оптимальну схему тріалу для вашого продукту.







