Создай свой SaaS и зарабатывай на подписках
Полное руководство по созданию сервиса по подписке: от идеи до первых платящих клиентов. Архитектура, биллинг, технологии.
☁️ Что такое SaaS
SaaS (Software as a Service) — модель предоставления программного обеспечения как услуги через интернет. Пользователь не покупает программу, а арендует доступ к ней, оплачивая подписку ежемесячно или ежегодно.
Вместо того чтобы продавать софт один раз (как Microsoft Office на диске), SaaS-компании предоставляют постоянный доступ к сервису через браузер. Всё работает в облаке — пользователю не нужно ничего устанавливать.
Традиционное ПО vs SaaS
- 💰 Разовая покупка за $500-5000
- 💿 Установка на компьютер
- 🔧 Обновления — отдельно платно
- 🖥️ Работает только на одном устройстве
- 📞 Поддержка — дорого
- ⏳ Устаревает за 2-3 года
- 💳 Подписка $10-100/месяц
- 🌐 Работает в браузере
- 🔄 Обновления автоматически
- 📱 Доступ с любого устройства
- 💬 Поддержка включена
- ✨ Всегда актуальная версия
💰 Почему SaaS — это выгодно
SaaS изменил индустрию программного обеспечения. Вот почему это выгодно и для создателя, и для пользователя:
Для создателя (вас)
Главное преимущество: деньги приходят каждый месяц.
Один раз привлекли клиента — он платит годами.
Пример: 100 клиентов × $50/мес = $5,000/мес = $60,000/год
При этом 100 клиентов для нишевого B2B SaaS — это реально достижимо.
- Предсказуемый доход — вы знаете, сколько заработаете в следующем месяце
- Высокая маржинальность — после создания продукта каждый новый клиент почти не добавляет затрат
- Масштабируемость — 100 или 10,000 клиентов обслуживаются одним продуктом
- Низкий порог входа для клиентов — $50/мес проще заплатить, чем $2000 сразу
- Постоянная связь с клиентами — вы получаете фидбек и улучшаете продукт
Ключевые метрики SaaS
🎯 Примеры SaaS-сервисов
SaaS — это не только гиганты вроде Salesforce. Вот категории, где вы можете создать свой продукт:
Идеи для вашего SaaS
• Вертикальные SaaS — CRM для стоматологий, учёт для автосервисов, планировщик для фотографов
• Инструменты для разработчиков — мониторинг, тестирование, документация
• Автоматизация — генерация отчётов, интеграции между сервисами
• AI-инструменты — генерация контента, анализ данных, персонализация
• Микро-SaaS — простые инструменты с одной функцией ($5-20/мес)
💳 Бизнес-модель и ценообразование
Правильная модель ценообразования — ключ к успеху SaaS. Вот популярные подходы:
Типы подписок
- Freemium — бесплатный базовый план + платные премиум-функции (Notion, Slack)
- Free Trial — 14 дней бесплатно, потом платная подписка
- Tiered Pricing — несколько планов с разным функционалом
- Per-seat — оплата за каждого пользователя ($10/user/месяц)
- Usage-based — оплата по использованию (AWS, Stripe)
Пример тарифной сетки
- До 100 контактов
- 1 пользователь
- Email поддержка
- До 5,000 контактов
- 5 пользователей
- Автоматизации
- Интеграции
- Безлимитные контакты
- 20 пользователей
- API доступ
- Приоритетная поддержка
- Всё из Business
- Безлимит пользователей
- SSO / SAML
- Выделенный менеджер
Не занижайте цены! Типичная ошибка новичков — ставить $5/мес "чтобы все покупали".
• Низкая цена привлекает "плохих" клиентов с высокими требованиями
• Сложно окупить затраты на маркетинг
• Нет бюджета на развитие
Правило: Начните с $29-49/мес для B2B. Если берут без торга — поднимайте.
🏗️ Архитектура SaaS
Техническая архитектура SaaS отличается от обычного веб-приложения. Главная особенность — multi-tenancy (многоарендность).
Multi-Tenancy: Как обслуживать много клиентов
Tenant (арендатор) — это один клиент (компания), которая использует ваш SaaS.
Все tenant'ы работают на одном приложении, но видят только свои данные.
Подходы к изоляции данных:
- ✅ Одна БД для всех
- ✅ tenant_id в каждой таблице
- ✅ Просто масштабировать
- ✅ Низкие затраты
- ⚠️ Нужна аккуратность с запросами
- ✅ Отдельная БД для каждого
- ✅ Полная изоляция
- ✅ Легче восстанавливать
- ⚠️ Дорого
- ⚠️ Сложнее управлять
Архитектура типичного SaaS
╔══════════════════════════════════════════════════════════════════════════╗ ║ SAAS ARCHITECTURE ║ ╚══════════════════════════════════════════════════════════════════════════╝ ┌─────────────────────────────────┐ │ КЛИЕНТЫ (Tenants) │ │ 👤 Company A 👤 Company B │ │ 👤 Company C 👤 Company D │ └────────────────┬────────────────┘ │ ▼ ┌─────────────────────────────────┐ │ CDN / Load Balancer │ │ (CloudFlare, AWS) │ └────────────────┬────────────────┘ │ ┌──────────────────────┴──────────────────────┐ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ Frontend │ │ Backend API │ │ React/Vue/ │ │ FastAPI/ │ │ Next.js │ │ Django/Node │ └─────────────────┘ └────────┬────────┘ │ ┌──────────────────────┬──────────────────┴─────────────┐ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Database │ │ Redis │ │ File Storage │ │ PostgreSQL │ │ (Cache/Queue) │ │ (S3/Spaces) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ tenant_id в каждой записи ▼ ┌─────────────────────────────────────────────────────────┐ │ DATABASE SCHEMA │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ tenants │ │ users │ │ projects │ │ │ │ ───────── │ │ ───────── │ │ ───────── │ │ │ │ id │ │ id │ │ id │ │ │ │ name │ │ tenant_id◄─┼──┼─ tenant_id │ │ │ │ plan │ │ email │ │ name │ │ │ │ created_at │ │ role │ │ data │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────────┐ │ ВНЕШНИЕ СЕРВИСЫ │ ├──────────────────────────────────────────────────────────────────────────┤ │ 💳 Stripe — биллинг, подписки, платежи │ │ 📧 SendGrid — транзакционные email │ │ 🔐 Auth0 — аутентификация (опционально) │ │ 📊 Mixpanel — аналитика │ │ 🐛 Sentry — мониторинг ошибок │ └──────────────────────────────────────────────────────────────────────────┘
🛠️ Стек технологий
Не переусложняйте на старте. Вот проверенные стеки для запуска SaaS:
- Next.js Рекомендую
- React + Vite
- Vue 3 / Nuxt
- Tailwind CSS
- shadcn/ui
- Python + FastAPI Рекомендую
- Node.js + Express
- Django
- Go + Fiber
- Ruby on Rails Rapid MVP
- PostgreSQL Must have
- Redis (кэш)
- ClickHouse (аналитика)
- Vercel (frontend) Free tier
- Railway / Render
- DigitalOcean
- AWS / GCP Scale
Минимальный стек для MVP
Frontend: Next.js + Tailwind + shadcn/ui
Backend: Next.js API Routes или FastAPI
Database: PostgreSQL (Supabase / Neon — бесплатно)
Auth: NextAuth.js или Supabase Auth
Payments: Stripe (в РФ не работает, аналоги ЮKassa, CloudPayments, Robokassa и Tinkoff)
Deploy: Vercel (frontend) + Railway (backend) или VDS
Стоимость: $0-20/месяц до первых 100 платящих клиентов
💳 Биллинг и подписки
Биллинг — сердце SaaS. Не изобретайте велосипед — используйте Stripe (в РФ: ЮKassa, CloudPayments, Robokassa и Tinkoff).
Что умеет Stripe для SaaS:
- Подписки — автоматическое списание каждый месяц
- Тарифные планы — Starter, Pro, Enterprise
- Пробные периоды — 14 дней бесплатно
- Апгрейд/Даунгрейд — смена плана с пропорциональным расчётом
- Webhook'и — уведомления о платежах, отменах, неудачах
- Customer Portal — клиент сам управляет подпиской
- Инвойсы — автоматическая генерация счетов
import stripe from fastapi import APIRouter, HTTPException stripe.api_key = "sk_test_..." router = APIRouter() # ═══════════════════════════════════════════════════════════════ # СОЗДАНИЕ ПОДПИСКИ # ═══════════════════════════════════════════════════════════════ @router.post("/create-checkout-session") async def create_checkout_session(plan: str, tenant_id: str): """Создать сессию оплаты Stripe""" # Цены создаются в Dashboard Stripe prices = { "starter": "price_starter123", "professional": "price_pro456", "business": "price_biz789", } if plan not in prices: raise HTTPException(400, "Invalid plan") session = stripe.checkout.Session.create( mode="subscription", payment_method_types=["card"], line_items=[{ "price": prices[plan], "quantity": 1, }], success_url="https://app.example.com/success?session_id={CHECKOUT_SESSION_ID}", cancel_url="https://app.example.com/pricing", metadata={ "tenant_id": tenant_id, # Важно! Связываем с нашим клиентом }, subscription_data={ "trial_period_days": 14, # 14 дней бесплатно } ) return {"checkout_url": session.url} # ═══════════════════════════════════════════════════════════════ # WEBHOOK ОТ STRIPE # ═══════════════════════════════════════════════════════════════ @router.post("/webhook") async def stripe_webhook(request: Request): """Обработка событий от Stripe""" payload = await request.body() sig_header = request.headers.get("stripe-signature") try: event = stripe.Webhook.construct_event( payload, sig_header, "whsec_..." ) except ValueError: raise HTTPException(400, "Invalid payload") # Обрабатываем разные события if event["type"] == "checkout.session.completed": session = event["data"]["object"] tenant_id = session["metadata"]["tenant_id"] # Активируем подписку в нашей БД await activate_subscription(tenant_id, session["subscription"]) print(f"✅ Subscription activated for {tenant_id}") elif event["type"] == "invoice.payment_failed": # Оплата не прошла — уведомляем клиента await send_payment_failed_email(...) elif event["type"] == "customer.subscription.deleted": # Подписка отменена await deactivate_subscription(...) return {"status": "ok"} # ═══════════════════════════════════════════════════════════════ # ПОРТАЛ КЛИЕНТА # ═══════════════════════════════════════════════════════════════ @router.post("/customer-portal") async def create_portal_session(tenant_id: str): """Ссылка на портал управления подпиской""" # Получаем stripe_customer_id из нашей БД tenant = await get_tenant(tenant_id) session = stripe.billing_portal.Session.create( customer=tenant.stripe_customer_id, return_url="https://app.example.com/settings", ) return {"portal_url": session.url}
Модель данных для подписок
from sqlalchemy import Column, String, DateTime, Enum, ForeignKey from sqlalchemy.orm import relationship import enum class PlanType(enum.Enum): FREE = "free" STARTER = "starter" PROFESSIONAL = "professional" BUSINESS = "business" ENTERPRISE = "enterprise" class SubscriptionStatus(enum.Enum): TRIALING = "trialing" # Пробный период ACTIVE = "active" # Активная подписка PAST_DUE = "past_due" # Просрочена оплата CANCELED = "canceled" # Отменена UNPAID = "unpaid" # Не оплачена class Tenant(Base): """Клиент (компания) — один tenant""" __tablename__ = "tenants" id = Column(String, primary_key=True) name = Column(String, nullable=False) slug = Column(String, unique=True) # company.yourapp.com # Stripe stripe_customer_id = Column(String, unique=True) stripe_subscription_id = Column(String) # Подписка plan = Column(Enum(PlanType), default=PlanType.FREE) subscription_status = Column(Enum(SubscriptionStatus)) trial_ends_at = Column(DateTime) current_period_end = Column(DateTime) # Лимиты по плану max_users = Column(Integer, default=1) max_projects = Column(Integer, default=5) # Отношения users = relationship("User", back_populates="tenant") created_at = Column(DateTime, default=datetime.utcnow) class User(Base): """Пользователь внутри tenant'а""" __tablename__ = "users" id = Column(String, primary_key=True) tenant_id = Column(String, ForeignKey("tenants.id"), nullable=False) email = Column(String, nullable=False) role = Column(String, default="member") # owner, admin, member tenant = relationship("Tenant", back_populates="users")
🚀 Как создать MVP за 4-8 недель
Не нужно строить идеальный продукт. Нужен MVP (Minimum Viable Product) — минимальная версия, которая решает одну главную проблему клиента.
Roadmap запуска SaaS
Чек-лист MVP
• SSO / SAML (это для Enterprise)
• Сложные отчёты и дашборды
• Мобильное приложение
• API для интеграций
• Многоязычность
• "Умные" AI-фичи
Правило: Если можете запустить без этого — не делайте.
📣 Привлечение первых клиентов
Построить продукт — только половина дела. Нужно, чтобы о нём узнали и начали платить.
Каналы привлечения
- Product Hunt Первый запуск
- Hacker News (Show HN)
- Reddit (нишевые сабы)
- Twitter / X
- SEO-статьи в блоге
- YouTube-туториалы
- Google Ads (Yandex Direct) B2B
- Facebook/Instagram Ads
- LinkedIn Ads (B2B)
- Sponsorship подкастов
- Influencer marketing
- Affiliate программа
- Интеграции с другими SaaS
- Marketplace (Zapier, etc)
- Co-marketing
- Freemium план Виральность
- "Powered by YourApp"
- Реферальная программа
- Публичные профили
Landing Page, который конвертирует
❓ FAQ
• Домен: $10-15/год
• Хостинг: $0-50/мес (Vercel free tier + Railway)
• Email-сервис: $0-20/мес (SendGrid free tier)
• Stripe: 2.9% + $0.30 с каждого платежа
• Итого: $20-100/мес до первых 100 клиентов
Если нанимаете команду:
• MVP от агентства: $15,000-50,000
• Фрилансеры: $5,000-15,000
• Своя команда: от $10,000/мес на зарплаты
Stripe позволяет принимать платежи как физлицо в большинстве стран. Но когда дойдёте до $1,000+/мес, стоит зарегистрировать:
• ИП (Россия) — просто и дёшево, 6% налог
• LLC (США, Delaware) — если целитесь на западный рынок
• LTD (UK) — для Европы
Совет: Не тратьте время на юридику до первых платящих клиентов.
• Salesforce — для всех → Вы: CRM для стоматологий
• Notion — для всех → Вы: Система для ресторанов
• Mailchimp — для всех → Вы: Email для онлайн-школ
Преимущества малого SaaS:
• Быстрее реагируете на фидбек
• Персональная поддержка
• Глубже понимаете нишу
• Можете брать меньше за узкую функциональность
• Быстро (3-6 мес): У вас есть аудитория или опыт в нише
• Средне (6-12 мес): Типичный путь для новичка
• Долго (12-24 мес): Сложный рынок или много итераций
$1,000 MRR — это:
• 20 клиентов по $50/мес, или
• 34 клиента по $29/мес, или
• 100 клиентов по $10/мес
Это вполне достижимо за 6-12 месяцев фокусированной работы.
Примеры успешных solo-SaaS:
• Pieter Levels — NomadList, RemoteOK ($2M+/год)
• Jon Yongfook — Bannerbear ($500K+/год)
• Tony Dinh — TypingMind, DevUtils
Что нужно уметь:
• Кодить (full-stack или хотя бы no-code)
• Базовый дизайн (Tailwind + готовые компоненты)
• Маркетинг (писать, продвигать, продавать)
Совет: Начните с micro-SaaS — маленький продукт с одной функцией.
💰 Revenue:
• MRR (Monthly Recurring Revenue) — главная метрика
• ARR = MRR × 12
• ARPU (Average Revenue Per User)
📈 Growth:
• New MRR — от новых клиентов
• Expansion MRR — апгрейды
• Churned MRR — потерянный доход
👥 Customers:
• Churn rate — % клиентов, которые ушли
• LTV (Lifetime Value) = ARPU / Churn rate
• CAC (Customer Acquisition Cost)
• LTV:CAC ratio (должен быть > 3:1)
Это доступнее, чем кажется. Современные инструменты (Next.js, Stripe, Vercel) позволяют одному разработчику создать и запустить SaaS за 4-8 недель с бюджетом менее $100/месяц. Главное — начать с узкой ниши и реальной проблемы.
📚 Полезные ресурсы
- Indie Hackers — сообщество
- MicroConf — конференция
- "The Mom Test" — книга
- "Zero to Sold" — книга
- Stripe Atlas — регистрация LLC
- Paddle — альтернатива Stripe
- Crisp — чат поддержки
- Plausible — аналитика
- ShipFast — Next.js boilerplate
- SaaS Starter — open source
- Supabase + Stripe template
- Laravel Spark
- Product Hunt
- BetaList
- Hacker News
- r/SaaS, r/startups