How to build Chargebee revenue dashboards in Metabase
Chargebee runs your subscriptions, invoicing, and recurring billing. Metabase is where you turn that billing activity into shared, trustworthy revenue dashboards. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the Chargebee MCP server and loads a CSV into Metabase with the Metabase CLI for quick analysis, and a durable pipeline route that syncs Chargebee into a database so you can build MRR, churn, and retention dashboards anyone can read.
How do you connect Chargebee to Metabase?
Most teams combine both routes: use the Chargebee MCP server and Metabase CLI route to pull live data and stand up a quick analysis, and the pipeline route for the revenue dashboards finance depends on.
Live data in, quick analysis out
Pair the Chargebee MCP server (to look up live subscriptions, customers, and invoices) with the Metabase CLI, whose upload command loads a CSV into Metabase as a ready-to-query table and model.
- Quick lookups like "which subscriptions renew in the next 7 days?"
- Loading a Chargebee CSV export into Metabase in seconds
- Spot-checks and one-off analyses without a warehouse
- Great for exploration, not governed revenue reporting
- Use a read-only Chargebee API key so analysis can't trigger writes
- CSV uploads are snapshots — refresh or move to the pipeline for history
Durable dashboards with history
Sync Chargebee into a database or warehouse with Airbyte, Fivetran, Chargebee's data exports, or the API, then point Metabase at it.
- MRR/ARR, churn, and retention dashboards finance relies on
- Cohort and trend analysis over quarters and years
- Joining billing data with product usage, support, or CRM data
- Requires a destination database and a sync to maintain
- You own the revenue definitions and refresh schedule
- Reconcile against Chargebee's own RevenueStory reports before trusting numbers
What can you analyze from Chargebee data in Metabase?
- MRR and ARR — recurring revenue now and its monthly movement
- Churn and retention — customer and revenue churn, gross and net retention
- Expansion and contraction — plan changes, add-ons, and quantities
- Failed payments and dunning — declines, recovery, and involuntary churn
- Trials and conversion — trial-to-paid rate and time to convert
- LTV and ARPU — value per customer and per account
- Cohort revenue — how each signup cohort retains and grows
Which Chargebee dashboards should you build in Metabase?
MRR & ARR
The core recurring-revenue picture, month over month.
- MRR and ARR right now (number + trend)
- MRR movement: new, expansion, contraction, churn (waterfall)
- Net new MRR per month (bar)
- ARR by plan and billing period (bar)
Churn & retention
Where recurring revenue leaks and how well you keep it.
- Gross and net revenue retention by month (line)
- Customer vs. revenue churn rate (dual line)
- Cancellations by reason (bar)
- Trial-to-paid conversion rate (number)
Failed payments & dunning
Recover revenue lost to declines before it becomes churn.
- Failed transactions and $ at risk this month (number)
- Dunning recovery rate (line)
- Declines by gateway and error code (bar)
- Subscriptions in dunning by age (table)
Cohort revenue
Does each signup cohort grow or decay over time?
- Revenue retention by signup-month cohort (heatmap)
- Cumulative LTV by cohort (line)
- ARPU by plan and cohort (table)
- Expansion revenue by cohort (bar)
How do you use the Chargebee MCP server with the Metabase CLI?
Pair the Chargebee MCP server with the Metabase CLI for fast, hands-on analysis. Chargebee exposes a site-specific remote MCP server that looks up live subscriptions, customers, and invoices; the Metabase CLI'supload command loads a CSV into Metabase and creates a ready-to-query table and model. For analysis, scope the Chargebee API key to read-only.
Example workflow
- Ask the Chargebee MCP which subscriptions renew in the next 7 days, or pull a customer's invoices and credit notes.
- Export the customers, subscriptions, invoices, and transactions you want to keep as CSVs.
- Run
mb upload csvto load them into Metabase as tables and models, then build questions and dashboards on top.
Be honest about the limits
- The Chargebee MCP is great for live lookups — not for scheduled or audited revenue reporting.
- A CSV upload is a point-in-time snapshot; MRR movement and cohorts still need a warehouse sync, or refresh with
mb upload replace. - The endpoint is specific to your Chargebee site and data-center region (US or EU); scope the API key to read-only.
mb upload csvneeds an uploads database configured under Admin → Settings → Uploads.
How do you set up the Chargebee MCP server and the Metabase CLI?
Chargebee MCPofficial
- Endpoint (US)
https://<site>.mcp.chargebee.com/data_lookup_agent- Endpoint (EU)
https://<site>.mcp.eu.chargebee.com/data_lookup_agent- Auth
Authorization: Bearer <API key>- Note
- Site- and region-specific; read-oriented lookups.
Metabase CLIofficial
- Install
npm install -g @metabase/cli- Auth
mb auth login(browser OAuth on v62+, or an API key)- Load data
mb upload csv --file data.csv- Requires
- An uploads database (Admin → Settings → Uploads)
{
"mcpServers": {
"chargebee": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://YOUR-SITE.mcp.chargebee.com/data_lookup_agent",
"--header", "Authorization:Bearer YOUR_CHARGEBEE_API_KEY"
]
}
}
}Replace YOUR-SITE with your Chargebee site name and use the EU host if your site is EU-hosted. Scope the API key to read-only for analysis work.
# Install the Metabase CLI
npm install -g @metabase/cli
# Log in (opens your browser; requires Metabase v62+)
mb auth login --url https://your-metabase.example.com
# Load a Chargebee CSV export — creates a table AND a model
mb upload csv --file chargebee-subscriptions.csv --collection root
# Refresh that same table later from a new export
mb upload replace <table-id> --file chargebee-subscriptions.csvThe Metabase CLI stores its credentials securely after mb auth login.
Can you generate a Chargebee dashboard with AI?
Yes. Use the prompt below with any assistant that can run the Chargebee MCP server and the Metabase CLI. It works end to end: if Chargebee tables already exist in Metabase it analyzes those; otherwise it pulls the data over the Chargebee MCP, loads it with mb upload csv, then builds the dashboard — normalizing MRR and skipping cards it has no data for.
Create a polished Metabase dashboard for Chargebee revenue analytics.
Work end to end: get the data into Metabase if it isn't there yet, then build.
Goal: Help founders and finance leaders understand recurring revenue, churn,
retention, failed payments, and cohort economics from Chargebee data.
Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for Chargebee tables and
models). If durable Chargebee data is already present — synced from a warehouse
or uploaded earlier — use it and skip to Step 2.
- If nothing is there, pull it with the Chargebee MCP server using a read-only
API key: customers, subscriptions, plans/item prices, invoices, and
transactions. Write each result to a CSV, then load it with the Metabase CLI —
run "mb upload csv --file <export>.csv" so each upload creates a table and a
ready-to-query model. Use "mb upload replace <table-id> --file <export>.csv" to
refresh an existing table instead of creating duplicates.
Step 2 — Inspect before querying:
Do not assume exact table names. Map the available raw tables into these
analytical concepts where possible: Customers, Subscriptions, Subscription items,
Plans/Item prices, Invoices, Invoice line items, Transactions, Credit notes, and
Payment sources. Inspect the actual tables and column names first.
Important:
- Build on whatever data is present; don't claim Metabase connects natively to
Chargebee — it reads a database or CLI-uploaded tables.
- Compute MRR from active subscriptions, normalizing every plan to a monthly
amount (divide annual by 12, etc.) and converting amounts from the smallest
currency unit where applicable.
- Report revenue in a single reporting currency; if multiple currencies exist,
convert with a documented rate or caveat the mix.
- Separate voluntary churn from involuntary (failed-payment) churn.
- Exclude one-time charges, add-on non-recurring lines, and taxes from MRR unless
explicitly asked.
- Only build a card if its underlying column/metric exists in the data.
- A single CSV is a point-in-time snapshot: MRR movement and cohorts need history,
so build trend cards only if a warehouse sync or multiple uploads provide it.
Dashboard title: Chargebee Revenue Overview
Sections:
1. Executive summary (KPI cards): MRR; ARR; Active subscriptions; Net new MRR this
month; Gross revenue churn %; Net revenue retention (only if MRR-movement data
can be derived).
2. MRR movement: New, expansion, contraction, and churned MRR by month.
3. Churn & retention: Customer vs. revenue churn by month; Gross vs. net retention;
Cancellations by reason; Trial-to-paid conversion.
4. Failed payments & dunning: Failed transactions and $ at risk; Dunning recovery
rate; Declines by gateway/error; Subscriptions in dunning by age.
5. Cohorts & LTV: Revenue retention by signup-month cohort; Cumulative LTV by
cohort; ARPU by plan.
Filters: Plan/Item price, Billing period, Currency, Customer segment, Date range.
Reuse the models Metabase auto-created from uploaded CSVs, or (for a warehouse)
create reusable models: modeled_chargebee_customers,
modeled_chargebee_subscriptions, modeled_chargebee_invoices,
modeled_chargebee_transactions, and modeled_chargebee_mrr (a monthly
per-subscription MRR model).
Output: Build the dashboard if you have permission; otherwise provide the exact
questions, SQL, model definitions, and layout. Include caveats for any metric that
cannot be calculated from the available data. Reconcile totals against Chargebee's
RevenueStory. Keep it practical, dense, and executive-readable. Avoid vanity metrics.How do you build the Chargebee → Metabase pipeline?
For dashboards that need history and reliability, land Chargebee data in a database first, then connect Metabase to that database.
Connector options
- Chargebee API (free, raw) — the source of truth; write a small script that paginates objects and uses event history for changes. An AI assistant can scaffold it.
- Airbyte — has a Chargebee source covering customers, subscriptions, invoices, transactions, and more. Free if you self-host the open-source version; paid on Airbyte Cloud.
- Chargebee data exports (first-party) — scheduled exports and the Sync feature push billing data into your warehouse.
- Fivetran (paid, managed) — offers a Chargebee connector with a maintained schema and incremental syncs.
Notes
- Land raw tables first, then build clean models on top.
- Chargebee amounts are in the smallest currency unit — divide by 100 in your model layer.
- Chargebee timestamps are Unix epochs — convert with
to_timestamp()once in a model. - MRR is derived: build it from active subscriptions and their plans / item prices.
How should you model Chargebee data in Metabase?
Core tables
| Table | Grain | Key columns |
|---|---|---|
customers | one row per customer | id, email, created_at, auto_collection |
subscriptions | one row per subscription | id, customer_id, plan_id, plan_amount, plan_quantity, status, created_at, cancelled_at, next_billing_at |
plans / item_prices | one row per price | id, price, period, period_unit, currency_code |
invoices | one row per invoice | id, customer_id, subscription_id, status, total, amount_paid, date |
transactions | one row per transaction | id, customer_id, amount, type, status, error_code, date |
credit_notes | one row per credit note | id, customer_id, total, type, date |
Modeling advice
- Build a
modeled_chargebee_mrrtable: one row per subscription per month with a normalized monthly amount. - Normalize all plans to a monthly figure (annual ÷ 12, etc.) and to one reporting currency.
- Define subscription status once (active / in_trial / non_renewing / cancelled) and reuse it.
- Keep add-ons and one-time charges out of MRR unless they are genuinely recurring.
- Reconcile modeled MRR against Chargebee RevenueStory before anyone trusts the numbers.
Which Chargebee metrics should you track in Metabase?
| Metric | Definition | Notes |
|---|---|---|
| MRR | Sum of active subscriptions' normalized monthly amount. | Exclude one-time charges and tax. |
| Net new MRR | New + expansion − contraction − churned MRR. | Best shown as a monthly waterfall. |
| Revenue churn rate | Churned MRR ÷ MRR at period start. | Track separately from customer (logo) churn. |
| Net revenue retention | (Starting MRR + expansion − contraction − churn) ÷ starting MRR. | Over 100% means expansion beats churn. |
| Trial-to-paid conversion | Trials that became paying subscriptions ÷ trials started. | Watch time-to-convert too. |
| Failed-payment rate | Failed transactions ÷ attempted transactions. | The main driver of involuntary churn. |
| LTV | ARPU × average customer lifetime (1 ÷ churn rate). | Sensitive to churn; treat as a range. |
What SQL powers Chargebee dashboards in Metabase?
These assume the modeled tables above (PostgreSQL dialect, amounts in the smallest currency unit, epoch timestamps). Adjust identifiers to match your warehouse.
Normalize active subscriptions to a monthly amount and sum.
SELECT
ROUND(SUM(
CASE p.period_unit
WHEN 'year' THEN s.plan_amount / 12.0 / NULLIF(p.period, 0)
WHEN 'month' THEN s.plan_amount / NULLIF(p.period, 0)
WHEN 'week' THEN s.plan_amount * 52.0 / 12.0 / NULLIF(p.period, 0)
END * s.plan_quantity
) / 100.0, 2) AS mrr_now
FROM subscriptions s
JOIN plans p ON p.id = s.plan_id
WHERE s.status IN ('active', 'in_trial', 'non_renewing');Cancellations against subscriptions active at each month's start.
WITH months AS (
SELECT generate_series(
date_trunc('month', CURRENT_DATE - INTERVAL '11 months'),
date_trunc('month', CURRENT_DATE),
INTERVAL '1 month'
) AS month
)
SELECT
m.month,
COUNT(*) FILTER (
WHERE date_trunc('month', to_timestamp(s.cancelled_at)) = m.month
) AS churned_subscriptions,
COUNT(*) FILTER (
WHERE to_timestamp(s.created_at) <= m.month
AND (s.cancelled_at IS NULL OR to_timestamp(s.cancelled_at) > m.month)
) AS active_at_month_start
FROM months m
CROSS JOIN subscriptions s
GROUP BY m.month
ORDER BY m.month;Declined transactions by week and error code — the dunning worklist.
SELECT
date_trunc('week', to_timestamp(t.date)) AS week,
COUNT(*) AS failed_transactions,
ROUND(SUM(t.amount) / 100.0, 2) AS dollars_at_risk,
t.error_code
FROM transactions t
WHERE t.status = 'failure'
AND to_timestamp(t.date) >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY 1, t.error_code
ORDER BY 1, dollars_at_risk DESC;