Skill

Optimize Digital Product Monetization

This skill covers SaaS monetization end to end: Stripe subscription integration, pricing strategy, churn/LTV-CAC unit economics, and revenue dashboards.

Works with stripe

91
Spark score
out of 100
Updated last month
Version 13.1.0

Add to Favorites

Why it matters

Implement and optimize monetization strategies for digital products, focusing on revenue generation and business model sustainability.

Outcomes

What it gets done

01

Integrate Stripe for payment processing and subscription management.

02

Develop and test pricing strategies, including freemium and subscription models.

03

Implement churn prevention and revenue optimization techniques.

04

Analyze unit economics and key SaaS metrics like LTV/CAC.

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/ag-monetization | bash

Overview

MONETIZATION - Do Produto ao Revenue

This skill covers SaaS monetization end to end: Stripe subscription/checkout/webhook integration, value-based and competitive pricing strategy with pricing psychology, and unit-economics calculation (LTV/CAC, churn, payback) benchmarked against industry standards. Use it when setting up Stripe billing, designing pricing strategy, or calculating and improving SaaS unit economics and churn. Review billing/pricing code before production given its direct revenue impact.

What it does

This skill covers monetization strategy and implementation for digital products: Stripe integration, subscriptions, pricing experiments, freemium, upgrade flows, churn prevention, revenue optimization, and SaaS business-model economics. Its golden rule for when users pay: the product solves a real need, the solution beats alternatives, the price feels fair, and the charge happens at a natural moment - with named classic mistakes to avoid (charging before showing value, pricing too low so it signals low quality, offering too many plans causing choice paralysis, trials with no credit card producing low conversion, and invisible churn with no cancellation warning signals).

Stripe setup covers creating a customer and subscription with a trial period, a checkout session (recommended for conversion, with promotion codes enabled), a self-service customer billing portal, and a webhook handler verifying the Stripe signature and dispatching to handlers for subscription created/updated/deleted, payment succeeded/failed, and trial-ending events.

def create_checkout_session(customer_id, price_id, success_url, cancel_url, trial_days=14):
    session = stripe.checkout.Session.create(
        customer=customer_id,
        mode="subscription",
        line_items=[{"price": price_id, "quantity": 1}],
        subscription_data={"trial_period_days": trial_days},
        success_url=success_url + "?session_id={CHECKOUT_SESSION_ID}",
        cancel_url=cancel_url,
        allow_promotion_codes=True,
    )
    return session.url

Pricing framework covers value-based pricing (capture 10-30% of the calculated economic value delivered, validated via willingness-to-pay research and A/B-tested price points) versus competitive anchoring (position against known reference prices like ChatGPT Plus or Notion), plus pricing psychology (charm pricing like R$29 instead of R$30, a clearly-discounted annual plan, visual hierarchy highlighting the target plan, and anchoring by showing the expensive plan first).

Unit economics: a function computes ARPU, churn rate, LTV (ARPU / churn rate), CAC, LTV/CAC ratio, and months to recover CAC, with Brazilian B2C SaaS benchmarks for monthly churn (good: 2-5%, excellent: under 2%), LTV/CAC (good: 3-5x, excellent: over 5x), CAC payback period, trial-to-paid conversion, and month-over-month growth. A revenue dashboard tracks MRR broken into new/expansion/contraction/churned components, ARR, churn rate, and net revenue retention (target above 100%). A usage-based upsell automation example sends an upgrade prompt when a user nears their plan's usage limit.

When to use - and when NOT to

Use it when integrating Stripe for subscriptions, designing pricing strategy, building upgrade/downgrade flows, calculating unit economics (LTV/CAC), or designing anti-churn playbooks and revenue dashboards for a SaaS product. Per its own guidance, combine it with complementary skills (analytics-product, growth-engine, product-design) for comprehensive analysis, and review all pricing/billing-code suggestions before applying them to production given the direct revenue and payment-processing impact.

Inputs and outputs

