Planhat × Metabase

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.

Heads up: Metabase connects to databases and warehouses — it does not ship a native Planhat connector. The good news: account and health data is small and tabular, and it becomes far more useful the moment it sits next to product usage and billing. Land it in a database, define the metrics once, and every dashboard downstream inherits the same definitions.

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.

1 · MCP + CLI route (AI-assisted)

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.

Best for
  • 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
Trade-offs
  • 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
2 · Pipeline route (warehouse-backed)

Durable dashboards with history

Land Planhat data in a database or warehouse — via connector or scheduled API pulls — then point Metabase at it.

Best for
  • 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
Trade-offs
  • 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?

For: CS leadership

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)
For: Revenue leadership

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)
For: Finance, CS

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)
For: CS ops

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 csv to 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 replace or 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 csv needs 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)
MCPExample MCP client config
{
  "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.

TerminalLoad a Planhat CSV with the Metabase CLI
# 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.csv

Can 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.

Prompt for creating a Planhat Customer Success Overview dashboard
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

TableGrainKey columns
cs_accountsone row per companyaccount_id, name, owner, phase, mrr, health_score, created_at, churned_at
cs_licensesone row per licenselicense_id, account_id, product, prior_value, value, from_date, to_date, renewal_status, auto_renew
cs_activitiesone row per conversation, note, or objective updateactivity_id, account_id, type, created_at, owner, subject, outcome

Modeling advice

  • Build a clean cs_accounts model 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_snapshots table 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?

MetricDefinitionNotes
Customer health scoreThe composite score carried on the company record.Keep the vendor score beside a score you can re-derive.
Gross revenue retentionRenewed license value over value up for renewal.Excludes expansion, so it is capped at 100%.
Net revenue retentionRenewals plus expansion, minus downgrades and churn.Reconcile the revenue side against billing, not CS.
Renewal forecast accuracyForecast 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.

Health score distribution by risk tierPostgreSQL

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);
License value up for renewal by quarterPostgreSQL

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;
Gross revenue retention by renewal cohortPostgreSQL

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?

Treating the vendor health score as a metric definition.→ It is an opaque composite, and it gets reweighted or redefined without the analytics team hearing about it. Re-derive the components in the warehouse, and keep the vendor score beside yours as a labeled column rather than as the source of truth.
Summing license value and calling it ARR.→ Licenses carry from and to dates and auto-renew flags. Expired and overlapping rows inflate the total quietly, so filter on the active window — then reconcile the result against billing rather than against Planhat.
Exploring through an MCP client that can write.→ The server's tools cover writes as well as reads, and permissions are the OAuth client's scope intersected with the user's own. For analytics work, scope the client to read and keep write access out of the loop entirely.
Building dashboards from live MCP lookups only.→ MCP is useful for exploration; durable dashboards need a database-backed model with history.

Related analytics

Related dashboards

Related integrations

FAQ

Does Metabase connect natively to Planhat?
No. Metabase reads databases and warehouses. Land Planhat data in a database first — via connector or API pipeline — or upload a CSV with the Metabase CLI, then build Metabase models and dashboards on top.
Should Metabase replace Planhat?
No — they answer different questions. Planhat is the system of action: playbooks, alerts, workflows, and the CSM's daily queue. Metabase is where you build governed, shareable reporting for the whole company, and join that data with product usage, support, and billing to answer questions no single tool holds the data for.
How many tools does Planhat's MCP server have?
Ten, and the small number is a design choice rather than a limitation. Planhat built the server as a generic model router: tools that discover models, fetch a model's schema, then list, search, read, and write records. Ten tools therefore cover the whole object model — ask it to list the 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?
The separate analytics endpoint. The main API at 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.