• Projects
  • Service
  • About
  • branding.bz
  • Podcast
  • Tips
  • FAQ
  • Recruit
  • Download
  • Contact
  • branding.bz(ブランド構築SaaS)
  • DESIGN NOW(デザインメディア)
  • X
  • LinkedIn
  • Spotify
  • Facebook

213-0011 神奈川県川崎市高津区久本3-6-7-303

© 2026 ID INC. All rights reserved

claude-skills/スキル
SKILLOfficialdevelopment

revenuecat-forecasting

プラグイン
rc
ソース
GitHub で見る ↗
説明

次のような場合に使用: ユーザーが予測や見通し(今後N ヶ月間の月額経常収益、年間経常収益、収益、加入者数など)、月末や年末までの収益予測、目標達成に必要な広告費や顧客獲得費の試算を求めているとき。 グラフを用いた予測を表示する前に、このスキルを読み込んでください。

原文を表示

Use this skill whenever the user asks for a forecast, projection, extrapolation, or run-rate (MRR, ARR, revenue, or subscribers N months out; revenue to the end of the month or year), or asks what ad spend or acquisition is needed to hit a growth target. Load it before pulling charts for the projection.

ユースケース
  • 今後N ヶ月間の月額経常収益を予測するとき
  • 年間経常収益の見通しを求めるとき
  • 月末や年末までの収益予測が必要なとき
  • 目標達成に必要な広告費を試算するとき
  • 顧客獲得費の試算が必要なとき
本文(日本語訳)

予測

revenuecat-charts を使用して、チャートの動作と指標の解釈を行います。このスキルは、これらを予測(将来の値の見積もり)に変換することをカバーしています。CLI コマンド rc charts show ではなく、MCP の get-chart-options-schema / get-chart-data を優先してください。CLI では、このプレイブックが必要とする有効期限月のセグメント化とセレクタ(選択条件)が公開されていません。

質問の内容に合わせて、以下のセクションを選んでください:

  • 月ごとの MRR/ARR(支出額の逆算を含む、「1ヶ月後」「N ヶ月後」を含む) → 解約予測線とステップ(以下を参照)— 短期間の予測は、平均的なネットの変動トレンドではなく、この予測線の段階的な進行
  • 月末/年末までの収益 → 期間内の実績ベース(MRR ステップは実行しない)
  • 低/中/高シナリオまたは「N ヶ月後」 → シナリオ予測(MRR/サブスクリプション数を予測する際は解約予測線を使用)
  • 指定が曖昧な場合(「予測してほしい」「今後の推移を予測して」、指標や期間が明記されていない)→ デフォルトで 12ヶ月間の MRR 予測を行い、MRR ステップを実行します。デフォルトを明言してください。年間契約の比重が高い場合、ステータススナップショット(現時点の状態)がすべての予測月を埋めないことがあります。保有している有効期限月を使用し、年間契約月は未請求を 0 のままにしておき(埋め合わせの数字を作らない)、短期契約の継続分と新規収益は繰り越し、年間スケジュールは現在の契約帳簿の次のサイクルのみをカバーしていることを述べてください。

解約予測線

月ごとの MRR または ARR について — 必要な支出額や新規サブスクリプション数を逆算する場合、ユーザーがすでに解約 MRR、支出額、または効率の数字を提供している場合、「1ヶ月後」「2ヶ月後」といった短期の質問を含む — ある月の解約 MRR は以下の通りです:

解約MRR[月] = その月に更新期限が来るMRR × (1 − 更新継続率)

短期間(1~2ヶ月、またはその他の小さい N)