Input is a monetization task: setting up Stripe billing, choosing a pricing strategy, analyzing churn, or calculating unit economics from MRR/customer/churn/CAC figures. Output is working Stripe integration code (customer/subscription creation, checkout session, billing portal, webhook handler), a pricing strategy recommendation, or computed unit-economics metrics (ARPU, LTV, CAC, LTV/CAC ratio, payback period) benchmarked against SaaS industry standards.

Integrations

Built on the Stripe API (Python/Node SDKs) for customers, subscriptions, checkout sessions, the billing portal, and webhooks, with quick commands (/stripe-setup, /pricing-analysis, /churn-playbook, /unit-economics, /upgrade-flow, /revenue-dashboard, /trial-optimization) for common monetization tasks.

Who it's for

Founders and product/engineering teams building or optimizing a SaaS product's monetization - Stripe billing integration, pricing strategy, churn reduction, and unit-economics tracking.

Source README

MONETIZATION - Do Produto ao Revenue

Overview

Estrategia e implementacao de monetizacao para produtos digitais - Stripe, subscriptions, pricing experiments, freemium, upgrade flows, churn prevention, revenue optimization e modelos de negocio SaaS. Ativar para: integrar Stripe, criar planos de assinatura, pricing strategy, upgrade/downgrade, webhook de pagamento, trial gratuito, churn, LTV/CAC, unit economics, modelo de negocio.

When to Use This Skill

  • When you need specialized assistance with this domain

Do Not Use This Skill When

  • The task is unrelated to monetization
  • A simpler, more specific tool can handle the request
  • The user needs general-purpose assistance without domain expertise

How It Works

Price is what you pay. Value is what you get. - Warren Buffett
A monetizacao perfeita captura valor proporcional ao valor entregue.


A Regra De Ouro

Usuarios pagam quando:

  1. O produto resolve um problema real (need)
  2. A solucao e melhor que alternativas (differentiation)
  3. O preco e percebido como justo (value perception)
  4. O momento de cobranca e natural (timing)

Erros Classicos

  • Cobranca antes de mostrar valor (kill activation)
  • Preco muito baixo (sinaliza baixa qualidade)
  • Planos demais (paralisia de escolha)
  • Trial sem carta de credito (baixa conversao)
  • Churn invisivel (sem alertas de cancelamento iminente)

Setup Inicial

pip install stripe

## Ou

npm install stripe

## Config.Py

import stripe
import os

stripe.api_key = os.environ["STRIPE_SECRET_KEY"]
STRIPE_WEBHOOK_SECRET = os.environ["STRIPE_WEBHOOK_SECRET"]

PLANS = {
    "free": None,
    "pro": os.environ["STRIPE_PRICE_PRO"],
    "business": os.environ["STRIPE_PRICE_BIZ"],
}

Criar Customer E Subscription

def create_customer(email: str, name: str, user_id: str) -> str:
    customer = stripe.Customer.create(
        email=email,
        name=name,
        metadata={"user_id": user_id}
    )
    return customer.id

def create_subscription(customer_id: str, price_id: str, trial_days: int = 14):
    subscription = stripe.Subscription.create(
        customer=customer_id,
        items=[{"price": price_id}],
        trial_period_days=trial_days,
        payment_behavior="default_incomplete",
        expand=["latest_invoice.payment_intent"],
    )
    return {
        "subscription_id": subscription.id,
        "client_secret": subscription.latest_invoice.payment_intent.client_secret,
        "status": subscription.status
    }

Checkout Session (Recomendado Para Conversao)

def create_checkout_session(
    customer_id: str,
    price_id: str,
    success_url: str,
    cancel_url: str,
    trial_days: int = 14
) -> str:
    session = stripe.checkout.Session.create(
        customer=customer_id,
        mode="subscription",
        line_items=[{"price": price_id, "quantity": 1}],
        subscription_data={"trial_period_days": trial_days},
        success_url=success_url + "?session_id={CHECKOUT_SESSION_ID}",
        cancel_url=cancel_url,
        allow_promotion_codes=True,
    )
    return session.url

