Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Estrategia e implementacao de monetizacao para produtos digitais - Stripe, subscriptions, pricing experiments, freemium, upgrade flows, churn prevention, revenue optimization e modelos de negocio SaaS.
.claude/skills/monetization/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-10 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
| case-09 | ✓→✓ | = Same ✓ | — | — |
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.
> Price is what you pay. Value is what you get. - Warren Buffett > A monetizacao perfeita captura valor proporcional ao valor entregue.
Usuarios pagam quando:
bashpip install stripe ## Ou npm install stripe
python## 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"], }
pythondef 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 }
pythondef 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
pythondef 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
pythonfrom 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"}
pythondef 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, }
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 AlexaR$ 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| 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 |
pythonCHURN_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", ] }
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 novidadespythonCANCELLATION_REASONS = [ "Muito caro", "Nao uso o suficiente", "Falta funcionalidade X", "Encontrei alternativa melhor", "Problemas tecnicos", "Outro" ] ## Falta Feature -> Roadmap + Notificacao Quando Lancar
pythondef 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" }
| 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% |
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%)pythonasync 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" )
| 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 |
analytics-product - Complementary skill for enhanced analysisgrowth-engine - Complementary skill for enhanced analysisproduct-design - Complementary skill for enhanced analysisproduct-inventor - Complementary skill for enhanced analysis| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.