「1ヶ月後」「2ヶ月後」「来月までに」は引き続き解約予測線です — N ステップ前方への進行であり、期間全体の実績ベースではなく、最近のネット MRR 変動の平均でもありません。

  1. 対象期間と重なるすべてのカレンダー月について、ステータスの expiration_month(有効期限月)から Total MRR(合計 MRR)を取得します(例:現在の残り期間 + 翌月 ≈ 30日後;「2ヶ月後」の場合は 2 ヶ月間)。
  2. 各ステップ:契約期間ごとに 解約[月] = 期限[月] × (1 − 継続率) を計算し、スナップショット以降の P1M/P3M(1ヶ月・3ヶ月)期限を繰り越し、空の年間契約月は期限を 0 のままにします。
  3. 最近の新規契約・再契約・拡張からのインフロー(流入)のみを追加します。
  4. ストックをステップ進行させます:MRR[月+1] = MRR[月] − 解約[月] + インフロー[月] — N=1 の場合 1 回、N=2 の場合 2 回、…
  5. 1つのスクリプトで処理します。ネット変動や凍結された解約 MRR は診断ギャップとしてのみ表示します — 見出しの数字を決定する 2 番目の手法としては決して使わず、年間_ベース / 12 としても使いません。

正しい例 — 1ヶ月後(N=2 の場合も同じ考え方で 2 ヶ月のループを使用):

# ベース/12ではなく、ステータスの expiration_month(measure=mrr)から期限を取得
期限_年間_翌月 = 28316.52          # 例:10月の P1Y(1年契約)の Total MRR
期限_月間 = 月別ベース              # 既存の P1M(月間契約)帳簿
解約 = 期限_年間_翌月 * (1 - 継続率_年間) + 期限_月間 * (1 - 継続率_月間) + ...
MRR_翌月 = 現在MRR - 解約 + インフロー実績

継続率を Subscription Retention(サブスクリプション継続率)または Cohort Explorer(コホート分析) から取得します(チャート内の実値のみ)— 観測解約 ÷ ベース からでなく、Set-to-Renew %(更新予定のパーセンテージ)からではありません。この継続率は、その契約期間の 期限スライス(期限の該当部分)に適用します(月間契約の場合、期限 ≈ ストック;四半期以上の契約の場合、決して 解約 ÷ 全ベース を取得して期限スライスに適用しないこと — これは解約を過小評価します)。

更新期限が来る MRR を Subscription Status から取得します(現在の活動帳簿の現在のサイクル):

get-chart-data(
  project_id="<id>",
  chart_name="subscription_status",
  realtime=true,
  resolution="<オプションスキーマから取得した id>",
  start_date="<YYYY-MM-DD>",
  end_date="<YYYY-MM-DD>",
  segment="expiration_month",
  selectors="{\"measure\": \"mrr\"}",  # JSON 文字列(オブジェクトではない);active_subscriptions ではない
  limit_num_segments=24,               # 後の月が Other に折りたたまれないようにするため
  # オプション:filters="[{\"name\": \"product_duration\", \"values\": [\"P1Y\"]}]"
)

Retention / Cohort Explorer / MRR / MRR Movement でも同じ get-chart-data パターンを使用してください — ただし、Status 専用フィールド(segment=expiration_month、limit_num_segments、selectors.measure)をこれらのチャートにコピーしないでください;各チャートのオプションスキーマ(get-chart-options-schema("realtime": true 付き))からセグメント・フィルタ・セレクタを取得してください。

各セグメントはカレンダー月で、現在アクティブなサブスクリプションの期限終了月です。期限[月] として Total MRR のみを使用してください。Set to Renew / Cancel / Billing Issue は短期的な意図を示すラベル — 予測される継続率ではありません。Status は現在の活動帳簿のスナップショットのみです。新規契約・再契約・拡張からのインフロー(流入)は MRR Movement(または今後の支出計画)から引き続きモデル化してください。期限をまったく取得できない場合は、年間_ベース / 12 を使用するのではなく、更新スケジュールを確認してください。

契約期間別の期限と継続率

契約期間 期限(Status で利用可能) 期限(Status で利用不可) 継続率
P1Y(1年) 現在の活動帳簿の初回分と継続更新分を expiration_month 別に集計した Total MRR。遠い月の空の値は空のままにします(埋め合わせしない)。 前年の P1Y 新規契約・再契約の M 月分(更新記念日の継続更新を漏らします — その旨を述べてください) Retention Y1 / Cohort(Retention 使用時は subscription_type = new に限定)
P1M(1ヶ月) 近期の有効期限バケット、その後の各月は既存の月間ベース相当に繰り越し 既存の月間ベース Retention / Cohort(または movement の 解約 / 期限、期限 ≈ ベース)
P3M / その他の固定期間 近期のバケット、その後の各月は ≈ ベース / 契約期間月数に繰り越し ベース / 契約期間月数 Retention / Cohort(または movement の 解約 / 期限、決して 解約 / 全ベース ではない)