Customer Portal (Self-Service)

def create_portal_session(customer_id: str, return_url: str) -> str:
    session = stripe.billing_portal.Session.create(
        customer=customer_id,
        return_url=return_url,
    )
    return session.url

Webhook - Processar Eventos

from fastapi import Request, HTTPException
import stripe

async def stripe_webhook(request: Request):
    payload = await request.body()
    sig_header = request.headers.get("stripe-signature")

    try:
        event = stripe.Webhook.construct_event(
            payload, sig_header, STRIPE_WEBHOOK_SECRET
        )
    except ValueError:
        raise HTTPException(status_code=400, detail="Invalid payload")
    except stripe.error.SignatureVerificationError:
        raise HTTPException(status_code=400, detail="Invalid signature")

    handlers = {
        "customer.subscription.created": handle_subscription_created,
        "customer.subscription.updated": handle_subscription_updated,
        "customer.subscription.deleted": handle_subscription_deleted,
        "invoice.payment_succeeded": handle_payment_succeeded,
        "invoice.payment_failed": handle_payment_failed,
        "customer.subscription.trial_will_end": handle_trial_ending,
    }

    handler = handlers.get(event["type"])
    if handler:
        await handler(event["data"]["object"])

    return {"status": "ok"}

Verificar Status Da Subscription

def get_subscription_status(customer_id: str) -> dict:
    subscriptions = stripe.Subscription.list(
        customer=customer_id,
        status="all",
        limit=1
    )
    if not subscriptions.data:
        return {"tier": "free", "status": "none"}

    sub = subscriptions.data[0]
    return {
        "tier": get_tier_from_price(sub.items.data[0].price.id),
        "status": sub.status,
        "trial_end": sub.trial_end,
        "current_period_end": sub.current_period_end,
        "cancel_at_period_end": sub.cancel_at_period_end,
    }

Framework De Pricing Para Saas

Metodo 1: Value-Based Pricing (Recomendado)

1. Calcule o valor economico entregue ao usuario
   Ex: produto economiza 2h/semana = R$ 200/mes de valor
2. Capture 10-30% do valor criado
   Ex: R$ 29/mes = 14% do valor
3. Valide com pesquisa de willingness-to-pay
4. Teste 3 price points (A/B test)

Metodo 2: Competitive Anchor

Referencia: ChatGPT Plus = $20/mes (R$ 100)
Anchor: Notion = R$ 32/mes
Posicao: Pro = R$ 29/mes (mais barato que ChatGPT, similar ao Notion)
Mensagem: Tudo que o ChatGPT faz, por voz no Alexa

Psicologia De Pricing

R$ 29/mes (nao R$ 30 - efeito do digito esquerdo)
Plano anual com desconto claro: R$ 249/ano (economize R$ 99)
Destaque no plano que voce quer vender (visual hierarchy)
Ancoragem: mostra o plano caro primeiro
Trial sem cartao para ativacao, com cartao para retencao
Badge Mais popular no plano middle

Estrutura De Planos (3 E O Numero Certo)

Feature Free Pro Business
Preco Gratis R$ 29/mes R$ 99/mes
Conversas/mes 50 Ilimitado Ilimitado
Memoria 7 dias 1 ano Permanente
Board especialistas Nao Sim Sim
Multi-usuarios Nao Nao Ate 10
API access Nao Nao Sim
Suporte Nao Email Priority

Sinais De Churn Iminente

CHURN_SIGNALS = {
    "high_risk": [
        "nao logou nos ultimos 14 dias",
        "uso caiu >70% em 2 semanas",
        "abriu cancelamento mas nao concluiu",
        "ticket de suporte aberto sem resolucao",
    ],
    "medium_risk": [
        "nao logou em 7 dias",
        "uso caiu >40%",
        "nao completou onboarding",
        "nunca usou feature core",
    ]
}

Sequencia Anti-Churn

