How to build Planhat customer success dashboards in Metabase
Planhat is a customer platform built around the company object — endusers, licenses, invoices, NPS, conversations, and objectives all hang off it, with health scores and revenue data in the same model. Metabase is where you turn that record into shared, trustworthy customer success dashboards. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the Planhat MCP server and loads a CSV into Metabase with the Metabase CLI, and a durable pipeline route that lands Planhat data in a database so you can build dashboards anyone can read.
How do you connect Planhat to Metabase?
Most teams combine both routes: quick answers through MCP and CLI uploads first, then recurring reporting on a warehouse-backed model.
Live answers in, quick analysis out
Pair the Planhat MCP server with the Metabase CLI. Use MCP for live account and meeting lookups, write a scoped result to CSV, then load it into Metabase as a ready-to-query table and model.
- Quick questions such as "show me health score distribution and risk tiers"
- Loading Planhat exports into Metabase in seconds
- Spot-checks and one-off investigations without pipeline work
- Great for exploration, not the governed numbers a QBR runs on
- Use read-only credentials or scoped API keys wherever supported
- CSV uploads are snapshots — refresh or move to the pipeline for history
Durable dashboards with history
Land Planhat data in a database or warehouse — via connector or scheduled API pulls — then point Metabase at it.
- Planhat dashboards CS and finance both trust
- Joining health data with product usage, support, and billing
- Long-run trends for health score distribution and risk tiers and licenses up for renewal by quarter
- You own the refresh schedule and the snapshot grain
- Re-derive health score components once, in the warehouse layer
- Current-state fields need dated snapshots or history never exists
What can you analyze from Planhat data in Metabase?
These all come from the same core objects — companies and licenses, plus the endusers, conversations and notes, invoices and NPS responses your sync exposes:
- Health score distribution and risk tiers
- Licenses up for renewal by quarter
- Expansion and downgrade movement in ARR
- NPS by segment against health score
- CSM coverage and engagement frequency
Which Planhat customer success dashboards should you build in Metabase?
Health overview
Risk tiers across the company base.
- Companies by risk tier (bar)
- ARR by risk tier (bar)
- Health score by lifecycle phase (bar)
- Companies that changed tier this month (table)
Renewals and licenses
What renews when, and how much of it is automatic.
- License value up for renewal by quarter (bar)
- Auto-renewing vs. manual renewal value (stacked bar)
- Gross revenue retention by renewal cohort (line)
- Licenses expiring in 90 days with no owner (table)
Revenue movement
Expansion, downgrade, and churn in one view.
- Expansion, downgrade, and churn ARR by month (stacked bar)
- Net revenue retention (number + trend)
- Largest expansions this quarter (table)
- Churned ARR by reason (bar)
Engagement
Whether the touchpoints match the risk.
- Conversations per company per month (line)
- Companies with no touchpoint in 60 days (table)
- Objectives on track vs. slipping (bar)
- Engagement frequency vs. health score (scatter)
How do you use the Planhat MCP server with the Metabase CLI?
Pair the Planhat MCP server with the Metabase CLI for fast, hands-on analysis. MCP is useful for scoped lookups and summarized exports; the Metabase CLI's upload command loads CSV data into Metabase and creates a ready-to-query table and model.
Example workflow
- Ask the MCP server for the companies model with owner, phase, and health score, plus the licenses due to renew this quarter.
- Export the result as CSV, keeping stable IDs, owners, statuses, and dates — and hashing or dropping any personal contact fields.
- Run
mb upload csvto load it into Metabase as a table and model, then build questions and dashboards on top.
Be honest about the limits
- MCP lookups are excellent for exploration, not scheduled reporting.
- A CSV upload is a snapshot; refresh it with
mb upload replaceor move to the pipeline for real history. - Health scores, phases, and license values are current-state fields, so historical movement only exists if you append dated snapshots to the warehouse.
mb upload csvneeds an uploads database configured under Admin → Settings → Uploads.
How do you set up Planhat MCP and the Metabase CLI?
Planhat MCP serverofficial
- Transport
- Vendor-hosted remote MCP over HTTP
- Auth
- OAuth client (`pk_` client ID + `sk_` secret); legacy bearer tokens also work
- Best for
- Live scoped account lookup and export
Metabase CLIofficial
- Install
npm install -g @metabase/cli- Auth
mb auth login- Load data
mb upload csv --file data.csv- Requires
- An uploads database (Admin → Settings → Uploads)
{
"mcpServers": {
"planhat": {
"type": "http",
"url": "https://api.planhat.com/v1/mcp"
}
}
}Planhat's own server, designed as a generic model router rather than one tool per object: ten tools that discover models, fetch a model's schema, then list, search, read, and write records. That design means the small tool count covers the whole object model — ask it to list the companies model rather than looking for a get_companies tool. Permissions are dual-layered: the OAuth client's scope intersected with the authenticating user's own permissions. Third-party listings advertising a larger Planhat tool count are repackaged bundles, not Planhat's server.
# 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 companies export — creates a table AND a model
mb upload csv --file planhat-companies.csv --collection root
# Refresh that same table later from a new export
mb upload replace <table-id> --file planhat-companies.csvCan you generate a Planhat dashboard with AI?
Yes. Use the prompt below with any assistant that can run the Planhat MCP server and the Metabase CLI. It works end to end: if Planhat tables already exist in Metabase it analyzes those; otherwise it pulls scoped, summarized data, loads it with mb upload csv, then builds the dashboard and caveats any metric that needs missing history.
Create a polished Metabase dashboard for Planhat customer success analytics.
Work end to end: get the data into Metabase if it isn't there yet, then build.
Goal: Help customer success and revenue leaders understand health and risk tiers, license value up for renewal, expansion and churn movement, and engagement coverage from Planhat data.
Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for planhat tables and
models). If durable Planhat data is already present — a warehouse sync or
an earlier upload — use it and skip to Step 2.
- If nothing is there, pull a scoped, summarized export with the Planhat MCP server:
companies and licenses, plus endusers, conversations and notes, invoices and NPS responses.
Prefer one row per account per snapshot date over raw activity
feeds. 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 or column names. Inspect available fields, owners,
segments, statuses, and date ranges before creating trend cards.
Important:
- Build on whatever data is present; don't claim Metabase connects natively to
Planhat — it reads a database or CLI-uploaded tables.
- State which health score a card uses and when it was captured. Vendor scores
are opaque composites and get redefined without notice.
- A single CSV is a point-in-time snapshot: health scores, phases, and renewal
dates are current-state fields, so only build trend cards once several dated
snapshots exist.
- Reconcile ARR against billing data, not against the Planhat record — CS
platforms hold a projection of CRM, billing, and product data.
- Only compute retention where subscription or license values exist. Gross
revenue retention excludes expansion and can never exceed 100%; net revenue
retention includes it and can.
Dashboard title: Planhat Customer Success Overview
Sections:
1. Executive summary: Companies by risk tier; ARR at risk; License value
up for renewal; Net revenue retention; Companies with no touchpoint.
2. Health: Risk tiers; ARR by tier; health score by lifecycle phase.
3. Renewals: License value by renewal quarter; auto-renew share; GRR by cohort.
4. Revenue movement: Expansion, downgrade, and churn ARR; largest expansions.
5. Engagement: Conversations per company; objectives on track; engagement
vs. health score.
Filters: Date range, CSM owner, Segment, Risk tier, Lifecycle stage.
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.How do you sync Planhat data into a database or warehouse?
For dashboards that need history and reliability, land Planhat data in a database first, then connect Metabase to that database.
Connector options
- Managed ETL — use a connector when one covers the objects you need, and read its support level and sync mode before you rely on it.
- Custom pipeline — use the Planhat API for control over snapshot grain, fields, and refresh cadence.
- MCP + CSV — use this for quick exploration and one-off slices.
Fivetran offers an Application Lite connector for Planhat; Airbyte has no Planhat source. For a custom pipeline, use the right endpoint for the job: the main API at <code>api.planhat.com</code> has a soft limit around 200 calls per minute, while bulk work belongs on the separate <code>analytics.planhat.com</code> endpoint, which accepts up to 32 MB per POST. Bulk upserts cap at 5,000 items per request, and Planhat recommends sequential rather than parallel calls to protect data integrity.
Notes
- Decide the snapshot grain first (one row per account per day, or per account per week) — it drives storage and every trend card.
- Land raw tables first, then build clean Metabase models on top.
- Normalize account-id, owner, phase, snapshot-date, license-value, and renewal-date fields.
How should you model Planhat data in Metabase?
Core tables
| Table | Grain | Key columns |
|---|---|---|
cs_accounts | one row per company | account_id, name, owner, phase, mrr, health_score, created_at, churned_at |
cs_licenses | one row per license | license_id, account_id, product, prior_value, value, from_date, to_date, renewal_status, auto_renew |
cs_activities | one row per conversation, note, or objective update | activity_id, account_id, type, created_at, owner, subject, outcome |
Modeling advice
- Build a clean
cs_accountsmodel with common columns across CS tools, so multi-source dashboards don't fork definitions. - Re-derive the health score components in the warehouse and keep the vendor's score beside your own as a separate, labeled column. Vendor scores are opaque composites, and they get redefined without anyone telling the analytics team.
- Snapshot renewal forecasts into a
renewal_forecast_snapshotstable frozen at period start — accuracy cannot be measured against a forecast that keeps moving. - Model gross and net revenue retention separately: gross excludes expansion and can never exceed 100%, net includes it and can.
- Reconcile ARR against billing rather than the CS platform. What a CS tool holds is a projection of CRM, billing, and product data, and projections drift.
Which Planhat customer success metrics should you track in Metabase?
| Metric | Definition | Notes |
|---|---|---|
| Customer health score | The composite score carried on the company record. | Keep the vendor score beside a score you can re-derive. |
| Gross revenue retention | Renewed license value over value up for renewal. | Excludes expansion, so it is capped at 100%. |
| Net revenue retention | Renewals plus expansion, minus downgrades and churn. | Reconcile the revenue side against billing, not CS. |
| Renewal forecast accuracy | Forecast renewal value against realized renewal value. | Freeze the forecast at period start or it self-fulfils. |
What SQL powers Planhat customer success dashboards in Metabase?
These assume a cleaned analytical model in a warehouse (PostgreSQL dialect). Adjust table and column names to match your pipeline.
Companies and annualized MRR bucketed by the score on the record.
SELECT
CASE
WHEN health_score >= 80 THEN 'healthy'
WHEN health_score >= 60 THEN 'watch'
ELSE 'at risk'
END AS risk_tier,
COUNT(*) AS companies,
ROUND(SUM(mrr) * 12, 0) AS annualized_mrr
FROM cs_accounts
WHERE churned_at IS NULL
GROUP BY 1
ORDER BY MIN(health_score);Renewal exposure, with the auto-renewing share broken out.
SELECT
date_trunc('quarter', to_date) AS renewal_quarter,
COUNT(*) AS licenses_up_for_renewal,
ROUND(SUM(value), 0) AS value_up_for_renewal,
ROUND(SUM(value) FILTER (WHERE auto_renew), 0) AS auto_renewing_value
FROM cs_licenses
WHERE to_date >= date_trunc('quarter', CURRENT_DATE)
AND to_date < date_trunc('quarter', CURRENT_DATE) + INTERVAL '12 months'
GROUP BY 1
ORDER BY 1;Retained value over value up for renewal, expansion excluded.
-- Gross revenue retention: cap retained value at the pre-renewal amount
-- so expansion (upsells) cannot push GRR above 100%. Put expansion in NRR.
WITH cohorts AS (
SELECT
date_trunc('quarter', to_date) AS renewal_quarter,
SUM(prior_value) AS value_up_for_renewal,
SUM(LEAST(value, prior_value)) FILTER (
WHERE renewal_status = 'renewed'
) AS value_retained
FROM cs_licenses
WHERE to_date < date_trunc('quarter', CURRENT_DATE)
AND prior_value IS NOT NULL
GROUP BY 1
)
SELECT
renewal_quarter,
ROUND(value_up_for_renewal, 0) AS value_up_for_renewal,
ROUND(value_retained, 0) AS value_retained,
ROUND(100.0 * value_retained / NULLIF(value_up_for_renewal, 0), 1) AS grr_pct
FROM cohorts
ORDER BY renewal_quarter;What are common mistakes when analyzing Planhat in Metabase?
Related
Related analytics
Related dashboards
Related integrations
FAQ
Does Metabase connect natively to Planhat?
Should Metabase replace Planhat?
How many tools does Planhat's MCP server have?
companies model rather than hunting for a get_companies tool. Third-party listings advertising a much larger Planhat tool count are repackaged bundles, not Planhat's own server.Which Planhat endpoint should bulk extraction use?
api.planhat.com carries a soft limit around 200 calls per minute and suits regular reads; bulk work belongs on analytics.planhat.com, which accepts up to 32 MB per POST, with bulk upserts capped at 5,000 items per request. Planhat recommends sequential rather than parallel calls to protect data integrity, so build the pipeline around one long job, not many concurrent ones. Fivetran offers an Application Lite connector; Airbyte has no Planhat source.