誤った例 — ストックの一定割合としての年間期限:

年間_期限 = 年間_ベース / 12          # または 期限_割合 = {"annual": 1/12}

誤った例 — モデル化された解約が観測解約と一致するようにレジデュアル(残差)を逆算:

更新_年間 = 観測_年間_解約 - 年間_期限[月] * (1 - 継続率)
解約_年間 = 年間_期限[月] * (1 - 継続率) + 更新_年間      # その後で予測

誤った例 — 全体ストックへの固定期間継続率適用:

継続率 = 1 - 解約_P3M / P3M_ベース      # その後 解約 = (P3M_ベース/3) * (1 - 継続率)  → 過小評価

誤った例 — ギャップの後に 2 番目のモデル(ブレンド / ネット変動 / 「調整済み」解約):

# due*(1-rate) が先月の観測解約 MRR と相違した後:
project(net_fn)  または  MRR *= (1 - ブレンド_解約) + インフロー   # 決してしない

正しい例:

# 期限:subscription_status、measure=mrr、segment=expiration_month、filter product_duration=P1Y
年間_期限 = {"2026-11": 17.32, "2027-02": 6.66, ...}   # 有効期限月ごとの Total MRR
# 継続率:Subscription Retention Y1 または Cohort Explorer — Set-to-Renew % ではない
解約_年間[月]  = 年間_期限[月] * (1 - 継続率_年間)

# 月間:次のサイクルの有効期限月、その後の各月は期限 ≈ 既存月間ベース
解約_月間[月] = 月間_期限[月] * (1 - 継続率_月間)
# 四半期:期限 ≈ P3M_ベース/3;継続率は Retention から(または 解約_P3M / 期限、 / P3M_ベース ではない)

ステップ(月ごとの MRR/ARR のみ)

期間内の収益実績ベースには、これらのステップを使用しないでください — 代わりに、その下のセクションを参照してください。

  1. 現在のストック向けに、product_duration(契約期間)でセグメント化した MRR を取得します。
  2. 上記の get-chart-data サンプルのように Subscription Status を取得します(セレクタ {"measure": "mrr"}、segment=expiration_month、高い limit_num_segments)。モデル化する各契約期間でフィルタし、有効期限月ごとの Total MRR をスクリプト内の 期限 としてのみ読み込みます。スナップショット以降の P1M/P3M 期限を表に従って繰り越し、空の年間月は空のままにします。
  3. Subscription Retention または Cohort Explorer から継続率を取得します — Status の Set-to-Renew % ではありません。コード内のすべての継続率の実値は、それより前のツール出力に現れていなければなりません。
  4. 新規契約・再契約・拡張の実績レートのみ(インフロー)について MRR Movement を取得します。解約 MRR、ネット変動、またはブレンド解約率を予測に入力しないでください。スクリプト内の解約は 期限[月] × (1 − 継続率) — 決して project(net_fn) / ネット MRR 変動へのフィット / MRR * (1 - ブレンド_解約) ではありません。
  5. Correct ブロック形式の 正確に 1 つのスクリプトで計算します。1 ヶ月目のモデル化された解約 ≠ 観測値の場合、ギャップを診断情報としてのみ出力してください — 2 番目の調整済み・ブレンド・ネット変動予測を実行しず、レジデュアル(残差)を追加しないでください。更新期限結果が中心的な答えです。
  6. その中心シ
原文(English)を表示

Forecasting

Use revenuecat-charts for chart mechanics and metric interpretation. This skill covers turning them into a projection. Prefer MCP get-chart-options-schema / get-chart-data over rc charts show — the CLI surface does not expose expiration-month segmentation and selectors this playbook needs.