Dia 0:  Usuario nao usa por 7 dias
        -> Email: Sentimos sua falta. O que aconteceu?

Dia 3:  Sem resposta
        -> Push/Email: case study de usuario similar com sucesso

Dia 7:  Nao voltou
        -> Email: oferta especial (20% off por 3 meses)

Dia 14: Trial expirando
        -> In-app modal + email urgente: Sua conta vai dormir em 3 dias

Dia 30: Cancelou
        -> Offboarding email: Lamentamos ver voce ir.
        -> 3 meses depois: reativacao com novidades

Exit Survey (Obrigatorio)

CANCELLATION_REASONS = [
    "Muito caro",
    "Nao uso o suficiente",
    "Falta funcionalidade X",
    "Encontrei alternativa melhor",
    "Problemas tecnicos",
    "Outro"
]

## Falta Feature -> Roadmap + Notificacao Quando Lancar

Calculos Essenciais

def calculate_unit_economics(
    mrr: float,
    customers: int,
    new_customers: int,
    churned: int,
    cac_total: float,
):
    arpu = mrr / customers
    churn_rate = churned / customers
    ltv = arpu / churn_rate
    cac = cac_total / new_customers
    ltv_cac = ltv / cac
    months_to_recover_cac = cac / arpu

    return {
        "ARPU": f"R$ {arpu:.2f}",
        "Churn Rate": f"{churn_rate*100:.1f}%",
        "LTV": f"R$ {ltv:.0f}",
        "CAC": f"R$ {cac:.0f}",
        "LTV/CAC": f"{ltv_cac:.1f}x",
        "Payback": f"{months_to_recover_cac:.1f} meses",
        "Status": "Saudavel" if ltv_cac > 3 else "Otimizar"
    }

Benchmarks Saas B2C Brasil

Metrica Ruim Ok Bom Excelente
Churn Mensal >7% 5-7% 2-5% <2%
LTV/CAC <1x 1-3x 3-5x >5x
Payback >18m 12-18m 6-12m <6m
Conversao trial->pago <3% 3-8% 8-15% >15%
MoM Growth <5% 5-10% 10-20% >20%

Dashboard De Revenue (Metricas Diarias)

MRR atual: R$ XX.XXX
  New MRR (novos assinantes): +R$ X.XXX
  Expansion MRR (upgrades): +R$ XXX
  Contraction MRR (downgrades): -R$ XXX
  Churned MRR (cancelamentos): -R$ XXX
  Net New MRR: +/- R$ XXX

ARR (Annualized): R$ XX.XXX x 12
Churn Rate: X.X%
Net Revenue Retention: XXX% (meta: >100%)

Automacao De Revenue Com Stripe

async def check_usage_and_upsell(user_id: str, usage: dict):
    if usage["conversations_this_month"] >= 45:
        await send_upgrade_prompt(
            user_id=user_id,
            message="Voce esta usando 90% do seu limite. Faca upgrade para Pro.",
            cta_url=f"/upgrade?utm=usage-limit"
        )

7. Comandos Rapidos

Comando Acao
/stripe-setup Configura Stripe do zero
/pricing-analysis Analisa estrategia de pricing atual
/churn-playbook Sequencia anti-churn personalizada
/unit-economics Calcula LTV/CAC e saude financeira
/upgrade-flow Design do fluxo de upgrade
/revenue-dashboard Template de dashboard de revenue
/trial-optimization Otimiza conversao de trial

Best Practices

  • Provide clear, specific context about your project and requirements
  • Review all suggestions before applying them to production code
  • Combine with other complementary skills for comprehensive analysis

Common Pitfalls

  • Using this skill for tasks outside its domain expertise
  • Applying recommendations without understanding your specific context
  • Not providing enough project context for accurate analysis

Related Skills

  • analytics-product - Complementary skill for enhanced analysis
  • growth-engine - Complementary skill for enhanced analysis
  • product-design - Complementary skill for enhanced analysis
  • product-inventor - Complementary skill for enhanced analysis

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.