| name | stripe-revenue-report |
| description | Generate MRR/ARR reports from Stripe — new, expansion, contraction, churn — broken down by plan or segment. Use on "what's my MRR?", "weekly revenue report", "churn this month", or "show me expansion". |
| allowed-tools | ["Bash","Read","Write","AskUserQuestion"] |
Stripe Revenue Report
Compute MRR movements from Stripe subscriptions via Composio.
Workflow
- Scope. Ask for: period (this month, last 30 days, Q2), grouping (plan, segment, geography), format (markdown, Slack, Sheet).
- Link Stripe:
composio link stripe
- Pull subscriptions + invoices:
composio execute STRIPE_LIST_ALL_SUBSCRIPTIONS -d '{ "limit": 100, "status": "all" }'
composio execute STRIPE_LIST_INVOICES -d '{ "created": { "gte": 1714521600 }, "limit": 100 }'
- Classify each MRR delta in the period:
new — first paid invoice for the customer in the window
expansion — plan/seat upgrade raising MRR
contraction — downgrade/seat reduction lowering MRR
churn — subscription canceled or failed-payment lapse
reactivation — previously churned, now paying again
- Compute:
- Starting MRR, New, Expansion, Contraction, Churn, Ending MRR
- Net New MRR = New + Expansion − Contraction − Churn
- GRR = 1 − (Churn + Contraction) / Starting MRR
- NRR = (Starting + Expansion − Contraction − Churn) / Starting
- Report in the requested format. Always show the component table, not just the headline.
Report template
# Revenue Report — <period>
Starting MRR: $<x>
+ New: $<a> (<n> customers)
+ Expansion: $<b> (<n>)
- Contraction: $<c> (<n>)
- Churn: $<d> (<n>)
Ending MRR: $<y>
Net New: $<e>
GRR: <xx>% · NRR: <yy>%
Top expansion: <cust> +$<amt>
Top churn: <cust> -$<amt> — reason if known
Guardrails
- Clarify whether "MRR" means normalized monthly (annual / 12) or billed-this-month.
- Failed payments are not churn yet — flag as "at-risk" with dunning status.
- Never post customer-level revenue to public channels without confirming.