Pick the section that matches the ask:

  • Month-by-month MRR/ARR (including solve-for-spend, and "in one month" / "in N months") → churn line + Steps below — short horizons are N steps of that line, not a net-movement trend
  • Revenue to end of month/year → Rest-of-period run-rates (do not run the MRR Steps)
  • Low/base/high or "N months out" → Scenario forecasts (use the churn line when projecting MRR/subs)
  • Underspecified ("forecast", "predict the future", no metric/horizon) → default to a 12-month MRR projection and run the MRR Steps; say that default out loud. On annual-heavy books the Status snapshot will not fill every forecast month — use the expiration months it has, leave empty annual months at zero due (do not invent fill-in), keep rolling short-duration due and inflows, and say that the annual schedule only covers the live book's next cycle.

The churn line

For month-by-month MRR or ARR — including solving for the spend or new subscriptions needed to hit a target, including when the user already gave you churned MRR, spend, or efficiency numbers, and including short asks like "what will MRR be in one month" or "in two months" — churned MRR in a month is:

churned MRR[m] = MRR up for renewal in m × (1 − renewal rate)

Short horizons (1–2 months, or any small N)

"In one month" / "in two months" / "by next month" is still the churn line — N forward steps, not a rest-of-period run-rate and not an average of recent net MRR movement.

  1. Read Status expiration_month Total MRR for every calendar month that overlaps the window (e.g. remaining current month + next month for ~30 days out; two full months for "in two months").
  2. Each step: churn[m] = due[m] × (1 − rate) per duration; roll P1M/P3M due past the snapshot; leave empty annual months at zero due.
  3. Add inflows from recent new/resub/expansion only.
  4. Step the stock: MRR[m+1] = MRR[m] − churn[m] + inflow[m] — once for N=1, twice for N=2, …
  5. One script. Net movement / frozen churned MRR may appear as a diagnostic gap only — never as a second method that sets the headline number, and never annual_base / 12.

Correct — one month ahead (same idea for N=2 with two months in the loop):

# due from Status expiration_month (measure=mrr), not base/12
due_annual_next = 28316.52          # e.g. Oct Total MRR for P1Y
due_monthly = monthly_base          # standing P1M book
churn = due_annual_next * (1 - r_annual) + due_monthly * (1 - r_monthly) + ...
mrr_next = mrr_now - churn + inflow_run_rate

Get the renewal rate from Subscription Retention or Cohort Explorer (chart literals only) — not from observed_churned ÷ base, not from Set-to-Renew %. The rate applies to the due slice for that duration (for monthlies due ≈ stock; for quarterlies and longer terms, never take churned ÷ full base and then apply it to the due slice — that understates churn).

Get "MRR up for renewal" from Subscription Status for the current cycle of the live book:

get-chart-data(
  project_id="<id>",
  chart_name="subscription_status",
  realtime=true,
  resolution="<id from options schema>",
  start_date="<YYYY-MM-DD>",
  end_date="<YYYY-MM-DD>",
  segment="expiration_month",
  selectors="{\"measure\": \"mrr\"}",  # JSON string, not an object; not active_subscriptions
  limit_num_segments=24,               # so later months are not folded into Other
  # optional: filters="[{\"name\": \"product_duration\", \"values\": [\"P1Y\"]}]"
)

Use the same get-chart-data pattern for Retention / Cohort Explorer / MRR / MRR Movement — but do not copy Status-only fields (segment=expiration_month, limit_num_segments, selectors.measure) onto those charts; take segment/filters/selectors from each chart's options schema (get-chart-options-schema with "realtime": true).

Each segment is a calendar month when currently active subscriptions' periods end. Use Total MRR only as due[m]. Set to Renew / Cancel / Billing Issue are near-term intent labels — not forecast renewal rates. Status is a snapshot of the live book only — still model new / resub / expansion from MRR Movement (or the user's spend plan) as inflows. If you cannot pull due at all, ask for the renewal schedule rather than using annual_base / 12.

Due and rate by duration

Duration Due (Status available) Due (Status unavailable) Rate
P1Y Total MRR by expiration_month (first + repeat of the live book). Empty far months stay empty — do not invent fill-in. Prior-year P1Y new + resub in M (misses repeat anniversaries — state that) Retention Y1 / Cohort (subscription_type = new when using Retention)
P1M Near-term expiration buckets, then roll ≈ standing monthly base each later month Standing monthly base Retention / Cohort (or movement churned / due where due ≈ base)
P3M / other fixed Near-term buckets, then roll ≈ base / term-months base / term-months Retention / Cohort (or movement churned / due, never churned / full base)

