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.
Why it matters
Implement and optimize monetization strategies for digital products, focusing on revenue generation and business model sustainability.
Outcomes
What it gets done
Integrate Stripe for payment processing and subscription management.
Develop and test pricing strategies, including freemium and subscription models.
Implement churn prevention and revenue optimization techniques.
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:
- O produto resolve um problema real (need)
- A solucao e melhor que alternativas (differentiation)
- O preco e percebido como justo (value perception)
- 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 | 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 analysisgrowth-engine- Complementary skill for enhanced analysisproduct-design- Complementary skill for enhanced analysisproduct-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.