Implementing SaaS Trial Periods: Configuration, Metrics, Onboarding

Implementing SaaS Trial Periods: Configuration, Metrics, Onboarding

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1281
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1237
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    977
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    1026
  • image_website-sbh_0.webp
    Website development for SBH Partners
    1103
  • image_website-_0.webp
    Website development for Red Pear
    550

Implementing SaaS Trial Periods: Configuration, Metrics, Onboarding

Trials are standard for SaaS, but without proper setup, churn can reach 90%. We've worked on projects where users left after the trial due to a lack of onboarding and reminders. A well-implemented trial is key to achieving a trial-to-paid conversion rate of 20% or higher. Let's dive into the technical details: choosing the approach, integrating with the payment gateway, metrics, and automated notifications.

How to Set Up a Trial with a Card in Stripe?

The most reliable method is to request a card upfront and offer a free trial. Stripe enables this via payment_behavior: 'default_incomplete' and payment_method_collection: 'always' in the Checkout session. The user enters their card, but charges only occur after the trial. The code below creates a subscription with a 14-day trial and immediate collection of payment details.

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`, }); 

This approach works: a user who has already provided a card is much more likely to stay after the trial. In our experience, conversion with a card is 40% higher than without. This is backed by Stripe's benchmark data: trials with a card increase conversion by 30–50%. Requiring a card at signup yields conversion rates 2–3 times higher than trials without a card, improving the activation funnel significantly. However, this method can deter some audiences, especially early on. The average subscription cost for B2B SaaS is $100–500 per month, so the risk of losing potential customers due to requiring a card should be considered.

When to Not Require a Card?

For products with a long sales cycle or low entry barrier (e.g., free tools), it's better to skip the card requirement. The implementation is simpler: store the end date in the database and check in 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; } 

Comparison of approaches

Criteria Trial with card Trial without card
Conversion 25–40% 10–20%
Churn after trial 30% 60%
Number of registrations 30% lower 50% higher
Implementation complexity Medium (Stripe) Low (DB)
Fraud risk Low High

A trial-to-paid conversion rate of 22% means an additional $22,000 in revenue per 1,000 registrations — a compelling argument for investing in onboarding. Additionally, proper trial setup can save up to $10,000 on retargeting campaigns for a single cohort. Our implementation starts at $2,500 and can generate additional annual revenue of $22,000 per 1,000 trial starts, improving your LTV/CAC ratio.

Automated Reminders and Win-back

Even with perfect onboarding, some users will leave. Our task is to minimize losses through automated notifications. Implement a cron job that daily checks users with expiring trials and sends emails.

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 } }); } } 

After the trial ends, launch a win-back campaign: offer a 20–30% discount on the first month, give a week of premium access, or simply ask for the reason. Live chat in the final trial days increases conversion by 15%.

How Does a UI Banner Affect Conversion?

Show the user how many days are left. If the trial ends in 3 days or less, tint the banner red — this creates urgency.

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 ? `Trial ends in ${daysLeft} ${daysLeft === 1 ? 'day' : 'days'}!` : `Trial active for ${daysLeft} more days (until ${trialEndsAt.toLocaleDateString('en-US')})` } </span> <a href="/settings/billing" className={`ml-4 font-medium underline ${urgency ? 'text-red-900' : 'text-blue-900'}`} > Upgrade to paid </a> </div> ); } 

Key Metrics to Track

Without metrics, you cannot improve conversion. We use PostHog for event capture and subsequent analysis. Key KPIs:

  • Trial-to-Paid Conversion Rate — target 15–25% for B2B SaaS. In our projects, the average is 22%.
  • Trial Activation Rate — percentage of trials where the user performed a key action (e.g., uploaded the first file). Target — 60%.
  • Time to First Key Action — when the user first experienced value. Ideally, within the first 24 hours.
  • Churn at Trial End — how many leave on day X. If above 40%, review your onboarding.
Metric Target Value Comment
Trial-to-Paid Conversion Rate 15–25% Average for B2B SaaS is 22%
Trial Activation Rate >60% Share who completed a key action
Time to First Key Action <24 hours The sooner, the higher the conversion
Churn at Trial End <40% Otherwise, onboarding needs work
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', }); 

Turnkey Implementation Process

We set up the trial period in 2–3 business days. Stages:

  1. Analytics — determine trial length, whether to require a card, success metrics.
  2. Design — choose approach (Stripe / DB), design notification scheme.
  3. Implementation — write code tailored to your stack (React, Next.js, Node.js).
  4. Testing — verify scenarios: successful conversion, trial expiry, card decline.
  5. Deployment and monitoring — set up PostHog or Amplitude, alert on conversion drops.

Contact us for a project assessment. Get a consultation to improve your trial process — we will analyze your current churn and propose specific solutions.

Our Deliverables Package

We provide a complete package including:

  • Documentation on trial system architecture
  • Access to the code repository (GitHub)
  • Training for your team on working with metrics
  • Support for 30 days after deployment
  • Recommendations for further conversion optimization

With over 8 years of experience and 50+ successful projects, we have a proven track record of improving trial conversion by an average of 30%. Our certified experts ensure a smooth integration and data-driven decision-making. Request an individual estimate — we will select the optimal trial scheme for your product.

How to reduce user churn after the trial? Automated reminders 3 days, 1 day, and on the end day, plus a discount offer for the first month. Onboarding from day one: training, templates, live chat is also critical. Cohort analysis can help identify at-risk users early.