mcpField
M
monetization

monetization

github.com/sickn33マーケティング・グロース48.7k42 回インストール1 日前に更新
リポジトリ

monetization について

SaaSやデジタル製品のチーム向けに、Stripeの課金実装から価格設定、解約対策までを扱うスキルです。実装例に加え、価格設計の枠組み、収益指標、継続利用の施策を示します。

主な機能

  1. 01Stripeのサブスクリプションと決済例
  2. 02価格戦略とプラン設計
  3. 03解約の兆候と防止策
  4. 04ユニットエコノミクスと収益指標
  5. 05収益化タスク用の簡易コマンド

活用シーン

  1. 01サブスクリプション、決済、Webhookの設定
  2. 02SaaSの価格とプラン構成の検討
  3. 03解約リスクの特定と防止施策の立案
  4. 04LTV/CACの計算と収益の把握

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill monetization

インストール後、Claude Code で/monetizationを入力して読み込まれたか確認します。

詳細

マネタイゼーション - プロダクトからレベニューへ

概要

デジタルプロダクトのマネタイゼーション戦略と実装 - Stripe、サブスクリプション、価格実験、フリーミアム、アップグレードフロー、チャーン防止、レベニュー最適化、SaaS ビジネスモデル。以下で有効化します: Stripe の統合、サブスクリプションプランの作成、価格戦略、アップグレード/ダウングレード、決済 Webhook、無料トライアル、チャーン、LTV/CAC、ユニットエコノミクス、ビジネスモデル。

このスキルを使用する場面

  • このドメインについて専門的な支援が必要なとき

このスキルを使用しない場面

  • タスクがマネタイゼーションと無関係である
  • よりシンプルで具体的なツールでリクエストを処理できる
  • ユーザーがドメイン専門知識を必要とせず、汎用的な支援を求めている

仕組み

価格とはあなたが支払うもの。価値とはあなたが得るもの。 - ウォーレン・バフェット 完璧なマネタイゼーションは、提供した価値に比例した価値を取り込む。


黄金律

ユーザーが支払うのは次の場合です:

  1. プロダクトが実際の問題を解決する (ニーズ)
  2. ソリューションが代替案より優れている (差別化)
  3. 価格が妥当だと認識される (価値の認識)
  4. 課金のタイミングが自然である (タイミング)

典型的なミス

  • 価値を示す前に課金する (アクティベーションを阻害)
  • 価格が低すぎる (低品質を示唆)
  • プランが多すぎる (選択麻痺)
  • クレジットカードなしのトライアル (低コンバージョン)
  • 見えないチャーン (解約間近のアラートがない)

初期セットアップ

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"],
}

顧客とサブスクリプションの作成

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
    }

チェックアウトセッション (コンバージョンに推奨)

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

カスタマーポータル (セルフサービス)

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 - イベントの処理

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"}

サブスクリプションのステータス確認

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,
    }

SaaS 向け価格設定フレームワーク

方法 1: バリューベース価格設定 (推奨)

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)

方法 2: 競合アンカー

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

価格の心理学

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

プラン構成 (3 が適切な数)

機能FreeProBusiness
価格無料R$ 29/月R$ 99/月
月間会話数50無制限無制限
メモリ7 日間1 年永続
専門家ボードいいえはいはい
マルチユーザーいいえいいえ最大 10
API アクセスいいえいいえはい
サポートいいえメール優先

チャーン切迫のサイン

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",
    ]
}

チャーン防止シーケンス

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

エグジットサーベイ (必須)

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

## Falta Feature -> Roadmap + Notificacao Quando Lancar


必須の計算

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"
    }

ブラジル B2C SaaS ベンチマーク

指標悪い普通良い優秀
月次チャーン>7%5-7%2-5%<2%
LTV/CAC<1x1-3x3-5x>5x
ペイバック>18m12-18m6-12m<6m
トライアル→有料への転換<3%3-8%8-15%>15%
前月比成長率<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%)

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. クイックコマンド

コマンドアクション
/stripe-setupStripe をゼロから設定する
/pricing-analysis現在の価格戦略を分析する
/churn-playbookパーソナライズされたチャーン防止シーケンス
/unit-economicsLTV/CAC と財務健全性を計算する
/upgrade-flowアップグレードフローの設計
/revenue-dashboardレベニューダッシュボードのテンプレート
/trial-optimizationトライアルのコンバージョンを最適化する

ベストプラクティス

  • プロジェクトと要件について、明確で具体的なコンテキストを提供してください
  • 提案を本番コードに適用する前に、すべて確認してください
  • 包括的な分析のために、他の補完的なスキルと組み合わせてください

よくある落とし穴

  • このスキルの専門領域外のタスクに使用すること
  • 具体的なコンテキストを理解せずに推奨事項を適用すること
  • 正確な分析に十分なプロジェクトコンテキストを提供しないこと

関連スキル

  • analytics-product - 分析を強化するための補完的なスキル
  • growth-engine - 分析を強化するための補完的なスキル
  • product-design - 分析を強化するための補完的なスキル
  • product-inventor - 分析を強化するための補完的なスキル

制限事項

  • このスキルは、タスクが上記の範囲に明確に一致する場合にのみ使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代替として扱わないでください。
  • 必要な入力、権限、安全境界、または成功基準が不足している場合は、作業を中断して確認を求めてください。

コメント