Finance Dashboard
Penny (accountant) can pull Stripe data and generate executive-ready financial reports. All data comes from the Stripe connector — no new integrations needed.
How to Execute Stripe Actions
use stripe <TOOL_NAME> '<json_args>'
Data Sources
| Data |
Tool |
Args |
| All active subscriptions |
STRIPE_LIST_SUBSCRIPTIONS |
{} |
| Customer list |
STRIPE_LIST_CUSTOMERS |
{} |
| Invoice history |
STRIPE_LIST_INVOICES |
{} |
| Payment history |
STRIPE_LIST_PAYMENT_INTENTS |
{} |
| Current balance |
STRIPE_RETRIEVE_BALANCE |
{} |
| Customer detail |
STRIPE_RETRIEVE_CUSTOMER |
{"customer_id":"cus_XXX"} |
| Subscription detail |
STRIPE_RETRIEVE_SUBSCRIPTION |
{"subscription_id":"sub_XXX"} |
| Refund data |
STRIPE_LIST_REFUNDS |
{} |
Report Types
1. Monthly Revenue Summary
Pull all payments for the period using STRIPE_LIST_PAYMENT_INTENTS. Calculate:
- Total Revenue — sum of all successful payments (status:
succeeded)
- MRR (Monthly Recurring Revenue) — sum of active subscription amounts ÷ billing interval in months
- ARR — MRR × 12
- New MRR — from subscriptions created this month (
created timestamp in current month)
- Churned MRR — from subscriptions cancelled this month (
canceled_at in current month)
- Net MRR Growth — New MRR − Churned MRR
- Revenue by Plan — breakdown grouped by
plan.nickname or price.id
Present with month-over-month comparison and % change for each metric.
Output table:
| Metric |
Current Month |
Previous Month |
Change (%) |
Status |
| Total Revenue |
$X,XXX |
$X,XXX |
+X% |
🟢/🟡/🔴 |
| MRR |
$X,XXX |
$X,XXX |
+X% |
🟢/🟡/🔴 |
| ARR |
$XX,XXX |
$XX,XXX |
+X% |
🟢/🟡/🔴 |
| New MRR |
$XXX |
$XXX |
— |
— |
| Churned MRR |
$XXX |
$XXX |
— |
— |
| Net MRR Growth |
$XXX |
$XXX |
— |
🟢/🟡/🔴 |
2. Customer Health Report
Pull customers via STRIPE_LIST_CUSTOMERS and subscriptions via STRIPE_LIST_SUBSCRIPTIONS. Calculate:
- Total Customers — count of active customers with at least one active subscription
- New Customers — customers with
created in current month
- Churned Customers — subscriptions with
canceled_at in current month, deduplicated by customer
- Churn Rate — churned customers ÷ total customers at start of month × 100
- Customer Lifetime Value (LTV) — average monthly revenue per customer ÷ monthly churn rate
- LTV:CAC Ratio — LTV ÷ CAC (ask user for CAC if not provided)
- Top 10 Customers by Revenue — list with name, plan, MRR contribution, and subscription start date
Output table:
| Metric |
Value |
Previous Period |
Change |
Status |
| Total Customers |
X |
X |
+X |
🟢/🟡/🔴 |
| New Customers |
X |
X |
+X |
— |
| Churned Customers |
X |
X |
+X |
🟢/🟡/🔴 |
| Churn Rate |
X% |
X% |
+X% |
🟢/🟡/🔴 |
| LTV |
$X,XXX |
$X,XXX |
— |
— |
Top 10 Customers:
| Customer Name |
Plan |
Monthly Value |
Since |
| Acme Corp |
Pro |
$X,XXX |
Jan 2025 |
| ... |
... |
... |
... |
3. Invoice Aging Report
Pull all open invoices via STRIPE_LIST_INVOICES (filter status: open). Categorize by days since due_date:
- Current — not yet past due date
- 1–30 days overdue — due date 1–30 days ago
- 31–60 days overdue — due date 31–60 days ago
- 60+ days overdue — due date over 60 days ago
- Total Outstanding — sum of all unpaid invoice amounts
Flag all invoices over 30 days for immediate follow-up. List specific customer names and amounts (never raw IDs).
Output table:
| Aging Bucket |
Count |
Total Amount |
Status |
| Current |
X |
$X,XXX |
🟢 |
| 1–30 days |
X |
$X,XXX |
🟡 |
| 31–60 days |
X |
$X,XXX |
🔴 |
| 60+ days |
X |
$X,XXX |
🔴 |
| Total Outstanding |
X |
$X,XXX |
— |
Overdue Invoices (30+ days):
| Customer Name |
Invoice Amount |
Days Overdue |
Action |
| Acme Corp |
$X,XXX |
45 days |
Send follow-up |
| ... |
... |
... |
... |
4. Cash Flow Snapshot
Pull balance via STRIPE_RETRIEVE_BALANCE, payments via STRIPE_LIST_PAYMENT_INTENTS, and refunds via STRIPE_LIST_REFUNDS.
- Available Balance —
available[0].amount from balance response (convert from cents)
- Pending Balance —
pending[0].amount — funds in transit, not yet settled
- Recent Refunds — sum of all refunds with
created in current month
- Net Revenue — total successful payments minus total refunds for the month
- Projected Next Month — sum of all active subscription amounts due next billing cycle
Output table:
| Metric |
Amount |
Notes |
| Available Balance |
$X,XXX |
Ready to pay out |
| Pending Balance |
$X,XXX |
In transit |
| Gross Revenue (MTD) |
$X,XXX |
Successful payments |
| Refunds (MTD) |
$X,XXX |
Total refunded |
| Net Revenue (MTD) |
$X,XXX |
Gross minus refunds |
| Projected Next Month |
$X,XXX |
Based on active subs |
5. Plan & Pricing Analysis
Pull subscriptions and group by plan/price. Calculate per tier:
- Revenue per tier — sum of subscription amounts per
plan.nickname or price.id
- Customer count per tier — subscriptions grouped by plan
- ARPU (Average Revenue Per User) — tier revenue ÷ tier customer count
- Churn by tier — cancellations per tier as % of that tier's total
- Upgrade vs. downgrade trends — subscriptions where
plan changed (use metadata or subscription item changes)
Output table:
| Plan |
Customers |
MRR |
ARPU |
Churn Rate |
Status |
| Starter |
X |
$X,XXX |
$XX |
X% |
🟢/🟡/🔴 |
| Pro |
X |
$X,XXX |
$XX |
X% |
🟢/🟡/🔴 |
| Enterprise |
X |
$X,XXX |
$XXX |
X% |
🟢/🟡/🔴 |
| Total |
X |
$X,XXX |
$XX |
X% |
— |
Status Thresholds
| Metric |
🟢 On Track |
🟡 Watch |
🔴 Action Needed |
| Revenue growth |
> 0% |
0% |
< 0% |
| Monthly churn rate |
< 3% |
3–5% |
> 5% |
| Invoice aging |
All current |
1–30 days overdue |
31+ days overdue |
| LTV:CAC ratio |
> 5 |
3–5 |
< 3 |
| Net MRR growth |
Positive |
Flat |
Negative |
For every 🔴 metric, provide a specific recommended action (e.g., "Send payment reminder to Acme Corp — $2,400 overdue 45 days").
When to Activate
Triggers: "revenue report", "MRR", "ARR", "churn report", "invoice aging", "financial health", "cash flow", "how much did we make", "revenue breakdown", "customer health", "plan analysis", "financial summary", "billing report"
Guidelines
- All Stripe amounts are in cents — always divide by 100 before displaying (e.g., 12400 → $124.00)
- Always state the time period covered at the top of every report (e.g., "March 2026 | Data as of April 2, 2026")
- Never expose raw Stripe IDs (cus_XXX, sub_XXX, in_XXX) — use customer names or plan names
- Flag anomalies explicitly: sudden churn spike, large single refund, payment failure cluster
- Present numbers with context: "MRR is $12,400 — up 8% from last month" not just "$12,400"
- For 🔴 metrics, always include a concrete recommended next action
- If CAC is not available, skip LTV:CAC and note: "Provide CAC to calculate LTV:CAC ratio"
- When comparing periods, use calendar months unless the user specifies otherwise
- Confirm with user before taking any write actions (creating invoices, issuing refunds)
- If Stripe is not connected, prompt: "Connect Stripe in the Apps tab to generate financial reports"
1---2name: finance-dashboard3description: Revenue reports, MRR/ARR tracking, churn analysis, invoice aging, and financial health metrics — powered by Stripe data4---56<!-- openlabor-connector: stripe, api_key={{INTERNAL_API_KEY}}, employee={{EMPLOYEE_ID}}, base={{API_BASE_URL}} -->78# Finance Dashboard910Penny (accountant) can pull Stripe data and generate executive-ready financial reports. All data comes from the Stripe connector — no new integrations needed.1112## How to Execute Stripe Actions1314```15use stripe <TOOL_NAME> '<json_args>'16```1718## Data Sources1920| Data | Tool | Args |21|------|------|------|22| All active subscriptions | `STRIPE_LIST_SUBSCRIPTIONS` | `{}` |23| Customer list | `STRIPE_LIST_CUSTOMERS` | `{}` |24| Invoice history | `STRIPE_LIST_INVOICES` | `{}` |25| Payment history | `STRIPE_LIST_PAYMENT_INTENTS` | `{}` |26| Current balance | `STRIPE_RETRIEVE_BALANCE` | `{}` |27| Customer detail | `STRIPE_RETRIEVE_CUSTOMER` | `{"customer_id":"cus_XXX"}` |28| Subscription detail | `STRIPE_RETRIEVE_SUBSCRIPTION` | `{"subscription_id":"sub_XXX"}` |29| Refund data | `STRIPE_LIST_REFUNDS` | `{}` |3031---3233## Report Types3435### 1. Monthly Revenue Summary3637Pull all payments for the period using `STRIPE_LIST_PAYMENT_INTENTS`. Calculate:3839- **Total Revenue** — sum of all successful payments (status: `succeeded`)40- **MRR** (Monthly Recurring Revenue) — sum of active subscription amounts ÷ billing interval in months41- **ARR** — MRR × 1242- **New MRR** — from subscriptions created this month (`created` timestamp in current month)43- **Churned MRR** — from subscriptions cancelled this month (`canceled_at` in current month)44- **Net MRR Growth** — New MRR − Churned MRR45- **Revenue by Plan** — breakdown grouped by `plan.nickname` or `price.id`4647Present with month-over-month comparison and % change for each metric.4849**Output table:**5051| Metric | Current Month | Previous Month | Change (%) | Status |52|--------|--------------|----------------|------------|--------|53| Total Revenue | $X,XXX | $X,XXX | +X% | 🟢/🟡/🔴 |54| MRR | $X,XXX | $X,XXX | +X% | 🟢/🟡/🔴 |55| ARR | $XX,XXX | $XX,XXX | +X% | 🟢/🟡/🔴 |56| New MRR | $XXX | $XXX | — | — |57| Churned MRR | $XXX | $XXX | — | — |58| Net MRR Growth | $XXX | $XXX | — | 🟢/🟡/🔴 |5960---6162### 2. Customer Health Report6364Pull customers via `STRIPE_LIST_CUSTOMERS` and subscriptions via `STRIPE_LIST_SUBSCRIPTIONS`. Calculate:6566- **Total Customers** — count of active customers with at least one active subscription67- **New Customers** — customers with `created` in current month68- **Churned Customers** — subscriptions with `canceled_at` in current month, deduplicated by customer69- **Churn Rate** — churned customers ÷ total customers at start of month × 10070- **Customer Lifetime Value (LTV)** — average monthly revenue per customer ÷ monthly churn rate71- **LTV:CAC Ratio** — LTV ÷ CAC (ask user for CAC if not provided)72- **Top 10 Customers by Revenue** — list with name, plan, MRR contribution, and subscription start date7374**Output table:**7576| Metric | Value | Previous Period | Change | Status |77|--------|-------|----------------|--------|--------|78| Total Customers | X | X | +X | 🟢/🟡/🔴 |79| New Customers | X | X | +X | — |80| Churned Customers | X | X | +X | 🟢/🟡/🔴 |81| Churn Rate | X% | X% | +X% | 🟢/🟡/🔴 |82| LTV | $X,XXX | $X,XXX | — | — |8384**Top 10 Customers:**8586| Customer Name | Plan | Monthly Value | Since |87|--------------|------|--------------|-------|88| Acme Corp | Pro | $X,XXX | Jan 2025 |89| ... | ... | ... | ... |9091---9293### 3. Invoice Aging Report9495Pull all open invoices via `STRIPE_LIST_INVOICES` (filter `status: open`). Categorize by days since `due_date`:9697- **Current** — not yet past due date98- **1–30 days overdue** — due date 1–30 days ago99- **31–60 days overdue** — due date 31–60 days ago100- **60+ days overdue** — due date over 60 days ago101- **Total Outstanding** — sum of all unpaid invoice amounts102103Flag all invoices over 30 days for immediate follow-up. List specific customer names and amounts (never raw IDs).104105**Output table:**106107| Aging Bucket | Count | Total Amount | Status |108|-------------|-------|-------------|--------|109| Current | X | $X,XXX | 🟢 |110| 1–30 days | X | $X,XXX | 🟡 |111| 31–60 days | X | $X,XXX | 🔴 |112| 60+ days | X | $X,XXX | 🔴 |113| **Total Outstanding** | **X** | **$X,XXX** | — |114115**Overdue Invoices (30+ days):**116117| Customer Name | Invoice Amount | Days Overdue | Action |118|--------------|---------------|-------------|--------|119| Acme Corp | $X,XXX | 45 days | Send follow-up |120| ... | ... | ... | ... |121122---123124### 4. Cash Flow Snapshot125126Pull balance via `STRIPE_RETRIEVE_BALANCE`, payments via `STRIPE_LIST_PAYMENT_INTENTS`, and refunds via `STRIPE_LIST_REFUNDS`.127128- **Available Balance** — `available[0].amount` from balance response (convert from cents)129- **Pending Balance** — `pending[0].amount` — funds in transit, not yet settled130- **Recent Refunds** — sum of all refunds with `created` in current month131- **Net Revenue** — total successful payments minus total refunds for the month132- **Projected Next Month** — sum of all active subscription amounts due next billing cycle133134**Output table:**135136| Metric | Amount | Notes |137|--------|--------|-------|138| Available Balance | $X,XXX | Ready to pay out |139| Pending Balance | $X,XXX | In transit |140| Gross Revenue (MTD) | $X,XXX | Successful payments |141| Refunds (MTD) | $X,XXX | Total refunded |142| Net Revenue (MTD) | $X,XXX | Gross minus refunds |143| Projected Next Month | $X,XXX | Based on active subs |144145---146147### 5. Plan & Pricing Analysis148149Pull subscriptions and group by plan/price. Calculate per tier:150151- **Revenue per tier** — sum of subscription amounts per `plan.nickname` or `price.id`152- **Customer count per tier** — subscriptions grouped by plan153- **ARPU** (Average Revenue Per User) — tier revenue ÷ tier customer count154- **Churn by tier** — cancellations per tier as % of that tier's total155- **Upgrade vs. downgrade trends** — subscriptions where `plan` changed (use metadata or subscription item changes)156157**Output table:**158159| Plan | Customers | MRR | ARPU | Churn Rate | Status |160|------|-----------|-----|------|-----------|--------|161| Starter | X | $X,XXX | $XX | X% | 🟢/🟡/🔴 |162| Pro | X | $X,XXX | $XX | X% | 🟢/🟡/🔴 |163| Enterprise | X | $X,XXX | $XXX | X% | 🟢/🟡/🔴 |164| **Total** | **X** | **$X,XXX** | **$XX** | **X%** | — |165166---167168## Status Thresholds169170| Metric | 🟢 On Track | 🟡 Watch | 🔴 Action Needed |171|--------|------------|---------|-----------------|172| Revenue growth | > 0% | 0% | < 0% |173| Monthly churn rate | < 3% | 3–5% | > 5% |174| Invoice aging | All current | 1–30 days overdue | 31+ days overdue |175| LTV:CAC ratio | > 5 | 3–5 | < 3 |176| Net MRR growth | Positive | Flat | Negative |177178For every 🔴 metric, provide a specific recommended action (e.g., "Send payment reminder to Acme Corp — $2,400 overdue 45 days").179180---181182## When to Activate183184Triggers: "revenue report", "MRR", "ARR", "churn report", "invoice aging", "financial health", "cash flow", "how much did we make", "revenue breakdown", "customer health", "plan analysis", "financial summary", "billing report"185186---187188## Guidelines1891901. All Stripe amounts are in **cents** — always divide by 100 before displaying (e.g., 12400 → $124.00)1912. Always state the time period covered at the top of every report (e.g., "March 2026 | Data as of April 2, 2026")1923. Never expose raw Stripe IDs (cus_XXX, sub_XXX, in_XXX) — use customer names or plan names1934. Flag anomalies explicitly: sudden churn spike, large single refund, payment failure cluster1945. Present numbers with context: "MRR is $12,400 — up 8% from last month" not just "$12,400"1956. For 🔴 metrics, always include a concrete recommended next action1967. If CAC is not available, skip LTV:CAC and note: "Provide CAC to calculate LTV:CAC ratio"1978. When comparing periods, use calendar months unless the user specifies otherwise1989. Confirm with user before taking any write actions (creating invoices, issuing refunds)19910. If Stripe is not connected, prompt: "Connect Stripe in the Apps tab to generate financial reports"