Wrong — annual due as a flat fraction of the stock:

annual_due = annual_base / 12          # or due_frac = {"annual": 1/12}

Wrong — back-solving a residual so modeled churn matches observed:

repeat_annual = observed_annual_churn - annual_due[m] * (1 - rate)
churn_annual = annual_due[m] * (1 - rate) + repeat_annual      # then projected

Wrong — fixed-term rate on the full stock:

rate = 1 - churned_P3M / p3m_base      # then churn = (p3m_base/3) * (1 - rate)  → understates

Wrong — second model after a gap (blended / net movement / "calibrated" churn):

# after due*(1-rate) disagrees with last month's churned MRR:
project(net_fn)  or  mrr *= (1 - blended_churn) + inflow   # never

Correct:

# due: subscription_status, measure=mrr, segment=expiration_month, filter product_duration=P1Y
annual_due = {"2026-11": 17.32, "2027-02": 6.66, ...}   # Total MRR per expiration month
# rate: Subscription Retention Y1 or Cohort Explorer — not Set-to-Renew %
churn_annual[m]  = annual_due[m] * (1 - renewal_rate_annual)

# monthly: expiration-month for the next cycle, then due ≈ standing monthly_base thereafter
churn_monthly[m] = monthly_due[m] * (1 - renewal_rate_monthly)
# quarterly: due ≈ p3m_base/3; rate from Retention (or churned_P3M / due, not / p3m_base)

Steps (month-by-month MRR/ARR only)

Do not use these steps for rest-of-period revenue run-rates — use that section instead.

  1. Pull MRR segmented by product_duration for the current stocks.
  2. Pull Subscription Status as in the get-chart-data example above (selectors {"measure": "mrr"}, segment=expiration_month, high limit_num_segments), filtered by product_duration for each duration you model. Read Total MRR per expiration month into the script as due only. Roll P1M/P3M due past the snapshot per the table; leave empty annual months empty.
  3. Pull rates from Subscription Retention or Cohort Explorer — not Set-to-Renew % from status. Every rate literal in code must appear in a prior tool output.
  4. Pull MRR Movement for new / resub / expansion run-rates only (inflows). Do not feed churned MRR, net movement, or a blended churn rate into the projection. Churn in the script must be due[m] × (1 − rate) — never project(net_fn) / a fit on net MRR movement / mrr * (1 - blended_churn).
  5. Compute in exactly one script shaped like the Correct block. If month-1 modeled churn ≠ observed, print the gap as a diagnostic only — do not run a second, calibrated, blended, or net-movement projection, and do not add a residual. The renewal-due result is the central answer.
  6. Present that central case, the range and what drives it, and the gap diagnostic if any. Call a number a floor or ceiling only if every stated assumption biases it that way.

Rest-of-period run-rates

For "revenue until the end of the month/year" and similar — not the MRR Steps above:

  • Today is incomplete. Exclude it from the daily average, or say that you excluded it.
  • Give a range or state the observed day-to-day volatility. A bare point estimate is not a forecast.
  • Triangulate two methods — elapsed-day pace, and the prior period's shape applied to the current one — and say which you weighted and why.
  • Prefer splitting out MRR already locked via Subscription Status expiration months in the remainder of the period, rather than assuming renewals are spread evenly.
  • Put the headline numbers in the chat answer; do not defer them to a chart or artifact.

Scenario forecasts

For low / base / high cases or "N months out":

  • Each case names the driver that differs (acquisition rate, renewal rate, a pricing change working through the base), not a multiplier on the same number.
  • Commit to a central case; a range alone does not answer the question.
  • Every renewal or retention rate in the simulation comes from a chart pull for this account. Published benchmarks are context, not inputs.
  • "N months out" ends N months from today. If the model is anchored on the last complete month, say so and name the end month.
  • When the metric is MRR or subscribers, use the churn line above for the retention side.

Prediction Explorer

Prediction Explorer models cohort LTV, not churn. Use it for payback or LTV cross-checks when the question asks for them; it does not replace the churn line above.

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。